diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..82b6551 --- /dev/null +++ b/.classpath @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1b9efa5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +jars/* +reobf/* +bin/* +game/* +.settings/* +source/* \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..080e841 --- /dev/null +++ b/.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 + + + + + 4987547523683486455 + + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-src + + + + 4987547523683486456 + + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-jars + + + + 4987547523683486457 + + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-source + + + + diff --git a/Server.launch b/Server.launch new file mode 100644 index 0000000..bc4572e --- /dev/null +++ b/Server.launch @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/md5/original.md5 b/md5/original.md5 new file mode 100644 index 0000000..ac1288e --- /dev/null +++ b/md5/original.md5 @@ -0,0 +1,444 @@ +net/minecraft/server/MinecraftServer 74d80014ab5a052578e5f6d80f8b5308 +net/minecraft/src/NetHandler 40ed615a01ab0e2f8c0944f34219a9cb +net/minecraft/src/EntityTrackerEntry 04ffe08c42926c1707d00b6fc50c3e52 +net/minecraft/src/NBTTagCompound e918846624599a4d37c22a1d45913866 +net/minecraft/src/MapInfo add57ad3c2b025989cb698e59191a43a +net/minecraft/src/Packet51MapChunk 5dd881c5f2b874b748ef0648f6ee9911 +net/minecraft/src/Packet50PreChunk 1ac386d28f2d78060f5639644f166af4 +net/minecraft/src/ItemSeeds e4dc0b1d079a687de085c52836fdcdc3 +net/minecraft/src/BlockSnowBlock 06b388fcb0195f0e9f815c228667587e +net/minecraft/src/RecipesIngots a12d26dc067f8b14a05228628d3c5a9e +net/minecraft/src/ItemRecord 9cd0675abadb70fdaab1b8193e3b22b0 +net/minecraft/src/StatTypeTime 6c4f3d1691ce7522c719d895943875b7 +net/minecraft/src/EntityItem 1f7126bca069dddc5d5f602321202fae +net/minecraft/src/WorldGenDungeons 48a97b5cb4fbdb0d5b59eed4cf4179a3 +net/minecraft/src/BlockButton f8695ddca3df7e61139f101f29ea7771 +net/minecraft/src/Item 34f6f24f7b9d41a89e86c6d6403924db +net/minecraft/src/BlockSand f6a1537a6d9c5d922311f56e6c36b9fa +net/minecraft/src/EntityFish 8808422c2a25ff3af810116dddaa34a6 +net/minecraft/src/ItemCookie ec08c7375242b8e2f660e057dc457313 +net/minecraft/src/WorldGenDeadBush 99066f99a33f0e845c97896ede9b0912 +net/minecraft/src/BlockGlass 4843b9ed50cdf01bbe284a7dda30a84f +net/minecraft/src/BlockFence 4f8de463fcfa90c46cf002fa3feb86fb +net/minecraft/src/Packet52MultiBlockChange a41b64bb4f97c204a7e45cb87d1a11ba +net/minecraft/src/BlockNetherrack 37299eccabe4fa07a862418a595051b9 +net/minecraft/src/IStatType 0ea308d781b70a297eb4bb7d0371041f +net/minecraft/src/InventoryCraftResult c6d993864aab72abe39592f6ffa95721 +net/minecraft/src/Packet38EntityStatus 5522616380c08ed5017fdd3ba2546596 +net/minecraft/src/IPlayerFileData bffe74a5386691e7a52d2bebd5254564 +net/minecraft/src/EntityWeatherEffect 095e4777d4c0cded805b53d88588517b +net/minecraft/src/ItemRedstone 73d2244bc693df8b423a89540f042dcc +net/minecraft/src/NoiseGenerator2 7eaa2d716964a6a94cfc37b1d5d6deb3 +net/minecraft/src/ItemBoat fa8002cabbeff36aee0ba72cf8e8c852 +net/minecraft/src/ItemMapBase ba088d195b640fbc7b7f7298a7a1e345 +net/minecraft/src/BlockFlower 6deab3e879c239a136724d53371a8d65 +net/minecraft/src/ItemStack 972fd49a1897a9da26de7db67e69db42 +net/minecraft/src/Packet71Weather d04a6b9463b0b2f4849721b600fefb8e +net/minecraft/src/ConsoleCommandHandler 9c4dfb448a029713fa8d8cb30f18f546 +net/minecraft/src/Packet29DestroyEntity 9fe9cbb9f9a4d2ddc25cfe3bdcb0e84c +net/minecraft/src/BlockLadder 7b00bd86fa5ec990daab2a4eb27c1997 +net/minecraft/src/EntityArrow e97ffbc2867fec32055511c4e3bfca22 +net/minecraft/src/BlockWorkbench e5fea63aef7d1726dd65d33928936ad5 +net/minecraft/src/BlockGravel 0937b3ca08c59bdbd46ae7fd26a393b1 +net/minecraft/src/BlockDeadBush 2962d4b119cec6c57f632618492a4f5c +net/minecraft/src/WorldServerMulti 42de682bcb18e4c400d540d122e6e064 +net/minecraft/src/NoiseGenerator 6d2bf3399aaf20f9ffa2882f610bc474 +net/minecraft/src/WorldGenMinable ff31f3f811086edaa2920b9ec7458d17 +net/minecraft/src/PlayerNBTManager b42ec05be53eb5a3864f968c3b565d74 +net/minecraft/src/ItemTool 111e283c23893009d07698e45276dcb4 +net/minecraft/src/BlockSponge ec94d9a11488651f6068345ffded7bff +net/minecraft/src/WorldGenHellLava 32cbeaceab4b29179fec5cdae6c26d21 +net/minecraft/src/TileEntityRecordPlayer be3cd0e2fdafcb4c3d33b956f2d94bc0 +net/minecraft/src/WorldGenReed d0cce2600754e1f9484039d8e5c4465f +net/minecraft/src/BlockCrops 37fe69604dab253c8498ed387edd484b +net/minecraft/src/EntitySkeleton 7655ed48ed34c4616d0ae5e0327ec621 +net/minecraft/src/ItemEgg 7acce4bcd7fbf73fd605fa042747668d +net/minecraft/src/Packet60Explosion eb63e95101288453c2e568cfe3bf2652 +net/minecraft/src/BlockObsidian 944f6cf0005ba3bb6891d038e088527c +net/minecraft/src/BlockSoulSand bfa4b1fbc3f32db4b58c810da5ce4654 +net/minecraft/src/BlockFire f0a2034d3bf8e47a67316a8cca0e5865 +net/minecraft/src/ContainerChest 2c24753e7e835ea51cc476f927ad1935 +net/minecraft/src/Packet24MobSpawn 5033400ef95b57c820e7f3913b8dfe21 +net/minecraft/src/ItemSaddle bf5929a67b8343421cdccc9d48eb2d82 +net/minecraft/src/EntityChicken a9269347c7a79fc43becd7dd33d20a49 +net/minecraft/src/StatCollector d11a606be8bc79eb58635519af74d174 +net/minecraft/src/ShapedRecipes 534000120ceadbcaa79dbba7a9ba8b33 +net/minecraft/src/ChunkProvider b346f69e17bc2a4f136a947a1f1f5d5c +net/minecraft/src/ItemFlintAndSteel ddee391aedcd9a9410f9b0e0498163a9 +net/minecraft/src/SlotArmor 6e93c56afdc0492b67c57760e10851de +net/minecraft/src/ItemPickaxe 2d06effc07255282ec5ea803c63cfc64 +net/minecraft/src/StringTranslate a6538cfe5a6eca8f9d521f81288b19f5 +net/minecraft/src/BlockStationary d1b77f31fb9c8a8e1be5e6cb6b57686b +net/minecraft/src/ItemAxe c5118d998081a55fd662168725a1f42c +net/minecraft/src/BlockSapling 3ae5a6a11e63ee9308dd10ebaa8d2d83 +net/minecraft/src/Packet18Animation 57da88f529ffae6ae24ef0c627857e48 +net/minecraft/src/WorldGenCactus 4a1ba44a035a99cccca3e94e20cc3c26 +net/minecraft/src/EntityGhast 101f6b9ff5e5ebef85409653548a5b3e +net/minecraft/src/ItemSword e01eeab2bb830f4d53d1353ff54eab66 +net/minecraft/src/EntityList 1c38585f970bab76bba7cb9ce0f9f66a +net/minecraft/src/EntitySlime 1a7c3b9981b9e17c5b8894d98ca18ae9 +net/minecraft/src/SaveOldDir 7953cd67fffd4117e3f6a5a0d4703d2e +net/minecraft/src/Packet25EntityPainting 5a031244e0c41bc94b3f22b25721a0ad +net/minecraft/src/RegionFileCache e8158eb715dd0a9c557845ea8d230e92 +net/minecraft/src/Packet28EntityVelocity 39209513acf4f4a5953870625a8a5da1 +net/minecraft/src/EntityGiantZombie 140abdc2cb03550b3db55c441ca9db44 +net/minecraft/src/TileEntityPiston 677f07988250b10949f7e256edf591be +net/minecraft/src/EntityLightningBolt 3ae8527b8aada92a8337dc76ed97498f +net/minecraft/src/WorldProviderSky 81dfe2b5f969f6aaa52139af139dc3e2 +net/minecraft/src/EntitySquid f62844986cdf2d45d59d3f940d9b389a +net/minecraft/src/StatList 34e513f0d25b0a2c4e732debbbca448e +net/minecraft/src/DataWatcher 97b8e045ba3270b520ccb62499861a70 +net/minecraft/src/ISaveHandler d9fa202f71549aa69586b92e1fc58031 +net/minecraft/src/Packet19EntityAction 044c22fa918576e7b175fdebf474cc1a +net/minecraft/src/MapColor a46e6ee19a079e947ce091006a3a9cb5 +net/minecraft/src/NetLoginHandler 91793e4ccde755281d7cf0d376c6ac4a +net/minecraft/src/NBTTagLong 8078672f86016518857a83da24aad04b +net/minecraft/src/ChatAllowedCharacters 2e9a20d13e7625d46fe217ff02aceb04 +net/minecraft/src/RecipesTools 8a194856553330361595c00bc543fcb9 +net/minecraft/src/WorldManager 5b0966bb5a96b209f141741ba59a2a6f +net/minecraft/src/NetServerHandler 9923832a9a608970cbe31e9e59db9927 +net/minecraft/src/Packet9Respawn 2ded295830357b3b4f5178140d133cd6 +net/minecraft/src/Packet8UpdateHealth e86226c3d8493751921f54039e2701c8 +net/minecraft/src/BlockGlowStone 2125eaf93a3d1ea980d3c0da108daf99 +net/minecraft/src/Packet14BlockDig ab6dedaced50a24ac7ed857458706458 +net/minecraft/src/RecipesFood 3312935c257073b73fb45d37f37aca3d +net/minecraft/src/Packet11PlayerPosition 68ca78add786707e5f307e6407c476d5 +net/minecraft/src/EnumArt 037b750b9755b52869968a6a96070cf4 +net/minecraft/src/StatCrafting 79728305e54b5618a47dbec57ca03dcf +net/minecraft/src/Packet10Flying 93a54ab2f0ac8b3d0bef816056add9c7 +net/minecraft/src/BiomeGenForest 815d03e409886e1ad2f32c30ce6946e4 +net/minecraft/src/WorldGenTaiga2 c020322429552fd059bab47238771222 +net/minecraft/src/StepSoundStone d92f03abbb75382c50fecdbcd2e2027f +net/minecraft/src/ThreadSleepForever 56004aa8f7c49d024b09f9dff934f7f5 +net/minecraft/src/NoiseGeneratorPerlin 3d9f20020de8bb5b8cdc3c6266c74e28 +net/minecraft/src/EnumSkyBlock 38634316fbc69daba023b08e5199fd0e +net/minecraft/src/BlockLeaves 21ec3e5a42eef1e7e736379a254246a5 +net/minecraft/src/GuiLogOutputHandler d3e9d0be10752acfdf714a0dadc39566 +net/minecraft/src/EnumMobType 67f79e9368e7d1c55409aafcc9e53afb +net/minecraft/src/SpawnerAnimals b4ddaa9311ff8bbdf85c384e0fff9656 +net/minecraft/src/BlockRedstoneRepeater 558caaf7dc6748dd8b457b6ea586d82a +net/minecraft/src/EntityCreature 83fadfd2ebae5459bff33519fe23d273 +net/minecraft/src/Teleporter 1121cd37016d7009d4b01d2119a47783 +net/minecraft/src/ServerGuiFocusAdapter 9edf201469d6e68b413e7aa7ce99d469 +net/minecraft/src/ChunkProviderHell 8d53d7fe8b5301643f9ee699d46f51f4 +net/minecraft/src/ItemArmor 8c2f832af3ecff2e1d96897f3ae93a65 +net/minecraft/src/BlockPortal 96106bdc169ee09a86e1a336a1cd228d +net/minecraft/src/EntityMob eb2c35873a3424ba9014d88ad8d0908f +net/minecraft/src/EntitySnowball 6ce92f55455c6e3ddb631bfb543fcf8f +net/minecraft/src/ContainerWorkbench 4b675b49107f05c6d3004cf000f79718 +net/minecraft/src/Packet30Entity 353f6a40277eba3ecf48231fc8588a93 +net/minecraft/src/Packet100OpenWindow 7abdf4fc0c92c2c7d7d6c9aa86859e73 +net/minecraft/src/BlockLeavesBase f889a97ca1d1ca7abb0d99bd1a0ac200 +net/minecraft/src/ServerConfigurationManager 1b49b9d22ef96a1632c4e3792f63d9a6 +net/minecraft/src/BiomeGenRainforest 5c89f828263f90a9358db8d9c2e5b261 +net/minecraft/src/ChunkCoordinates 09d1ca071d80b8b3f74991c497cff1af +net/minecraft/src/EntityPlayerMP 6341d4d408922277e9ce5564bf1e29ed +net/minecraft/src/WorldGenGlowStone1 e43a197df4a789854d7c177c4180c1ec +net/minecraft/src/BlockIce c28a30b5c038bf3458fef24fcc64c605 +net/minecraft/src/ConvertProgressUpdater 488043ac1fe80e79a5ebf2c805b7b943 +net/minecraft/src/WorldGenTaiga1 340a5746875839fd4d4ced5897258d36 +net/minecraft/src/ItemBucket bff304e62d3406a30af7c5f806f241de +net/minecraft/src/BiomeGenSky ada8820a5c638acc9349bc17a6903789 +net/minecraft/src/WorldProviderHell d657e0112b3f6c5806407f21d1f34228 +net/minecraft/src/BlockJukeBox 90fe966d582e1ce17027ffe47296d8ca +net/minecraft/src/BlockTorch ce6b4d1bca2b306a29896844fcf6eca4 +net/minecraft/src/Packet5PlayerInventory 7effe05dff280b8b79db267bf9ee4024 +net/minecraft/src/NBTTagByte 21e1b9ffee3aa3df48250cca489d74e3 +net/minecraft/src/TileEntity dbb58e958772f7dd203ebde1c6469026 +net/minecraft/src/ItemReed f7f021e111b08c51eb1f2d94a3c1cfb8 +net/minecraft/src/BlockCactus 67aff0b4b543d5b0a5f8e73e0d03f588 +net/minecraft/src/BlockCloth 240d281fc0a45b85e1559360df0a4a43 +net/minecraft/src/BlockChest fa2b96ea6fe0182b589e2a615598bae7 +net/minecraft/src/Packet40EntityMetadata 68d1250f7bd5a4d362dbffeb06c1fbbe +net/minecraft/src/Pathfinder 70c8f03c50c9c29b4d486b2556b97c55 +net/minecraft/src/Material 2710c2823f32225484953518ff2bf746 +net/minecraft/src/ItemBlock 4de88ff9452ce1cd8d2378da7d5d265d +net/minecraft/src/EmptyChunk 1d204abb85c9b2a73a40ba1c65980af1 +net/minecraft/src/BlockClay eed57fa621e9ef9a020a1a4e65494917 +net/minecraft/src/Packet0KeepAlive e1b8b926088f54d3ded322be2c13057f +net/minecraft/src/SpawnListEntry 6023402ef474458a6c8ecc6af9eef3fb +net/minecraft/src/BiomeGenTaiga f72c6701356378cdde7d395f564ed36b +net/minecraft/src/TileEntityMobSpawner 178cde41c442b64c790f7bf7ae21d791 +net/minecraft/src/EntityPlayer a7e5c213dbf34db6c1def63b66edf668 +net/minecraft/src/Packet105UpdateProgressbar 09d78ca137346cce8ec7ee8d0e0335a4 +net/minecraft/src/EntityPainting 522f940790cd4e8f72b44570edd155b4 +net/minecraft/src/ChunkBlockMap 10dabba68497413b2efb0150a32bf97c +net/minecraft/src/Packet53BlockChange 76cb4d8c902486df2d7dc7e83aa8ae8d +net/minecraft/src/MaterialTransparent d4f7d25305ae17163e3580d4caca2741 +net/minecraft/src/WorldChunkManagerHell 6c8ee8367420537c610886e67b6516fb +net/minecraft/src/BlockRedstoneTorch 0eb30fc521315655b888d8b965a37bf9 +net/minecraft/src/NibbleArray 6f2dabe0967d3b3c0dd9bceacfdf7612 +net/minecraft/src/BlockPumpkin 603d485235729ff409c6cb2e7b47fe97 +net/minecraft/src/Packet2Handshake 34b693e16f7a73b8637205b9a4506ff2 +net/minecraft/src/ItemSapling 55687c81a656b9527da46d1d599d1328 +net/minecraft/src/NBTTagShort dee6dc2f08cc9cd72fc4c929e91dd0af +net/minecraft/src/WorldProvider 049b829c14d1c26abc9d751ab89a38e4 +net/minecraft/src/StepSoundSand 044559e1a5f7e7ec6e28a752e93bfbcc +net/minecraft/src/RegionFileChunkBuffer d1355a851f5663dea8085db0259818f4 +net/minecraft/src/Packet54PlayNoteBlock 7c0e75026cd5cb4dc20e3a7353267d85 +net/minecraft/src/BlockFlowing 793b4325414dd0304d9179c40fcc0033 +net/minecraft/src/MetadataChunkBlock 563ca3860667fc29601e4267192d0642 +net/minecraft/src/BlockRedstoneOre 64492866bf9dfbaec25537896616c20d +net/minecraft/src/WorldGenLakes cfe858af9b96029c9bc2b7e99030bc46 +net/minecraft/src/RecipesArmor 8e9119537a30f343ab3b441f87529bf4 +net/minecraft/src/Packet13PlayerLookMove 300dbca74a54f2e881d67bd844328903 +net/minecraft/src/ThreadMonitorConnection 8b5e8c33e78ca88b93c6498b1077833c +net/minecraft/src/BlockStairs 45507d2d4ed009751355a1bbc0b9a6d8 +net/minecraft/src/InventoryLargeChest 508ae717f17a20585fc665b8368140ab +net/minecraft/src/BlockPistonMoving d19249fe7ac4edf68f4618fb9460183b +net/minecraft/src/ItemBow b6ff84d0ef91604ec3186876b8be28e3 +net/minecraft/src/BlockLever 47549d48f2d7a91f17cee0baa2e5518c +net/minecraft/src/IChunkProvider 462d28bab39e9234cd76e04ed3b128c1 +net/minecraft/src/ChunkFolderPattern 299abd70eb724e34184547b32b68647a +net/minecraft/src/ModelBed 7c156e69a91fee263dcf3e45f11ed511 +net/minecraft/src/BlockSnow 4ea1c73b2cf9ff9cdeda546aeac1d813 +net/minecraft/src/WorldProviderSurface 80194b9126f3ab0e33665f0f63595bcd +net/minecraft/src/BlockNote 77572b9e6147c1687cf898a732daf583 +net/minecraft/src/ItemBed 21336562b2b5eff990ba325ccd9e5182 +net/minecraft/src/BlockFurnace 2b13cf62393cb190f128c121e0f96ecb +net/minecraft/src/EntityEgg 17f531f2eadc58907c7308e64588af97 +net/minecraft/src/EntityZombie e1cd8500b318d2b01061fa4db5e1361f +net/minecraft/src/BlockFluid ac3e55269adb44604f6131ba5ef974ac +net/minecraft/src/RecipesCrafting c55919f59490d4000433effdb5ef7b43 +net/minecraft/src/ItemCloth 10b9f89ae364c11b8937c272de34d843 +net/minecraft/src/MapData ec966b779a8573a5ebdb713448c295e3 +net/minecraft/src/PlayerHash 398e7ac8afaf68ac34f93b4470cf69fa +net/minecraft/src/StatTypeDistance aab37c1ba1979564e958bd5957bb1765 +net/minecraft/src/NetworkManager 6bb2fbc659ce72fde0288c6ca49c261f +net/minecraft/src/Packet104WindowItems bf067ec272825ced18f6be5dc8cc037b +net/minecraft/src/EntityCow 7645ca02bdd2d37e41823c566b38b7e5 +net/minecraft/src/NetworkListenThread 6336425f1d33f26b491df954d86e4c90 +net/minecraft/src/StepSound 92828411ad72a09b4fc1eadb230d8cef +net/minecraft/src/EntityWaterMob c555b29c25d4620e2abbb6e75c6ed9fe +net/minecraft/src/FurnaceRecipes 0e833ddad4a31c268487ac5bbdc62ac2 +net/minecraft/src/Packet31RelEntityMove c25167d6d754cdbf101fbcbb4cfd9c1a +net/minecraft/src/EnumStatus 94370329d0deb03f8f512fb69fa0b33e +net/minecraft/src/BlockRail cdefd0b80fce2cfbe90c305e6e73513e +net/minecraft/src/ItemHoe 7f73dd0f1f6f1a0d87388cfbe1a1a7db +net/minecraft/src/MinecraftException c3e6d9e46c9f44513f74c73f08961284 +net/minecraft/src/IBlockAccess 28daf83a499aeb4adad9e78333297a68 +net/minecraft/src/BlockOre a95ade73582cba9443ec56bc7f4d0f88 +net/minecraft/src/ItemSpade 5d085a457b974f352a8682c0fa5e9937 +net/minecraft/src/EntityPigZombie aa5fed719ab96f1a0c98d61a45708d70 +net/minecraft/src/WorldGenTallGrass cd05c015fdbc936b6caa0196a1f5dee8 +net/minecraft/src/Empty1 db272f9d7f397ac3b23513dbb8763491 +net/minecraft/src/Packet101CloseWindow c3b4af884ebfe55a25153b3efc048e6b +net/minecraft/src/NBTTagList 400f104153da8eef33c3d00c42e99279 +net/minecraft/src/World 9826745c1468b3d79fa0c7595fb0bea9 +net/minecraft/src/SlotCrafting be2df3111d32960936f0d6bebdca2468 +net/minecraft/src/SaveFormatOld 9c5255d695d46793c11f258f4db92ae5 +net/minecraft/src/BiomeGenDesert 4241a980c3580942acb25134db7c903e +net/minecraft/src/RecipeSorter 0668121810e8aaffe64ff73d6feb029b +net/minecraft/src/BlockGrass 8d3d37bdf51a7d181313907e91fe921d +net/minecraft/src/ItemCoal 981354d07accf82862c56b859b2b820c +net/minecraft/src/MapStorage 2cb9c00fd470b949565e3825e2c66cb7 +net/minecraft/src/BlockReed cf86304f38e8c7af264f7a15f3a2378c +net/minecraft/src/Slot 4bc198e06fc4a19d716d618f22b3c5f8 +net/minecraft/src/Packet23VehicleSpawn 3dae4e8c0e2cee2505f3b7a4062f9231 +net/minecraft/src/CraftingManager 8d2a8f20756020d436a5ef0c6f8408a3 +net/minecraft/src/StatBasic 7aab3c9669a2d16349e48f9ba376ceef +net/minecraft/src/ItemSign d4cb636b555f7b5489a7ab2fc77cb91a +net/minecraft/src/AchievementMap 5872a831675da4bcf041a75b60e2316d +net/minecraft/src/EnumMovingObjectType 8d4b48ef2246e76010a49e1c0911a41a +net/minecraft/src/InventoryPlayer 7e0661c279a77a453e1da2bf872ce829 +net/minecraft/src/ConsoleLogManager 0874e8602f114ed8125c8d3be5c98499 +net/minecraft/src/MaterialPortal e70116cba3a54a9089bd1d12e9c52d8f +net/minecraft/src/IMob c225c3ab684ad2f3484ca3f15620e442 +net/minecraft/src/ServerCommand 5de584163da0f9488503ff36c2ae329f +net/minecraft/src/Explosion e5b228475147d138125b27dd2528d841 +net/minecraft/src/NetworkAcceptThread f8f34049eccaf2f625c97743757c358d +net/minecraft/src/EntityWolf 57e5e6a065282221981970dbda32bb90 +net/minecraft/src/Chunk e497278caba268dfec6b42ba378648af +net/minecraft/src/MapCoord 48bb4b751e3db510893d0e2c09019556 +net/minecraft/src/PistonBlockTextures fa3af94ecf05879b6e467c2491cd4c10 +net/minecraft/src/GuiLogFormatter 153109dbcec984de82a5e4362c5e4bab +net/minecraft/src/Packet6SpawnPosition c76cb0b9440bd58e0a2789df068612fc +net/minecraft/src/ItemFishingRod 6447ccd58214f1b61873a6c4ac216d8c +net/minecraft/src/NBTTagEnd 0a6903b0dc523806101334c8ec3f2e5e +net/minecraft/src/IChunkLoader 95d9df8b2ef39c475216e9fb62a7f7e2 +net/minecraft/src/EntityFlying b45f45fe8db8f7a57a27718f910099a6 +net/minecraft/src/BlockSandStone 19a023f50ee3e52583279a9c33f87175 +net/minecraft/src/MapGenBase 03d771ba78f385bdb29b5dd1fe09ea89 +net/minecraft/src/WatchableObject 3add3b1d3bbb4178de0d1a577204903b +net/minecraft/src/Packet22Collect 522462598127b3f236799b4fa81c2656 +net/minecraft/src/BlockBreakable 7e43d81fe89e3245bfb2036097e8e65c +net/minecraft/src/Packet103SetSlot 698c72b9237a904a0032fd26db8723ab +net/minecraft/src/Packet70Bed 78bcc3f8b7e286d0ca41bcd19df29410 +net/minecraft/src/BiomeGenHell 60a84555157cd641f1960119f5e01f72 +net/minecraft/src/WorldGenBigTree c2bd9a46e1d339bd93c69effc90df832 +net/minecraft/src/ItemInWorldManager 9091affa1aa51151e860534b7456e8de +net/minecraft/src/EntityMinecart 20bd1f6e4e07f76552813f0e3f05312a +net/minecraft/src/Block 38231734438b754b2f8553be6354bc91 +net/minecraft/src/WorldGenPumpkin 85b094f999be367c167302951bf1c0c7 +net/minecraft/src/PlayerListBox 0d4b98438a5f4e7c381163b84369b609 +net/minecraft/src/ThreadServerApplication 73e63656103a6784ac5662a41b9520f7 +net/minecraft/src/IAnimals 2c2c661355a508a7eb33e651aaddada9 +net/minecraft/src/BlockTrapDoor cb291f23b4d6caa909b1b9239e0eb445 +net/minecraft/src/BlockBed c441687b9924c0dc8370f9bde289bfe5 +net/minecraft/src/TileEntityDispenser d015335823005d56b7e5d87e4940e3ff +net/minecraft/src/BlockFarmland 09f465c90034630e169a935948eccda0 +net/minecraft/src/ItemSlab f8a9d42b4cc27176a84ed267d3d595ee +net/minecraft/src/BlockWeb 28c55d9919a7e0de491c5178323c7e45 +net/minecraft/src/ChunkCache 981c611c9afa78c0d62dc979e866d018 +net/minecraft/src/Packet131MapData dca0968cdc7a242d27897555f54816aa +net/minecraft/src/ThreadLoginVerifier 12379ab25fdb7734b5fd9e346454eb94 +net/minecraft/src/MCHash 95d97b2755a6871fde2231ac84adc1d8 +net/minecraft/src/WorldGenTrees 8ce58d3f194e3be8a847a8ec55cf84de +net/minecraft/src/ChunkFilePattern 77a1c67d2b6d281d75d70f5997f9aaf3 +net/minecraft/src/RecipesDyes 941a8a4e61c35de7235373adbaa1fea8 +net/minecraft/src/Packet12PlayerLook b01b8e9b5aab27b7ec728b7e57065f87 +net/minecraft/src/Path 09baca2dca3abaa3d1a9342b3c0793c1 +net/minecraft/src/EnumCreatureType d1593b3e0e7f135829828630519c746d +net/minecraft/src/ServerGUI 047d76510293c582f445396ea9cd9235 +net/minecraft/src/PropertyManager 3c78d9f9ef15b3f853f8e30cb32ab820 +net/minecraft/src/NBTTagInt 01704968601ac82acdf618b8a6c6714d +net/minecraft/src/ItemShears 14d4dd76774cf239cd92f56a3a502ae4 +net/minecraft/src/WorldGenGlowStone2 33d652bb8716136e558633b4f42efd10 +net/minecraft/src/ItemDye 64664e748b9ed8624b1a5830e6dc2ee8 +net/minecraft/src/EntityBoat 31d16a1ff30588fb16327d803f788025 +net/minecraft/src/AxisAlignedBB df75da4bbadad4ac48d8e18df54bcdd1 +net/minecraft/src/ISaveFormat 53a328e3679205cb3ab1300b7c1fa590 +net/minecraft/src/IRecipe 1f61e06883db800d6314a2646a2bbb85 +net/minecraft/src/BlockLockedChest d67713d98657ff9ccb19b060f798d380 +net/minecraft/src/ChunkFile 1d4047b231a9d31adf349710171ddf6b +net/minecraft/src/MCHashEntry 2519f16eb3d418b58555f9b9d99a9171 +net/minecraft/src/TileEntitySign 6dee393edf9aadd9073d59d5ecfa3b89 +net/minecraft/src/WorldGenClay edce6c9d407a6c58925b55849c856990 +net/minecraft/src/WorldGenLiquids 51499a363668be332e218df573b7163a +net/minecraft/src/MaterialLogic c1920129f2fc4baca9e95b1619b8a58f +net/minecraft/src/StatTypeSimple 345fc14c020c2e4a49d916303ed717cb +net/minecraft/src/ICrafting 9dc61bef961fb0f21bdc0953d277487a +net/minecraft/src/Packet3Chat 62615b832ec23d280db210786a06c0c4 +net/minecraft/src/EnumToolMaterial 3e3aca86258b899d9bad6c6b2e61a6da +net/minecraft/src/ServerGuiCommandListener 6c29a50e9b3c1c9ca9151e8225cb7049 +net/minecraft/src/BlockDispenser 2823176f60ccb0f27a37f0b45764f64a +net/minecraft/src/ItemFood bbd6bed981b03483ce2a736daaf789a4 +net/minecraft/src/BlockTNT 169d6e0817ba84ba43b6c1e597924dca +net/minecraft/src/IInventory d641e7d430cbd2f0861d4a984a74d3dc +net/minecraft/src/Packet102WindowClick c7cd2e130d17599ef4e38d9adceba0aa +net/minecraft/src/MapDataBase c4a7cf88bf92e07806814a27b5dbffca +net/minecraft/src/NetworkMasterThread 4a4c0ff68bc41647effe3a5914f77f39 +net/minecraft/src/ItemMinecart 5cff6c774a09b7d02ae32d84953e266c +net/minecraft/src/EntityFallingSand a6294392b134ec37af045ce29552cb42 +net/minecraft/src/PathEntity 19df165f53b4282f2328b1f2fe1c86d3 +net/minecraft/src/MaterialLiquid 3a205dc59fbf293e7452b335d04d0e34 +net/minecraft/src/ContainerDispenser 03d4362c1cfc412b126a51f98c8adf6e +net/minecraft/src/NBTTagByteArray 8004b8fb3badc6979c10bec186f61877 +net/minecraft/src/EntitySheep 1553247ae611a045dcd4f8200e6aa500 +net/minecraft/src/Packet21PickupSpawn 24b184d27d724eb89d3db0f5b745a352 +net/minecraft/src/WorldChunkManager ab646383d78122d6b88dc882fcd1467a +net/minecraft/src/BlockDoor ef2758f28508a93de9b5a033d1851e34 +net/minecraft/src/ChunkPosition d5a550d6183ffae16008fa8c0d07b1ab +net/minecraft/src/Packet106Transaction 8e4acd0aca89302767c7a25674cf6900 +net/minecraft/src/Empty2 a1329471bacf0c7a0653682ae3fd876a +net/minecraft/src/EntityLiving b6f39b279f2b95ca373c8f590e169154 +net/minecraft/src/NetworkReaderThread eeab9a4bae737a213d20393e0a453d62 +net/minecraft/src/Packet39AttachEntity 95d6b6f7b16df6265c0f1e30ab79118d +net/minecraft/src/RailLogic 47d69aec44f95a1c0ab8e7e5deaa9155 +net/minecraft/src/BlockTallGrass b51886f6a356f4cbc69f50ec05cadc93 +net/minecraft/src/Packet20NamedEntitySpawn 2d37bffd5dd11d965d397078cbe6875e +net/minecraft/src/BlockContainer 13327f8853cf5ccd8798000c943853ad +net/minecraft/src/Packet200Statistic af1abae5b8a8976bb96acbd73afde586 +net/minecraft/src/CompressedStreamTools 45a47def53c36248dd1f4c830406f5b5 +net/minecraft/src/Packet61DoorChange 41eeb3273931015b7417ca3542fc0320 +net/minecraft/src/IWorldAccess 2551bcf3c20341d23a59b24c3b083323 +net/minecraft/src/PacketCounter f45a6ef5a39cf58951daaa9770591b86 +net/minecraft/src/ShapelessRecipes 440501a4b894ce39fe97b884b29341b0 +net/minecraft/src/StatBase cd806f9f715b2475a5cd08fa3983ba21 +net/minecraft/src/MapGenCaves 8f5f36c1d9f0857c0f3e4b5a4929e48b +net/minecraft/src/BlockSign 8e93f40fda9de3d180c53e4aaeb24059 +net/minecraft/src/ItemPainting 048eab0de1f0d7012f3126e622ee59ea +net/minecraft/src/EntityCreeper 6e31bbd5f3372e5d71b98e5325eb2400 +net/minecraft/src/ChunkLoader 5cd60c89e049dda1884b2ec8380a30a5 +net/minecraft/src/ChunkProviderSky f972ceb78827746600092cd3426ec4f1 +net/minecraft/src/EntityTracker 1d3c29154d1cb53c5ea15e48e597d49d +net/minecraft/src/WorldGenFire d91859ead03dc64f3133fc25c945b878 +net/minecraft/src/ItemLeaves bd944e2ba03ac918e5fd7253da963125 +net/minecraft/src/BlockMushroom 5d11502c16452b8afc0a8e44de213bc9 +net/minecraft/src/Packet32EntityLook 04194a7867f5ec93ccce840eed49990d +net/minecraft/src/IProgressUpdate 7b1a8934f746a23e1d06a7ecf09dc9af +net/minecraft/src/MapGenCavesHell 9529a054c1c82bce779ae2db83962bac +net/minecraft/src/BlockStep 534705b35dc20faca032deddbe42670f +net/minecraft/src/EntityFireball a2be2e18678e65c958f2dcfd149b65bc +net/minecraft/src/BlockPistonExtension 30c2dbb27e06a0520896572044ac7720 +net/minecraft/src/BiomeGenBase 539f66eec1b4036b1bc907a5682a6c4d +net/minecraft/src/ItemPiston 81972e71ac79be58fa455e398297d6e6 +net/minecraft/src/BlockMobSpawner 43e2c03b1519f8597ee09a12d1d4e2a6 +net/minecraft/src/Packet17Sleep 67a5efd300629bc661d388161cc188af +net/minecraft/src/WorldInfo f9fd7bcb79f549b8167e0b25a2135795 +net/minecraft/src/AchievementList d30045fe7ded1a2b3eef79cfc4989943 +net/minecraft/src/BlockDetectorRail 53188f6ed41ad518c89405fb452c9953 +net/minecraft/src/ItemSnowball 4dc9f8865790f9deb6602cf9917fd4bd +net/minecraft/src/Entity 628454604c7c5b6d73ffcfc81cfeb11a +net/minecraft/src/NoiseGeneratorOctaves2 25fbfbca85cfadcfc9294aac2a14fa2f +net/minecraft/src/Packet b066a816f409c9120135ada192020c89 +net/minecraft/src/ItemMap 0e93611394e65fc6a0ae216fc52063ec +net/minecraft/src/EntityTNTPrimed 58d3f8f768d3ae73f99e33d119d8081d +net/minecraft/src/Packet7UseEntity 2dde217178141ec4a02b24ce25ded1d4 +net/minecraft/src/BlockPressurePlate 5c331a3deb97b1399ecb95192198b8e3 +net/minecraft/src/PlayerInstance 36a875cc4f0813a7db6513d82c630845 +net/minecraft/src/Packet15Place c7a3ecf7aa3b71a7549ee300651bb1c9 +net/minecraft/src/GuiStatsComponent b34730e63af1265f9d6b62c49aba4ce3 +net/minecraft/src/ChunkProviderServer c526c5fff1d78388387f22683409323f +net/minecraft/src/EntityPig 13212973f2448e4ce7b5453e70efc7d1 +net/minecraft/src/RecipesWeapons 09fd9927d705a543265dd9cdbdff9838 +net/minecraft/src/PlayerHashEntry 6592d6d96bdf481704c93ae98af8c469 +net/minecraft/src/NBTTagDouble bf77bf257cedd9751f16bf57ea503c47 +net/minecraft/src/McRegionChunkLoader 222b3081036653931e380e61286af752 +net/minecraft/src/Packet130UpdateSign f2f4a25042c6d68c8d03302ead2b5e75 +net/minecraft/src/Packet1Login dc46a4003f429bfa9bd389094d8764e9 +net/minecraft/src/WorldServer f1d47d3e22b772ba423dc1e918f06610 +net/minecraft/src/EntitySpider 7dccd3779c2d57ebc5b421a6a4caaa31 +net/minecraft/src/PathPoint 079bf47a409d52c21a331854aaba72b9 +net/minecraft/src/MathHelper 79c45f59b6b99baf7b4188c8d609c43a +net/minecraft/src/PlayerManager bf7e36e37f1eb53434701a4b8df1126a +net/minecraft/src/ThreadCommandReader fe54ec84c54651451ef70de98fd0154d +net/minecraft/src/NextTickListEntry 6ac1f01c2b37d67070efeb0dd0bcbcf3 +net/minecraft/src/TileEntityFurnace 85c36f15ffafc27d6a5240d90777aff6 +net/minecraft/src/RedstoneUpdateInfo 4c19faa3c89e83989071313f60beeace +net/minecraft/src/BlockDirt 7306c0210187b89ad56e1204e1cf4a20 +net/minecraft/src/Packet4UpdateTime 7feefb9c4c02991dfd0dd1b8ae96b094 +net/minecraft/src/ItemDoor 0c3a0b9aba1eb3fff598933fe1483de1 +net/minecraft/src/RegionFile 8912536e07b3b24db0d6cf0e2e48f613 +net/minecraft/src/Achievement 742b820d3d75169f5761607839dbe807 +net/minecraft/src/Packet255KickDisconnect 716a99fc626f81bc64f852ae5c2bde80 +net/minecraft/src/ContainerFurnace 6e36639c318e728894cf42a7e804e450 +net/minecraft/src/Packet16BlockItemSwitch 88fb7b1df8fa6993598f44ac4d45059b +net/minecraft/src/TileEntityChest 8639e44edd5e069e91c64af595b1360d +net/minecraft/src/SaveConverterMcRegion 32d3d6661c42424114c9eee842e1e0f3 +net/minecraft/src/BlockRedstoneWire 8e34b7c987b9d9ff47922598f043e0b1 +net/minecraft/src/WorldGenerator 4a639f3f6bb27b7b6d4bd1516c010a36 +net/minecraft/src/NBTTagFloat 9ea39302525393a03ddb739f8cc9ca17 +net/minecraft/src/ItemLog 63dee1236da777be7195cf8953acf1c9 +net/minecraft/src/ICommandListener 638af8fe506e5ec4198c70290e6b3d2c +net/minecraft/src/NBTBase 06858536273e1e8a6fabe856fb0760cb +net/minecraft/src/WorldGenFlowers 1de1752a98db6c28d33ce20514628753 +net/minecraft/src/ChunkCoordIntPair cfeb3f37797149413a71e87e030b0bb8 +net/minecraft/src/BlockBookshelf b51f595f6269ed6b0364ae67b9483ec4 +net/minecraft/src/ChunkProviderGenerate 9baa6e0dced9f33c8164a4bbf1951614 +net/minecraft/src/BlockLog e5d275c18f1cb7b1e6f50c66067fb8b4 +net/minecraft/src/MovingObjectPosition bf0f281fa299f65f842efc9305804ce3 +net/minecraft/src/Packet27Position 54b31b2a4b8edc85449da5af3b6316a7 +net/minecraft/src/NBTTagString 9c4f18cf4ab51377ef477412af18692b +net/minecraft/src/BlockPistonBase 9ac4f3a839e6ff3cc80b3fe8f7870487 +net/minecraft/src/BiomeGenSwamp 354cf963c49bbda9630f35b0ed174516 +net/minecraft/src/ContainerPlayer 170a694c57a702760f30f352d26c2a18 +net/minecraft/src/Vec3D 46064be3594c7254be51b9b190e8176c +net/minecraft/src/TileEntityNote babfc0ab8646b03a1f1672b8c2dc7f76 +net/minecraft/src/ConsoleLogFormatter 9b81dc2c36fc1f0322424b41ca07cb4d +net/minecraft/src/IUpdatePlayerListBox 7c68acfd7547db77ef7ea7b8343b4816 +net/minecraft/src/BlockOreStorage aaefb6370b8c8666c135ab789fb0c270 +net/minecraft/src/WorldGenForest 93b07730e8bdd9a89f53de49c8521779 +net/minecraft/src/BlockCake ad5f6f31792d6a01054c3d0e4a23742b +net/minecraft/src/ServerWindowAdapter f95e6667e6f8eb14626f51232effebf6 +net/minecraft/src/EntityAnimal 10d92d5116c053070ddadac83ebee034 +net/minecraft/src/Packet33RelEntityMoveLook 901f3f64322a8bee06fb668851445660 +net/minecraft/src/Container 69acf4986614dc13d33ea2ed89ef1b43 +net/minecraft/src/BlockStone 543d6587b9f5f29087027a2eb98a37a1 +net/minecraft/src/NoiseGeneratorOctaves b02ca36e1e0e51c26120a2a163bea4d3 +net/minecraft/src/GuiStatsListener 52ecd04ca3688253bd14e8ea0e695d69 +net/minecraft/src/InventoryCrafting 496d9ba13440e14054ab41e6f4356770 +net/minecraft/src/SlotFurnace 65b1ab78e55a0f7538d39426c99fd89f +net/minecraft/src/Packet34EntityTeleport 2347f1d19adf5a5a962b115323efecbf +net/minecraft/src/NetworkWriterThread 0743942da009f5434d3db73bd801e9e1 +net/minecraft/src/ItemSoup acedbfab3457afe2d3ee36f02944a586 diff --git a/src/net/minecraft/server/MinecraftServer.java b/src/net/minecraft/server/MinecraftServer.java new file mode 100644 index 0000000..3233f65 --- /dev/null +++ b/src/net/minecraft/server/MinecraftServer.java @@ -0,0 +1,415 @@ +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.Random; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.src.AxisAlignedBB; +import net.minecraft.src.ChunkCoordinates; +import net.minecraft.src.ConsoleCommandHandler; +import net.minecraft.src.ConsoleLogManager; +import net.minecraft.src.ConvertProgressUpdater; +import net.minecraft.src.EntityTracker; +import net.minecraft.src.ICommandListener; +import net.minecraft.src.IProgressUpdate; +import net.minecraft.src.ISaveFormat; +import net.minecraft.src.IUpdatePlayerListBox; +import net.minecraft.src.NetworkListenThread; +import net.minecraft.src.Packet4UpdateTime; +import net.minecraft.src.PropertyManager; +import net.minecraft.src.SaveConverterMcRegion; +import net.minecraft.src.SaveOldDir; +import net.minecraft.src.ServerCommand; +import net.minecraft.src.ServerConfigurationManager; +import net.minecraft.src.ServerGUI; +import net.minecraft.src.StatList; +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; +import net.minecraft.src.WorldServerMulti; + +public class MinecraftServer implements Runnable, ICommandListener { + public static Logger logger = Logger.getLogger("Minecraft"); + public static HashMap field_6037_b = new HashMap(); + public NetworkListenThread networkServer; + public PropertyManager propertyManagerObj; + public WorldServer[] worldMngr; + public ServerConfigurationManager configManager; + private ConsoleCommandHandler commandHandler; + private boolean serverRunning = true; + public boolean serverStopped = false; + int deathTime = 0; + public String currentTask; + public int percentDone; + private List field_9010_p = new ArrayList(); + private List commands = Collections.synchronizedList(new ArrayList()); + public EntityTracker[] entityTracker = new EntityTracker[2]; + public boolean onlineMode; + public boolean spawnPeacefulMobs; + public boolean pvpOn; + public boolean allowFlight; + + public MinecraftServer() { + new ThreadSleepForever(this); + } + + private boolean startServer() throws UnknownHostException { + this.commandHandler = new ConsoleCommandHandler(this); + ThreadCommandReader var1 = new ThreadCommandReader(this); + var1.setDaemon(true); + var1.start(); + ConsoleLogManager.init(); + logger.info("Starting minecraft server version Beta 1.7.3"); + 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.spawnPeacefulMobs = this.propertyManagerObj.getBooleanProperty("spawn-animals", true); + this.pvpOn = this.propertyManagerObj.getBooleanProperty("pvp", true); + this.allowFlight = this.propertyManagerObj.getBooleanProperty("allow-flight", false); + 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.networkServer = new NetworkListenThread(this, var3, var4); + } catch (IOException var13) { + logger.warning("**** FAILED TO BIND TO PORT!"); + logger.log(Level.WARNING, "The exception was: " + var13.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.entityTracker[0] = new EntityTracker(this, 0); + this.entityTracker[1] = new EntityTracker(this, -1); + long var5 = System.nanoTime(); + String var7 = this.propertyManagerObj.getStringProperty("level-name", "world"); + String var8 = this.propertyManagerObj.getStringProperty("level-seed", ""); + long var9 = (new Random()).nextLong(); + if(var8.length() > 0) { + try { + var9 = Long.parseLong(var8); + } catch (NumberFormatException var12) { + var9 = (long)var8.hashCode(); + } + } + + logger.info("Preparing level \"" + var7 + "\""); + this.initWorld(new SaveConverterMcRegion(new File(".")), var7, var9); + logger.info("Done (" + (System.nanoTime() - var5) + "ns)! For help, type \"help\" or \"?\""); + return true; + } + + private void initWorld(ISaveFormat var1, String var2, long var3) { + if(var1.isOldSaveType(var2)) { + logger.info("Converting map!"); + var1.converMapToMCRegion(var2, new ConvertProgressUpdater(this)); + } + + this.worldMngr = new WorldServer[2]; + SaveOldDir var5 = new SaveOldDir(new File("."), var2, true); + + for(int var6 = 0; var6 < this.worldMngr.length; ++var6) { + if(var6 == 0) { + this.worldMngr[var6] = new WorldServer(this, var5, var2, var6 == 0 ? 0 : -1, var3); + } else { + this.worldMngr[var6] = new WorldServerMulti(this, var5, var2, var6 == 0 ? 0 : -1, var3, this.worldMngr[0]); + } + + this.worldMngr[var6].addWorldAccess(new WorldManager(this, this.worldMngr[var6])); + this.worldMngr[var6].difficultySetting = this.propertyManagerObj.getBooleanProperty("spawn-monsters", true) ? 1 : 0; + this.worldMngr[var6].setAllowedSpawnTypes(this.propertyManagerObj.getBooleanProperty("spawn-monsters", true), this.spawnPeacefulMobs); + this.configManager.setPlayerManager(this.worldMngr); + } + + short var18 = 196; + long var7 = System.currentTimeMillis(); + + for(int var9 = 0; var9 < this.worldMngr.length; ++var9) { + logger.info("Preparing start region for level " + var9); + if(var9 == 0 || this.propertyManagerObj.getBooleanProperty("allow-nether", true)) { + WorldServer var10 = this.worldMngr[var9]; + ChunkCoordinates var11 = var10.getSpawnPoint(); + + for(int var12 = -var18; var12 <= var18 && this.serverRunning; var12 += 16) { + for(int var13 = -var18; var13 <= var18 && this.serverRunning; var13 += 16) { + long var14 = System.currentTimeMillis(); + if(var14 < var7) { + var7 = var14; + } + + if(var14 > var7 + 1000L) { + int var16 = (var18 * 2 + 1) * (var18 * 2 + 1); + int var17 = (var12 + var18) * (var18 * 2 + 1) + var13 + 1; + this.outputPercentRemaining("Preparing spawn area", var17 * 100 / var16); + var7 = var14; + } + + var10.chunkProviderServer.loadChunk(var11.posX + var12 >> 4, var11.posZ + var13 >> 4); + + while(var10.func_6156_d() && this.serverRunning) { + } + } + } + } + } + + this.clearCurrentTask(); + } + + private void outputPercentRemaining(String var1, int var2) { + this.currentTask = var1; + this.percentDone = var2; + logger.info(var1 + ": " + var2 + "%"); + } + + private void clearCurrentTask() { + this.currentTask = null; + this.percentDone = 0; + } + + private void saveServerWorld() { + logger.info("Saving chunks"); + + for(int var1 = 0; var1 < this.worldMngr.length; ++var1) { + WorldServer var2 = this.worldMngr[var1]; + var2.saveWorld(true, (IProgressUpdate)null); + var2.func_30006_w(); + } + + } + + private void stopServer() { + logger.info("Stopping server"); + if(this.configManager != null) { + this.configManager.savePlayerStates(); + } + + for(int var1 = 0; var1 < this.worldMngr.length; ++var1) { + WorldServer var2 = this.worldMngr[var1]; + if(var2 != null) { + this.saveServerWorld(); + } + } + + } + + public void initiateShutdown() { + this.serverRunning = false; + } + + public void run() { + try { + if(this.startServer()) { + long var1 = System.currentTimeMillis(); + + for(long var3 = 0L; this.serverRunning; Thread.sleep(1L)) { + 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; + if(this.worldMngr[0].isAllPlayersFullyAsleep()) { + this.doTick(); + var3 = 0L; + } else { + while(var3 > 50L) { + var3 -= 50L; + this.doTick(); + } + } + } + } else { + while(this.serverRunning) { + this.commandLineParser(); + + try { + Thread.sleep(10L); + } catch (InterruptedException var57) { + var57.printStackTrace(); + } + } + } + } catch (Throwable var58) { + var58.printStackTrace(); + logger.log(Level.SEVERE, "Unexpected exception", var58); + + while(this.serverRunning) { + this.commandLineParser(); + + try { + Thread.sleep(10L); + } catch (InterruptedException var56) { + var56.printStackTrace(); + } + } + } finally { + try { + this.stopServer(); + this.serverStopped = true; + } catch (Throwable var54) { + var54.printStackTrace(); + } finally { + System.exit(0); + } + + } + + } + + private void doTick() { + 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.deathTime; + + for(var6 = 0; var6 < this.worldMngr.length; ++var6) { + if(var6 == 0 || this.propertyManagerObj.getBooleanProperty("allow-nether", true)) { + WorldServer var7 = this.worldMngr[var6]; + if(this.deathTime % 20 == 0) { + this.configManager.sendPacketToAllPlayersInDimension(new Packet4UpdateTime(var7.getWorldTime()), var7.worldProvider.worldType); + } + + var7.tick(); + + while(var7.func_6156_d()) { + } + + var7.updateEntities(); + } + } + + this.networkServer.handleNetworkListenThread(); + this.configManager.onTick(); + + for(var6 = 0; var6 < this.entityTracker.length; ++var6) { + this.entityTracker[var6].updateTrackedEntities(); + } + + 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); + this.commandHandler.handleCommand(var1); + } + + } + + public void func_6022_a(IUpdatePlayerListBox var1) { + this.field_9010_p.add(var1); + } + + public static void main(String[] var0) { + StatList.func_27092_a(); + + 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 void logWarning(String var1) { + logger.warning(var1); + } + + public String getUsername() { + return "CONSOLE"; + } + + public WorldServer getWorldManager(int var1) { + return var1 == -1 ? this.worldMngr[1] : this.worldMngr[0]; + } + + public EntityTracker getEntityTracker(int var1) { + return var1 == -1 ? this.entityTracker[1] : this.entityTracker[0]; + } + + public static boolean isServerRunning(MinecraftServer var0) { + return var0.serverRunning; + } +} diff --git a/src/net/minecraft/src/Achievement.java b/src/net/minecraft/src/Achievement.java new file mode 100644 index 0000000..ade9f94 --- /dev/null +++ b/src/net/minecraft/src/Achievement.java @@ -0,0 +1,67 @@ +package net.minecraft.src; + +public class Achievement extends StatBase { + public final int field_25067_a; + public final int field_27991_b; + public final Achievement field_27992_c; + private final String field_27063_l; + public final ItemStack theItemStack; + private boolean field_27062_m; + + public Achievement(int var1, String var2, int var3, int var4, Item var5, Achievement var6) { + this(var1, var2, var3, var4, new ItemStack(var5), var6); + } + + public Achievement(int var1, String var2, int var3, int var4, Block var5, Achievement var6) { + this(var1, var2, var3, var4, new ItemStack(var5), var6); + } + + public Achievement(int var1, String var2, int var3, int var4, ItemStack var5, Achievement var6) { + super(5242880 + var1, StatCollector.translateToLocal("achievement." + var2)); + this.theItemStack = var5; + this.field_27063_l = StatCollector.translateToLocal("achievement." + var2 + ".desc"); + this.field_25067_a = var3; + this.field_27991_b = var4; + if(var3 < AchievementList.field_27114_a) { + AchievementList.field_27114_a = var3; + } + + if(var4 < AchievementList.field_27113_b) { + AchievementList.field_27113_b = var4; + } + + if(var3 > AchievementList.field_27112_c) { + AchievementList.field_27112_c = var3; + } + + if(var4 > AchievementList.field_27111_d) { + AchievementList.field_27111_d = var4; + } + + this.field_27992_c = var6; + } + + public Achievement func_27059_a() { + this.field_27058_g = true; + return this; + } + + public Achievement func_27060_b() { + this.field_27062_m = true; + return this; + } + + public Achievement func_27061_c() { + super.func_27053_d(); + AchievementList.field_25129_a.add(this); + return this; + } + + public StatBase func_27053_d() { + return this.func_27061_c(); + } + + public StatBase func_27052_e() { + return this.func_27059_a(); + } +} diff --git a/src/net/minecraft/src/AchievementList.java b/src/net/minecraft/src/AchievementList.java new file mode 100644 index 0000000..9206baf --- /dev/null +++ b/src/net/minecraft/src/AchievementList.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class AchievementList { + public static int field_27114_a; + public static int field_27113_b; + public static int field_27112_c; + public static int field_27111_d; + public static List field_25129_a = new ArrayList(); + public static Achievement field_25128_b = (new Achievement(0, "openInventory", 0, 0, Item.book, (Achievement)null)).func_27059_a().func_27061_c(); + public static Achievement field_25131_c = (new Achievement(1, "mineWood", 2, 1, Block.wood, field_25128_b)).func_27061_c(); + public static Achievement field_25130_d = (new Achievement(2, "buildWorkBench", 4, -1, Block.workbench, field_25131_c)).func_27061_c(); + public static Achievement field_27110_i = (new Achievement(3, "buildPickaxe", 4, 2, Item.pickaxeWood, field_25130_d)).func_27061_c(); + public static Achievement field_27109_j = (new Achievement(4, "buildFurnace", 3, 4, Block.stoneOvenActive, field_27110_i)).func_27061_c(); + public static Achievement field_27108_k = (new Achievement(5, "acquireIron", 1, 4, Item.ingotIron, field_27109_j)).func_27061_c(); + public static Achievement field_27107_l = (new Achievement(6, "buildHoe", 2, -3, Item.hoeWood, field_25130_d)).func_27061_c(); + public static Achievement field_27106_m = (new Achievement(7, "makeBread", -1, -3, Item.bread, field_27107_l)).func_27061_c(); + public static Achievement field_27105_n = (new Achievement(8, "bakeCake", 0, -5, Item.cake, field_27107_l)).func_27061_c(); + public static Achievement field_27104_o = (new Achievement(9, "buildBetterPickaxe", 6, 2, Item.pickaxeStone, field_27110_i)).func_27061_c(); + public static Achievement field_27103_p = (new Achievement(10, "cookFish", 2, 6, Item.fishCooked, field_27109_j)).func_27061_c(); + public static Achievement field_27102_q = (new Achievement(11, "onARail", 2, 3, Block.minecartTrack, field_27108_k)).func_27060_b().func_27061_c(); + public static Achievement field_27101_r = (new Achievement(12, "buildSword", 6, -1, Item.swordWood, field_25130_d)).func_27061_c(); + public static Achievement field_27100_s = (new Achievement(13, "killEnemy", 8, -1, Item.bone, field_27101_r)).func_27061_c(); + public static Achievement field_27099_t = (new Achievement(14, "killCow", 7, -3, Item.leather, field_27101_r)).func_27061_c(); + public static Achievement field_27098_u = (new Achievement(15, "flyPig", 8, -4, Item.saddle, field_27099_t)).func_27060_b().func_27061_c(); + + public static void func_27097_a() { + } + + static { + System.out.println(field_25129_a.size() + " achievements"); + } +} diff --git a/src/net/minecraft/src/AchievementMap.java b/src/net/minecraft/src/AchievementMap.java new file mode 100644 index 0000000..d951c22 --- /dev/null +++ b/src/net/minecraft/src/AchievementMap.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; + +public class AchievementMap { + public static AchievementMap field_25134_a = new AchievementMap(); + private Map field_25133_b = new HashMap(); + + private AchievementMap() { + try { + BufferedReader var1 = new BufferedReader(new InputStreamReader(AchievementMap.class.getResourceAsStream("/achievement/map.txt"))); + + while(true) { + String var2 = var1.readLine(); + if(var2 == null) { + var1.close(); + break; + } + + String[] var3 = var2.split(","); + int var4 = Integer.parseInt(var3[0]); + this.field_25133_b.put(Integer.valueOf(var4), var3[1]); + } + } catch (Exception var5) { + var5.printStackTrace(); + } + + } + + public static String func_25132_a(int var0) { + return (String)field_25134_a.field_25133_b.get(Integer.valueOf(var0)); + } +} diff --git a/src/net/minecraft/src/AxisAlignedBB.java b/src/net/minecraft/src/AxisAlignedBB.java new file mode 100644 index 0000000..ff4d5f9 --- /dev/null +++ b/src/net/minecraft/src/AxisAlignedBB.java @@ -0,0 +1,324 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class AxisAlignedBB { + private static List boundingBoxes = new ArrayList(); + private static int numBoundingBoxesInUse = 0; + public double minX; + public double minY; + public double minZ; + public double maxX; + public double maxY; + public double maxZ; + + public static AxisAlignedBB getBoundingBox(double var0, double var2, double var4, double var6, double var8, double var10) { + return new AxisAlignedBB(var0, var2, var4, var6, var8, var10); + } + + public static void clearBoundingBoxPool() { + numBoundingBoxesInUse = 0; + } + + public static AxisAlignedBB getBoundingBoxFromPool(double var0, double var2, double var4, double var6, double var8, double var10) { + if(numBoundingBoxesInUse >= boundingBoxes.size()) { + boundingBoxes.add(getBoundingBox(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D)); + } + + return ((AxisAlignedBB)boundingBoxes.get(numBoundingBoxesInUse++)).setBounds(var0, var2, var4, var6, var8, var10); + } + + private AxisAlignedBB(double var1, double var3, double var5, double var7, double var9, double var11) { + this.minX = var1; + this.minY = var3; + this.minZ = var5; + this.maxX = var7; + this.maxY = var9; + this.maxZ = var11; + } + + public AxisAlignedBB setBounds(double var1, double var3, double var5, double var7, double var9, double var11) { + this.minX = var1; + this.minY = var3; + this.minZ = var5; + this.maxX = var7; + this.maxY = var9; + this.maxZ = var11; + return this; + } + + public AxisAlignedBB addCoord(double var1, double var3, double var5) { + double var7 = this.minX; + double var9 = this.minY; + double var11 = this.minZ; + double var13 = this.maxX; + double var15 = this.maxY; + double var17 = this.maxZ; + if(var1 < 0.0D) { + var7 += var1; + } + + if(var1 > 0.0D) { + var13 += var1; + } + + if(var3 < 0.0D) { + var9 += var3; + } + + if(var3 > 0.0D) { + var15 += var3; + } + + if(var5 < 0.0D) { + var11 += var5; + } + + if(var5 > 0.0D) { + var17 += var5; + } + + return getBoundingBoxFromPool(var7, var9, var11, var13, var15, var17); + } + + public AxisAlignedBB expand(double var1, double var3, double var5) { + double var7 = this.minX - var1; + double var9 = this.minY - var3; + double var11 = this.minZ - var5; + double var13 = this.maxX + var1; + double var15 = this.maxY + var3; + double var17 = this.maxZ + var5; + return getBoundingBoxFromPool(var7, var9, var11, var13, var15, var17); + } + + public AxisAlignedBB getOffsetBoundingBox(double var1, double var3, double var5) { + return getBoundingBoxFromPool(this.minX + var1, this.minY + var3, this.minZ + var5, this.maxX + var1, this.maxY + var3, this.maxZ + var5); + } + + public double calculateXOffset(AxisAlignedBB var1, double var2) { + if(var1.maxY > this.minY && var1.minY < this.maxY) { + if(var1.maxZ > this.minZ && var1.minZ < this.maxZ) { + double var4; + if(var2 > 0.0D && var1.maxX <= this.minX) { + var4 = this.minX - var1.maxX; + if(var4 < var2) { + var2 = var4; + } + } + + if(var2 < 0.0D && var1.minX >= this.maxX) { + var4 = this.maxX - var1.minX; + if(var4 > var2) { + var2 = var4; + } + } + + return var2; + } else { + return var2; + } + } else { + return var2; + } + } + + public double calculateYOffset(AxisAlignedBB var1, double var2) { + if(var1.maxX > this.minX && var1.minX < this.maxX) { + if(var1.maxZ > this.minZ && var1.minZ < this.maxZ) { + double var4; + if(var2 > 0.0D && var1.maxY <= this.minY) { + var4 = this.minY - var1.maxY; + if(var4 < var2) { + var2 = var4; + } + } + + if(var2 < 0.0D && var1.minY >= this.maxY) { + var4 = this.maxY - var1.minY; + if(var4 > var2) { + var2 = var4; + } + } + + return var2; + } else { + return var2; + } + } else { + return var2; + } + } + + public double calculateZOffset(AxisAlignedBB var1, double var2) { + if(var1.maxX > this.minX && var1.minX < this.maxX) { + if(var1.maxY > this.minY && var1.minY < this.maxY) { + double var4; + if(var2 > 0.0D && var1.maxZ <= this.minZ) { + var4 = this.minZ - var1.maxZ; + if(var4 < var2) { + var2 = var4; + } + } + + if(var2 < 0.0D && var1.minZ >= this.maxZ) { + var4 = this.maxZ - var1.minZ; + if(var4 > var2) { + var2 = var4; + } + } + + return var2; + } else { + return var2; + } + } else { + return var2; + } + } + + public boolean intersectsWith(AxisAlignedBB var1) { + return var1.maxX > this.minX && var1.minX < this.maxX ? (var1.maxY > this.minY && var1.minY < this.maxY ? var1.maxZ > this.minZ && var1.minZ < this.maxZ : false) : false; + } + + public AxisAlignedBB offset(double var1, double var3, double var5) { + this.minX += var1; + this.minY += var3; + this.minZ += var5; + this.maxX += var1; + this.maxY += var3; + this.maxZ += var5; + return this; + } + + public boolean isVecInXYZ(Vec3D var1) { + return var1.xCoord > this.minX && var1.xCoord < this.maxX ? (var1.yCoord > this.minY && var1.yCoord < this.maxY ? var1.zCoord > this.minZ && var1.zCoord < this.maxZ : false) : false; + } + + public AxisAlignedBB getInsetBoundingBox(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 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; + } + + public String toString() { + return "box[" + this.minX + ", " + this.minY + ", " + this.minZ + " -> " + this.maxX + ", " + this.maxY + ", " + this.maxZ + "]"; + } +} diff --git a/src/net/minecraft/src/BiomeGenBase.java b/src/net/minecraft/src/BiomeGenBase.java new file mode 100644 index 0000000..44dc67f --- /dev/null +++ b/src/net/minecraft/src/BiomeGenBase.java @@ -0,0 +1,112 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class BiomeGenBase { + public static final BiomeGenBase rainforest = (new BiomeGenRainforest()).setColor(588342).setBiomeName("Rainforest").func_4080_a(2094168); + public static final BiomeGenBase swampland = (new BiomeGenSwamp()).setColor(522674).setBiomeName("Swampland").func_4080_a(9154376); + public static final BiomeGenBase seasonalForest = (new BiomeGenBase()).setColor(10215459).setBiomeName("Seasonal Forest"); + public static final BiomeGenBase forest = (new BiomeGenForest()).setColor(353825).setBiomeName("Forest").func_4080_a(5159473); + public static final BiomeGenBase savanna = (new BiomeGenDesert()).setColor(14278691).setBiomeName("Savanna"); + public static final BiomeGenBase shrubland = (new BiomeGenBase()).setColor(10595616).setBiomeName("Shrubland"); + public static final BiomeGenBase taiga = (new BiomeGenTaiga()).setColor(3060051).setBiomeName("Taiga").setEnableSnow().func_4080_a(8107825); + public static final BiomeGenBase desert = (new BiomeGenDesert()).setColor(16421912).setBiomeName("Desert").setDisableRain(); + public static final BiomeGenBase plains = (new BiomeGenDesert()).setColor(16767248).setBiomeName("Plains"); + public static final BiomeGenBase iceDesert = (new BiomeGenDesert()).setColor(16772499).setBiomeName("Ice Desert").setEnableSnow().setDisableRain().func_4080_a(12899129); + public static final BiomeGenBase tundra = (new BiomeGenBase()).setColor(5762041).setBiomeName("Tundra").setEnableSnow().func_4080_a(12899129); + public static final BiomeGenBase hell = (new BiomeGenHell()).setColor(16711680).setBiomeName("Hell").setDisableRain(); + public static final BiomeGenBase field_28054_m = (new BiomeGenSky()).setColor(8421631).setBiomeName("Sky").setDisableRain(); + public String biomeName; + public int color; + public byte topBlock = (byte)Block.grass.blockID; + public byte fillerBlock = (byte)Block.dirt.blockID; + public int field_6161_q = 5169201; + protected List spawnableMonsterList = new ArrayList(); + protected List spawnableCreatureList = new ArrayList(); + protected List spawnableWaterCreatureList = new ArrayList(); + private boolean enableSnow; + private boolean enableRain = true; + private static BiomeGenBase[] biomeLookupTable = new BiomeGenBase[4096]; + + protected BiomeGenBase() { + this.spawnableMonsterList.add(new SpawnListEntry(EntitySpider.class, 10)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityZombie.class, 10)); + this.spawnableMonsterList.add(new SpawnListEntry(EntitySkeleton.class, 10)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityCreeper.class, 10)); + this.spawnableMonsterList.add(new SpawnListEntry(EntitySlime.class, 10)); + this.spawnableCreatureList.add(new SpawnListEntry(EntitySheep.class, 12)); + this.spawnableCreatureList.add(new SpawnListEntry(EntityPig.class, 10)); + this.spawnableCreatureList.add(new SpawnListEntry(EntityChicken.class, 10)); + this.spawnableCreatureList.add(new SpawnListEntry(EntityCow.class, 8)); + this.spawnableWaterCreatureList.add(new SpawnListEntry(EntitySquid.class, 10)); + } + + private BiomeGenBase setDisableRain() { + this.enableRain = false; + return this; + } + + 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; + } + + public WorldGenerator getRandomWorldGenForTrees(Random var1) { + return (WorldGenerator)(var1.nextInt(10) == 0 ? new WorldGenBigTree() : new WorldGenTrees()); + } + + protected BiomeGenBase setEnableSnow() { + this.enableSnow = true; + return this; + } + + protected BiomeGenBase setBiomeName(String var1) { + this.biomeName = var1; + return this; + } + + protected BiomeGenBase func_4080_a(int var1) { + this.field_6161_q = var1; + return this; + } + + protected BiomeGenBase setColor(int var1) { + this.color = var1; + return this; + } + + public static BiomeGenBase getBiomeFromLookup(double var0, double var2) { + int var4 = (int)(var0 * 63.0D); + int var5 = (int)(var2 * 63.0D); + return biomeLookupTable[var4 + var5 * 64]; + } + + public static BiomeGenBase 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 List getSpawnableList(EnumCreatureType var1) { + return var1 == EnumCreatureType.monster ? this.spawnableMonsterList : (var1 == EnumCreatureType.creature ? this.spawnableCreatureList : (var1 == EnumCreatureType.waterCreature ? this.spawnableWaterCreatureList : null)); + } + + public boolean getEnableSnow() { + return this.enableSnow; + } + + public boolean canSpawnLightningBolt() { + return this.enableSnow ? false : this.enableRain; + } + + static { + generateBiomeLookup(); + } +} diff --git a/src/net/minecraft/src/BiomeGenDesert.java b/src/net/minecraft/src/BiomeGenDesert.java new file mode 100644 index 0000000..2d4b40b --- /dev/null +++ b/src/net/minecraft/src/BiomeGenDesert.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public class BiomeGenDesert extends BiomeGenBase { +} diff --git a/src/net/minecraft/src/BiomeGenForest.java b/src/net/minecraft/src/BiomeGenForest.java new file mode 100644 index 0000000..6243aaa --- /dev/null +++ b/src/net/minecraft/src/BiomeGenForest.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BiomeGenForest extends BiomeGenBase { + public BiomeGenForest() { + this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 2)); + } + + public WorldGenerator getRandomWorldGenForTrees(Random var1) { + return (WorldGenerator)(var1.nextInt(5) == 0 ? new WorldGenForest() : (var1.nextInt(3) == 0 ? new WorldGenBigTree() : new WorldGenTrees())); + } +} diff --git a/src/net/minecraft/src/BiomeGenHell.java b/src/net/minecraft/src/BiomeGenHell.java new file mode 100644 index 0000000..aefedfc --- /dev/null +++ b/src/net/minecraft/src/BiomeGenHell.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class BiomeGenHell extends BiomeGenBase { + public BiomeGenHell() { + this.spawnableMonsterList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableMonsterList.add(new SpawnListEntry(EntityGhast.class, 10)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityPigZombie.class, 10)); + } +} diff --git a/src/net/minecraft/src/BiomeGenRainforest.java b/src/net/minecraft/src/BiomeGenRainforest.java new file mode 100644 index 0000000..e21a0f3 --- /dev/null +++ b/src/net/minecraft/src/BiomeGenRainforest.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BiomeGenRainforest extends BiomeGenBase { + public WorldGenerator getRandomWorldGenForTrees(Random var1) { + return (WorldGenerator)(var1.nextInt(3) == 0 ? new WorldGenBigTree() : new WorldGenTrees()); + } +} diff --git a/src/net/minecraft/src/BiomeGenSky.java b/src/net/minecraft/src/BiomeGenSky.java new file mode 100644 index 0000000..4960eef --- /dev/null +++ b/src/net/minecraft/src/BiomeGenSky.java @@ -0,0 +1,10 @@ +package net.minecraft.src; + +public class BiomeGenSky extends BiomeGenBase { + public BiomeGenSky() { + this.spawnableMonsterList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableCreatureList.add(new SpawnListEntry(EntityChicken.class, 10)); + } +} diff --git a/src/net/minecraft/src/BiomeGenSwamp.java b/src/net/minecraft/src/BiomeGenSwamp.java new file mode 100644 index 0000000..a3e8b27 --- /dev/null +++ b/src/net/minecraft/src/BiomeGenSwamp.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public class BiomeGenSwamp extends BiomeGenBase { +} diff --git a/src/net/minecraft/src/BiomeGenTaiga.java b/src/net/minecraft/src/BiomeGenTaiga.java new file mode 100644 index 0000000..090c41c --- /dev/null +++ b/src/net/minecraft/src/BiomeGenTaiga.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BiomeGenTaiga extends BiomeGenBase { + public BiomeGenTaiga() { + this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 2)); + } + + public WorldGenerator getRandomWorldGenForTrees(Random var1) { + return (WorldGenerator)(var1.nextInt(3) == 0 ? new WorldGenTaiga1() : new WorldGenTaiga2()); + } +} diff --git a/src/net/minecraft/src/Block.java b/src/net/minecraft/src/Block.java new file mode 100644 index 0000000..f0cd654 --- /dev/null +++ b/src/net/minecraft/src/Block.java @@ -0,0 +1,543 @@ +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[] opaqueCubeLookup = new boolean[256]; + public static final boolean[] isBlockContainer = new boolean[256]; + public static final int[] lightOpacity = new int[256]; + public static final boolean[] canBlockGrass = new boolean[256]; + public static final int[] lightValue = new int[256]; + public static final boolean[] requiresSelfNotify = new boolean[256]; + public static final Block stone = (new BlockStone(1, 1)).setHardness(1.5F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("stone"); + public static final BlockGrass grass = (BlockGrass)(new BlockGrass(2)).setHardness(0.6F).setStepSound(soundGrassFootstep).setBlockName("grass"); + public static final Block dirt = (new BlockDirt(3, 2)).setHardness(0.5F).setStepSound(soundGravelFootstep).setBlockName("dirt"); + public static final Block cobblestone = (new Block(4, 16, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("stonebrick"); + public static final Block planks = (new Block(5, 4, Material.wood)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep).setBlockName("wood").setRequiresSelfNotify(); + public static final Block sapling = (new BlockSapling(6, 15)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("sapling").setRequiresSelfNotify(); + public static final Block bedrock = (new Block(7, 17, Material.rock)).setBlockUnbreakable().setResistance(6000000.0F).setStepSound(soundStoneFootstep).setBlockName("bedrock").disableStats(); + public static final Block waterMoving = (new BlockFlowing(8, Material.water)).setHardness(100.0F).setLightOpacity(3).setBlockName("water").disableStats().setRequiresSelfNotify(); + public static final Block waterStill = (new BlockStationary(9, Material.water)).setHardness(100.0F).setLightOpacity(3).setBlockName("water").disableStats().setRequiresSelfNotify(); + public static final Block lavaMoving = (new BlockFlowing(10, Material.lava)).setHardness(0.0F).setLightValue(1.0F).setLightOpacity(255).setBlockName("lava").disableStats().setRequiresSelfNotify(); + public static final Block lavaStill = (new BlockStationary(11, Material.lava)).setHardness(100.0F).setLightValue(1.0F).setLightOpacity(255).setBlockName("lava").disableStats().setRequiresSelfNotify(); + public static final Block sand = (new BlockSand(12, 18)).setHardness(0.5F).setStepSound(soundSandFootstep).setBlockName("sand"); + public static final Block gravel = (new BlockGravel(13, 19)).setHardness(0.6F).setStepSound(soundGravelFootstep).setBlockName("gravel"); + public static final Block oreGold = (new BlockOre(14, 32)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreGold"); + public static final Block oreIron = (new BlockOre(15, 33)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreIron"); + public static final Block oreCoal = (new BlockOre(16, 34)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreCoal"); + public static final Block wood = (new BlockLog(17)).setHardness(2.0F).setStepSound(soundWoodFootstep).setBlockName("log").setRequiresSelfNotify(); + public static final BlockLeaves leaves = (BlockLeaves)(new BlockLeaves(18, 52)).setHardness(0.2F).setLightOpacity(1).setStepSound(soundGrassFootstep).setBlockName("leaves").disableStats().setRequiresSelfNotify(); + public static final Block sponge = (new BlockSponge(19)).setHardness(0.6F).setStepSound(soundGrassFootstep).setBlockName("sponge"); + public static final Block glass = (new BlockGlass(20, 49, Material.glass, false)).setHardness(0.3F).setStepSound(soundGlassFootstep).setBlockName("glass"); + public static final Block oreLapis = (new BlockOre(21, 160)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreLapis"); + public static final Block blockLapis = (new Block(22, 144, Material.rock)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("blockLapis"); + public static final Block dispenser = (new BlockDispenser(23)).setHardness(3.5F).setStepSound(soundStoneFootstep).setBlockName("dispenser").setRequiresSelfNotify(); + public static final Block sandStone = (new BlockSandStone(24)).setStepSound(soundStoneFootstep).setHardness(0.8F).setBlockName("sandStone"); + public static final Block musicBlock = (new BlockNote(25)).setHardness(0.8F).setBlockName("musicBlock").setRequiresSelfNotify(); + public static final Block bed = (new BlockBed(26)).setHardness(0.2F).setBlockName("bed").disableStats().setRequiresSelfNotify(); + public static final Block railPowered = (new BlockRail(27, 179, true)).setHardness(0.7F).setStepSound(soundMetalFootstep).setBlockName("goldenRail").setRequiresSelfNotify(); + public static final Block railDetector = (new BlockDetectorRail(28, 195)).setHardness(0.7F).setStepSound(soundMetalFootstep).setBlockName("detectorRail").setRequiresSelfNotify(); + public static final Block pistonStickyBase = (new BlockPistonBase(29, 106, true)).setBlockName("pistonStickyBase").setRequiresSelfNotify(); + public static final Block web = (new BlockWeb(30, 11)).setLightOpacity(1).setHardness(4.0F).setBlockName("web"); + public static final BlockTallGrass tallGrass = (BlockTallGrass)(new BlockTallGrass(31, 39)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("tallgrass"); + public static final BlockDeadBush deadBush = (BlockDeadBush)(new BlockDeadBush(32, 55)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("deadbush"); + public static final Block pistonBase = (new BlockPistonBase(33, 107, false)).setBlockName("pistonBase").setRequiresSelfNotify(); + public static final BlockPistonExtension pistonExtension = (BlockPistonExtension)(new BlockPistonExtension(34, 107)).setRequiresSelfNotify(); + public static final Block cloth = (new BlockCloth()).setHardness(0.8F).setStepSound(soundClothFootstep).setBlockName("cloth").setRequiresSelfNotify(); + public static final BlockPistonMoving pistonMoving = new BlockPistonMoving(36); + public static final BlockFlower plantYellow = (BlockFlower)(new BlockFlower(37, 13)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("flower"); + public static final BlockFlower plantRed = (BlockFlower)(new BlockFlower(38, 12)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("rose"); + public static final BlockFlower mushroomBrown = (BlockFlower)(new BlockMushroom(39, 29)).setHardness(0.0F).setStepSound(soundGrassFootstep).setLightValue(2.0F / 16.0F).setBlockName("mushroom"); + public static final BlockFlower mushroomRed = (BlockFlower)(new BlockMushroom(40, 28)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("mushroom"); + public static final Block blockGold = (new BlockOreStorage(41, 23)).setHardness(3.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setBlockName("blockGold"); + public static final Block blockSteel = (new BlockOreStorage(42, 22)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setBlockName("blockIron"); + public static final Block stairDouble = (new BlockStep(43, true)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("stoneSlab"); + public static final Block stairSingle = (new BlockStep(44, false)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("stoneSlab"); + public static final Block brick = (new Block(45, 7, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("brick"); + public static final Block tnt = (new BlockTNT(46, 8)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("tnt"); + public static final Block bookShelf = (new BlockBookshelf(47, 35)).setHardness(1.5F).setStepSound(soundWoodFootstep).setBlockName("bookshelf"); + public static final Block cobblestoneMossy = (new Block(48, 36, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("stoneMoss"); + public static final Block obsidian = (new BlockObsidian(49, 37)).setHardness(10.0F).setResistance(2000.0F).setStepSound(soundStoneFootstep).setBlockName("obsidian"); + public static final Block torchWood = (new BlockTorch(50, 80)).setHardness(0.0F).setLightValue(15.0F / 16.0F).setStepSound(soundWoodFootstep).setBlockName("torch").setRequiresSelfNotify(); + public static final BlockFire fire = (BlockFire)(new BlockFire(51, 31)).setHardness(0.0F).setLightValue(1.0F).setStepSound(soundWoodFootstep).setBlockName("fire").disableStats().setRequiresSelfNotify(); + public static final Block mobSpawner = (new BlockMobSpawner(52, 65)).setHardness(5.0F).setStepSound(soundMetalFootstep).setBlockName("mobSpawner").disableStats(); + public static final Block stairCompactPlanks = (new BlockStairs(53, planks)).setBlockName("stairsWood").setRequiresSelfNotify(); + public static final Block chest = (new BlockChest(54)).setHardness(2.5F).setStepSound(soundWoodFootstep).setBlockName("chest").setRequiresSelfNotify(); + public static final Block redstoneWire = (new BlockRedstoneWire(55, 164)).setHardness(0.0F).setStepSound(soundPowderFootstep).setBlockName("redstoneDust").disableStats().setRequiresSelfNotify(); + public static final Block oreDiamond = (new BlockOre(56, 50)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreDiamond"); + public static final Block blockDiamond = (new BlockOreStorage(57, 24)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setBlockName("blockDiamond"); + public static final Block workbench = (new BlockWorkbench(58)).setHardness(2.5F).setStepSound(soundWoodFootstep).setBlockName("workbench"); + public static final Block crops = (new BlockCrops(59, 88)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("crops").disableStats().setRequiresSelfNotify(); + public static final Block tilledField = (new BlockFarmland(60)).setHardness(0.6F).setStepSound(soundGravelFootstep).setBlockName("farmland"); + public static final Block stoneOvenIdle = (new BlockFurnace(61, false)).setHardness(3.5F).setStepSound(soundStoneFootstep).setBlockName("furnace").setRequiresSelfNotify(); + public static final Block stoneOvenActive = (new BlockFurnace(62, true)).setHardness(3.5F).setStepSound(soundStoneFootstep).setLightValue(14.0F / 16.0F).setBlockName("furnace").setRequiresSelfNotify(); + public static final Block signPost = (new BlockSign(63, TileEntitySign.class, true)).setHardness(1.0F).setStepSound(soundWoodFootstep).setBlockName("sign").disableStats().setRequiresSelfNotify(); + public static final Block doorWood = (new BlockDoor(64, Material.wood)).setHardness(3.0F).setStepSound(soundWoodFootstep).setBlockName("doorWood").disableStats().setRequiresSelfNotify(); + public static final Block ladder = (new BlockLadder(65, 83)).setHardness(0.4F).setStepSound(soundWoodFootstep).setBlockName("ladder").setRequiresSelfNotify(); + public static final Block minecartTrack = (new BlockRail(66, 128, false)).setHardness(0.7F).setStepSound(soundMetalFootstep).setBlockName("rail").setRequiresSelfNotify(); + public static final Block stairCompactCobblestone = (new BlockStairs(67, cobblestone)).setBlockName("stairsStone").setRequiresSelfNotify(); + public static final Block signWall = (new BlockSign(68, TileEntitySign.class, false)).setHardness(1.0F).setStepSound(soundWoodFootstep).setBlockName("sign").disableStats().setRequiresSelfNotify(); + public static final Block lever = (new BlockLever(69, 96)).setHardness(0.5F).setStepSound(soundWoodFootstep).setBlockName("lever").setRequiresSelfNotify(); + public static final Block pressurePlateStone = (new BlockPressurePlate(70, stone.blockIndexInTexture, EnumMobType.mobs, Material.rock)).setHardness(0.5F).setStepSound(soundStoneFootstep).setBlockName("pressurePlate").setRequiresSelfNotify(); + public static final Block doorSteel = (new BlockDoor(71, Material.iron)).setHardness(5.0F).setStepSound(soundMetalFootstep).setBlockName("doorIron").disableStats().setRequiresSelfNotify(); + public static final Block pressurePlatePlanks = (new BlockPressurePlate(72, planks.blockIndexInTexture, EnumMobType.everything, Material.wood)).setHardness(0.5F).setStepSound(soundWoodFootstep).setBlockName("pressurePlate").setRequiresSelfNotify(); + public static final Block oreRedstone = (new BlockRedstoneOre(73, 51, false)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreRedstone").setRequiresSelfNotify(); + public static final Block oreRedstoneGlowing = (new BlockRedstoneOre(74, 51, true)).setLightValue(10.0F / 16.0F).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreRedstone").setRequiresSelfNotify(); + public static final Block torchRedstoneIdle = (new BlockRedstoneTorch(75, 115, false)).setHardness(0.0F).setStepSound(soundWoodFootstep).setBlockName("notGate").setRequiresSelfNotify(); + public static final Block torchRedstoneActive = (new BlockRedstoneTorch(76, 99, true)).setHardness(0.0F).setLightValue(0.5F).setStepSound(soundWoodFootstep).setBlockName("notGate").setRequiresSelfNotify(); + public static final Block button = (new BlockButton(77, stone.blockIndexInTexture)).setHardness(0.5F).setStepSound(soundStoneFootstep).setBlockName("button").setRequiresSelfNotify(); + public static final Block snow = (new BlockSnow(78, 66)).setHardness(0.1F).setStepSound(soundClothFootstep).setBlockName("snow"); + public static final Block ice = (new BlockIce(79, 67)).setHardness(0.5F).setLightOpacity(3).setStepSound(soundGlassFootstep).setBlockName("ice"); + public static final Block blockSnow = (new BlockSnowBlock(80, 66)).setHardness(0.2F).setStepSound(soundClothFootstep).setBlockName("snow"); + public static final Block cactus = (new BlockCactus(81, 70)).setHardness(0.4F).setStepSound(soundClothFootstep).setBlockName("cactus"); + public static final Block blockClay = (new BlockClay(82, 72)).setHardness(0.6F).setStepSound(soundGravelFootstep).setBlockName("clay"); + public static final Block reed = (new BlockReed(83, 73)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("reeds").disableStats(); + public static final Block jukebox = (new BlockJukeBox(84, 74)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("jukebox").setRequiresSelfNotify(); + public static final Block fence = (new BlockFence(85, 4)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep).setBlockName("fence").setRequiresSelfNotify(); + public static final Block pumpkin = (new BlockPumpkin(86, 102, false)).setHardness(1.0F).setStepSound(soundWoodFootstep).setBlockName("pumpkin").setRequiresSelfNotify(); + public static final Block bloodStone = (new BlockNetherrack(87, 103)).setHardness(0.4F).setStepSound(soundStoneFootstep).setBlockName("hellrock"); + public static final Block slowSand = (new BlockSoulSand(88, 104)).setHardness(0.5F).setStepSound(soundSandFootstep).setBlockName("hellsand"); + public static final Block glowStone = (new BlockGlowStone(89, 105, Material.rock)).setHardness(0.3F).setStepSound(soundGlassFootstep).setLightValue(1.0F).setBlockName("lightgem"); + public static final BlockPortal portal = (BlockPortal)(new BlockPortal(90, 14)).setHardness(-1.0F).setStepSound(soundGlassFootstep).setLightValue(12.0F / 16.0F).setBlockName("portal"); + public static final Block pumpkinLantern = (new BlockPumpkin(91, 102, true)).setHardness(1.0F).setStepSound(soundWoodFootstep).setLightValue(1.0F).setBlockName("litpumpkin").setRequiresSelfNotify(); + public static final Block cake = (new BlockCake(92, 121)).setHardness(0.5F).setStepSound(soundClothFootstep).setBlockName("cake").disableStats().setRequiresSelfNotify(); + public static final Block redstoneRepeaterIdle = (new BlockRedstoneRepeater(93, false)).setHardness(0.0F).setStepSound(soundWoodFootstep).setBlockName("diode").disableStats().setRequiresSelfNotify(); + public static final Block redstoneRepeaterActive = (new BlockRedstoneRepeater(94, true)).setHardness(0.0F).setLightValue(10.0F / 16.0F).setStepSound(soundWoodFootstep).setBlockName("diode").disableStats().setRequiresSelfNotify(); + public static final Block lockedChest = (new BlockLockedChest(95)).setHardness(0.0F).setLightValue(1.0F).setStepSound(soundWoodFootstep).setBlockName("lockedchest").setTickOnLoad(true).setRequiresSelfNotify(); + public static final Block trapdoor = (new BlockTrapDoor(96, Material.wood)).setHardness(3.0F).setStepSound(soundWoodFootstep).setBlockName("trapdoor").disableStats().setRequiresSelfNotify(); + public int blockIndexInTexture; + public final int blockID; + protected float blockHardness; + protected float blockResistance; + protected boolean blockConstructorCalled; + protected boolean enableStats; + public double minX; + public double minY; + public double minZ; + public double maxX; + public double maxY; + public double maxZ; + public StepSound stepSound; + public float blockParticleGravity; + public final Material blockMaterial; + public float slipperiness; + private String blockName; + + protected Block(int var1, Material var2) { + this.blockConstructorCalled = true; + this.enableStats = true; + this.stepSound = soundPowderFootstep; + this.blockParticleGravity = 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); + opaqueCubeLookup[var1] = this.isOpaqueCube(); + lightOpacity[var1] = this.isOpaqueCube() ? 255 : 0; + canBlockGrass[var1] = !var2.getCanBlockGrass(); + isBlockContainer[var1] = false; + } + } + + protected Block setRequiresSelfNotify() { + requiresSelfNotify[this.blockID] = true; + return this; + } + + protected void setFireBurnRates() { + } + + 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; + } + + public boolean isACube() { + return true; + } + + protected Block setHardness(float var1) { + this.blockHardness = var1; + if(this.blockResistance < var1 * 5.0F) { + this.blockResistance = var1 * 5.0F; + } + + return this; + } + + protected Block setBlockUnbreakable() { + this.setHardness(-1.0F); + return this; + } + + public float getHardness() { + return this.blockHardness; + } + + protected Block setTickOnLoad(boolean var1) { + tickOnLoad[this.blockID] = var1; + return this; + } + + 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 shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var1.getBlockMaterial(var2, var3, var4).isSolid(); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return this.getBlockTextureFromSide(var1); + } + + 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 isOpaqueCube() { + return true; + } + + public boolean canCollideCheck(int var1, boolean var2) { + return this.isCollidable(); + } + + public boolean isCollidable() { + return true; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + } + + public int tickRate() { + return 10; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idDropped(int var1, Random var2) { + return this.blockID; + } + + public float blockStrength(EntityPlayer var1) { + return this.blockHardness < 0.0F ? 0.0F : (!var1.canHarvestBlock(this) ? 1.0F / this.blockHardness / 100.0F : var1.getCurrentPlayerStrVsBlock(this) / this.blockHardness / 30.0F); + } + + public final 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.singleplayerWorld) { + 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) { + this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(var9, 1, this.damageDropped(var5))); + } + } + } + + } + } + + protected void dropBlockAsItem_do(World var1, int var2, int var3, int var4, ItemStack var5) { + if(!var1.singleplayerWorld) { + float var6 = 0.7F; + double var7 = (double)(var1.rand.nextFloat() * var6) + (double)(1.0F - var6) * 0.5D; + double var9 = (double)(var1.rand.nextFloat() * var6) + (double)(1.0F - var6) * 0.5D; + double var11 = (double)(var1.rand.nextFloat() * var6) + (double)(1.0F - var6) * 0.5D; + EntityItem var13 = new EntityItem(var1, (double)var2 + var7, (double)var3 + var9, (double)var4 + var11, var5); + var13.delayBeforeCanPickup = 10; + var1.entityJoinedWorld(var13); + } + } + + protected int damageDropped(int var1) { + return 0; + } + + public float getExplosionResistance(Entity var1) { + return this.blockResistance / 5.0F; + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, 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 canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + return this.canPlaceBlockAt(var1, var2, var3, var4); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + return var5 == 0 || blocksList[var5].blockMaterial.func_27090_g(); + } + + 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 harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + var2.addStat(StatList.mineBlockStatArray[this.blockID], 1); + this.dropBlockAsItem(var1, var3, var4, var5, var6); + } + + 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) { + } + + public Block setBlockName(String var1) { + this.blockName = "tile." + var1; + return this; + } + + public String getNameLocalizedForStats() { + return StatCollector.translateToLocal(this.getBlockName() + ".name"); + } + + public String getBlockName() { + return this.blockName; + } + + public void playBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + } + + public boolean getEnableStats() { + return this.enableStats; + } + + protected Block disableStats() { + this.enableStats = false; + return this; + } + + public int getMobilityFlag() { + return this.blockMaterial.getMaterialMobility(); + } + + static { + Item.itemsList[cloth.blockID] = (new ItemCloth(cloth.blockID - 256)).setItemName("cloth"); + Item.itemsList[wood.blockID] = (new ItemLog(wood.blockID - 256)).setItemName("log"); + Item.itemsList[stairSingle.blockID] = (new ItemSlab(stairSingle.blockID - 256)).setItemName("stoneSlab"); + Item.itemsList[sapling.blockID] = (new ItemSapling(sapling.blockID - 256)).setItemName("sapling"); + Item.itemsList[leaves.blockID] = (new ItemLeaves(leaves.blockID - 256)).setItemName("leaves"); + Item.itemsList[pistonBase.blockID] = new ItemPiston(pistonBase.blockID - 256); + Item.itemsList[pistonStickyBase.blockID] = new ItemPiston(pistonStickyBase.blockID - 256); + + for(int var0 = 0; var0 < 256; ++var0) { + if(blocksList[var0] != null && Item.itemsList[var0] == null) { + Item.itemsList[var0] = new ItemBlock(var0 - 256); + blocksList[var0].setFireBurnRates(); + } + } + + canBlockGrass[0] = true; + StatList.func_25088_a(); + } +} diff --git a/src/net/minecraft/src/BlockBed.java b/src/net/minecraft/src/BlockBed.java new file mode 100644 index 0000000..769cf9b --- /dev/null +++ b/src/net/minecraft/src/BlockBed.java @@ -0,0 +1,190 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.Random; + +public class BlockBed extends Block { + public static final int[][] field_22023_a = new int[][]{{0, 1}, {-1, 0}, {0, -1}, {1, 0}}; + + public BlockBed(int var1) { + super(var1, 134, Material.cloth); + this.setBounds(); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + if(var1.singleplayerWorld) { + return true; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(!func_22020_d(var6)) { + int var7 = func_22019_c(var6); + var2 += field_22023_a[var7][0]; + var4 += field_22023_a[var7][1]; + if(var1.getBlockId(var2, var3, var4) != this.blockID) { + return true; + } + + var6 = var1.getBlockMetadata(var2, var3, var4); + } + + if(!var1.worldProvider.func_28108_d()) { + double var16 = (double)var2 + 0.5D; + double var17 = (double)var3 + 0.5D; + double var11 = (double)var4 + 0.5D; + var1.setBlockWithNotify(var2, var3, var4, 0); + int var13 = func_22019_c(var6); + var2 += field_22023_a[var13][0]; + var4 += field_22023_a[var13][1]; + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + var16 = (var16 + (double)var2 + 0.5D) / 2.0D; + var17 = (var17 + (double)var3 + 0.5D) / 2.0D; + var11 = (var11 + (double)var4 + 0.5D) / 2.0D; + } + + var1.newExplosion((Entity)null, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), 5.0F, true); + return true; + } else { + if(func_22018_f(var6)) { + EntityPlayer var14 = null; + Iterator var8 = var1.playerEntities.iterator(); + + while(var8.hasNext()) { + EntityPlayer var9 = (EntityPlayer)var8.next(); + if(var9.func_22057_E()) { + ChunkCoordinates var10 = var9.playerLocation; + if(var10.posX == var2 && var10.posY == var3 && var10.posZ == var4) { + var14 = var9; + } + } + } + + if(var14 != null) { + var5.func_22061_a("tile.bed.occupied"); + return true; + } + + func_22022_a(var1, var2, var3, var4, false); + } + + EnumStatus var15 = var5.goToSleep(var2, var3, var4); + if(var15 == EnumStatus.OK) { + func_22022_a(var1, var2, var3, var4, true); + return true; + } else { + if(var15 == EnumStatus.NOT_POSSIBLE_NOW) { + var5.func_22061_a("tile.bed.noSleep"); + } + + return true; + } + } + } + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + if(var1 == 0) { + return Block.planks.blockIndexInTexture; + } else { + int var3 = func_22019_c(var2); + int var4 = ModelBed.field_22155_c[var3][var1]; + return func_22020_d(var2) ? (var4 == 2 ? this.blockIndexInTexture + 2 + 16 : (var4 != 5 && var4 != 4 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture + 1 + 16)) : (var4 == 3 ? this.blockIndexInTexture - 1 + 16 : (var4 != 5 && var4 != 4 ? this.blockIndexInTexture : this.blockIndexInTexture + 16)); + } + } + + public boolean isACube() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.setBounds(); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = func_22019_c(var6); + if(func_22020_d(var6)) { + if(var1.getBlockId(var2 - field_22023_a[var7][0], var3, var4 - field_22023_a[var7][1]) != this.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } else if(var1.getBlockId(var2 + field_22023_a[var7][0], var3, var4 + field_22023_a[var7][1]) != this.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + if(!var1.singleplayerWorld) { + this.dropBlockAsItem(var1, var2, var3, var4, var6); + } + } + + } + + public int idDropped(int var1, Random var2) { + return func_22020_d(var1) ? 0 : Item.bed.shiftedIndex; + } + + private void setBounds() { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 9.0F / 16.0F, 1.0F); + } + + public static int func_22019_c(int var0) { + return var0 & 3; + } + + public static boolean func_22020_d(int var0) { + return (var0 & 8) != 0; + } + + public static boolean func_22018_f(int var0) { + return (var0 & 4) != 0; + } + + public static void func_22022_a(World var0, int var1, int var2, int var3, boolean var4) { + int var5 = var0.getBlockMetadata(var1, var2, var3); + if(var4) { + var5 |= 4; + } else { + var5 &= -5; + } + + var0.setBlockMetadataWithNotify(var1, var2, var3, var5); + } + + public static ChunkCoordinates func_22021_g(World var0, int var1, int var2, int var3, int var4) { + int var5 = var0.getBlockMetadata(var1, var2, var3); + int var6 = func_22019_c(var5); + + for(int var7 = 0; var7 <= 1; ++var7) { + int var8 = var1 - field_22023_a[var6][0] * var7 - 1; + int var9 = var3 - field_22023_a[var6][1] * var7 - 1; + int var10 = var8 + 2; + int var11 = var9 + 2; + + for(int var12 = var8; var12 <= var10; ++var12) { + for(int var13 = var9; var13 <= var11; ++var13) { + if(var0.isBlockNormalCube(var12, var2 - 1, var13) && var0.isAirBlock(var12, var2, var13) && var0.isAirBlock(var12, var2 + 1, var13)) { + if(var4 <= 0) { + return new ChunkCoordinates(var12, var2, var13); + } + + --var4; + } + } + } + } + + return null; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { + if(!func_22020_d(var5)) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6); + } + + } + + public int getMobilityFlag() { + return 1; + } +} diff --git a/src/net/minecraft/src/BlockBookshelf.java b/src/net/minecraft/src/BlockBookshelf.java new file mode 100644 index 0000000..e91f8a9 --- /dev/null +++ b/src/net/minecraft/src/BlockBookshelf.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockBookshelf extends Block { + public BlockBookshelf(int var1, int var2) { + super(var1, var2, Material.wood); + } + + public int getBlockTextureFromSide(int var1) { + return var1 <= 1 ? 4 : this.blockIndexInTexture; + } + + public int quantityDropped(Random var1) { + return 0; + } +} diff --git a/src/net/minecraft/src/BlockBreakable.java b/src/net/minecraft/src/BlockBreakable.java new file mode 100644 index 0000000..f1b966b --- /dev/null +++ b/src/net/minecraft/src/BlockBreakable.java @@ -0,0 +1,14 @@ +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 isOpaqueCube() { + return false; + } +} diff --git a/src/net/minecraft/src/BlockButton.java b/src/net/minecraft/src/BlockButton.java new file mode 100644 index 0000000..e1c0d04 --- /dev/null +++ b/src/net/minecraft/src/BlockButton.java @@ -0,0 +1,215 @@ +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 isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + return var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : (var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4))); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : var1.isBlockNormalCube(var2, var3, var4 + 1))); + } + + public 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.isBlockNormalCube(var2, var3, var4 + 1)) { + var6 = 4; + } else if(var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var6 = 3; + } else if(var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var6 = 2; + } else if(var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var6 = 1; + } else { + var6 = this.getOrientation(var1, var2, var3, var4); + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + var7); + } + + private int getOrientation(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2 - 1, var3, var4) ? 1 : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? 2 : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? 3 : (var1.isBlockNormalCube(var2, var3, var4 + 1) ? 4 : 1))); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(this.func_322_g(var1, var2, var3, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4) & 7; + boolean var7 = false; + if(!var1.isBlockNormalCube(var2 - 1, var3, var4) && var6 == 1) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2 + 1, var3, var4) && var6 == 2) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 - 1) && var6 == 3) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 + 1) && var6 == 4) { + var7 = true; + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + 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) { + 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.markBlocksDirty(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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate()); + 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.singleplayerWorld) { + 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.markBlocksDirty(var2, var3, var4, var2, var3, var4); + } + } + } +} diff --git a/src/net/minecraft/src/BlockCactus.java b/src/net/minecraft/src/BlockCactus.java new file mode 100644 index 0000000..c706954 --- /dev/null +++ b/src/net/minecraft/src/BlockCactus.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockCactus extends Block { + protected BlockCactus(int var1, int var2) { + super(var1, var2, Material.cactus); + this.setTickOnLoad(true); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.isAirBlock(var2, var3 + 1, var4)) { + int var6; + for(var6 = 1; var1.getBlockId(var2, var3 - var6, var4) == this.blockID; ++var6) { + } + + if(var6 < 3) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 == 15) { + var1.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 isACube() { + return false; + } + + public boolean isOpaqueCube() { + 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).isSolid()) { + return false; + } else if(var1.getBlockMaterial(var2 + 1, var3, var4).isSolid()) { + return false; + } else if(var1.getBlockMaterial(var2, var3, var4 - 1).isSolid()) { + return false; + } else if(var1.getBlockMaterial(var2, var3, var4 + 1).isSolid()) { + return false; + } else { + int var5 = var1.getBlockId(var2, var3 - 1, var4); + return var5 == Block.cactus.blockID || var5 == Block.sand.blockID; + } + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + var5.attackEntityFrom((Entity)null, 1); + } +} diff --git a/src/net/minecraft/src/BlockCake.java b/src/net/minecraft/src/BlockCake.java new file mode 100644 index 0000000..ffa680c --- /dev/null +++ b/src/net/minecraft/src/BlockCake.java @@ -0,0 +1,89 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockCake extends Block { + protected BlockCake(int var1, int var2) { + super(var1, var2, Material.cakeMaterial); + this.setTickOnLoad(true); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 1.0F / 16.0F; + float var7 = (float)(1 + var5 * 2) / 16.0F; + float var8 = 0.5F; + this.setBlockBounds(var7, 0.0F, var6, 1.0F - var6, var8, 1.0F - var6); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 1.0F / 16.0F; + float var7 = (float)(1 + var5 * 2) / 16.0F; + float var8 = 0.5F; + return AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var7), (double)var3, (double)((float)var4 + var6), (double)((float)(var2 + 1) - var6), (double)((float)var3 + var8 - var6), (double)((float)(var4 + 1) - var6)); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return var1 == 1 ? this.blockIndexInTexture : (var1 == 0 ? this.blockIndexInTexture + 3 : (var2 > 0 && var1 == 4 ? this.blockIndexInTexture + 2 : this.blockIndexInTexture + 1)); + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture : (var1 == 0 ? this.blockIndexInTexture + 3 : this.blockIndexInTexture + 1); + } + + public boolean isACube() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + this.eatCakeSlice(var1, var2, var3, var4, var5); + return true; + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + this.eatCakeSlice(var1, var2, var3, var4, var5); + } + + private void eatCakeSlice(World var1, int var2, int var3, int var4, EntityPlayer var5) { + if(var5.health < 20) { + var5.heal(3); + int var6 = var1.getBlockMetadata(var2, var3, var4) + 1; + if(var6 >= 6) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + var1.markBlockAsNeedsUpdate(var2, var3, var4); + } + } + + } + + 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) { + return var1.getBlockMaterial(var2, var3 - 1, var4).isSolid(); + } + + public int quantityDropped(Random var1) { + return 0; + } + + public int idDropped(int var1, Random var2) { + return 0; + } +} diff --git a/src/net/minecraft/src/BlockChest.java b/src/net/minecraft/src/BlockChest.java new file mode 100644 index 0000000..2518134 --- /dev/null +++ b/src/net/minecraft/src/BlockChest.java @@ -0,0 +1,113 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockChest extends BlockContainer { + private Random random = new Random(); + + protected BlockChest(int var1) { + super(var1, Material.wood); + this.blockIndexInTexture = 26; + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture - 1 : (var1 == 0 ? this.blockIndexInTexture - 1 : (var1 == 3 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture)); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + int var5 = 0; + if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID) { + ++var5; + } + + if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID) { + ++var5; + } + + if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID) { + ++var5; + } + + if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID) { + ++var5; + } + + return var5 > 1 ? false : (this.isThereANeighborChest(var1, var2 - 1, var3, var4) ? false : (this.isThereANeighborChest(var1, var2 + 1, var3, var4) ? false : (this.isThereANeighborChest(var1, var2, var3, var4 - 1) ? false : !this.isThereANeighborChest(var1, var2, var3, var4 + 1)))); + } + + private boolean isThereANeighborChest(World var1, int var2, int var3, int var4) { + return var1.getBlockId(var2, var3, var4) != this.blockID ? false : (var1.getBlockId(var2 - 1, var3, var4) == this.blockID ? true : (var1.getBlockId(var2 + 1, var3, var4) == this.blockID ? true : (var1.getBlockId(var2, var3, var4 - 1) == this.blockID ? true : var1.getBlockId(var2, var3, var4 + 1) == this.blockID))); + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + TileEntityChest var5 = (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4); + + for(int var6 = 0; var6 < var5.getSizeInventory(); ++var6) { + ItemStack var7 = var5.getStackInSlot(var6); + if(var7 != null) { + float var8 = this.random.nextFloat() * 0.8F + 0.1F; + float var9 = this.random.nextFloat() * 0.8F + 0.1F; + float var10 = this.random.nextFloat() * 0.8F + 0.1F; + + while(var7.stackSize > 0) { + int var11 = this.random.nextInt(21) + 10; + if(var11 > var7.stackSize) { + var11 = var7.stackSize; + } + + var7.stackSize -= var11; + EntityItem var12 = new EntityItem(var1, (double)((float)var2 + var8), (double)((float)var3 + var9), (double)((float)var4 + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage())); + float var13 = 0.05F; + var12.motionX = (double)((float)this.random.nextGaussian() * var13); + var12.motionY = (double)((float)this.random.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)this.random.nextGaussian() * var13); + var1.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.getBlockTileEntity(var2, var3, var4); + if(var1.isBlockNormalCube(var2, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID && var1.isBlockNormalCube(var2 - 1, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID && var1.isBlockNormalCube(var2 + 1, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID && var1.isBlockNormalCube(var2, var3 + 1, var4 - 1)) { + return true; + } else if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID && var1.isBlockNormalCube(var2, var3 + 1, var4 + 1)) { + return true; + } else { + if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlockTileEntity(var2 - 1, var3, var4), (IInventory)var6); + } + + if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlockTileEntity(var2 + 1, var3, var4)); + } + + if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4 - 1), (IInventory)var6); + } + + if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4 + 1)); + } + + if(var1.singleplayerWorld) { + return true; + } else { + var5.displayGUIChest((IInventory)var6); + return true; + } + } + } + + protected TileEntity getBlockEntity() { + return new TileEntityChest(); + } +} diff --git a/src/net/minecraft/src/BlockClay.java b/src/net/minecraft/src/BlockClay.java new file mode 100644 index 0000000..89b79b7 --- /dev/null +++ b/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.shiftedIndex; + } + + public int quantityDropped(Random var1) { + return 4; + } +} diff --git a/src/net/minecraft/src/BlockCloth.java b/src/net/minecraft/src/BlockCloth.java new file mode 100644 index 0000000..f2cbcb8 --- /dev/null +++ b/src/net/minecraft/src/BlockCloth.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public class BlockCloth extends Block { + public BlockCloth() { + super(35, 64, Material.cloth); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + if(var2 == 0) { + return this.blockIndexInTexture; + } else { + var2 = ~(var2 & 15); + return 113 + ((var2 & 8) >> 3) + (var2 & 7) * 16; + } + } + + protected int damageDropped(int var1) { + return var1; + } + + public static int func_21033_c(int var0) { + return ~var0 & 15; + } + + public static int func_21034_d(int var0) { + return ~var0 & 15; + } +} diff --git a/src/net/minecraft/src/BlockContainer.java b/src/net/minecraft/src/BlockContainer.java new file mode 100644 index 0000000..5138b13 --- /dev/null +++ b/src/net/minecraft/src/BlockContainer.java @@ -0,0 +1,25 @@ +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); + isBlockContainer[var1] = true; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + var1.setBlockTileEntity(var2, var3, var4, this.getBlockEntity()); + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + super.onBlockRemoval(var1, var2, var3, var4); + var1.removeBlockTileEntity(var2, var3, var4); + } + + protected abstract TileEntity getBlockEntity(); +} diff --git a/src/net/minecraft/src/BlockCrops.java b/src/net/minecraft/src/BlockCrops.java new file mode 100644 index 0000000..c460ff4 --- /dev/null +++ b/src/net/minecraft/src/BlockCrops.java @@ -0,0 +1,110 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockCrops extends BlockFlower { + protected BlockCrops(int var1, int var2) { + super(var1, var2); + this.blockIndexInTexture = var2; + this.setTickOnLoad(true); + float var3 = 0.5F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 0.25F, 0.5F + var3); + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return var1 == Block.tilledField.blockID; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + super.updateTick(var1, var2, var3, var4, var5); + if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 < 7) { + float var7 = this.getGrowthRate(var1, var2, var3, var4); + if(var5.nextInt((int)(100.0F / var7)) == 0) { + ++var6; + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } + } + } + + } + + public void fertilize(World var1, int var2, int var3, int var4) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 7); + } + + 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 int getBlockTextureFromSideAndMetadata(int var1, int var2) { + if(var2 < 0) { + var2 = 7; + } + + return this.blockIndexInTexture + var2; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6); + if(!var1.singleplayerWorld) { + for(int var7 = 0; var7 < 3; ++var7) { + if(var1.rand.nextInt(15) <= var5) { + float var8 = 0.7F; + float var9 = var1.rand.nextFloat() * var8 + (1.0F - var8) * 0.5F; + float var10 = var1.rand.nextFloat() * var8 + (1.0F - var8) * 0.5F; + float var11 = var1.rand.nextFloat() * var8 + (1.0F - var8) * 0.5F; + EntityItem var12 = new EntityItem(var1, (double)((float)var2 + var9), (double)((float)var3 + var10), (double)((float)var4 + var11), new ItemStack(Item.seeds)); + var12.delayBeforeCanPickup = 10; + var1.entityJoinedWorld(var12); + } + } + + } + } + + public int idDropped(int var1, Random var2) { + return var1 == 7 ? Item.wheat.shiftedIndex : -1; + } + + public int quantityDropped(Random var1) { + return 1; + } +} diff --git a/src/net/minecraft/src/BlockDeadBush.java b/src/net/minecraft/src/BlockDeadBush.java new file mode 100644 index 0000000..f2868c8 --- /dev/null +++ b/src/net/minecraft/src/BlockDeadBush.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockDeadBush extends BlockFlower { + protected BlockDeadBush(int var1, int var2) { + super(var1, var2); + float var3 = 0.4F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 0.8F, 0.5F + var3); + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return var1 == Block.sand.blockID; + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return this.blockIndexInTexture; + } + + public int idDropped(int var1, Random var2) { + return -1; + } +} diff --git a/src/net/minecraft/src/BlockDetectorRail.java b/src/net/minecraft/src/BlockDetectorRail.java new file mode 100644 index 0000000..22570de --- /dev/null +++ b/src/net/minecraft/src/BlockDetectorRail.java @@ -0,0 +1,74 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockDetectorRail extends BlockRail { + public BlockDetectorRail(int var1, int var2) { + super(var1, var2, true); + this.setTickOnLoad(true); + } + + public int tickRate() { + return 20; + } + + public boolean canProvidePower() { + return true; + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(!var1.singleplayerWorld) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) == 0) { + this.func_27035_f(var1, var2, var3, var4, var6); + } + } + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.singleplayerWorld) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + this.func_27035_f(var1, var2, var3, var4, var6); + } + } + } + + 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) { + return (var1.getBlockMetadata(var2, var3, var4) & 8) == 0 ? false : var5 == 1; + } + + private void func_27035_f(World var1, int var2, int var3, int var4, int var5) { + boolean var6 = (var5 & 8) != 0; + boolean var7 = false; + float var8 = 2.0F / 16.0F; + List var9 = var1.getEntitiesWithinAABB(EntityMinecart.class, AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var8), (double)var3, (double)((float)var4 + var8), (double)((float)(var2 + 1) - var8), (double)var3 + 0.25D, (double)((float)(var4 + 1) - var8))); + if(var9.size() > 0) { + var7 = true; + } + + if(var7 && !var6) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var5 | 8); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.markBlocksDirty(var2, var3, var4, var2, var3, var4); + } + + if(!var7 && var6) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var5 & 7); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.markBlocksDirty(var2, var3, var4, var2, var3, var4); + } + + if(var7) { + var1.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate()); + } + + } +} diff --git a/src/net/minecraft/src/BlockDirt.java b/src/net/minecraft/src/BlockDirt.java new file mode 100644 index 0000000..d3b8a7a --- /dev/null +++ b/src/net/minecraft/src/BlockDirt.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class BlockDirt extends Block { + protected BlockDirt(int var1, int var2) { + super(var1, var2, Material.ground); + } +} diff --git a/src/net/minecraft/src/BlockDispenser.java b/src/net/minecraft/src/BlockDispenser.java new file mode 100644 index 0000000..d6fab64 --- /dev/null +++ b/src/net/minecraft/src/BlockDispenser.java @@ -0,0 +1,193 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockDispenser extends BlockContainer { + private Random field_28032_a = new Random(); + + protected BlockDispenser(int var1) { + super(var1, Material.rock); + this.blockIndexInTexture = 45; + } + + public int tickRate() { + return 4; + } + + public int idDropped(int var1, Random var2) { + return Block.dispenser.blockID; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + this.setDispenserDefaultDirection(var1, var2, var3, var4); + } + + private void setDispenserDefaultDirection(World var1, int var2, int var3, int var4) { + if(!var1.singleplayerWorld) { + int var5 = var1.getBlockId(var2, var3, var4 - 1); + int var6 = var1.getBlockId(var2, var3, var4 + 1); + int var7 = var1.getBlockId(var2 - 1, var3, var4); + int var8 = var1.getBlockId(var2 + 1, var3, var4); + byte var9 = 3; + if(Block.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var6]) { + var9 = 3; + } + + if(Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var5]) { + var9 = 2; + } + + if(Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var8]) { + var9 = 5; + } + + if(Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var7]) { + var9 = 4; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var9); + } + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture + 17 : (var1 == 0 ? this.blockIndexInTexture + 17 : (var1 == 3 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture)); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + if(var1.singleplayerWorld) { + return true; + } else { + TileEntityDispenser var6 = (TileEntityDispenser)var1.getBlockTileEntity(var2, var3, var4); + var5.displayGUIDispenser(var6); + return true; + } + } + + private void dispenseItem(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + byte var9 = 0; + byte var10 = 0; + if(var6 == 3) { + var10 = 1; + } else if(var6 == 2) { + var10 = -1; + } else if(var6 == 5) { + var9 = 1; + } else { + var9 = -1; + } + + TileEntityDispenser var11 = (TileEntityDispenser)var1.getBlockTileEntity(var2, var3, var4); + ItemStack var12 = var11.getRandomStackFromInventory(); + double var13 = (double)var2 + (double)var9 * 0.6D + 0.5D; + double var15 = (double)var3 + 0.5D; + double var17 = (double)var4 + (double)var10 * 0.6D + 0.5D; + if(var12 == null) { + var1.func_28097_e(1001, var2, var3, var4, 0); + } else { + if(var12.itemID == Item.arrow.shiftedIndex) { + EntityArrow var19 = new EntityArrow(var1, var13, var15, var17); + var19.setArrowHeading((double)var9, (double)0.1F, (double)var10, 1.1F, 6.0F); + var19.field_28012_a = true; + var1.entityJoinedWorld(var19); + var1.func_28097_e(1002, var2, var3, var4, 0); + } else if(var12.itemID == Item.egg.shiftedIndex) { + EntityEgg var22 = new EntityEgg(var1, var13, var15, var17); + var22.func_20078_a((double)var9, (double)0.1F, (double)var10, 1.1F, 6.0F); + var1.entityJoinedWorld(var22); + var1.func_28097_e(1002, var2, var3, var4, 0); + } else if(var12.itemID == Item.snowball.shiftedIndex) { + EntitySnowball var23 = new EntitySnowball(var1, var13, var15, var17); + var23.func_6141_a((double)var9, (double)0.1F, (double)var10, 1.1F, 6.0F); + var1.entityJoinedWorld(var23); + var1.func_28097_e(1002, var2, var3, var4, 0); + } else { + EntityItem var24 = new EntityItem(var1, var13, var15 - 0.3D, var17, var12); + double var20 = var5.nextDouble() * 0.1D + 0.2D; + var24.motionX = (double)var9 * var20; + var24.motionY = (double)0.2F; + var24.motionZ = (double)var10 * var20; + var24.motionX += var5.nextGaussian() * (double)0.0075F * 6.0D; + var24.motionY += var5.nextGaussian() * (double)0.0075F * 6.0D; + var24.motionZ += var5.nextGaussian() * (double)0.0075F * 6.0D; + var1.entityJoinedWorld(var24); + var1.func_28097_e(1000, var2, var3, var4, 0); + } + + var1.func_28097_e(2000, var2, var3, var4, var9 + 1 + (var10 + 1) * 3); + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(var5 > 0 && Block.blocksList[var5].canProvidePower()) { + boolean var6 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4) || var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4); + if(var6) { + var1.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate()); + } + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.isBlockIndirectlyGettingPowered(var2, var3, var4) || var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4)) { + this.dispenseItem(var1, var2, var3, var4, var5); + } + + } + + protected TileEntity getBlockEntity() { + return new TileEntityDispenser(); + } + + 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); + } + + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + TileEntityDispenser var5 = (TileEntityDispenser)var1.getBlockTileEntity(var2, var3, var4); + + for(int var6 = 0; var6 < var5.getSizeInventory(); ++var6) { + ItemStack var7 = var5.getStackInSlot(var6); + if(var7 != null) { + float var8 = this.field_28032_a.nextFloat() * 0.8F + 0.1F; + float var9 = this.field_28032_a.nextFloat() * 0.8F + 0.1F; + float var10 = this.field_28032_a.nextFloat() * 0.8F + 0.1F; + + while(var7.stackSize > 0) { + int var11 = this.field_28032_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.getItemDamage())); + float var13 = 0.05F; + var12.motionX = (double)((float)this.field_28032_a.nextGaussian() * var13); + var12.motionY = (double)((float)this.field_28032_a.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)this.field_28032_a.nextGaussian() * var13); + var1.entityJoinedWorld(var12); + } + } + } + + super.onBlockRemoval(var1, var2, var3, var4); + } +} diff --git a/src/net/minecraft/src/BlockDoor.java b/src/net/minecraft/src/BlockDoor.java new file mode 100644 index 0000000..e211f47 --- /dev/null +++ b/src/net/minecraft/src/BlockDoor.java @@ -0,0 +1,186 @@ +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 int getBlockTextureFromSideAndMetadata(int var1, int var2) { + if(var1 != 0 && var1 != 1) { + int var3 = this.func_271_d(var2); + if((var3 == 0 || var3 == 2) ^ var1 <= 3) { + return this.blockIndexInTexture; + } else { + int var4 = var3 / 2 + (var1 & 1 ^ var3); + var4 += (var2 & 4) / 4; + int var5 = this.blockIndexInTexture - (var2 & 8) * 2; + if((var4 & 1) != 0) { + var5 = -var5; + } + + return var5; + } + } else { + return this.blockIndexInTexture; + } + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + 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.markBlocksDirty(var2, var3 - 1, var4, var2, var3, var4); + var1.func_28101_a(var5, 1003, var2, var3, var4, 0); + 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.markBlocksDirty(var2, var3 - 1, var4, var2, var3, var4); + var1.func_28101_a((EntityPlayer)null, 1003, var2, var3, var4, 0); + } + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + 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.isBlockNormalCube(var2, var3 - 1, var4)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + var7 = true; + if(var1.getBlockId(var2, var3 + 1, var4) == this.blockID) { + var1.setBlockWithNotify(var2, var3 + 1, var4, 0); + } + } + + if(var7) { + if(!var1.singleplayerWorld) { + 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.shiftedIndex : Item.doorWood.shiftedIndex); + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.collisionRayTrace(var1, var2, var3, var4, var5, var6); + } + + public int 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.isBlockNormalCube(var2, var3 - 1, var4) && super.canPlaceBlockAt(var1, var2, var3, var4) && super.canPlaceBlockAt(var1, var2, var3 + 1, var4); + } + + public static boolean func_27036_e(int var0) { + return (var0 & 4) != 0; + } + + public int getMobilityFlag() { + return 1; + } +} diff --git a/src/net/minecraft/src/BlockFarmland.java b/src/net/minecraft/src/BlockFarmland.java new file mode 100644 index 0000000..04e8d34 --- /dev/null +++ b/src/net/minecraft/src/BlockFarmland.java @@ -0,0 +1,93 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFarmland extends Block { + protected BlockFarmland(int var1) { + super(var1, Material.ground); + this.blockIndexInTexture = 87; + this.setTickOnLoad(true); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 15.0F / 16.0F, 1.0F); + this.setLightOpacity(255); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return AxisAlignedBB.getBoundingBoxFromPool((double)(var2 + 0), (double)(var3 + 0), (double)(var4 + 0), (double)(var2 + 1), (double)(var3 + 1), (double)(var4 + 1)); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return var1 == 1 && var2 > 0 ? this.blockIndexInTexture - 1 : (var1 == 1 ? this.blockIndexInTexture : 2); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var5.nextInt(5) == 0) { + if(!this.isWaterNearby(var1, var2, var3, var4) && !var1.canLightningStrikeAt(var2, var3 + 1, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 > 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 - 1); + } else if(!this.isCropsNearby(var1, var2, var3, var4)) { + var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID); + } + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, 7); + } + } + + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + if(var1.rand.nextInt(4) == 0) { + var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID); + } + + } + + private boolean isCropsNearby(World var1, int var2, int var3, int var4) { + byte var5 = 0; + + for(int var6 = var2 - var5; var6 <= var2 + var5; ++var6) { + for(int var7 = var4 - var5; var7 <= var4 + var5; ++var7) { + if(var1.getBlockId(var6, var3 + 1, var7) == Block.crops.blockID) { + return true; + } + } + } + + return false; + } + + private boolean isWaterNearby(World var1, int var2, int var3, int var4) { + for(int var5 = var2 - 4; var5 <= var2 + 4; ++var5) { + for(int var6 = var3; var6 <= var3 + 1; ++var6) { + for(int var7 = var4 - 4; var7 <= var4 + 4; ++var7) { + if(var1.getBlockMaterial(var5, var6, var7) == Material.water) { + return true; + } + } + } + } + + return false; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + Material var6 = var1.getBlockMaterial(var2, var3 + 1, var4); + if(var6.isSolid()) { + var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID); + } + + } + + public int idDropped(int var1, Random var2) { + return Block.dirt.idDropped(0, var2); + } +} diff --git a/src/net/minecraft/src/BlockFence.java b/src/net/minecraft/src/BlockFence.java new file mode 100644 index 0000000..ef1882a --- /dev/null +++ b/src/net/minecraft/src/BlockFence.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public class BlockFence extends Block { + public BlockFence(int var1, int var2) { + super(var1, var2, Material.wood); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.getBlockId(var2, var3 - 1, var4) == this.blockID ? true : (!var1.getBlockMaterial(var2, var3 - 1, var4).isSolid() ? false : super.canPlaceBlockAt(var1, var2, var3, var4)); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return AxisAlignedBB.getBoundingBoxFromPool((double)var2, (double)var3, (double)var4, (double)(var2 + 1), (double)((float)var3 + 1.5F), (double)(var4 + 1)); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } +} diff --git a/src/net/minecraft/src/BlockFire.java b/src/net/minecraft/src/BlockFire.java new file mode 100644 index 0000000..92fa07d --- /dev/null +++ b/src/net/minecraft/src/BlockFire.java @@ -0,0 +1,184 @@ +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.setTickOnLoad(true); + } + + public void setFireBurnRates() { + this.setBurnRate(Block.planks.blockID, 5, 20); + this.setBurnRate(Block.fence.blockID, 5, 20); + this.setBurnRate(Block.stairCompactPlanks.blockID, 5, 20); + this.setBurnRate(Block.wood.blockID, 5, 5); + this.setBurnRate(Block.leaves.blockID, 30, 60); + this.setBurnRate(Block.bookShelf.blockID, 30, 20); + this.setBurnRate(Block.tnt.blockID, 15, 100); + this.setBurnRate(Block.tallGrass.blockID, 60, 100); + this.setBurnRate(Block.cloth.blockID, 30, 60); + } + + private void setBurnRate(int var1, int var2, int var3) { + this.chanceToEncourageFire[var1] = var2; + this.abilityToCatchFire[var1] = var3; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public int tickRate() { + return 40; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + boolean var6 = var1.getBlockId(var2, var3 - 1, var4) == Block.bloodStone.blockID; + if(!this.canPlaceBlockAt(var1, var2, var3, var4)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + if(var6 || !var1.func_27068_v() || !var1.canLightningStrikeAt(var2, var3, var4) && !var1.canLightningStrikeAt(var2 - 1, var3, var4) && !var1.canLightningStrikeAt(var2 + 1, var3, var4) && !var1.canLightningStrikeAt(var2, var3, var4 - 1) && !var1.canLightningStrikeAt(var2, var3, var4 + 1)) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 < 15) { + var1.setBlockMetadata(var2, var3, var4, var7 + var5.nextInt(3) / 2); + } + + var1.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate()); + if(!var6 && !this.func_268_g(var1, var2, var3, var4)) { + if(!var1.isBlockNormalCube(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 { + this.tryToCatchBlockOnFire(var1, var2 + 1, var3, var4, 300, var5, var7); + this.tryToCatchBlockOnFire(var1, var2 - 1, var3, var4, 300, var5, var7); + this.tryToCatchBlockOnFire(var1, var2, var3 - 1, var4, 250, var5, var7); + this.tryToCatchBlockOnFire(var1, var2, var3 + 1, var4, 250, var5, var7); + this.tryToCatchBlockOnFire(var1, var2, var3, var4 - 1, 300, var5, var7); + this.tryToCatchBlockOnFire(var1, var2, var3, var4 + 1, 300, var5, var7); + + 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) { + int var13 = (var12 + 40) / (var7 + 30); + if(var13 > 0 && var5.nextInt(var11) <= var13 && (!var1.func_27068_v() || !var1.canLightningStrikeAt(var8, var10, var9)) && !var1.canLightningStrikeAt(var8 - 1, var10, var4) && !var1.canLightningStrikeAt(var8 + 1, var10, var9) && !var1.canLightningStrikeAt(var8, var10, var9 - 1) && !var1.canLightningStrikeAt(var8, var10, var9 + 1)) { + int var14 = var7 + var5.nextInt(5) / 4; + if(var14 > 15) { + var14 = 15; + } + + var1.setBlockAndMetadataWithNotify(var8, var10, var9, this.blockID, var14); + } + } + } + } + } + } + + } + } else { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + private void tryToCatchBlockOnFire(World var1, int var2, int var3, int var4, int var5, Random var6, int var7) { + int var8 = this.abilityToCatchFire[var1.getBlockId(var2, var3, var4)]; + if(var6.nextInt(var5) < var8) { + boolean var9 = var1.getBlockId(var2, var3, var4) == Block.tnt.blockID; + if(var6.nextInt(var7 + 10) < 5 && !var1.canLightningStrikeAt(var2, var3, var4)) { + int var10 = var7 + var6.nextInt(5) / 4; + if(var10 > 15) { + var10 = 15; + } + + var1.setBlockAndMetadataWithNotify(var2, var3, var4, this.blockID, var10); + } else { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + if(var9) { + Block.tnt.onBlockDestroyedByPlayer(var1, var2, var3, var4, 1); + } + } + + } + + 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.isAirBlock(var2, var3, var4)) { + return 0; + } else { + int var6 = this.getChanceToEncourageFire(var1, var2 + 1, var3, var4, var5); + var6 = this.getChanceToEncourageFire(var1, var2 - 1, var3, var4, var6); + var6 = this.getChanceToEncourageFire(var1, var2, var3 - 1, var4, var6); + var6 = this.getChanceToEncourageFire(var1, var2, var3 + 1, var4, var6); + var6 = this.getChanceToEncourageFire(var1, var2, var3, var4 - 1, var6); + var6 = this.getChanceToEncourageFire(var1, var2, var3, var4 + 1, var6); + return var6; + } + } + + public boolean isCollidable() { + return false; + } + + public boolean canBlockCatchFire(IBlockAccess var1, int var2, int var3, int var4) { + return this.chanceToEncourageFire[var1.getBlockId(var2, var3, var4)] > 0; + } + + public int getChanceToEncourageFire(World var1, int var2, int var3, int var4, int var5) { + int var6 = this.chanceToEncourageFire[var1.getBlockId(var2, var3, var4)]; + return var6 > var5 ? var6 : var5; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(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.isBlockNormalCube(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.isBlockNormalCube(var2, var3 - 1, var4) && !this.func_268_g(var1, var2, var3, var4)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + var1.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate()); + } + } + } +} diff --git a/src/net/minecraft/src/BlockFlower.java b/src/net/minecraft/src/BlockFlower.java new file mode 100644 index 0000000..a1c2f07 --- /dev/null +++ b/src/net/minecraft/src/BlockFlower.java @@ -0,0 +1,54 @@ +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 super.canPlaceBlockAt(var1, var2, var3, var4) && this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4)); + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return var1 == Block.grass.blockID || var1 == Block.dirt.blockID || var1 == Block.tilledField.blockID; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + this.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.getBlockLightValueNoChecks(var2, var3, var4) >= 8 || var1.canBlockSeeTheSky(var2, var3, var4)) && this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4)); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } +} diff --git a/src/net/minecraft/src/BlockFlowing.java b/src/net/minecraft/src/BlockFlowing.java new file mode 100644 index 0000000..6cfa119 --- /dev/null +++ b/src/net/minecraft/src/BlockFlowing.java @@ -0,0 +1,263 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFlowing extends BlockFluid { + 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_30004_i(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + var1.setBlockAndMetadata(var2, var3, var4, this.blockID + 1, var5); + var1.markBlocksDirty(var2, var3, var4, var2, var3, var4); + var1.markBlockNeedsUpdate(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.worldProvider.isHellWorld) { + 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.getBlockMaterial(var2, var3 - 1, var4).isSolid()) { + 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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate()); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + } + } else if(var8) { + this.func_30004_i(var1, var2, var3, var4); + } + } else { + this.func_30004_i(var1, var2, var3, var4); + } + + if(this.func_312_l(var1, var2, var3 - 1, var4)) { + if(var6 >= 8) { + var1.setBlockAndMetadataWithNotify(var2, var3 - 1, var4, this.blockID, var6); + } else { + var1.setBlockAndMetadataWithNotify(var2, var3 - 1, var4, this.blockID, var6 + 8); + } + } else if(var6 >= 0 && (var6 == 0 || this.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.setBlockAndMetadataWithNotify(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.getIsSolid(); + } + } 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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate()); + } + + } +} diff --git a/src/net/minecraft/src/BlockFluid.java b/src/net/minecraft/src/BlockFluid.java new file mode 100644 index 0000000..55f49da --- /dev/null +++ b/src/net/minecraft/src/BlockFluid.java @@ -0,0 +1,225 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class BlockFluid extends Block { + protected BlockFluid(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 isACube() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean canCollideCheck(int var1, boolean var2) { + return var2 && var1 == 0; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + Material var6 = var1.getBlockMaterial(var2, var3, var4); + return var6 == this.blockMaterial ? false : (var6 == Material.ice ? false : (var5 == 1 ? true : super.shouldSideBeRendered(var1, var2, var3, var4, var5))); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public int 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).getIsSolid()) { + 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.shouldSideBeRendered(var1, var2, var3, var4 - 1, 2)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2, var3, var4 + 1, 3)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2 - 1, var3, var4, 4)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2 + 1, var3, var4, 5)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2, var3 + 1, var4 - 1, 2)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2, var3 + 1, var4 + 1, 3)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2 - 1, var3 + 1, var4, 4)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2 + 1, var3 + 1, var4, 5)) { + var13 = true; + } + + if(var13) { + var5 = var5.normalize().addVector(0.0D, -6.0D, 0.0D); + } + } + + var5 = var5.normalize(); + return var5; + } + + public void velocityToAddToEntity(World var1, int var2, int var3, int var4, Entity var5, Vec3D var6) { + Vec3D var7 = this.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.checkForHarden(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + this.checkForHarden(var1, var2, var3, var4); + } + + private void checkForHarden(World var1, int var2, int var3, int var4) { + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + if(this.blockMaterial == Material.lava) { + boolean var5 = false; + if(var5 || var1.getBlockMaterial(var2, var3, var4 - 1) == Material.water) { + var5 = true; + } + + if(var5 || var1.getBlockMaterial(var2, var3, var4 + 1) == Material.water) { + var5 = true; + } + + if(var5 || var1.getBlockMaterial(var2 - 1, var3, var4) == Material.water) { + var5 = true; + } + + if(var5 || var1.getBlockMaterial(var2 + 1, var3, var4) == Material.water) { + var5 = true; + } + + if(var5 || var1.getBlockMaterial(var2, var3 + 1, var4) == Material.water) { + var5 = true; + } + + if(var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 == 0) { + var1.setBlockWithNotify(var2, var3, var4, Block.obsidian.blockID); + } else if(var6 <= 4) { + var1.setBlockWithNotify(var2, var3, var4, Block.cobblestone.blockID); + } + + this.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/src/net/minecraft/src/BlockFurnace.java b/src/net/minecraft/src/BlockFurnace.java new file mode 100644 index 0000000..8952264 --- /dev/null +++ b/src/net/minecraft/src/BlockFurnace.java @@ -0,0 +1,137 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFurnace extends BlockContainer { + private Random field_28033_a = new Random(); + private final boolean isActive; + private static boolean field_28034_c = false; + + protected BlockFurnace(int var1, boolean var2) { + super(var1, Material.rock); + this.isActive = 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.setDefaultDirection(var1, var2, var3, var4); + } + + private void setDefaultDirection(World var1, int var2, int var3, int var4) { + if(!var1.singleplayerWorld) { + int var5 = var1.getBlockId(var2, var3, var4 - 1); + int var6 = var1.getBlockId(var2, var3, var4 + 1); + int var7 = var1.getBlockId(var2 - 1, var3, var4); + int var8 = var1.getBlockId(var2 + 1, var3, var4); + byte var9 = 3; + if(Block.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var6]) { + var9 = 3; + } + + if(Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var5]) { + var9 = 2; + } + + if(Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var8]) { + var9 = 5; + } + + if(Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var7]) { + var9 = 4; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var9); + } + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture + 17 : (var1 == 0 ? this.blockIndexInTexture + 17 : (var1 == 3 ? this.blockIndexInTexture - 1 : this.blockIndexInTexture)); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + if(var1.singleplayerWorld) { + return true; + } else { + TileEntityFurnace var6 = (TileEntityFurnace)var1.getBlockTileEntity(var2, var3, var4); + var5.displayGUIFurnace(var6); + return true; + } + } + + public static void updateFurnaceBlockState(boolean var0, World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + TileEntity var6 = var1.getBlockTileEntity(var2, var3, var4); + field_28034_c = true; + if(var0) { + var1.setBlockWithNotify(var2, var3, var4, Block.stoneOvenActive.blockID); + } else { + var1.setBlockWithNotify(var2, var3, var4, Block.stoneOvenIdle.blockID); + } + + field_28034_c = false; + var1.setBlockMetadataWithNotify(var2, var3, var4, var5); + var6.validate(); + var1.setBlockTileEntity(var2, var3, var4, var6); + } + + protected TileEntity getBlockEntity() { + 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); + } + + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + if(!field_28034_c) { + TileEntityFurnace var5 = (TileEntityFurnace)var1.getBlockTileEntity(var2, var3, var4); + + for(int var6 = 0; var6 < var5.getSizeInventory(); ++var6) { + ItemStack var7 = var5.getStackInSlot(var6); + if(var7 != null) { + float var8 = this.field_28033_a.nextFloat() * 0.8F + 0.1F; + float var9 = this.field_28033_a.nextFloat() * 0.8F + 0.1F; + float var10 = this.field_28033_a.nextFloat() * 0.8F + 0.1F; + + while(var7.stackSize > 0) { + int var11 = this.field_28033_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.getItemDamage())); + float var13 = 0.05F; + var12.motionX = (double)((float)this.field_28033_a.nextGaussian() * var13); + var12.motionY = (double)((float)this.field_28033_a.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)this.field_28033_a.nextGaussian() * var13); + var1.entityJoinedWorld(var12); + } + } + } + } + + super.onBlockRemoval(var1, var2, var3, var4); + } +} diff --git a/src/net/minecraft/src/BlockGlass.java b/src/net/minecraft/src/BlockGlass.java new file mode 100644 index 0000000..c2672d1 --- /dev/null +++ b/src/net/minecraft/src/BlockGlass.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGlass extends BlockBreakable { + public BlockGlass(int var1, int var2, Material var3, boolean var4) { + super(var1, var2, var3, var4); + } + + public int quantityDropped(Random var1) { + return 0; + } +} diff --git a/src/net/minecraft/src/BlockGlowStone.java b/src/net/minecraft/src/BlockGlowStone.java new file mode 100644 index 0000000..aea4346 --- /dev/null +++ b/src/net/minecraft/src/BlockGlowStone.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGlowStone extends Block { + public BlockGlowStone(int var1, int var2, Material var3) { + super(var1, var2, var3); + } + + public int quantityDropped(Random var1) { + return 2 + var1.nextInt(3); + } + + public int idDropped(int var1, Random var2) { + return Item.lightStoneDust.shiftedIndex; + } +} diff --git a/src/net/minecraft/src/BlockGrass.java b/src/net/minecraft/src/BlockGrass.java new file mode 100644 index 0000000..bc5b431 --- /dev/null +++ b/src/net/minecraft/src/BlockGrass.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGrass extends Block { + protected BlockGrass(int var1) { + super(var1, Material.grass); + this.blockIndexInTexture = 3; + this.setTickOnLoad(true); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.singleplayerWorld) { + if(var1.getBlockLightValue(var2, var3 + 1, var4) < 4 && Block.lightOpacity[var1.getBlockId(var2, var3 + 1, var4)] > 2) { + 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; + int var9 = var1.getBlockId(var6, var7 + 1, var8); + if(var1.getBlockId(var6, var7, var8) == Block.dirt.blockID && var1.getBlockLightValue(var6, var7 + 1, var8) >= 4 && Block.lightOpacity[var9] <= 2) { + var1.setBlockWithNotify(var6, var7, var8, Block.grass.blockID); + } + } + + } + } + + public int idDropped(int var1, Random var2) { + return Block.dirt.idDropped(0, var2); + } +} diff --git a/src/net/minecraft/src/BlockGravel.java b/src/net/minecraft/src/BlockGravel.java new file mode 100644 index 0000000..c0fd641 --- /dev/null +++ b/src/net/minecraft/src/BlockGravel.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGravel extends BlockSand { + public BlockGravel(int var1, int var2) { + super(var1, var2); + } + + public int idDropped(int var1, Random var2) { + return var2.nextInt(10) == 0 ? Item.flint.shiftedIndex : this.blockID; + } +} diff --git a/src/net/minecraft/src/BlockIce.java b/src/net/minecraft/src/BlockIce.java new file mode 100644 index 0000000..700b726 --- /dev/null +++ b/src/net/minecraft/src/BlockIce.java @@ -0,0 +1,36 @@ +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 void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + super.harvestBlock(var1, var2, var3, var4, var5, var6); + Material var7 = var1.getBlockMaterial(var3, var4 - 1, var5); + if(var7.getIsSolid() || var7.getIsLiquid()) { + var1.setBlockWithNotify(var3, var4, var5, Block.waterMoving.blockID); + } + + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getSavedLightValue(EnumSkyBlock.Block, var2, var3, var4) > 11 - Block.lightOpacity[this.blockID]) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, Block.waterStill.blockID); + } + + } + + public int getMobilityFlag() { + return 0; + } +} diff --git a/src/net/minecraft/src/BlockJukeBox.java b/src/net/minecraft/src/BlockJukeBox.java new file mode 100644 index 0000000..a6fef0b --- /dev/null +++ b/src/net/minecraft/src/BlockJukeBox.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +public class BlockJukeBox extends BlockContainer { + 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) { + if(var1.getBlockMetadata(var2, var3, var4) == 0) { + return false; + } else { + this.func_28035_b_(var1, var2, var3, var4); + return true; + } + } + + public void ejectRecord(World var1, int var2, int var3, int var4, int var5) { + if(!var1.singleplayerWorld) { + TileEntityRecordPlayer var6 = (TileEntityRecordPlayer)var1.getBlockTileEntity(var2, var3, var4); + var6.field_28009_a = var5; + var6.onInventoryChanged(); + var1.setBlockMetadataWithNotify(var2, var3, var4, 1); + } + } + + public void func_28035_b_(World var1, int var2, int var3, int var4) { + if(!var1.singleplayerWorld) { + TileEntityRecordPlayer var5 = (TileEntityRecordPlayer)var1.getBlockTileEntity(var2, var3, var4); + int var6 = var5.field_28009_a; + if(var6 != 0) { + var1.func_28097_e(1005, var2, var3, var4, 0); + var1.playRecord((String)null, var2, var3, var4); + var5.field_28009_a = 0; + var5.onInventoryChanged(); + var1.setBlockMetadataWithNotify(var2, var3, var4, 0); + float var8 = 0.7F; + double var9 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.5D; + double var11 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.2D + 0.6D; + double var13 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.5D; + EntityItem var15 = new EntityItem(var1, (double)var2 + var9, (double)var3 + var11, (double)var4 + var13, new ItemStack(var6, 1, 0)); + var15.delayBeforeCanPickup = 10; + var1.entityJoinedWorld(var15); + } + } + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + this.func_28035_b_(var1, var2, var3, var4); + super.onBlockRemoval(var1, var2, var3, var4); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { + if(!var1.singleplayerWorld) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6); + } + } + + protected TileEntity getBlockEntity() { + return new TileEntityRecordPlayer(); + } +} diff --git a/src/net/minecraft/src/BlockLadder.java b/src/net/minecraft/src/BlockLadder.java new file mode 100644 index 0000000..1e88ba1 --- /dev/null +++ b/src/net/minecraft/src/BlockLadder.java @@ -0,0 +1,95 @@ +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 isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : var1.isBlockNormalCube(var2, var3, var4 + 1))); + } + + public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 == 0 || var5 == 2) && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var6 = 2; + } + + if((var6 == 0 || var5 == 3) && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var6 = 3; + } + + if((var6 == 0 || var5 == 4) && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var6 = 4; + } + + if((var6 == 0 || var5 == 5) && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var6 = 5; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = false; + if(var6 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var7 = true; + } + + if(var6 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var7 = true; + } + + if(var6 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var7 = true; + } + + if(var6 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var7 = true; + } + + if(!var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var6); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + } + + public int quantityDropped(Random var1) { + return 1; + } +} diff --git a/src/net/minecraft/src/BlockLeaves.java b/src/net/minecraft/src/BlockLeaves.java new file mode 100644 index 0000000..2a918d1 --- /dev/null +++ b/src/net/minecraft/src/BlockLeaves.java @@ -0,0 +1,166 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLeaves extends BlockLeavesBase { + private int baseIndexInPNG; + int[] adjacentTreeBlocks; + + protected BlockLeaves(int var1, int var2) { + super(var1, var2, Material.leaves, false); + this.baseIndexInPNG = var2; + this.setTickOnLoad(true); + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + byte var5 = 1; + int var6 = var5 + 1; + if(var1.checkChunksExist(var2 - var6, var3 - var6, var4 - var6, var2 + var6, var3 + var6, var4 + var6)) { + for(int var7 = -var5; var7 <= var5; ++var7) { + for(int var8 = -var5; var8 <= var5; ++var8) { + for(int var9 = -var5; var9 <= var5; ++var9) { + int var10 = var1.getBlockId(var2 + var7, var3 + var8, var4 + var9); + if(var10 == Block.leaves.blockID) { + int var11 = var1.getBlockMetadata(var2 + var7, var3 + var8, var4 + var9); + var1.setBlockMetadata(var2 + var7, var3 + var8, var4 + var9, var11 | 8); + } + } + } + } + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.singleplayerWorld) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + byte var7 = 4; + int var8 = var7 + 1; + byte var9 = 32; + int var10 = var9 * var9; + int var11 = var9 / 2; + if(this.adjacentTreeBlocks == null) { + this.adjacentTreeBlocks = new int[var9 * var9 * var9]; + } + + int var12; + if(var1.checkChunksExist(var2 - var8, var3 - var8, var4 - var8, var2 + var8, var3 + var8, var4 + var8)) { + var12 = -var7; + + label111: + while(true) { + int var13; + int var14; + int var15; + if(var12 > var7) { + var12 = 1; + + while(true) { + if(var12 > 4) { + break label111; + } + + for(var13 = -var7; var13 <= var7; ++var13) { + for(var14 = -var7; var14 <= var7; ++var14) { + for(var15 = -var7; var15 <= var7; ++var15) { + if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11] == var12 - 1) { + if(this.adjacentTreeBlocks[(var13 + var11 - 1) * var10 + (var14 + var11) * var9 + var15 + var11] == -2) { + this.adjacentTreeBlocks[(var13 + var11 - 1) * var10 + (var14 + var11) * var9 + var15 + var11] = var12; + } + + if(this.adjacentTreeBlocks[(var13 + var11 + 1) * var10 + (var14 + var11) * var9 + var15 + var11] == -2) { + this.adjacentTreeBlocks[(var13 + var11 + 1) * var10 + (var14 + var11) * var9 + var15 + var11] = var12; + } + + if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 - 1) * var9 + var15 + var11] == -2) { + this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 - 1) * var9 + var15 + var11] = var12; + } + + if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 + 1) * var9 + var15 + var11] == -2) { + this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 + 1) * var9 + var15 + var11] = var12; + } + + if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + (var15 + var11 - 1)] == -2) { + this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + (var15 + var11 - 1)] = var12; + } + + if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11 + 1] == -2) { + this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11 + 1] = var12; + } + } + } + } + } + + ++var12; + } + } + + for(var13 = -var7; var13 <= var7; ++var13) { + for(var14 = -var7; var14 <= var7; ++var14) { + var15 = var1.getBlockId(var2 + var12, var3 + var13, var4 + var14); + if(var15 == Block.wood.blockID) { + this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = 0; + } else if(var15 == Block.leaves.blockID) { + this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = -2; + } else { + this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = -1; + } + } + } + + ++var12; + } + } + + var12 = this.adjacentTreeBlocks[var11 * var10 + var11 * var9 + var11]; + if(var12 >= 0) { + var1.setBlockMetadata(var2, var3, var4, var6 & -9); + } else { + this.removeLeaves(var1, var2, var3, var4); + } + } + + } + } + + private void removeLeaves(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 void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + if(!var1.singleplayerWorld && var2.getCurrentEquippedItem() != null && var2.getCurrentEquippedItem().itemID == Item.field_31022_bc.shiftedIndex) { + var2.addStat(StatList.mineBlockStatArray[this.blockID], 1); + this.dropBlockAsItem_do(var1, var3, var4, var5, new ItemStack(Block.leaves.blockID, 1, var6 & 3)); + } else { + super.harvestBlock(var1, var2, var3, var4, var5, var6); + } + + } + + protected int damageDropped(int var1) { + return var1 & 3; + } + + public boolean isOpaqueCube() { + return !this.graphicsLevel; + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return (var2 & 3) == 1 ? this.blockIndexInTexture + 80 : this.blockIndexInTexture; + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + super.onEntityWalking(var1, var2, var3, var4, var5); + } +} diff --git a/src/net/minecraft/src/BlockLeavesBase.java b/src/net/minecraft/src/BlockLeavesBase.java new file mode 100644 index 0000000..1208378 --- /dev/null +++ b/src/net/minecraft/src/BlockLeavesBase.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +public class BlockLeavesBase extends Block { + protected boolean graphicsLevel; + + protected BlockLeavesBase(int var1, int var2, Material var3, boolean var4) { + super(var1, var2, var3); + this.graphicsLevel = var4; + } + + public boolean isOpaqueCube() { + return false; + } +} diff --git a/src/net/minecraft/src/BlockLever.java b/src/net/minecraft/src/BlockLever.java new file mode 100644 index 0000000..148ff5e --- /dev/null +++ b/src/net/minecraft/src/BlockLever.java @@ -0,0 +1,194 @@ +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 isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + return var5 == 1 && var1.isBlockNormalCube(var2, var3 - 1, var4) ? true : (var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : (var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)))); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : var1.isBlockNormalCube(var2, var3 - 1, var4)))); + } + + public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = var6 & 8; + var6 &= 7; + var6 = -1; + if(var5 == 1 && var1.isBlockNormalCube(var2, var3 - 1, var4)) { + var6 = 5 + var1.rand.nextInt(2); + } + + if(var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var6 = 4; + } + + if(var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var6 = 3; + } + + if(var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var6 = 2; + } + + if(var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var6 = 1; + } + + if(var6 == -1) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + var7); + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(this.checkIfAttachedToBlock(var1, var2, var3, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4) & 7; + boolean var7 = false; + if(!var1.isBlockNormalCube(var2 - 1, var3, var4) && var6 == 1) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2 + 1, var3, var4) && var6 == 2) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 - 1) && var6 == 3) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 + 1) && var6 == 4) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3 - 1, var4) && var6 == 5) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3 - 1, var4) && var6 == 6) { + var7 = true; + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + } + + private boolean checkIfAttachedToBlock(World var1, int var2, int var3, int var4) { + if(!this.canPlaceBlockAt(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + 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.singleplayerWorld) { + 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.markBlocksDirty(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 == 6 && var5 == 1 ? true : (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/src/net/minecraft/src/BlockLockedChest.java b/src/net/minecraft/src/BlockLockedChest.java new file mode 100644 index 0000000..aa9aa16 --- /dev/null +++ b/src/net/minecraft/src/BlockLockedChest.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLockedChest extends Block { + protected BlockLockedChest(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) { + return true; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } +} diff --git a/src/net/minecraft/src/BlockLog.java b/src/net/minecraft/src/BlockLog.java new file mode 100644 index 0000000..09c65f7 --- /dev/null +++ b/src/net/minecraft/src/BlockLog.java @@ -0,0 +1,51 @@ +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 void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + super.harvestBlock(var1, var2, var3, var4, var5, var6); + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + byte var5 = 4; + int var6 = var5 + 1; + if(var1.checkChunksExist(var2 - var6, var3 - var6, var4 - var6, var2 + var6, var3 + var6, var4 + var6)) { + for(int var7 = -var5; var7 <= var5; ++var7) { + for(int var8 = -var5; var8 <= var5; ++var8) { + for(int var9 = -var5; var9 <= var5; ++var9) { + int var10 = var1.getBlockId(var2 + var7, var3 + var8, var4 + var9); + if(var10 == Block.leaves.blockID) { + int var11 = var1.getBlockMetadata(var2 + var7, var3 + var8, var4 + var9); + if((var11 & 8) == 0) { + var1.setBlockMetadata(var2 + var7, var3 + var8, var4 + var9, var11 | 8); + } + } + } + } + } + } + + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return var1 == 1 ? 21 : (var1 == 0 ? 21 : (var2 == 1 ? 116 : (var2 == 2 ? 117 : 20))); + } + + protected int damageDropped(int var1) { + return var1; + } +} diff --git a/src/net/minecraft/src/BlockMobSpawner.java b/src/net/minecraft/src/BlockMobSpawner.java new file mode 100644 index 0000000..74f9f02 --- /dev/null +++ b/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 getBlockEntity() { + return new TileEntityMobSpawner(); + } + + public int idDropped(int var1, Random var2) { + return 0; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public boolean isOpaqueCube() { + return false; + } +} diff --git a/src/net/minecraft/src/BlockMushroom.java b/src/net/minecraft/src/BlockMushroom.java new file mode 100644 index 0000000..ee19e71 --- /dev/null +++ b/src/net/minecraft/src/BlockMushroom.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.util.Random; + +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); + this.setTickOnLoad(true); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var5.nextInt(100) == 0) { + int var6 = var2 + var5.nextInt(3) - 1; + int var7 = var3 + var5.nextInt(2) - var5.nextInt(2); + int var8 = var4 + var5.nextInt(3) - 1; + if(var1.isAirBlock(var6, var7, var8) && this.canBlockStay(var1, var6, var7, var8)) { + int var10000 = var2 + (var5.nextInt(3) - 1); + var10000 = var4 + (var5.nextInt(3) - 1); + if(var1.isAirBlock(var6, var7, var8) && this.canBlockStay(var1, var6, var7, var8)) { + var1.setBlockWithNotify(var6, var7, var8, this.blockID); + } + } + } + + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return Block.opaqueCubeLookup[var1]; + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return var3 >= 0 && var3 < 128 ? var1.getBlockLightValueNoChecks(var2, var3, var4) < 13 && this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4)) : false; + } +} diff --git a/src/net/minecraft/src/BlockNetherrack.java b/src/net/minecraft/src/BlockNetherrack.java new file mode 100644 index 0000000..70b4ea7 --- /dev/null +++ b/src/net/minecraft/src/BlockNetherrack.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class BlockNetherrack extends Block { + public BlockNetherrack(int var1, int var2) { + super(var1, var2, Material.rock); + } +} diff --git a/src/net/minecraft/src/BlockNote.java b/src/net/minecraft/src/BlockNote.java new file mode 100644 index 0000000..c680a8c --- /dev/null +++ b/src/net/minecraft/src/BlockNote.java @@ -0,0 +1,71 @@ +package net.minecraft.src; + +public class BlockNote extends BlockContainer { + public BlockNote(int var1) { + super(var1, 74, Material.wood); + } + + public int getBlockTextureFromSide(int var1) { + return this.blockIndexInTexture; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(var5 > 0 && Block.blocksList[var5].canProvidePower()) { + boolean var6 = var1.isBlockGettingPowered(var2, var3, var4); + TileEntityNote var7 = (TileEntityNote)var1.getBlockTileEntity(var2, var3, var4); + if(var7.previousRedstoneState != var6) { + if(var6) { + var7.triggerNote(var1, var2, var3, var4); + } + + var7.previousRedstoneState = var6; + } + } + + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + if(var1.singleplayerWorld) { + return true; + } else { + TileEntityNote var6 = (TileEntityNote)var1.getBlockTileEntity(var2, var3, var4); + var6.changePitch(); + var6.triggerNote(var1, var2, var3, var4); + return true; + } + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + if(!var1.singleplayerWorld) { + TileEntityNote var6 = (TileEntityNote)var1.getBlockTileEntity(var2, var3, var4); + var6.triggerNote(var1, var2, var3, var4); + } + } + + protected TileEntity getBlockEntity() { + return new TileEntityNote(); + } + + public void playBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + float var7 = (float)Math.pow(2.0D, (double)(var6 - 12) / 12.0D); + String var8 = "harp"; + if(var5 == 1) { + var8 = "bd"; + } + + if(var5 == 2) { + var8 = "snare"; + } + + if(var5 == 3) { + var8 = "hat"; + } + + if(var5 == 4) { + var8 = "bassattack"; + } + + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "note." + var8, 3.0F, var7); + var1.spawnParticle("note", (double)var2 + 0.5D, (double)var3 + 1.2D, (double)var4 + 0.5D, (double)var6 / 24.0D, 0.0D, 0.0D); + } +} diff --git a/src/net/minecraft/src/BlockObsidian.java b/src/net/minecraft/src/BlockObsidian.java new file mode 100644 index 0000000..c75b227 --- /dev/null +++ b/src/net/minecraft/src/BlockObsidian.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockObsidian extends BlockStone { + public BlockObsidian(int var1, int var2) { + super(var1, var2); + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idDropped(int var1, Random var2) { + return Block.obsidian.blockID; + } +} diff --git a/src/net/minecraft/src/BlockOre.java b/src/net/minecraft/src/BlockOre.java new file mode 100644 index 0000000..949ac1b --- /dev/null +++ b/src/net/minecraft/src/BlockOre.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockOre extends Block { + public BlockOre(int var1, int var2) { + super(var1, var2, Material.rock); + } + + public int idDropped(int var1, Random var2) { + return this.blockID == Block.oreCoal.blockID ? Item.coal.shiftedIndex : (this.blockID == Block.oreDiamond.blockID ? Item.diamond.shiftedIndex : (this.blockID == Block.oreLapis.blockID ? Item.dyePowder.shiftedIndex : this.blockID)); + } + + public int quantityDropped(Random var1) { + return this.blockID == Block.oreLapis.blockID ? 4 + var1.nextInt(5) : 1; + } + + protected int damageDropped(int var1) { + return this.blockID == Block.oreLapis.blockID ? 4 : 0; + } +} diff --git a/src/net/minecraft/src/BlockOreStorage.java b/src/net/minecraft/src/BlockOreStorage.java new file mode 100644 index 0000000..891e520 --- /dev/null +++ b/src/net/minecraft/src/BlockOreStorage.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public class BlockOreStorage extends Block { + public BlockOreStorage(int var1, int var2) { + super(var1, Material.iron); + this.blockIndexInTexture = var2; + } + + public int getBlockTextureFromSide(int var1) { + return this.blockIndexInTexture; + } +} diff --git a/src/net/minecraft/src/BlockPistonBase.java b/src/net/minecraft/src/BlockPistonBase.java new file mode 100644 index 0000000..31fedfe --- /dev/null +++ b/src/net/minecraft/src/BlockPistonBase.java @@ -0,0 +1,317 @@ +package net.minecraft.src; + +import java.util.ArrayList; + +public class BlockPistonBase extends Block { + private boolean isSticky; + private boolean ignoreUpdates; + + public BlockPistonBase(int var1, int var2, boolean var3) { + super(var1, var2, Material.piston); + this.isSticky = var3; + this.setStepSound(soundStoneFootstep); + this.setHardness(0.5F); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + int var3 = getOrientation(var2); + return var3 > 5 ? this.blockIndexInTexture : (var1 == var3 ? (!isExtended(var2) && this.minX <= 0.0D && this.minY <= 0.0D && this.minZ <= 0.0D && this.maxX >= 1.0D && this.maxY >= 1.0D && this.maxZ >= 1.0D ? this.blockIndexInTexture : 110) : (var1 == PistonBlockTextures.field_31052_a[var3] ? 109 : 108)); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + return false; + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5) { + int var6 = determineOrientation(var1, var2, var3, var4, (EntityPlayer)var5); + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + if(!var1.singleplayerWorld) { + this.updatePistonState(var1, var2, var3, var4); + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.singleplayerWorld && !this.ignoreUpdates) { + this.updatePistonState(var1, var2, var3, var4); + } + + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(!var1.singleplayerWorld && var1.getBlockTileEntity(var2, var3, var4) == null) { + this.updatePistonState(var1, var2, var3, var4); + } + + } + + private void updatePistonState(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = getOrientation(var5); + boolean var7 = this.isPowered(var1, var2, var3, var4, var6); + if(var5 != 7) { + if(var7 && !isExtended(var5)) { + if(canExtend(var1, var2, var3, var4, var6)) { + var1.setBlockMetadata(var2, var3, var4, var6 | 8); + var1.playNoteAt(var2, var3, var4, 0, var6); + } + } else if(!var7 && isExtended(var5)) { + var1.setBlockMetadata(var2, var3, var4, var6); + var1.playNoteAt(var2, var3, var4, 1, var6); + } + + } + } + + private boolean isPowered(World var1, int var2, int var3, int var4, int var5) { + return var5 != 0 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3 - 1, var4, 0) ? true : (var5 != 1 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3 + 1, var4, 1) ? true : (var5 != 2 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 - 1, 2) ? true : (var5 != 3 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 + 1, 3) ? true : (var5 != 5 && var1.isBlockIndirectlyProvidingPowerTo(var2 + 1, var3, var4, 5) ? true : (var5 != 4 && var1.isBlockIndirectlyProvidingPowerTo(var2 - 1, var3, var4, 4) ? true : (var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4, 0) ? true : (var1.isBlockIndirectlyProvidingPowerTo(var2, var3 + 2, var4, 1) ? true : (var1.isBlockIndirectlyProvidingPowerTo(var2, var3 + 1, var4 - 1, 2) ? true : (var1.isBlockIndirectlyProvidingPowerTo(var2, var3 + 1, var4 + 1, 3) ? true : (var1.isBlockIndirectlyProvidingPowerTo(var2 - 1, var3 + 1, var4, 4) ? true : var1.isBlockIndirectlyProvidingPowerTo(var2 + 1, var3 + 1, var4, 5))))))))))); + } + + public void playBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + this.ignoreUpdates = true; + if(var5 == 0) { + if(this.tryExtend(var1, var2, var3, var4, var6)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | 8); + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "tile.piston.out", 0.5F, var1.rand.nextFloat() * 0.25F + 0.6F); + } + } else if(var5 == 1) { + TileEntity var8 = var1.getBlockTileEntity(var2 + PistonBlockTextures.field_31051_b[var6], var3 + PistonBlockTextures.field_31054_c[var6], var4 + PistonBlockTextures.field_31053_d[var6]); + if(var8 != null && var8 instanceof TileEntityPiston) { + ((TileEntityPiston)var8).clearPistonTileEntity(); + } + + var1.setBlockAndMetadata(var2, var3, var4, Block.pistonMoving.blockID, var6); + var1.setBlockTileEntity(var2, var3, var4, BlockPistonMoving.getTileEntity(this.blockID, var6, var6, false, true)); + if(this.isSticky) { + int var9 = var2 + PistonBlockTextures.field_31051_b[var6] * 2; + int var10 = var3 + PistonBlockTextures.field_31054_c[var6] * 2; + int var11 = var4 + PistonBlockTextures.field_31053_d[var6] * 2; + int var12 = var1.getBlockId(var9, var10, var11); + int var13 = var1.getBlockMetadata(var9, var10, var11); + boolean var14 = false; + if(var12 == Block.pistonMoving.blockID) { + TileEntity var15 = var1.getBlockTileEntity(var9, var10, var11); + if(var15 != null && var15 instanceof TileEntityPiston) { + TileEntityPiston var16 = (TileEntityPiston)var15; + if(var16.func_31008_d() == var6 && var16.func_31010_c()) { + var16.clearPistonTileEntity(); + var12 = var16.getStoredBlockID(); + var13 = var16.func_31005_e(); + var14 = true; + } + } + } + + if(var14 || var12 <= 0 || !canPushBlock(var12, var1, var9, var10, var11, false) || Block.blocksList[var12].getMobilityFlag() != 0 && var12 != Block.pistonBase.blockID && var12 != Block.pistonStickyBase.blockID) { + if(!var14) { + this.ignoreUpdates = false; + var1.setBlockWithNotify(var2 + PistonBlockTextures.field_31051_b[var6], var3 + PistonBlockTextures.field_31054_c[var6], var4 + PistonBlockTextures.field_31053_d[var6], 0); + this.ignoreUpdates = true; + } + } else { + this.ignoreUpdates = false; + var1.setBlockWithNotify(var9, var10, var11, 0); + this.ignoreUpdates = true; + var2 += PistonBlockTextures.field_31051_b[var6]; + var3 += PistonBlockTextures.field_31054_c[var6]; + var4 += PistonBlockTextures.field_31053_d[var6]; + var1.setBlockAndMetadata(var2, var3, var4, Block.pistonMoving.blockID, var13); + var1.setBlockTileEntity(var2, var3, var4, BlockPistonMoving.getTileEntity(var12, var13, var6, false, false)); + } + } else { + this.ignoreUpdates = false; + var1.setBlockWithNotify(var2 + PistonBlockTextures.field_31051_b[var6], var3 + PistonBlockTextures.field_31054_c[var6], var4 + PistonBlockTextures.field_31053_d[var6], 0); + this.ignoreUpdates = true; + } + + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "tile.piston.in", 0.5F, var1.rand.nextFloat() * 0.15F + 0.6F); + } + + this.ignoreUpdates = false; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + if(isExtended(var5)) { + switch(getOrientation(var5)) { + case 0: + this.setBlockBounds(0.0F, 0.25F, 0.0F, 1.0F, 1.0F, 1.0F); + break; + case 1: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 12.0F / 16.0F, 1.0F); + break; + case 2: + this.setBlockBounds(0.0F, 0.0F, 0.25F, 1.0F, 1.0F, 1.0F); + break; + case 3: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 12.0F / 16.0F); + break; + case 4: + this.setBlockBounds(0.25F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + break; + case 5: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 12.0F / 16.0F, 1.0F, 1.0F); + } + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + } + + public void getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } + + public boolean isACube() { + return false; + } + + public static int getOrientation(int var0) { + return var0 & 7; + } + + public static boolean isExtended(int var0) { + return (var0 & 8) != 0; + } + + private static int determineOrientation(World var0, int var1, int var2, int var3, EntityPlayer var4) { + if(MathHelper.abs((float)var4.posX - (float)var1) < 2.0F && MathHelper.abs((float)var4.posZ - (float)var3) < 2.0F) { + double var5 = var4.posY + 1.82D - (double)var4.yOffset; + if(var5 - (double)var2 > 2.0D) { + return 1; + } + + if((double)var2 - var5 > 0.0D) { + return 0; + } + } + + int var7 = MathHelper.floor_double((double)(var4.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + return var7 == 0 ? 2 : (var7 == 1 ? 5 : (var7 == 2 ? 3 : (var7 == 3 ? 4 : 0))); + } + + private static boolean canPushBlock(int var0, World var1, int var2, int var3, int var4, boolean var5) { + if(var0 == Block.obsidian.blockID) { + return false; + } else { + if(var0 != Block.pistonBase.blockID && var0 != Block.pistonStickyBase.blockID) { + if(Block.blocksList[var0].getHardness() == -1.0F) { + return false; + } + + if(Block.blocksList[var0].getMobilityFlag() == 2) { + return false; + } + + if(!var5 && Block.blocksList[var0].getMobilityFlag() == 1) { + return false; + } + } else if(isExtended(var1.getBlockMetadata(var2, var3, var4))) { + return false; + } + + TileEntity var6 = var1.getBlockTileEntity(var2, var3, var4); + return var6 == null; + } + } + + private static boolean canExtend(World var0, int var1, int var2, int var3, int var4) { + int var5 = var1 + PistonBlockTextures.field_31051_b[var4]; + int var6 = var2 + PistonBlockTextures.field_31054_c[var4]; + int var7 = var3 + PistonBlockTextures.field_31053_d[var4]; + int var8 = 0; + + while(true) { + if(var8 < 13) { + if(var6 <= 0 || var6 >= 127) { + return false; + } + + int var9 = var0.getBlockId(var5, var6, var7); + if(var9 != 0) { + if(!canPushBlock(var9, var0, var5, var6, var7, true)) { + return false; + } + + if(Block.blocksList[var9].getMobilityFlag() != 1) { + if(var8 == 12) { + return false; + } + + var5 += PistonBlockTextures.field_31051_b[var4]; + var6 += PistonBlockTextures.field_31054_c[var4]; + var7 += PistonBlockTextures.field_31053_d[var4]; + ++var8; + continue; + } + } + } + + return true; + } + } + + private boolean tryExtend(World var1, int var2, int var3, int var4, int var5) { + int var6 = var2 + PistonBlockTextures.field_31051_b[var5]; + int var7 = var3 + PistonBlockTextures.field_31054_c[var5]; + int var8 = var4 + PistonBlockTextures.field_31053_d[var5]; + int var9 = 0; + + while(true) { + int var10; + if(var9 < 13) { + if(var7 <= 0 || var7 >= 127) { + return false; + } + + var10 = var1.getBlockId(var6, var7, var8); + if(var10 != 0) { + if(!canPushBlock(var10, var1, var6, var7, var8, true)) { + return false; + } + + if(Block.blocksList[var10].getMobilityFlag() != 1) { + if(var9 == 12) { + return false; + } + + var6 += PistonBlockTextures.field_31051_b[var5]; + var7 += PistonBlockTextures.field_31054_c[var5]; + var8 += PistonBlockTextures.field_31053_d[var5]; + ++var9; + continue; + } + + Block.blocksList[var10].dropBlockAsItem(var1, var6, var7, var8, var1.getBlockMetadata(var6, var7, var8)); + var1.setBlockWithNotify(var6, var7, var8, 0); + } + } + + while(var6 != var2 || var7 != var3 || var8 != var4) { + var9 = var6 - PistonBlockTextures.field_31051_b[var5]; + var10 = var7 - PistonBlockTextures.field_31054_c[var5]; + int var11 = var8 - PistonBlockTextures.field_31053_d[var5]; + int var12 = var1.getBlockId(var9, var10, var11); + int var13 = var1.getBlockMetadata(var9, var10, var11); + if(var12 == this.blockID && var9 == var2 && var10 == var3 && var11 == var4) { + var1.setBlockAndMetadata(var6, var7, var8, Block.pistonMoving.blockID, var5 | (this.isSticky ? 8 : 0)); + var1.setBlockTileEntity(var6, var7, var8, BlockPistonMoving.getTileEntity(Block.pistonExtension.blockID, var5 | (this.isSticky ? 8 : 0), var5, true, false)); + } else { + var1.setBlockAndMetadata(var6, var7, var8, Block.pistonMoving.blockID, var13); + var1.setBlockTileEntity(var6, var7, var8, BlockPistonMoving.getTileEntity(var12, var13, var5, true, false)); + } + + var6 = var9; + var7 = var10; + var8 = var11; + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/BlockPistonExtension.java b/src/net/minecraft/src/BlockPistonExtension.java new file mode 100644 index 0000000..5792a09 --- /dev/null +++ b/src/net/minecraft/src/BlockPistonExtension.java @@ -0,0 +1,139 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +public class BlockPistonExtension extends Block { + private int field_31046_a = -1; + + public BlockPistonExtension(int var1, int var2) { + super(var1, var2, Material.piston); + this.setStepSound(soundStoneFootstep); + this.setHardness(0.5F); + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + super.onBlockRemoval(var1, var2, var3, var4); + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = PistonBlockTextures.field_31052_a[func_31045_b(var5)]; + var2 += PistonBlockTextures.field_31051_b[var6]; + var3 += PistonBlockTextures.field_31054_c[var6]; + var4 += PistonBlockTextures.field_31053_d[var6]; + int var7 = var1.getBlockId(var2, var3, var4); + if(var7 == Block.pistonBase.blockID || var7 == Block.pistonStickyBase.blockID) { + var5 = var1.getBlockMetadata(var2, var3, var4); + if(BlockPistonBase.isExtended(var5)) { + Block.blocksList[var7].dropBlockAsItem(var1, var2, var3, var4, var5); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + int var3 = func_31045_b(var2); + return var1 == var3 ? (this.field_31046_a >= 0 ? this.field_31046_a : ((var2 & 8) != 0 ? this.blockIndexInTexture - 1 : this.blockIndexInTexture)) : (var1 == PistonBlockTextures.field_31052_a[var3] ? 107 : 108); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return false; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + return false; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + switch(func_31045_b(var7)) { + case 0: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.25F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(6.0F / 16.0F, 0.25F, 6.0F / 16.0F, 10.0F / 16.0F, 1.0F, 10.0F / 16.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + break; + case 1: + this.setBlockBounds(0.0F, 12.0F / 16.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(6.0F / 16.0F, 0.0F, 6.0F / 16.0F, 10.0F / 16.0F, 12.0F / 16.0F, 10.0F / 16.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + break; + case 2: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.25F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.25F, 6.0F / 16.0F, 0.25F, 12.0F / 16.0F, 10.0F / 16.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + break; + case 3: + this.setBlockBounds(0.0F, 0.0F, 12.0F / 16.0F, 1.0F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.25F, 6.0F / 16.0F, 0.0F, 12.0F / 16.0F, 10.0F / 16.0F, 12.0F / 16.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + break; + case 4: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.25F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(6.0F / 16.0F, 0.25F, 0.25F, 10.0F / 16.0F, 12.0F / 16.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + break; + case 5: + this.setBlockBounds(12.0F / 16.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.0F, 6.0F / 16.0F, 0.25F, 12.0F / 16.0F, 10.0F / 16.0F, 12.0F / 16.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 setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + switch(func_31045_b(var5)) { + case 0: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.25F, 1.0F); + break; + case 1: + this.setBlockBounds(0.0F, 12.0F / 16.0F, 0.0F, 1.0F, 1.0F, 1.0F); + break; + case 2: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.25F); + break; + case 3: + this.setBlockBounds(0.0F, 0.0F, 12.0F / 16.0F, 1.0F, 1.0F, 1.0F); + break; + case 4: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.25F, 1.0F, 1.0F); + break; + case 5: + this.setBlockBounds(12.0F / 16.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = func_31045_b(var1.getBlockMetadata(var2, var3, var4)); + int var7 = var1.getBlockId(var2 - PistonBlockTextures.field_31051_b[var6], var3 - PistonBlockTextures.field_31054_c[var6], var4 - PistonBlockTextures.field_31053_d[var6]); + if(var7 != Block.pistonBase.blockID && var7 != Block.pistonStickyBase.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + Block.blocksList[var7].onNeighborBlockChange(var1, var2 - PistonBlockTextures.field_31051_b[var6], var3 - PistonBlockTextures.field_31054_c[var6], var4 - PistonBlockTextures.field_31053_d[var6], var5); + } + + } + + public static int func_31045_b(int var0) { + return var0 & 7; + } +} diff --git a/src/net/minecraft/src/BlockPistonMoving.java b/src/net/minecraft/src/BlockPistonMoving.java new file mode 100644 index 0000000..0eb02c8 --- /dev/null +++ b/src/net/minecraft/src/BlockPistonMoving.java @@ -0,0 +1,138 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockPistonMoving extends BlockContainer { + public BlockPistonMoving(int var1) { + super(var1, Material.piston); + this.setHardness(-1.0F); + } + + protected TileEntity getBlockEntity() { + return null; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + TileEntity var5 = var1.getBlockTileEntity(var2, var3, var4); + if(var5 != null && var5 instanceof TileEntityPiston) { + ((TileEntityPiston)var5).clearPistonTileEntity(); + } else { + super.onBlockRemoval(var1, var2, var3, var4); + } + + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return false; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + if(!var1.singleplayerWorld && var1.getBlockTileEntity(var2, var3, var4) == null) { + var1.setBlockWithNotify(var2, var3, var4, 0); + return true; + } else { + return false; + } + } + + public int idDropped(int var1, Random var2) { + return 0; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { + if(!var1.singleplayerWorld) { + TileEntityPiston var7 = this.getTileEntityAtLocation(var1, var2, var3, var4); + if(var7 != null) { + Block.blocksList[var7.getStoredBlockID()].dropBlockAsItem(var1, var2, var3, var4, var7.func_31005_e()); + } + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.singleplayerWorld && var1.getBlockTileEntity(var2, var3, var4) == null) { + } + + } + + public static TileEntity getTileEntity(int var0, int var1, int var2, boolean var3, boolean var4) { + return new TileEntityPiston(var0, var1, var2, var3, var4); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + TileEntityPiston var5 = this.getTileEntityAtLocation(var1, var2, var3, var4); + if(var5 == null) { + return null; + } else { + float var6 = var5.func_31007_a(0.0F); + if(var5.func_31010_c()) { + var6 = 1.0F - var6; + } + + return this.func_31032_a(var1, var2, var3, var4, var5.getStoredBlockID(), var6, var5.func_31008_d()); + } + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + TileEntityPiston var5 = this.getTileEntityAtLocation(var1, var2, var3, var4); + if(var5 != null) { + Block var6 = Block.blocksList[var5.getStoredBlockID()]; + if(var6 == null || var6 == this) { + return; + } + + var6.setBlockBoundsBasedOnState(var1, var2, var3, var4); + float var7 = var5.func_31007_a(0.0F); + if(var5.func_31010_c()) { + var7 = 1.0F - var7; + } + + int var8 = var5.func_31008_d(); + this.minX = var6.minX - (double)((float)PistonBlockTextures.field_31051_b[var8] * var7); + this.minY = var6.minY - (double)((float)PistonBlockTextures.field_31054_c[var8] * var7); + this.minZ = var6.minZ - (double)((float)PistonBlockTextures.field_31053_d[var8] * var7); + this.maxX = var6.maxX - (double)((float)PistonBlockTextures.field_31051_b[var8] * var7); + this.maxY = var6.maxY - (double)((float)PistonBlockTextures.field_31054_c[var8] * var7); + this.maxZ = var6.maxZ - (double)((float)PistonBlockTextures.field_31053_d[var8] * var7); + } + + } + + public AxisAlignedBB func_31032_a(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + if(var5 != 0 && var5 != this.blockID) { + AxisAlignedBB var8 = Block.blocksList[var5].getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + if(var8 == null) { + return null; + } else { + var8.minX -= (double)((float)PistonBlockTextures.field_31051_b[var7] * var6); + var8.maxX -= (double)((float)PistonBlockTextures.field_31051_b[var7] * var6); + var8.minY -= (double)((float)PistonBlockTextures.field_31054_c[var7] * var6); + var8.maxY -= (double)((float)PistonBlockTextures.field_31054_c[var7] * var6); + var8.minZ -= (double)((float)PistonBlockTextures.field_31053_d[var7] * var6); + var8.maxZ -= (double)((float)PistonBlockTextures.field_31053_d[var7] * var6); + return var8; + } + } else { + return null; + } + } + + private TileEntityPiston getTileEntityAtLocation(IBlockAccess var1, int var2, int var3, int var4) { + TileEntity var5 = var1.getBlockTileEntity(var2, var3, var4); + return var5 != null && var5 instanceof TileEntityPiston ? (TileEntityPiston)var5 : null; + } +} diff --git a/src/net/minecraft/src/BlockPortal.java b/src/net/minecraft/src/BlockPortal.java new file mode 100644 index 0000000..dc6c9b5 --- /dev/null +++ b/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.portal, 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 isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + public boolean tryToCreatePortal(World var1, int var2, int var3, int var4) { + byte var5 = 0; + byte var6 = 0; + if(var1.getBlockId(var2 - 1, var3, var4) == Block.obsidian.blockID || var1.getBlockId(var2 + 1, var3, var4) == Block.obsidian.blockID) { + var5 = 1; + } + + if(var1.getBlockId(var2, var3, var4 - 1) == Block.obsidian.blockID || var1.getBlockId(var2, var3, var4 + 1) == Block.obsidian.blockID) { + var6 = 1; + } + + if(var5 == var6) { + return false; + } else { + if(var1.getBlockId(var2 - var5, var3, var4 - var6) == 0) { + var2 -= var5; + var4 -= var6; + } + + int var7; + int var8; + for(var7 = -1; var7 <= 2; ++var7) { + for(var8 = -1; var8 <= 3; ++var8) { + boolean var9 = var7 == -1 || var7 == 2 || var8 == -1 || var8 == 3; + if(var7 != -1 && var7 != 2 || var8 != -1 && var8 != 3) { + int var10 = var1.getBlockId(var2 + var5 * var7, var3 + var8, var4 + var6 * var7); + if(var9) { + if(var10 != Block.obsidian.blockID) { + return false; + } + } else if(var10 != 0 && var10 != Block.fire.blockID) { + return false; + } + } + } + } + + var1.editingBlocks = 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.editingBlocks = 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 int quantityDropped(Random var1) { + return 0; + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(var5.ridingEntity == null && var5.riddenByEntity == null) { + var5.setInPortal(); + } + + } +} diff --git a/src/net/minecraft/src/BlockPressurePlate.java b/src/net/minecraft/src/BlockPressurePlate.java new file mode 100644 index 0000000..9237285 --- /dev/null +++ b/src/net/minecraft/src/BlockPressurePlate.java @@ -0,0 +1,148 @@ +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, Material var4) { + super(var1, var2, var4); + this.triggerMobType = var3; + this.setTickOnLoad(true); + float var5 = 1.0F / 16.0F; + this.setBlockBounds(var5, 0.0F, var5, 1.0F - var5, 0.03125F, 1.0F - var5); + } + + public int tickRate() { + return 20; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2, var3 - 1, var4); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + boolean var6 = false; + if(!var1.isBlockNormalCube(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.singleplayerWorld) { + if(var1.getBlockMetadata(var2, var3, var4) != 0) { + this.setStateIfMobInteractsWithPlate(var1, var2, var3, var4); + } + } + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(!var1.singleplayerWorld) { + if(var1.getBlockMetadata(var2, var3, var4) != 1) { + this.setStateIfMobInteractsWithPlate(var1, var2, var3, var4); + } + } + } + + private void setStateIfMobInteractsWithPlate(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.markBlocksDirty(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.markBlocksDirty(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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate()); + } + + } + + 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; + } + + public int getMobilityFlag() { + return 1; + } +} diff --git a/src/net/minecraft/src/BlockPumpkin.java b/src/net/minecraft/src/BlockPumpkin.java new file mode 100644 index 0000000..b65b401 --- /dev/null +++ b/src/net/minecraft/src/BlockPumpkin.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +public class BlockPumpkin extends Block { + private boolean blockType; + + protected BlockPumpkin(int var1, int var2, boolean var3) { + super(var1, Material.pumpkin); + this.blockIndexInTexture = var2; + this.setTickOnLoad(true); + this.blockType = var3; + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + if(var1 == 1) { + return this.blockIndexInTexture; + } else if(var1 == 0) { + return this.blockIndexInTexture; + } else { + int var3 = this.blockIndexInTexture + 1 + 16; + if(this.blockType) { + ++var3; + } + + return var2 == 2 && var1 == 2 ? var3 : (var2 == 3 && var1 == 5 ? var3 : (var2 == 0 && var1 == 3 ? var3 : (var2 == 1 && var1 == 4 ? var3 : this.blockIndexInTexture + 16))); + } + } + + 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.func_27090_g()) && var1.isBlockNormalCube(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) + 2.5D) & 3; + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } +} diff --git a/src/net/minecraft/src/BlockRail.java b/src/net/minecraft/src/BlockRail.java new file mode 100644 index 0000000..5da457c --- /dev/null +++ b/src/net/minecraft/src/BlockRail.java @@ -0,0 +1,246 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockRail extends Block { + private final boolean field_27034_a; + + public static final boolean func_27029_g(World var0, int var1, int var2, int var3) { + int var4 = var0.getBlockId(var1, var2, var3); + return var4 == Block.minecartTrack.blockID || var4 == Block.railPowered.blockID || var4 == Block.railDetector.blockID; + } + + public static final boolean func_27030_c(int var0) { + return var0 == Block.minecartTrack.blockID || var0 == Block.railPowered.blockID || var0 == Block.railDetector.blockID; + } + + protected BlockRail(int var1, int var2, boolean var3) { + super(var1, var2, Material.circuits); + this.field_27034_a = var3; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F); + } + + public boolean func_27028_d() { + return this.field_27034_a; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.collisionRayTrace(var1, var2, var3, var4, var5, var6); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + if(var5 >= 2 && var5 <= 5) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 10.0F / 16.0F, 1.0F); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F); + } + + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + if(this.field_27034_a) { + if(this.blockID == Block.railPowered.blockID && (var2 & 8) == 0) { + return this.blockIndexInTexture - 16; + } + } else if(var2 >= 6) { + return this.blockIndexInTexture - 16; + } + + return this.blockIndexInTexture; + } + + public boolean isACube() { + return false; + } + + public int quantityDropped(Random var1) { + return 1; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2, var3 - 1, var4); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(!var1.singleplayerWorld) { + this.func_4038_g(var1, var2, var3, var4, true); + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.singleplayerWorld) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = var6; + if(this.field_27034_a) { + var7 = var6 & 7; + } + + boolean var8 = false; + if(!var1.isBlockNormalCube(var2, var3 - 1, var4)) { + var8 = true; + } + + if(var7 == 2 && !var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var8 = true; + } + + if(var7 == 3 && !var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var8 = true; + } + + if(var7 == 4 && !var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var8 = true; + } + + if(var7 == 5 && !var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var8 = true; + } + + if(var8) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } else if(this.blockID == Block.railPowered.blockID) { + boolean var9 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4) || var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4); + var9 = var9 || this.func_27032_a(var1, var2, var3, var4, var6, true, 0) || this.func_27032_a(var1, var2, var3, var4, var6, false, 0); + boolean var10 = false; + if(var9 && (var6 & 8) == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 | 8); + var10 = true; + } else if(!var9 && (var6 & 8) != 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7); + var10 = true; + } + + if(var10) { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + if(var7 == 2 || var7 == 3 || var7 == 4 || var7 == 5) { + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + } + } + } else if(var5 > 0 && Block.blocksList[var5].canProvidePower() && !this.field_27034_a && RailLogic.getNAdjacentTracks(new RailLogic(this, var1, var2, var3, var4)) == 3) { + this.func_4038_g(var1, var2, var3, var4, false); + } + + } + } + + private void func_4038_g(World var1, int var2, int var3, int var4, boolean var5) { + if(!var1.singleplayerWorld) { + (new RailLogic(this, var1, var2, var3, var4)).func_596_a(var1.isBlockIndirectlyGettingPowered(var2, var3, var4), var5); + } + } + + private boolean func_27032_a(World var1, int var2, int var3, int var4, int var5, boolean var6, int var7) { + if(var7 >= 8) { + return false; + } else { + int var8 = var5 & 7; + boolean var9 = true; + switch(var8) { + case 0: + if(var6) { + ++var4; + } else { + --var4; + } + break; + case 1: + if(var6) { + --var2; + } else { + ++var2; + } + break; + case 2: + if(var6) { + --var2; + } else { + ++var2; + ++var3; + var9 = false; + } + + var8 = 1; + break; + case 3: + if(var6) { + --var2; + ++var3; + var9 = false; + } else { + ++var2; + } + + var8 = 1; + break; + case 4: + if(var6) { + ++var4; + } else { + --var4; + ++var3; + var9 = false; + } + + var8 = 0; + break; + case 5: + if(var6) { + ++var4; + ++var3; + var9 = false; + } else { + --var4; + } + + var8 = 0; + } + + return this.func_27031_a(var1, var2, var3, var4, var6, var7, var8) ? true : var9 && this.func_27031_a(var1, var2, var3 - 1, var4, var6, var7, var8); + } + } + + private boolean func_27031_a(World var1, int var2, int var3, int var4, boolean var5, int var6, int var7) { + int var8 = var1.getBlockId(var2, var3, var4); + if(var8 == Block.railPowered.blockID) { + int var9 = var1.getBlockMetadata(var2, var3, var4); + int var10 = var9 & 7; + if(var7 == 1 && (var10 == 0 || var10 == 4 || var10 == 5)) { + return false; + } + + if(var7 == 0 && (var10 == 1 || var10 == 2 || var10 == 3)) { + return false; + } + + if((var9 & 8) != 0) { + if(!var1.isBlockIndirectlyGettingPowered(var2, var3, var4) && !var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4)) { + return this.func_27032_a(var1, var2, var3, var4, var9, var5, var6 + 1); + } + + return true; + } + } + + return false; + } + + public int getMobilityFlag() { + return 0; + } + + static boolean func_27033_a(BlockRail var0) { + return var0.field_27034_a; + } +} diff --git a/src/net/minecraft/src/BlockRedstoneOre.java b/src/net/minecraft/src/BlockRedstoneOre.java new file mode 100644 index 0000000..c78cd8f --- /dev/null +++ b/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.shiftedIndex; + } + + 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.isBlockOpaqueCube(var2, var3 + 1, var4)) { + var11 = (double)(var3 + 1) + var6; + } + + if(var8 == 1 && !var1.isBlockOpaqueCube(var2, var3 - 1, var4)) { + var11 = (double)(var3 + 0) - var6; + } + + if(var8 == 2 && !var1.isBlockOpaqueCube(var2, var3, var4 + 1)) { + var13 = (double)(var4 + 1) + var6; + } + + if(var8 == 3 && !var1.isBlockOpaqueCube(var2, var3, var4 - 1)) { + var13 = (double)(var4 + 0) - var6; + } + + if(var8 == 4 && !var1.isBlockOpaqueCube(var2 + 1, var3, var4)) { + var9 = (double)(var2 + 1) + var6; + } + + if(var8 == 5 && !var1.isBlockOpaqueCube(var2 - 1, var3, var4)) { + var9 = (double)(var2 + 0) - var6; + } + + if(var9 < (double)var2 || var9 > (double)(var2 + 1) || var11 < 0.0D || var11 > (double)(var3 + 1) || var13 < (double)var4 || var13 > (double)(var4 + 1)) { + var1.spawnParticle("reddust", var9, var11, var13, 0.0D, 0.0D, 0.0D); + } + } + + } +} diff --git a/src/net/minecraft/src/BlockRedstoneRepeater.java b/src/net/minecraft/src/BlockRedstoneRepeater.java new file mode 100644 index 0000000..0cfd15b --- /dev/null +++ b/src/net/minecraft/src/BlockRedstoneRepeater.java @@ -0,0 +1,135 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockRedstoneRepeater extends Block { + public static final double[] field_22014_a = new double[]{-0.0625D, 1.0D / 16.0D, 0.1875D, 0.3125D}; + private static final int[] field_22013_b = new int[]{1, 2, 3, 4}; + private final boolean field_22015_c; + + protected BlockRedstoneRepeater(int var1, boolean var2) { + super(var1, 6, Material.circuits); + this.field_22015_c = var2; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F); + } + + public boolean isACube() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return !var1.isBlockNormalCube(var2, var3 - 1, var4) ? false : super.canPlaceBlockAt(var1, var2, var3, var4); + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return !var1.isBlockNormalCube(var2, var3 - 1, var4) ? false : super.canBlockStay(var1, var2, var3, var4); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = this.func_22012_g(var1, var2, var3, var4, var6); + if(this.field_22015_c && !var7) { + var1.setBlockAndMetadataWithNotify(var2, var3, var4, Block.redstoneRepeaterIdle.blockID, var6); + } else if(!this.field_22015_c) { + var1.setBlockAndMetadataWithNotify(var2, var3, var4, Block.redstoneRepeaterActive.blockID, var6); + if(!var7) { + int var8 = (var6 & 12) >> 2; + var1.scheduleUpdateTick(var2, var3, var4, Block.redstoneRepeaterActive.blockID, field_22013_b[var8] * 2); + } + } + + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return var1 == 0 ? (this.field_22015_c ? 99 : 115) : (var1 == 1 ? (this.field_22015_c ? 147 : 131) : 5); + } + + public int getBlockTextureFromSide(int var1) { + return this.getBlockTextureFromSideAndMetadata(var1, 0); + } + + public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) { + return this.isPoweringTo(var1, var2, var3, var4, var5); + } + + public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(!this.field_22015_c) { + return false; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4) & 3; + return var6 == 0 && var5 == 3 ? true : (var6 == 1 && var5 == 4 ? true : (var6 == 2 && var5 == 2 ? true : var6 == 3 && var5 == 5)); + } + } + + 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); + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = this.func_22012_g(var1, var2, var3, var4, var6); + int var8 = (var6 & 12) >> 2; + if(this.field_22015_c && !var7) { + var1.scheduleUpdateTick(var2, var3, var4, this.blockID, field_22013_b[var8] * 2); + } else if(!this.field_22015_c && var7) { + var1.scheduleUpdateTick(var2, var3, var4, this.blockID, field_22013_b[var8] * 2); + } + + } + } + + private boolean func_22012_g(World var1, int var2, int var3, int var4, int var5) { + int var6 = var5 & 3; + switch(var6) { + case 0: + return var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 + 1, 3) || var1.getBlockId(var2, var3, var4 + 1) == Block.redstoneWire.blockID && var1.getBlockMetadata(var2, var3, var4 + 1) > 0; + case 1: + return var1.isBlockIndirectlyProvidingPowerTo(var2 - 1, var3, var4, 4) || var1.getBlockId(var2 - 1, var3, var4) == Block.redstoneWire.blockID && var1.getBlockMetadata(var2 - 1, var3, var4) > 0; + case 2: + return var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 - 1, 2) || var1.getBlockId(var2, var3, var4 - 1) == Block.redstoneWire.blockID && var1.getBlockMetadata(var2, var3, var4 - 1) > 0; + case 3: + return var1.isBlockIndirectlyProvidingPowerTo(var2 + 1, var3, var4, 5) || var1.getBlockId(var2 + 1, var3, var4) == Block.redstoneWire.blockID && var1.getBlockMetadata(var2 + 1, var3, var4) > 0; + default: + return false; + } + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = (var6 & 12) >> 2; + var7 = var7 + 1 << 2 & 12; + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 | var6 & 3); + return true; + } + + public boolean canProvidePower() { + return false; + } + + 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) + 2) % 4; + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + boolean var7 = this.func_22012_g(var1, var2, var3, var4, var6); + if(var7) { + var1.scheduleUpdateTick(var2, var3, var4, this.blockID, 1); + } + + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + } + + public boolean isOpaqueCube() { + return false; + } + + public int idDropped(int var1, Random var2) { + return Item.redstoneRepeater.shiftedIndex; + } +} diff --git a/src/net/minecraft/src/BlockRedstoneTorch.java b/src/net/minecraft/src/BlockRedstoneTorch.java new file mode 100644 index 0000000..79f5ca0 --- /dev/null +++ b/src/net/minecraft/src/BlockRedstoneTorch.java @@ -0,0 +1,130 @@ +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(); + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return var1 == 1 ? Block.redstoneWire.getBlockTextureFromSideAndMetadata(var1, var2) : super.getBlockTextureFromSideAndMetadata(var1, var2); + } + + private boolean checkForBurnout(World var1, int var2, int var3, int var4, boolean var5) { + if(var5) { + torchUpdates.add(new RedstoneUpdateInfo(var2, var3, var4, var1.getWorldTime())); + } + + int var6 = 0; + + for(int var7 = 0; var7 < torchUpdates.size(); ++var7) { + RedstoneUpdateInfo var8 = (RedstoneUpdateInfo)torchUpdates.get(var7); + if(var8.x == var2 && var8.y == var3 && var8.z == 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_30003_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_30003_g(var1, var2, var3, var4); + + while(torchUpdates.size() > 0 && var1.getWorldTime() - ((RedstoneUpdateInfo)torchUpdates.get(0)).updateTime > 100L) { + torchUpdates.remove(0); + } + + if(this.torchActive) { + if(var6) { + var1.setBlockAndMetadataWithNotify(var2, var3, var4, Block.torchRedstoneIdle.blockID, var1.getBlockMetadata(var2, var3, var4)); + if(this.checkForBurnout(var1, var2, var3, var4, true)) { + var1.playSoundEffect((double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), "random.fizz", 0.5F, 2.6F + (var1.rand.nextFloat() - var1.rand.nextFloat()) * 0.8F); + + for(int 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.checkForBurnout(var1, var2, var3, var4, false)) { + var1.setBlockAndMetadataWithNotify(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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate()); + } + + 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/src/net/minecraft/src/BlockRedstoneWire.java b/src/net/minecraft/src/BlockRedstoneWire.java new file mode 100644 index 0000000..ad1b873 --- /dev/null +++ b/src/net/minecraft/src/BlockRedstoneWire.java @@ -0,0 +1,336 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Random; +import java.util.Set; + +public class BlockRedstoneWire extends Block { + private boolean wiresProvidePower = true; + private Set field_21032_b = new HashSet(); + + 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 int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return this.blockIndexInTexture; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2, var3 - 1, var4); + } + + private void updateAndPropagateCurrentStrength(World var1, int var2, int var3, int var4) { + this.func_21031_a(var1, var2, var3, var4, var2, var3, var4); + ArrayList var5 = new ArrayList(this.field_21032_b); + this.field_21032_b.clear(); + + for(int var6 = 0; var6 < var5.size(); ++var6) { + ChunkPosition var7 = (ChunkPosition)var5.get(var6); + var1.notifyBlocksOfNeighborChange(var7.x, var7.y, var7.z, this.blockID); + } + + } + + private void func_21031_a(World var1, int var2, int var3, int var4, int var5, int var6, int var7) { + int var8 = var1.getBlockMetadata(var2, var3, var4); + int var9 = 0; + this.wiresProvidePower = false; + boolean var10 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4); + this.wiresProvidePower = true; + int var11; + int var12; + int var13; + if(var10) { + var9 = 15; + } else { + for(var11 = 0; var11 < 4; ++var11) { + var12 = var2; + var13 = var4; + if(var11 == 0) { + var12 = var2 - 1; + } + + if(var11 == 1) { + ++var12; + } + + if(var11 == 2) { + var13 = var4 - 1; + } + + if(var11 == 3) { + ++var13; + } + + if(var12 != var5 || var3 != var6 || var13 != var7) { + var9 = this.getMaxCurrentStrength(var1, var12, var3, var13, var9); + } + + if(var1.isBlockNormalCube(var12, var3, var13) && !var1.isBlockNormalCube(var2, var3 + 1, var4)) { + if(var12 != var5 || var3 + 1 != var6 || var13 != var7) { + var9 = this.getMaxCurrentStrength(var1, var12, var3 + 1, var13, var9); + } + } else if(!var1.isBlockNormalCube(var12, var3, var13) && (var12 != var5 || var3 - 1 != var6 || var13 != var7)) { + var9 = this.getMaxCurrentStrength(var1, var12, var3 - 1, var13, var9); + } + } + + if(var9 > 0) { + --var9; + } else { + var9 = 0; + } + } + + if(var8 != var9) { + var1.editingBlocks = true; + var1.setBlockMetadataWithNotify(var2, var3, var4, var9); + var1.markBlocksDirty(var2, var3, var4, var2, var3, var4); + var1.editingBlocks = false; + + for(var11 = 0; var11 < 4; ++var11) { + var12 = var2; + var13 = var4; + int var14 = var3 - 1; + if(var11 == 0) { + var12 = var2 - 1; + } + + if(var11 == 1) { + ++var12; + } + + if(var11 == 2) { + var13 = var4 - 1; + } + + if(var11 == 3) { + ++var13; + } + + if(var1.isBlockNormalCube(var12, var3, var13)) { + var14 += 2; + } + + boolean var15 = false; + int var16 = this.getMaxCurrentStrength(var1, var12, var3, var13, -1); + var9 = var1.getBlockMetadata(var2, var3, var4); + if(var9 > 0) { + --var9; + } + + if(var16 >= 0 && var16 != var9) { + this.func_21031_a(var1, var12, var3, var13, var2, var3, var4); + } + + var16 = this.getMaxCurrentStrength(var1, var12, var14, var13, -1); + var9 = var1.getBlockMetadata(var2, var3, var4); + if(var9 > 0) { + --var9; + } + + if(var16 >= 0 && var16 != var9) { + this.func_21031_a(var1, var12, var14, var13, var2, var3, var4); + } + } + + if(var8 == 0 || var9 == 0) { + this.field_21032_b.add(new ChunkPosition(var2, var3, var4)); + this.field_21032_b.add(new ChunkPosition(var2 - 1, var3, var4)); + this.field_21032_b.add(new ChunkPosition(var2 + 1, var3, var4)); + this.field_21032_b.add(new ChunkPosition(var2, var3 - 1, var4)); + this.field_21032_b.add(new ChunkPosition(var2, var3 + 1, var4)); + this.field_21032_b.add(new ChunkPosition(var2, var3, var4 - 1)); + this.field_21032_b.add(new ChunkPosition(var2, var3, var4 + 1)); + } + } + + } + + private void notifyWireNeighborsOfNeighborChange(World var1, int var2, int var3, int var4) { + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + } + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + if(!var1.singleplayerWorld) { + this.updateAndPropagateCurrentStrength(var1, var2, var3, var4); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3, var4); + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3, var4); + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 - 1); + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 + 1); + if(var1.isBlockNormalCube(var2 - 1, var3, var4)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 + 1, var4); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 - 1, var4); + } + + if(var1.isBlockNormalCube(var2 + 1, var3, var4)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 + 1, var4); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 - 1, var4); + } + + if(var1.isBlockNormalCube(var2, var3, var4 - 1)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 - 1); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 - 1, var4 - 1); + } + + if(var1.isBlockNormalCube(var2, var3, var4 + 1)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 + 1); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 - 1, var4 + 1); + } + + } + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + super.onBlockRemoval(var1, var2, var3, var4); + if(!var1.singleplayerWorld) { + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + this.updateAndPropagateCurrentStrength(var1, var2, var3, var4); + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3, var4); + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3, var4); + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 - 1); + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 + 1); + if(var1.isBlockNormalCube(var2 - 1, var3, var4)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 + 1, var4); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 - 1, var4); + } + + if(var1.isBlockNormalCube(var2 + 1, var3, var4)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 + 1, var4); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 - 1, var4); + } + + if(var1.isBlockNormalCube(var2, var3, var4 - 1)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 - 1); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 - 1, var4 - 1); + } + + if(var1.isBlockNormalCube(var2, var3, var4 + 1)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 + 1); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 - 1, var4 + 1); + } + + } + } + + private int getMaxCurrentStrength(World var1, int var2, int var3, int var4, int var5) { + if(var1.getBlockId(var2, var3, var4) != this.blockID) { + return var5; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + return var6 > var5 ? var6 : var5; + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.singleplayerWorld) { + 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.updateAndPropagateCurrentStrength(var1, var2, var3, var4); + } + + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + } + } + + public int idDropped(int var1, Random var2) { + return Item.redstone.shiftedIndex; + } + + public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) { + return !this.wiresProvidePower ? false : this.isPoweringTo(var1, var2, var3, var4, var5); + } + + public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(!this.wiresProvidePower) { + return false; + } else if(var1.getBlockMetadata(var2, var3, var4) == 0) { + return false; + } else if(var5 == 1) { + return true; + } else { + boolean var6 = isPowerProviderOrWire(var1, var2 - 1, var3, var4, 1) || !var1.isBlockNormalCube(var2 - 1, var3, var4) && isPowerProviderOrWire(var1, var2 - 1, var3 - 1, var4, -1); + boolean var7 = isPowerProviderOrWire(var1, var2 + 1, var3, var4, 3) || !var1.isBlockNormalCube(var2 + 1, var3, var4) && isPowerProviderOrWire(var1, var2 + 1, var3 - 1, var4, -1); + boolean var8 = isPowerProviderOrWire(var1, var2, var3, var4 - 1, 2) || !var1.isBlockNormalCube(var2, var3, var4 - 1) && isPowerProviderOrWire(var1, var2, var3 - 1, var4 - 1, -1); + boolean var9 = isPowerProviderOrWire(var1, var2, var3, var4 + 1, 0) || !var1.isBlockNormalCube(var2, var3, var4 + 1) && isPowerProviderOrWire(var1, var2, var3 - 1, var4 + 1, -1); + if(!var1.isBlockNormalCube(var2, var3 + 1, var4)) { + if(var1.isBlockNormalCube(var2 - 1, var3, var4) && isPowerProviderOrWire(var1, var2 - 1, var3 + 1, var4, -1)) { + var6 = true; + } + + if(var1.isBlockNormalCube(var2 + 1, var3, var4) && isPowerProviderOrWire(var1, var2 + 1, var3 + 1, var4, -1)) { + var7 = true; + } + + if(var1.isBlockNormalCube(var2, var3, var4 - 1) && isPowerProviderOrWire(var1, var2, var3 + 1, var4 - 1, -1)) { + var8 = true; + } + + if(var1.isBlockNormalCube(var2, var3, var4 + 1) && isPowerProviderOrWire(var1, var2, var3 + 1, var4 + 1, -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.wiresProvidePower; + } + + public static boolean isPowerProviderOrWire(IBlockAccess var0, int var1, int var2, int var3, int var4) { + int var5 = var0.getBlockId(var1, var2, var3); + if(var5 == Block.redstoneWire.blockID) { + return true; + } else if(var5 == 0) { + return false; + } else if(Block.blocksList[var5].canProvidePower()) { + return true; + } else if(var5 != Block.redstoneRepeaterIdle.blockID && var5 != Block.redstoneRepeaterActive.blockID) { + return false; + } else { + int var6 = var0.getBlockMetadata(var1, var2, var3); + return var4 == ModelBed.field_22153_b[var6 & 3]; + } + } +} diff --git a/src/net/minecraft/src/BlockReed.java b/src/net/minecraft/src/BlockReed.java new file mode 100644 index 0000000..9a38b29 --- /dev/null +++ b/src/net/minecraft/src/BlockReed.java @@ -0,0 +1,69 @@ +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.isAirBlock(var2, var3 + 1, var4)) { + int var6; + for(var6 = 1; var1.getBlockId(var2, var3 - var6, var4) == this.blockID; ++var6) { + } + + if(var6 < 3) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 == 15) { + var1.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.checkBlockCoordValid(var1, var2, var3, var4); + } + + protected final void checkBlockCoordValid(World var1, int var2, int var3, int var4) { + if(!this.canBlockStay(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + 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.shiftedIndex; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } +} diff --git a/src/net/minecraft/src/BlockSand.java b/src/net/minecraft/src/BlockSand.java new file mode 100644 index 0000000..2c82950 --- /dev/null +++ b/src/net/minecraft/src/BlockSand.java @@ -0,0 +1,60 @@ +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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate()); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + var1.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate()); + } + + 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) { + byte var8 = 32; + if(!fallInstantly && var1.checkChunksExist(var2 - var8, var3 - var8, var4 - var8, var2 + var8, var3 + var8, var4 + var8)) { + EntityFallingSand var9 = new EntityFallingSand(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), this.blockID); + var1.entityJoinedWorld(var9); + } else { + var1.setBlockWithNotify(var2, var3, var4, 0); + + while(canFallBelow(var1, var2, var3 - 1, var4) && var3 > 0) { + --var3; + } + + if(var3 > 0) { + var1.setBlockWithNotify(var2, var3, var4, this.blockID); + } + } + } + + } + + public int tickRate() { + return 3; + } + + public static boolean canFallBelow(World var0, int var1, int var2, int var3) { + int var4 = var0.getBlockId(var1, var2, var3); + if(var4 == 0) { + return true; + } else if(var4 == Block.fire.blockID) { + return true; + } else { + Material var5 = Block.blocksList[var4].blockMaterial; + return var5 == Material.water ? true : var5 == Material.lava; + } + } +} diff --git a/src/net/minecraft/src/BlockSandStone.java b/src/net/minecraft/src/BlockSandStone.java new file mode 100644 index 0000000..69cd0e2 --- /dev/null +++ b/src/net/minecraft/src/BlockSandStone.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class BlockSandStone extends Block { + public BlockSandStone(int var1) { + super(var1, 192, Material.rock); + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture - 16 : (var1 == 0 ? this.blockIndexInTexture + 16 : this.blockIndexInTexture); + } +} diff --git a/src/net/minecraft/src/BlockSapling.java b/src/net/minecraft/src/BlockSapling.java new file mode 100644 index 0000000..1e1716f --- /dev/null +++ b/src/net/minecraft/src/BlockSapling.java @@ -0,0 +1,56 @@ +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) { + if(!var1.singleplayerWorld) { + super.updateTick(var1, var2, var3, var4, var5); + if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9 && var5.nextInt(30) == 0) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | 8); + } else { + this.growTree(var1, var2, var3, var4, var5); + } + } + + } + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + var2 &= 3; + return var2 == 1 ? 63 : (var2 == 2 ? 79 : super.getBlockTextureFromSideAndMetadata(var1, var2)); + } + + public void growTree(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4) & 3; + var1.setBlock(var2, var3, var4, 0); + Object var7 = null; + if(var6 == 1) { + var7 = new WorldGenTaiga2(); + } else if(var6 == 2) { + var7 = new WorldGenForest(); + } else { + var7 = new WorldGenTrees(); + if(var5.nextInt(10) == 0) { + var7 = new WorldGenBigTree(); + } + } + + if(!((WorldGenerator)var7).generate(var1, var5, var2, var3, var4)) { + var1.setBlockAndMetadata(var2, var3, var4, this.blockID, var6); + } + + } + + protected int damageDropped(int var1) { + return var1 & 3; + } +} diff --git a/src/net/minecraft/src/BlockSign.java b/src/net/minecraft/src/BlockSign.java new file mode 100644 index 0000000..066fb32 --- /dev/null +++ b/src/net/minecraft/src/BlockSign.java @@ -0,0 +1,104 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSign extends BlockContainer { + private Class signEntityClass; + private boolean isFreestanding; + + protected BlockSign(int var1, Class var2, boolean var3) { + super(var1, Material.wood); + this.isFreestanding = var3; + this.blockIndexInTexture = 4; + this.signEntityClass = var2; + float var4 = 0.25F; + float var5 = 1.0F; + this.setBlockBounds(0.5F - var4, 0.0F, 0.5F - var4, 0.5F + var4, var5, 0.5F + var4); + } + + public 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.isFreestanding) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 9.0F / 32.0F; + float var7 = 25.0F / 32.0F; + float var8 = 0.0F; + float var9 = 1.0F; + float var10 = 2.0F / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + if(var5 == 2) { + this.setBlockBounds(var8, var6, 1.0F - var10, var9, var7, 1.0F); + } + + if(var5 == 3) { + this.setBlockBounds(var8, var6, 0.0F, var9, var7, var10); + } + + if(var5 == 4) { + this.setBlockBounds(1.0F - var10, var6, var8, 1.0F, var7, var9); + } + + if(var5 == 5) { + this.setBlockBounds(0.0F, var6, var8, var10, var7, var9); + } + + } + } + + public boolean isACube() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + protected TileEntity getBlockEntity() { + try { + return (TileEntity)this.signEntityClass.newInstance(); + } catch (Exception var2) { + throw new RuntimeException(var2); + } + } + + public int idDropped(int var1, Random var2) { + return Item.sign.shiftedIndex; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + boolean var6 = false; + if(this.isFreestanding) { + if(!var1.getBlockMaterial(var2, var3 - 1, var4).isSolid()) { + var6 = true; + } + } else { + int var7 = var1.getBlockMetadata(var2, var3, var4); + var6 = true; + if(var7 == 2 && var1.getBlockMaterial(var2, var3, var4 + 1).isSolid()) { + var6 = false; + } + + if(var7 == 3 && var1.getBlockMaterial(var2, var3, var4 - 1).isSolid()) { + var6 = false; + } + + if(var7 == 4 && var1.getBlockMaterial(var2 + 1, var3, var4).isSolid()) { + var6 = false; + } + + if(var7 == 5 && var1.getBlockMaterial(var2 - 1, var3, var4).isSolid()) { + var6 = false; + } + } + + if(var6) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + } +} diff --git a/src/net/minecraft/src/BlockSnow.java b/src/net/minecraft/src/BlockSnow.java new file mode 100644 index 0000000..bc5f035 --- /dev/null +++ b/src/net/minecraft/src/BlockSnow.java @@ -0,0 +1,78 @@ +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) { + int var5 = var1.getBlockMetadata(var2, var3, var4) & 7; + return var5 >= 3 ? AxisAlignedBB.getBoundingBoxFromPool((double)var2 + this.minX, (double)var3 + this.minY, (double)var4 + this.minZ, (double)var2 + this.maxX, (double)((float)var3 + 0.5F), (double)var4 + this.maxZ) : null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4) & 7; + float var6 = (float)(2 * (1 + var5)) / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, var6, 1.0F); + } + + 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].isOpaqueCube() ? var1.getBlockMaterial(var2, var3 - 1, var4).getIsSolid() : 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 harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + int var7 = Item.snowball.shiftedIndex; + float var8 = 0.7F; + double var9 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.5D; + double var11 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.5D; + double var13 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.5D; + EntityItem var15 = new EntityItem(var1, (double)var3 + var9, (double)var4 + var11, (double)var5 + var13, new ItemStack(var7, 1, 0)); + var15.delayBeforeCanPickup = 10; + var1.entityJoinedWorld(var15); + var1.setBlockWithNotify(var3, var4, var5, 0); + var2.addStat(StatList.mineBlockStatArray[this.blockID], 1); + } + + public int idDropped(int var1, Random var2) { + return Item.snowball.shiftedIndex; + } + + 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); + } + + } +} diff --git a/src/net/minecraft/src/BlockSnowBlock.java b/src/net/minecraft/src/BlockSnowBlock.java new file mode 100644 index 0000000..0e1275b --- /dev/null +++ b/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.shiftedIndex; + } + + 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/src/net/minecraft/src/BlockSoulSand.java b/src/net/minecraft/src/BlockSoulSand.java new file mode 100644 index 0000000..4b2fe01 --- /dev/null +++ b/src/net/minecraft/src/BlockSoulSand.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class BlockSoulSand extends Block { + public BlockSoulSand(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/src/net/minecraft/src/BlockSponge.java b/src/net/minecraft/src/BlockSponge.java new file mode 100644 index 0000000..d8a441d --- /dev/null +++ b/src/net/minecraft/src/BlockSponge.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public class BlockSponge extends Block { + protected BlockSponge(int var1) { + super(var1, Material.sponge); + this.blockIndexInTexture = 48; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + byte var5 = 2; + + for(int var6 = var2 - var5; var6 <= var2 + var5; ++var6) { + for(int var7 = var3 - var5; var7 <= var3 + var5; ++var7) { + for(int var8 = var4 - var5; var8 <= var4 + var5; ++var8) { + if(var1.getBlockMaterial(var6, var7, var8) == Material.water) { + } + } + } + } + + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + byte var5 = 2; + + for(int var6 = var2 - var5; var6 <= var2 + var5; ++var6) { + for(int var7 = var3 - var5; var7 <= var3 + var5; ++var7) { + for(int var8 = var4 - var5; var8 <= var4 + var5; ++var8) { + var1.notifyBlocksOfNeighborChange(var6, var7, var8, var1.getBlockId(var6, var7, var8)); + } + } + } + + } +} diff --git a/src/net/minecraft/src/BlockStairs.java b/src/net/minecraft/src/BlockStairs.java new file mode 100644 index 0000000..cab8167 --- /dev/null +++ b/src/net/minecraft/src/BlockStairs.java @@ -0,0 +1,157 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +public class BlockStairs extends Block { + private Block modelBlock; + + protected BlockStairs(int var1, Block var2) { + super(var1, var2.blockIndexInTexture, var2.blockMaterial); + this.modelBlock = var2; + this.setHardness(var2.blockHardness); + this.setResistance(var2.blockResistance / 3.0F); + this.setStepSound(var2.stepSound); + this.setLightOpacity(255); + } + + 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 isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + 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.modelBlock.onBlockClicked(var1, var2, var3, var4, var5); + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + this.modelBlock.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5); + } + + public float getExplosionResistance(Entity var1) { + return this.modelBlock.getExplosionResistance(var1); + } + + public int idDropped(int var1, Random var2) { + return this.modelBlock.idDropped(var1, var2); + } + + public int quantityDropped(Random var1) { + return this.modelBlock.quantityDropped(var1); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return this.modelBlock.getBlockTextureFromSideAndMetadata(var1, var2); + } + + public int getBlockTextureFromSide(int var1) { + return this.modelBlock.getBlockTextureFromSide(var1); + } + + public int tickRate() { + return this.modelBlock.tickRate(); + } + + public void velocityToAddToEntity(World var1, int var2, int var3, int var4, Entity var5, Vec3D var6) { + this.modelBlock.velocityToAddToEntity(var1, var2, var3, var4, var5, var6); + } + + public boolean isCollidable() { + return this.modelBlock.isCollidable(); + } + + public boolean canCollideCheck(int var1, boolean var2) { + return this.modelBlock.canCollideCheck(var1, var2); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return this.modelBlock.canPlaceBlockAt(var1, var2, var3, var4); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + this.onNeighborBlockChange(var1, var2, var3, var4, 0); + this.modelBlock.onBlockAdded(var1, var2, var3, var4); + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + this.modelBlock.onBlockRemoval(var1, var2, var3, var4); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { + this.modelBlock.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6); + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + this.modelBlock.onEntityWalking(var1, var2, var3, var4, var5); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + this.modelBlock.updateTick(var1, var2, var3, var4, var5); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + return this.modelBlock.blockActivated(var1, var2, var3, var4, var5); + } + + public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) { + this.modelBlock.onBlockDestroyedByExplosion(var1, var2, var3, var4); + } + + 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/src/net/minecraft/src/BlockStationary.java b/src/net/minecraft/src/BlockStationary.java new file mode 100644 index 0000000..9e63607 --- /dev/null +++ b/src/net/minecraft/src/BlockStationary.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStationary extends BlockFluid { + 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_30005_i(var1, var2, var3, var4); + } + + } + + private void func_30005_i(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + var1.editingBlocks = true; + var1.setBlockAndMetadata(var2, var3, var4, this.blockID - 1, var5); + var1.markBlocksDirty(var2, var3, var4, var2, var3, var4); + var1.scheduleUpdateTick(var2, var3, var4, this.blockID - 1, this.tickRate()); + var1.editingBlocks = 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.getIsSolid()) { + return; + } + } + } + + } + + private boolean func_4033_j(World var1, int var2, int var3, int var4) { + return var1.getBlockMaterial(var2, var3, var4).getBurning(); + } +} diff --git a/src/net/minecraft/src/BlockStep.java b/src/net/minecraft/src/BlockStep.java new file mode 100644 index 0000000..491ada9 --- /dev/null +++ b/src/net/minecraft/src/BlockStep.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStep extends Block { + public static final String[] field_22027_a = new String[]{"stone", "sand", "wood", "cobble"}; + private boolean blockType; + + public BlockStep(int var1, boolean var2) { + super(var1, 6, Material.rock); + this.blockType = var2; + if(!var2) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + + this.setLightOpacity(255); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return var2 == 0 ? (var1 <= 1 ? 6 : 5) : (var2 == 1 ? (var1 == 0 ? 208 : (var1 == 1 ? 176 : 192)) : (var2 == 2 ? 4 : (var2 == 3 ? 16 : 6))); + } + + public int getBlockTextureFromSide(int var1) { + return this.getBlockTextureFromSideAndMetadata(var1, 0); + } + + public boolean isOpaqueCube() { + return this.blockType; + } + + 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); + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = var1.getBlockMetadata(var2, var3 - 1, var4); + if(var6 == var7) { + if(var5 == stairSingle.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + var1.setBlockAndMetadataWithNotify(var2, var3 - 1, var4, Block.stairDouble.blockID, var6); + } + + } + } + + public int idDropped(int var1, Random var2) { + return Block.stairSingle.blockID; + } + + public int quantityDropped(Random var1) { + return this.blockType ? 2 : 1; + } + + protected int damageDropped(int var1) { + return var1; + } + + public boolean isACube() { + return this.blockType; + } +} diff --git a/src/net/minecraft/src/BlockStone.java b/src/net/minecraft/src/BlockStone.java new file mode 100644 index 0000000..eae4ecd --- /dev/null +++ b/src/net/minecraft/src/BlockStone.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStone extends Block { + public BlockStone(int var1, int var2) { + super(var1, var2, Material.rock); + } + + public int idDropped(int var1, Random var2) { + return Block.cobblestone.blockID; + } +} diff --git a/src/net/minecraft/src/BlockTNT.java b/src/net/minecraft/src/BlockTNT.java new file mode 100644 index 0000000..71cfa5f --- /dev/null +++ b/src/net/minecraft/src/BlockTNT.java @@ -0,0 +1,65 @@ +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 onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + if(var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) { + this.onBlockDestroyedByPlayer(var1, var2, var3, var4, 1); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } + + 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, 1); + 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.singleplayerWorld) { + if((var5 & 1) == 0) { + this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(Block.tnt.blockID, 1, 0)); + } else { + 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); + } + + } + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + if(var5.getCurrentEquippedItem() != null && var5.getCurrentEquippedItem().itemID == Item.flintAndSteel.shiftedIndex) { + var1.setBlockMetadata(var2, var3, var4, 1); + } + + super.onBlockClicked(var1, var2, var3, var4, var5); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + return super.blockActivated(var1, var2, var3, var4, var5); + } +} diff --git a/src/net/minecraft/src/BlockTallGrass.java b/src/net/minecraft/src/BlockTallGrass.java new file mode 100644 index 0000000..7dba401 --- /dev/null +++ b/src/net/minecraft/src/BlockTallGrass.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockTallGrass extends BlockFlower { + protected BlockTallGrass(int var1, int var2) { + super(var1, var2); + float var3 = 0.4F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 0.8F, 0.5F + var3); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return var2 == 1 ? this.blockIndexInTexture : (var2 == 2 ? this.blockIndexInTexture + 16 + 1 : (var2 == 0 ? this.blockIndexInTexture + 16 : this.blockIndexInTexture)); + } + + public int idDropped(int var1, Random var2) { + return var2.nextInt(8) == 0 ? Item.seeds.shiftedIndex : -1; + } +} diff --git a/src/net/minecraft/src/BlockTorch.java b/src/net/minecraft/src/BlockTorch.java new file mode 100644 index 0000000..7458a71 --- /dev/null +++ b/src/net/minecraft/src/BlockTorch.java @@ -0,0 +1,140 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockTorch extends Block { + protected BlockTorch(int var1, int var2) { + super(var1, var2, Material.circuits); + this.setTickOnLoad(true); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isACube() { + return false; + } + + private boolean func_31028_g(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2, var3, var4) || var1.getBlockId(var2, var3, var4) == Block.fence.blockID; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : this.func_31028_g(var1, 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 && this.func_31028_g(var1, var2, var3 - 1, var4)) { + var6 = 5; + } + + if(var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var6 = 4; + } + + if(var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var6 = 3; + } + + if(var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var6 = 2; + } + + if(var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var6 = 1; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + super.updateTick(var1, var2, var3, var4, var5); + if(var1.getBlockMetadata(var2, var3, var4) == 0) { + this.onBlockAdded(var1, var2, var3, var4); + } + + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1); + } else if(var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2); + } else if(var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3); + } else if(var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 4); + } else if(this.func_31028_g(var1, var2, var3 - 1, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 5); + } + + this.dropTorchIfCantStay(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(this.dropTorchIfCantStay(var1, var2, var3, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = false; + if(!var1.isBlockNormalCube(var2 - 1, var3, var4) && var6 == 1) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2 + 1, var3, var4) && var6 == 2) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 - 1) && var6 == 3) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 + 1) && var6 == 4) { + var7 = true; + } + + if(!this.func_31028_g(var1, var2, var3 - 1, var4) && var6 == 5) { + var7 = true; + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + } + + private boolean dropTorchIfCantStay(World var1, int var2, int var3, int var4) { + if(!this.canPlaceBlockAt(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + return false; + } else { + return true; + } + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) { + int var7 = var1.getBlockMetadata(var2, var3, var4) & 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/src/net/minecraft/src/BlockTrapDoor.java b/src/net/minecraft/src/BlockTrapDoor.java new file mode 100644 index 0000000..b23b30a --- /dev/null +++ b/src/net/minecraft/src/BlockTrapDoor.java @@ -0,0 +1,169 @@ +package net.minecraft.src; + +public class BlockTrapDoor extends Block { + protected BlockTrapDoor(int var1, Material var2) { + super(var1, var2); + this.blockIndexInTexture = 84; + 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 isOpaqueCube() { + return false; + } + + public boolean isACube() { + 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_28039_c(var1.getBlockMetadata(var2, var3, var4)); + } + + public void func_28039_c(int var1) { + float var2 = 3.0F / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, var2, 1.0F); + if(func_28038_d(var1)) { + if((var1 & 3) == 0) { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var2, 1.0F, 1.0F, 1.0F); + } + + if((var1 & 3) == 1) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var2); + } + + if((var1 & 3) == 2) { + this.setBlockBounds(1.0F - var2, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + if((var1 & 3) == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, var2, 1.0F, 1.0F); + } + } + + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + 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); + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 ^ 4); + var1.func_28101_a(var5, 1003, var2, var3, var4, 0); + return true; + } + } + + public void func_28040_a(World var1, int var2, int var3, int var4, boolean var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = (var6 & 4) > 0; + if(var7 != var5) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 ^ 4); + var1.func_28101_a((EntityPlayer)null, 1003, var2, var3, var4, 0); + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.singleplayerWorld) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = var2; + int var8 = var4; + if((var6 & 3) == 0) { + var8 = var4 + 1; + } + + if((var6 & 3) == 1) { + --var8; + } + + if((var6 & 3) == 2) { + var7 = var2 + 1; + } + + if((var6 & 3) == 3) { + --var7; + } + + if(!var1.isBlockNormalCube(var7, var3, var8)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + this.dropBlockAsItem(var1, var2, var3, var4, var6); + } + + if(var5 > 0 && Block.blocksList[var5].canProvidePower()) { + boolean var9 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4); + this.func_28040_a(var1, var2, var3, var4, var9); + } + + } + } + + 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 onBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + byte var6 = 0; + if(var5 == 2) { + var6 = 0; + } + + if(var5 == 3) { + var6 = 1; + } + + if(var5 == 4) { + var6 = 2; + } + + if(var5 == 5) { + var6 = 3; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + if(var5 == 0) { + return false; + } else if(var5 == 1) { + return false; + } else { + if(var5 == 2) { + ++var4; + } + + if(var5 == 3) { + --var4; + } + + if(var5 == 4) { + ++var2; + } + + if(var5 == 5) { + --var2; + } + + return var1.isBlockNormalCube(var2, var3, var4); + } + } + + public static boolean func_28038_d(int var0) { + return (var0 & 4) != 0; + } +} diff --git a/src/net/minecraft/src/BlockWeb.java b/src/net/minecraft/src/BlockWeb.java new file mode 100644 index 0000000..2f84be4 --- /dev/null +++ b/src/net/minecraft/src/BlockWeb.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockWeb extends Block { + public BlockWeb(int var1, int var2) { + super(var1, var2, Material.web); + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + var5.field_27012_bb = true; + } + + public boolean isOpaqueCube() { + return false; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isACube() { + return false; + } + + public int idDropped(int var1, Random var2) { + return Item.silk.shiftedIndex; + } +} diff --git a/src/net/minecraft/src/BlockWorkbench.java b/src/net/minecraft/src/BlockWorkbench.java new file mode 100644 index 0000000..716032c --- /dev/null +++ b/src/net/minecraft/src/BlockWorkbench.java @@ -0,0 +1,21 @@ +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) { + if(var1.singleplayerWorld) { + return true; + } else { + var5.displayWorkbenchGUI(var2, var3, var4); + return true; + } + } +} diff --git a/src/net/minecraft/src/ChatAllowedCharacters.java b/src/net/minecraft/src/ChatAllowedCharacters.java new file mode 100644 index 0000000..58e6947 --- /dev/null +++ b/src/net/minecraft/src/ChatAllowedCharacters.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class ChatAllowedCharacters { + public static final String allowedCharacters = getAllowedCharacters(); + public static final char[] field_22175_b = new char[]{'/', '\n', '\r', '\t', '\u0000', '\f', '`', '?', '*', '\\', '<', '>', '|', '\"', ':'}; + + private static String getAllowedCharacters() { + String var0 = ""; + + try { + BufferedReader var1 = new BufferedReader(new InputStreamReader(ChatAllowedCharacters.class.getResourceAsStream("/font.txt"), "UTF-8")); + String var2 = ""; + + while(true) { + var2 = var1.readLine(); + if(var2 == null) { + var1.close(); + break; + } + + if(!var2.startsWith("#")) { + var0 = var0 + var2; + } + } + } catch (Exception var3) { + } + + return var0; + } +} diff --git a/src/net/minecraft/src/Chunk.java b/src/net/minecraft/src/Chunk.java new file mode 100644 index 0000000..fb6fd5b --- /dev/null +++ b/src/net/minecraft/src/Chunk.java @@ -0,0 +1,597 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class Chunk { + public static boolean isLit; + public byte[] blocks; + public boolean isChunkLoaded; + public World worldObj; + public NibbleArray data; + public NibbleArray skylightMap; + public NibbleArray blocklightMap; + public byte[] heightMap; + public int field_686_i; + public final int xPosition; + public final int zPosition; + public Map chunkTileEntityMap; + public List[] entities; + public boolean isTerrainPopulated; + public boolean isModified; + public boolean neverSave; + public boolean hasEntities; + public long lastSaveTime; + + public Chunk(World var1, int var2, int var3) { + this.chunkTileEntityMap = new HashMap(); + this.entities = new List[8]; + this.isTerrainPopulated = false; + this.isModified = false; + this.hasEntities = false; + this.lastSaveTime = 0L; + this.worldObj = var1; + this.xPosition = var2; + this.zPosition = var3; + this.heightMap = new byte[256]; + + for(int var4 = 0; var4 < this.entities.length; ++var4) { + this.entities[var4] = new ArrayList(); + } + + } + + public Chunk(World var1, byte[] var2, int var3, int var4) { + this(var1, var3, var4); + this.blocks = var2; + this.data = new NibbleArray(var2.length); + this.skylightMap = new NibbleArray(var2.length); + this.blocklightMap = new NibbleArray(var2.length); + } + + public boolean isAtLocation(int var1, int var2) { + return var1 == this.xPosition && var2 == this.zPosition; + } + + public int getHeightValue(int var1, int var2) { + return this.heightMap[var2 << 4 | var1] & 255; + } + + public void 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) { + int var4 = 127; + + int var5; + for(var5 = var2 << 11 | var3 << 7; var4 > 0 && Block.lightOpacity[this.blocks[var5 + var4 - 1] & 255] == 0; --var4) { + } + + this.heightMap[var3 << 4 | var2] = (byte)var4; + if(var4 < var1) { + var1 = var4; + } + + if(!this.worldObj.worldProvider.field_4306_c) { + int var6 = 15; + int var7 = 127; + + do { + var6 -= Block.lightOpacity[this.blocks[var5 + var7] & 255]; + if(var6 > 0) { + this.skylightMap.setNibble(var2, var7, var3, var6); + } + + --var7; + } while(var7 > 0 && var6 > 0); + } + } + } + + 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() { + } + + 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.scheduleLightingUpdate(EnumSkyBlock.Sky, var1, var3, var2, var1, var4, var2); + this.isModified = true; + } else if(var4 < var3) { + this.worldObj.scheduleLightingUpdate(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] & 255] == 0; --var5) { + } + + if(var5 != var4) { + this.worldObj.markBlocksDirtyVertical(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.scheduleLightingUpdate(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.scheduleLightingUpdate(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] & 255; + } + + 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] = (byte)(var6 & 255); + if(var8 != 0 && !this.worldObj.singleplayerWorld) { + Block.blocksList[var8].onBlockRemoval(this.worldObj, var9, var2, var10); + } + + this.data.setNibble(var1, var2, var3, var5); + if(!this.worldObj.worldProvider.field_4306_c) { + if(Block.lightOpacity[var6 & 255] != 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.scheduleLightingUpdate(EnumSkyBlock.Sky, var9, var2, var10, var9, var2, var10); + } + + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Block, var9, var2, var10, var9, var2, var10); + this.func_333_c(var1, var3); + this.data.setNibble(var1, var2, var3, var5); + if(var4 != 0) { + Block.blocksList[var4].onBlockAdded(this.worldObj, var9, var2, var10); + } + + this.isModified = true; + return true; + } + } + + public boolean setBlockID(int var1, int var2, int var3, int var4) { + byte var5 = (byte)var4; + int var6 = this.heightMap[var3 << 4 | var1] & 255; + int var7 = this.blocks[var1 << 11 | var3 << 7 | var2] & 255; + if(var7 == var4) { + return false; + } else { + int var8 = this.xPosition * 16 + var1; + int var9 = this.zPosition * 16 + var3; + this.blocks[var1 << 11 | var3 << 7 | var2] = (byte)(var5 & 255); + if(var7 != 0) { + Block.blocksList[var7].onBlockRemoval(this.worldObj, var8, var2, var9); + } + + this.data.setNibble(var1, var2, var3, 0); + if(Block.lightOpacity[var5 & 255] != 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.scheduleLightingUpdate(EnumSkyBlock.Sky, var8, var2, var9, var8, var2, var9); + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Block, var8, var2, var9, var8, var2, var9); + this.func_333_c(var1, var3); + if(var4 != 0 && !this.worldObj.singleplayerWorld) { + 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) { + isLit = true; + } + + var5 -= var4; + int var6 = this.blocklightMap.getNibble(var1, var2, var3); + if(var6 > var5) { + var5 = var6; + } + + return var5; + } + + public void addEntity(Entity var1) { + this.hasEntities = true; + int var2 = MathHelper.floor_double(var1.posX / 16.0D); + int var3 = MathHelper.floor_double(var1.posZ / 16.0D); + if(var2 != this.xPosition || var3 != this.zPosition) { + System.out.println("Wrong location! " + var1); + 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.addedToChunk = true; + var1.chunkCoordX = this.xPosition; + var1.chunkCoordY = var4; + var1.chunkCoordZ = this.zPosition; + this.entities[var4].add(var1); + } + + public void removeEntity(Entity var1) { + this.removeEntityAtIndex(var1, var1.chunkCoordY); + } + + public void removeEntityAtIndex(Entity var1, int var2) { + if(var2 < 0) { + var2 = 0; + } + + if(var2 >= this.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 getChunkBlockTileEntity(int var1, int var2, int var3) { + ChunkPosition var4 = new ChunkPosition(var1, var2, var3); + TileEntity var5 = (TileEntity)this.chunkTileEntityMap.get(var4); + if(var5 == null) { + int var6 = this.getBlockID(var1, var2, var3); + if(!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.chunkTileEntityMap.get(var4); + } + + if(var5 != null && var5.isInvalid()) { + this.chunkTileEntityMap.remove(var4); + return null; + } else { + return var5; + } + } + + public void addTileEntity(TileEntity var1) { + int var2 = var1.xCoord - this.xPosition * 16; + int var3 = var1.yCoord; + int var4 = var1.zCoord - this.zPosition * 16; + this.setChunkBlockTileEntity(var2, var3, var4, var1); + if(this.isChunkLoaded) { + this.worldObj.loadedTileEntityList.add(var1); + } + + } + + public void setChunkBlockTileEntity(int var1, int var2, int var3, TileEntity var4) { + ChunkPosition var5 = new ChunkPosition(var1, var2, var3); + var4.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) { + var4.validate(); + this.chunkTileEntityMap.put(var5, var4); + } else { + System.out.println("Attempted to place a tile entity where there was no entity tile!"); + } + } + + public void removeChunkBlockTileEntity(int var1, int var2, int var3) { + ChunkPosition var4 = new ChunkPosition(var1, var2, var3); + if(this.isChunkLoaded) { + TileEntity var5 = (TileEntity)this.chunkTileEntityMap.remove(var4); + if(var5 != null) { + var5.invalidate(); + } + } + + } + + public void onChunkLoad() { + this.isChunkLoaded = true; + this.worldObj.func_31047_a(this.chunkTileEntityMap.values()); + + for(int var1 = 0; var1 < this.entities.length; ++var1) { + this.worldObj.addLoadedEntities(this.entities[var1]); + } + + } + + public void onChunkUnload() { + this.isChunkLoaded = false; + Iterator var1 = this.chunkTileEntityMap.values().iterator(); + + while(var1.hasNext()) { + TileEntity var2 = (TileEntity)var1.next(); + var2.invalidate(); + } + + for(int var3 = 0; var3 < this.entities.length; ++var3) { + this.worldObj.addUnloadedEntities(this.entities[var3]); + } + + } + + public void setChunkModified() { + this.isModified = true; + } + + public void getEntitiesWithinAABBForEntity(Entity var1, AxisAlignedBB var2, List var3) { + int var4 = MathHelper.floor_double((var2.minY - 2.0D) / 16.0D); + int var5 = MathHelper.floor_double((var2.maxY + 2.0D) / 16.0D); + if(var4 < 0) { + var4 = 0; + } + + if(var5 >= this.entities.length) { + var5 = this.entities.length - 1; + } + + for(int var6 = var4; var6 <= var5; ++var6) { + List var7 = this.entities[var6]; + + for(int var8 = 0; var8 < var7.size(); ++var8) { + Entity var9 = (Entity)var7.get(var8); + if(var9 != var1 && var9.boundingBox.intersectsWith(var2)) { + var3.add(var9); + } + } + } + + } + + public void getEntitiesOfTypeWithinAAAB(Class var1, AxisAlignedBB var2, List var3) { + int var4 = MathHelper.floor_double((var2.minY - 2.0D) / 16.0D); + int var5 = MathHelper.floor_double((var2.maxY + 2.0D) / 16.0D); + if(var4 < 0) { + var4 = 0; + } + + if(var5 >= this.entities.length) { + var5 = this.entities.length - 1; + } + + for(int var6 = var4; var6 <= var5; ++var6) { + List var7 = this.entities[var6]; + + for(int var8 = 0; var8 < var7.size(); ++var8) { + Entity var9 = (Entity)var7.get(var8); + if(var1.isAssignableFrom(var9.getClass()) && var9.boundingBox.intersectsWith(var2)) { + var3.add(var9); + } + } + } + + } + + public boolean needsSaving(boolean var1) { + if(this.neverSave) { + return false; + } else { + if(var1) { + if(this.hasEntities && this.worldObj.getWorldTime() != this.lastSaveTime) { + return true; + } + } else if(this.hasEntities && this.worldObj.getWorldTime() >= this.lastSaveTime + 600L) { + return true; + } + + return this.isModified; + } + } + + public int getChunkData(byte[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { + int var9 = var5 - var2; + int var10 = var6 - var3; + int var11 = var7 - var4; + if(var9 * var10 * var11 == this.blocks.length) { + System.arraycopy(this.blocks, 0, var1, var8, this.blocks.length); + var8 += this.blocks.length; + System.arraycopy(this.data.data, 0, var1, var8, this.data.data.length); + var8 += this.data.data.length; + System.arraycopy(this.blocklightMap.data, 0, var1, var8, this.blocklightMap.data.length); + var8 += this.blocklightMap.data.length; + System.arraycopy(this.skylightMap.data, 0, var1, var8, this.skylightMap.data.length); + var8 += this.skylightMap.data.length; + return var8; + } else { + int var12; + int var13; + int var14; + int var15; + for(var12 = var2; var12 < var5; ++var12) { + for(var13 = var4; var13 < var7; ++var13) { + var14 = var12 << 11 | var13 << 7 | var3; + var15 = var6 - var3; + System.arraycopy(this.blocks, var14, var1, var8, var15); + var8 += var15; + } + } + + for(var12 = var2; var12 < var5; ++var12) { + for(var13 = var4; var13 < var7; ++var13) { + var14 = (var12 << 11 | var13 << 7 | var3) >> 1; + var15 = (var6 - var3) / 2; + System.arraycopy(this.data.data, var14, var1, var8, var15); + var8 += var15; + } + } + + for(var12 = var2; var12 < var5; ++var12) { + for(var13 = var4; var13 < var7; ++var13) { + var14 = (var12 << 11 | var13 << 7 | var3) >> 1; + var15 = (var6 - var3) / 2; + System.arraycopy(this.blocklightMap.data, var14, var1, var8, var15); + var8 += var15; + } + } + + for(var12 = var2; var12 < var5; ++var12) { + for(var13 = var4; var13 < var7; ++var13) { + var14 = (var12 << 11 | var13 << 7 | var3) >> 1; + var15 = (var6 - var3) / 2; + System.arraycopy(this.skylightMap.data, var14, var1, var8, var15); + var8 += var15; + } + } + + return var8; + } + } + + public Random func_334_a(long var1) { + return new Random(this.worldObj.getRandomSeed() + (long)(this.xPosition * this.xPosition * 4987142) + (long)(this.xPosition * 5947611) + (long)(this.zPosition * this.zPosition) * 4392871L + (long)(this.zPosition * 389711) ^ var1); + } + + public boolean func_21101_g() { + return false; + } + + public void func_25083_h() { + ChunkBlockMap.func_26001_a(this.blocks); + } +} diff --git a/src/net/minecraft/src/ChunkBlockMap.java b/src/net/minecraft/src/ChunkBlockMap.java new file mode 100644 index 0000000..8baa4bb --- /dev/null +++ b/src/net/minecraft/src/ChunkBlockMap.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public class ChunkBlockMap { + private static byte[] field_26002_a = new byte[256]; + + public static void func_26001_a(byte[] var0) { + for(int var1 = 0; var1 < var0.length; ++var1) { + var0[var1] = field_26002_a[var0[var1] & 255]; + } + + } + + static { + try { + for(int var0 = 0; var0 < 256; ++var0) { + byte var1 = (byte)var0; + if(var1 != 0 && Block.blocksList[var1 & 255] == null) { + var1 = 0; + } + + field_26002_a[var0] = var1; + } + } catch (Exception var2) { + var2.printStackTrace(); + } + + } +} diff --git a/src/net/minecraft/src/ChunkCache.java b/src/net/minecraft/src/ChunkCache.java new file mode 100644 index 0000000..e82ac60 --- /dev/null +++ b/src/net/minecraft/src/ChunkCache.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +public class ChunkCache implements IBlockAccess { + private int chunkX; + private int chunkZ; + private Chunk[][] chunkArray; + private World worldObj; + + public ChunkCache(World var1, int var2, int var3, int var4, int var5, int var6, int var7) { + this.worldObj = var1; + this.chunkX = var2 >> 4; + this.chunkZ = var4 >> 4; + int var8 = var5 >> 4; + int var9 = var7 >> 4; + this.chunkArray = new Chunk[var8 - this.chunkX + 1][var9 - this.chunkZ + 1]; + + for(int var10 = this.chunkX; var10 <= var8; ++var10) { + for(int var11 = this.chunkZ; var11 <= var9; ++var11) { + this.chunkArray[var10 - this.chunkX][var11 - this.chunkZ] = var1.getChunkFromChunkCoords(var10, var11); + } + } + + } + + public int getBlockId(int var1, int var2, int var3) { + if(var2 < 0) { + return 0; + } else if(var2 >= 128) { + return 0; + } else { + int var4 = (var1 >> 4) - this.chunkX; + int var5 = (var3 >> 4) - this.chunkZ; + if(var4 >= 0 && var4 < this.chunkArray.length && var5 >= 0 && var5 < this.chunkArray[var4].length) { + Chunk var6 = this.chunkArray[var4][var5]; + return var6 == null ? 0 : var6.getBlockID(var1 & 15, var2, var3 & 15); + } else { + return 0; + } + } + } + + public TileEntity getBlockTileEntity(int var1, int var2, int var3) { + int var4 = (var1 >> 4) - this.chunkX; + int var5 = (var3 >> 4) - this.chunkZ; + return this.chunkArray[var4][var5].getChunkBlockTileEntity(var1 & 15, var2, var3 & 15); + } + + public int getBlockMetadata(int var1, int var2, int var3) { + if(var2 < 0) { + return 0; + } else if(var2 >= 128) { + return 0; + } else { + int var4 = (var1 >> 4) - this.chunkX; + int var5 = (var3 >> 4) - this.chunkZ; + return this.chunkArray[var4][var5].getBlockMetadata(var1 & 15, var2, var3 & 15); + } + } + + public Material getBlockMaterial(int var1, int var2, int var3) { + int var4 = this.getBlockId(var1, var2, var3); + return var4 == 0 ? Material.air : Block.blocksList[var4].blockMaterial; + } + + public boolean isBlockNormalCube(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.blockMaterial.getIsSolid() && var4.isACube(); + } +} diff --git a/src/net/minecraft/src/ChunkCoordIntPair.java b/src/net/minecraft/src/ChunkCoordIntPair.java new file mode 100644 index 0000000..b58d019 --- /dev/null +++ b/src/net/minecraft/src/ChunkCoordIntPair.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +public class ChunkCoordIntPair { + public final int chunkXPos; + public final int chunkZPos; + + public ChunkCoordIntPair(int var1, int var2) { + this.chunkXPos = var1; + this.chunkZPos = var2; + } + + public static int chunkXZ2Int(int var0, int var1) { + return (var0 < 0 ? Integer.MIN_VALUE : 0) | (var0 & Short.MAX_VALUE) << 16 | (var1 < 0 ? -Short.MIN_VALUE : 0) | var1 & Short.MAX_VALUE; + } + + public int hashCode() { + return chunkXZ2Int(this.chunkXPos, this.chunkZPos); + } + + public boolean equals(Object var1) { + ChunkCoordIntPair var2 = (ChunkCoordIntPair)var1; + return var2.chunkXPos == this.chunkXPos && var2.chunkZPos == this.chunkZPos; + } +} diff --git a/src/net/minecraft/src/ChunkCoordinates.java b/src/net/minecraft/src/ChunkCoordinates.java new file mode 100644 index 0000000..989ca8f --- /dev/null +++ b/src/net/minecraft/src/ChunkCoordinates.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +public class ChunkCoordinates implements Comparable { + public int posX; + public int posY; + public int posZ; + + public ChunkCoordinates() { + } + + public ChunkCoordinates(int var1, int var2, int var3) { + this.posX = var1; + this.posY = var2; + this.posZ = var3; + } + + public ChunkCoordinates(ChunkCoordinates var1) { + this.posX = var1.posX; + this.posY = var1.posY; + this.posZ = var1.posZ; + } + + public boolean equals(Object var1) { + if(!(var1 instanceof ChunkCoordinates)) { + return false; + } else { + ChunkCoordinates var2 = (ChunkCoordinates)var1; + return this.posX == var2.posX && this.posY == var2.posY && this.posZ == var2.posZ; + } + } + + public int hashCode() { + return this.posX + this.posZ << 8 + this.posY << 16; + } + + public int compareChunkCoordinate(ChunkCoordinates var1) { + return this.posY == var1.posY ? (this.posZ == var1.posZ ? this.posX - var1.posX : this.posZ - var1.posZ) : this.posY - var1.posY; + } + + public double getSqDistanceTo(int var1, int var2, int var3) { + int var4 = this.posX - var1; + int var5 = this.posY - var2; + int var6 = this.posZ - var3; + return Math.sqrt((double)(var4 * var4 + var5 * var5 + var6 * var6)); + } + + public int compareTo(Object var1) { + return this.compareChunkCoordinate((ChunkCoordinates)var1); + } +} diff --git a/src/net/minecraft/src/ChunkFile.java b/src/net/minecraft/src/ChunkFile.java new file mode 100644 index 0000000..0000b0b --- /dev/null +++ b/src/net/minecraft/src/ChunkFile.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import java.io.File; +import java.util.regex.Matcher; + +class ChunkFile implements Comparable { + private final File field_22209_a; + private final int field_22208_b; + private final int field_22210_c; + + public ChunkFile(File var1) { + this.field_22209_a = var1; + Matcher var2 = ChunkFilePattern.field_22119_a.matcher(var1.getName()); + if(var2.matches()) { + this.field_22208_b = Integer.parseInt(var2.group(1), 36); + this.field_22210_c = Integer.parseInt(var2.group(2), 36); + } else { + this.field_22208_b = 0; + this.field_22210_c = 0; + } + + } + + public int func_22206_a(ChunkFile var1) { + int var2 = this.field_22208_b >> 5; + int var3 = var1.field_22208_b >> 5; + if(var2 == var3) { + int var4 = this.field_22210_c >> 5; + int var5 = var1.field_22210_c >> 5; + return var4 - var5; + } else { + return var2 - var3; + } + } + + public File func_22207_a() { + return this.field_22209_a; + } + + public int func_22205_b() { + return this.field_22208_b; + } + + public int func_22204_c() { + return this.field_22210_c; + } + + public int compareTo(Object var1) { + return this.func_22206_a((ChunkFile)var1); + } +} diff --git a/src/net/minecraft/src/ChunkFilePattern.java b/src/net/minecraft/src/ChunkFilePattern.java new file mode 100644 index 0000000..0f7860c --- /dev/null +++ b/src/net/minecraft/src/ChunkFilePattern.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FilenameFilter; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +class ChunkFilePattern implements FilenameFilter { + public static final Pattern field_22119_a = Pattern.compile("c\\.(-?[0-9a-z]+)\\.(-?[0-9a-z]+)\\.dat"); + + private ChunkFilePattern() { + } + + public boolean accept(File var1, String var2) { + Matcher var3 = field_22119_a.matcher(var2); + return var3.matches(); + } + + ChunkFilePattern(Empty2 var1) { + this(); + } +} diff --git a/src/net/minecraft/src/ChunkFolderPattern.java b/src/net/minecraft/src/ChunkFolderPattern.java new file mode 100644 index 0000000..3a0a4fd --- /dev/null +++ b/src/net/minecraft/src/ChunkFolderPattern.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileFilter; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +class ChunkFolderPattern implements FileFilter { + public static final Pattern field_22214_a = Pattern.compile("[0-9a-z]|([0-9a-z][0-9a-z])"); + + private ChunkFolderPattern() { + } + + public boolean accept(File var1) { + if(var1.isDirectory()) { + Matcher var2 = field_22214_a.matcher(var1.getName()); + return var2.matches(); + } else { + return false; + } + } + + ChunkFolderPattern(Empty2 var1) { + this(); + } +} diff --git a/src/net/minecraft/src/ChunkLoader.java b/src/net/minecraft/src/ChunkLoader.java new file mode 100644 index 0000000..cef7390 --- /dev/null +++ b/src/net/minecraft/src/ChunkLoader.java @@ -0,0 +1,210 @@ +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 saveDir; + private boolean createIfNecessary; + + public ChunkLoader(File var1, boolean var2) { + this.saveDir = var1; + this.createIfNecessary = var2; + } + + private File chunkFileForXZ(int var1, int var2) { + String var3 = "c." + Integer.toString(var1, 36) + "." + Integer.toString(var2, 36) + ".dat"; + String var4 = Integer.toString(var1 & 63, 36); + String var5 = Integer.toString(var2 & 63, 36); + File var6 = new File(this.saveDir, var4); + if(!var6.exists()) { + if(!this.createIfNecessary) { + return null; + } + + var6.mkdir(); + } + + var6 = new File(var6, var5); + if(!var6.exists()) { + if(!this.createIfNecessary) { + return null; + } + + var6.mkdir(); + } + + var6 = new File(var6, var3); + return !var6.exists() && !this.createIfNecessary ? null : var6; + } + + public Chunk loadChunk(World var1, int var2, int var3) throws IOException { + File var4 = this.chunkFileForXZ(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 = loadChunkIntoWorldFromCompound(var1, var6.getCompoundTag("Level")); + if(!var7.isAtLocation(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 = loadChunkIntoWorldFromCompound(var1, var6.getCompoundTag("Level")); + } + + var7.func_25083_h(); + return var7; + } catch (Exception var8) { + var8.printStackTrace(); + } + } + + return null; + } + + public void saveChunk(World var1, Chunk var2) throws IOException { + var1.checkSessionLock(); + File var3 = this.chunkFileForXZ(var2.xPosition, var2.zPosition); + if(var3.exists()) { + WorldInfo var4 = var1.getWorldInfo(); + var4.setSizeOnDisk(var4.getSizeOnDisk() - var3.length()); + } + + try { + File var10 = new File(this.saveDir, "tmp_chunk.dat"); + FileOutputStream var5 = new FileOutputStream(var10); + NBTTagCompound var6 = new NBTTagCompound(); + NBTTagCompound var7 = new NBTTagCompound(); + var6.setTag("Level", var7); + storeChunkInCompound(var2, var1, var7); + CompressedStreamTools.writeGzippedCompoundToOutputStream(var6, var5); + var5.close(); + if(var3.exists()) { + var3.delete(); + } + + var10.renameTo(var3); + WorldInfo var8 = var1.getWorldInfo(); + var8.setSizeOnDisk(var8.getSizeOnDisk() + var3.length()); + } catch (Exception var9) { + var9.printStackTrace(); + } + + } + + public static void storeChunkInCompound(Chunk var0, World var1, NBTTagCompound var2) { + var1.checkSessionLock(); + var2.setInteger("xPos", var0.xPosition); + var2.setInteger("zPos", var0.zPosition); + var2.setLong("LastUpdate", var1.getWorldTime()); + var2.setByteArray("Blocks", var0.blocks); + var2.setByteArray("Data", var0.data.data); + var2.setByteArray("SkyLight", var0.skylightMap.data); + var2.setByteArray("BlockLight", var0.blocklightMap.data); + var2.setByteArray("HeightMap", var0.heightMap); + var2.setBoolean("TerrainPopulated", var0.isTerrainPopulated); + var0.hasEntities = false; + NBTTagList var3 = new NBTTagList(); + + Iterator var5; + NBTTagCompound var7; + for(int var4 = 0; var4 < var0.entities.length; ++var4) { + var5 = var0.entities[var4].iterator(); + + while(var5.hasNext()) { + Entity var6 = (Entity)var5.next(); + var0.hasEntities = true; + var7 = new NBTTagCompound(); + if(var6.addEntityID(var7)) { + var3.setTag(var7); + } + } + } + + var2.setTag("Entities", var3); + NBTTagList var8 = new NBTTagList(); + var5 = var0.chunkTileEntityMap.values().iterator(); + + while(var5.hasNext()) { + TileEntity var9 = (TileEntity)var5.next(); + var7 = new NBTTagCompound(); + var9.writeToNBT(var7); + var8.setTag(var7); + } + + var2.setTag("TileEntities", var8); + } + + public static Chunk loadChunkIntoWorldFromCompound(World var0, NBTTagCompound var1) { + int var2 = var1.getInteger("xPos"); + int var3 = var1.getInteger("zPos"); + Chunk var4 = new Chunk(var0, var2, var3); + var4.blocks = var1.getByteArray("Blocks"); + var4.data = new NibbleArray(var1.getByteArray("Data")); + var4.skylightMap = new NibbleArray(var1.getByteArray("SkyLight")); + var4.blocklightMap = new NibbleArray(var1.getByteArray("BlockLight")); + var4.heightMap = var1.getByteArray("HeightMap"); + var4.isTerrainPopulated = var1.getBoolean("TerrainPopulated"); + if(!var4.data.isValid()) { + var4.data = new NibbleArray(var4.blocks.length); + } + + if(var4.heightMap == null || !var4.skylightMap.isValid()) { + var4.heightMap = new byte[256]; + var4.skylightMap = new NibbleArray(var4.blocks.length); + var4.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.createEntityFromNBT(var7, var0); + var4.hasEntities = true; + if(var8 != null) { + var4.addEntity(var8); + } + } + } + + NBTTagList var10 = var1.getTagList("TileEntities"); + if(var10 != null) { + for(int var11 = 0; var11 < var10.tagCount(); ++var11) { + NBTTagCompound var12 = (NBTTagCompound)var10.tagAt(var11); + TileEntity var9 = TileEntity.createAndLoadEntity(var12); + if(var9 != null) { + var4.addTileEntity(var9); + } + } + } + + return var4; + } + + public void func_661_a() { + } + + public void saveExtraData() { + } + + public void saveExtraChunkData(World var1, Chunk var2) throws IOException { + } +} diff --git a/src/net/minecraft/src/ChunkPosition.java b/src/net/minecraft/src/ChunkPosition.java new file mode 100644 index 0000000..8b19854 --- /dev/null +++ b/src/net/minecraft/src/ChunkPosition.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class ChunkPosition { + public final int x; + public final int y; + public final int z; + + public ChunkPosition(int var1, int var2, int var3) { + this.x = var1; + this.y = var2; + this.z = var3; + } + + public boolean equals(Object var1) { + if(!(var1 instanceof ChunkPosition)) { + return false; + } else { + ChunkPosition var2 = (ChunkPosition)var1; + return var2.x == this.x && var2.y == this.y && var2.z == this.z; + } + } + + public int hashCode() { + return this.x * 8976890 + this.y * 981131 + this.z; + } +} diff --git a/src/net/minecraft/src/ChunkProvider.java b/src/net/minecraft/src/ChunkProvider.java new file mode 100644 index 0000000..e142731 --- /dev/null +++ b/src/net/minecraft/src/ChunkProvider.java @@ -0,0 +1,184 @@ +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 ChunkProvider implements IChunkProvider { + private Set field_28062_a = new HashSet(); + private Chunk field_28061_b; + private IChunkProvider chunkGenerator; + private IChunkLoader field_28066_d; + private Map field_28065_e = new HashMap(); + private List field_28064_f = new ArrayList(); + private World worldObj; + + public ChunkProvider(World var1, IChunkLoader var2, IChunkProvider var3) { + this.field_28061_b = new EmptyChunk(var1, new byte[-Short.MIN_VALUE], 0, 0); + this.worldObj = var1; + this.field_28066_d = var2; + this.chunkGenerator = var3; + } + + public boolean chunkExists(int var1, int var2) { + return this.field_28065_e.containsKey(Integer.valueOf(ChunkCoordIntPair.chunkXZ2Int(var1, var2))); + } + + public Chunk loadChunk(int var1, int var2) { + int var3 = ChunkCoordIntPair.chunkXZ2Int(var1, var2); + this.field_28062_a.remove(Integer.valueOf(var3)); + Chunk var4 = (Chunk)this.field_28065_e.get(Integer.valueOf(var3)); + if(var4 == null) { + var4 = this.func_28058_d(var1, var2); + if(var4 == null) { + if(this.chunkGenerator == null) { + var4 = this.field_28061_b; + } else { + var4 = this.chunkGenerator.provideChunk(var1, var2); + } + } + + this.field_28065_e.put(Integer.valueOf(var3), var4); + this.field_28064_f.add(var4); + if(var4 != null) { + var4.func_4053_c(); + var4.onChunkLoad(); + } + + 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.provideChunk(var1 - 1, var2).isTerrainPopulated && this.chunkExists(var1 - 1, var2 + 1) && this.chunkExists(var1, var2 + 1) && this.chunkExists(var1 - 1, var2)) { + this.populate(this, var1 - 1, var2); + } + + if(this.chunkExists(var1, var2 - 1) && !this.provideChunk(var1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 + 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 + 1, var2)) { + this.populate(this, var1, var2 - 1); + } + + if(this.chunkExists(var1 - 1, var2 - 1) && !this.provideChunk(var1 - 1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 - 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 - 1, var2)) { + this.populate(this, var1 - 1, var2 - 1); + } + } + + return var4; + } + + public Chunk provideChunk(int var1, int var2) { + Chunk var3 = (Chunk)this.field_28065_e.get(Integer.valueOf(ChunkCoordIntPair.chunkXZ2Int(var1, var2))); + return var3 == null ? this.loadChunk(var1, var2) : var3; + } + + private Chunk func_28058_d(int var1, int var2) { + if(this.field_28066_d == null) { + return null; + } else { + try { + Chunk var3 = this.field_28066_d.loadChunk(this.worldObj, var1, var2); + if(var3 != null) { + var3.lastSaveTime = this.worldObj.getWorldTime(); + } + + return var3; + } catch (Exception var4) { + var4.printStackTrace(); + return null; + } + } + } + + private void func_28060_a(Chunk var1) { + if(this.field_28066_d != null) { + try { + this.field_28066_d.saveExtraChunkData(this.worldObj, var1); + } catch (Exception var3) { + var3.printStackTrace(); + } + + } + } + + private void func_28059_b(Chunk var1) { + if(this.field_28066_d != null) { + try { + var1.lastSaveTime = this.worldObj.getWorldTime(); + this.field_28066_d.saveChunk(this.worldObj, var1); + } catch (IOException var3) { + var3.printStackTrace(); + } + + } + } + + public void populate(IChunkProvider var1, int var2, int var3) { + Chunk var4 = this.provideChunk(var2, var3); + if(!var4.isTerrainPopulated) { + var4.isTerrainPopulated = true; + if(this.chunkGenerator != null) { + this.chunkGenerator.populate(var1, var2, var3); + var4.setChunkModified(); + } + } + + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + int var3 = 0; + + for(int var4 = 0; var4 < this.field_28064_f.size(); ++var4) { + Chunk var5 = (Chunk)this.field_28064_f.get(var4); + if(var1 && !var5.neverSave) { + this.func_28060_a(var5); + } + + if(var5.needsSaving(var1)) { + this.func_28059_b(var5); + var5.isModified = false; + ++var3; + if(var3 == 24 && !var1) { + return false; + } + } + } + + if(var1) { + if(this.field_28066_d == null) { + return true; + } + + this.field_28066_d.saveExtraData(); + } + + return true; + } + + public boolean func_361_a() { + for(int var1 = 0; var1 < 100; ++var1) { + if(!this.field_28062_a.isEmpty()) { + Integer var2 = (Integer)this.field_28062_a.iterator().next(); + Chunk var3 = (Chunk)this.field_28065_e.get(var2); + var3.onChunkUnload(); + this.func_28059_b(var3); + this.func_28060_a(var3); + this.field_28062_a.remove(var2); + this.field_28065_e.remove(var2); + this.field_28064_f.remove(var3); + } + } + + if(this.field_28066_d != null) { + this.field_28066_d.func_661_a(); + } + + return this.chunkGenerator.func_361_a(); + } + + public boolean func_364_b() { + return true; + } +} diff --git a/src/net/minecraft/src/ChunkProviderGenerate.java b/src/net/minecraft/src/ChunkProviderGenerate.java new file mode 100644 index 0000000..9be605a --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderGenerate.java @@ -0,0 +1,616 @@ +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 mobSpawnerNoise; + private World worldObj; + private double[] field_4224_q; + private double[] sandNoise = new double[256]; + private double[] gravelNoise = new double[256]; + private double[] stoneNoise = new double[256]; + private MapGenBase field_695_u = new MapGenCaves(); + private BiomeGenBase[] 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[] generatedTemperatures; + + 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.mobSpawnerNoise = new NoiseGeneratorOctaves(this.rand, 8); + } + + public void generateTerrain(int var1, int var2, byte[] var3, BiomeGenBase[] 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.waterStill.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, BiomeGenBase[] var4) { + byte var5 = 64; + double var6 = 1.0D / 32.0D; + this.sandNoise = this.field_702_n.generateNoiseOctaves(this.sandNoise, (double)(var1 * 16), (double)(var2 * 16), 0.0D, 16, 16, 1, var6, var6, 1.0D); + this.gravelNoise = this.field_702_n.generateNoiseOctaves(this.gravelNoise, (double)(var1 * 16), 109.0134D, (double)(var2 * 16), 16, 1, 16, var6, 1.0D, var6); + this.stoneNoise = this.field_701_o.generateNoiseOctaves(this.stoneNoise, (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) { + BiomeGenBase var10 = var4[var8 + var9 * 16]; + boolean var11 = this.sandNoise[var8 + var9 * 16] + this.rand.nextDouble() * 0.2D > 0.0D; + boolean var12 = this.gravelNoise[var8 + var9 * 16] + this.rand.nextDouble() * 0.2D > 3.0D; + int var13 = (int)(this.stoneNoise[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 = (var9 * 16 + var8) * 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.waterStill.blockID; + } + + var14 = var13; + if(var17 >= var5 - 1) { + var3[var18] = var15; + } else { + var3[var18] = var16; + } + } else if(var14 > 0) { + --var14; + var3[var18] = var16; + if(var14 == 0 && var16 == Block.sand.blockID) { + var14 = this.rand.nextInt(4); + var16 = (byte)Block.sandStone.blockID; + } + } + } + } + } + } + } + + } + + public Chunk loadChunk(int var1, int var2) { + return this.provideChunk(var1, var2); + } + + public Chunk provideChunk(int var1, int var2) { + this.rand.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L); + byte[] var3 = new byte[-Short.MIN_VALUE]; + Chunk var4 = new Chunk(this.worldObj, var3, var1, var2); + this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, var1 * 16, var2 * 16, 16, 16); + double[] var5 = this.worldObj.getWorldChunkManager().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.getWorldChunkManager().temperature; + double[] var13 = this.worldObj.getWorldChunkManager().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.generateNoiseOctaves(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.generateNoiseOctaves(this.field_4228_e, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8); + this.field_4227_f = this.field_704_l.generateNoiseOctaves(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; + BiomeGenBase var6 = this.worldObj.getWorldChunkManager().getBiomeGenAt(var4 + 16, var5 + 16); + this.rand.setSeed(this.worldObj.getRandomSeed()); + 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.getRandomSeed()); + 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.waterStill.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.lavaStill.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); + } + + for(var13 = 0; var13 < 1; ++var13) { + var14 = var4 + this.rand.nextInt(16); + var15 = this.rand.nextInt(16) + this.rand.nextInt(16); + var16 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreLapis.blockID, 6)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + var11 = 0.5D; + var13 = (int)((this.mobSpawnerNoise.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 == BiomeGenBase.forest) { + var14 += var13 + 5; + } + + if(var6 == BiomeGenBase.rainforest) { + var14 += var13 + 5; + } + + if(var6 == BiomeGenBase.seasonalForest) { + var14 += var13 + 2; + } + + if(var6 == BiomeGenBase.taiga) { + var14 += var13 + 5; + } + + if(var6 == BiomeGenBase.desert) { + var14 -= 20; + } + + if(var6 == BiomeGenBase.tundra) { + var14 -= 20; + } + + if(var6 == BiomeGenBase.plains) { + var14 -= 20; + } + + int var17; + for(var15 = 0; var15 < var14; ++var15) { + var16 = var4 + this.rand.nextInt(16) + 8; + var17 = var5 + this.rand.nextInt(16) + 8; + WorldGenerator var18 = var6.getRandomWorldGenForTrees(this.rand); + var18.func_420_a(1.0D, 1.0D, 1.0D); + var18.generate(this.worldObj, this.rand, var16, this.worldObj.getHeightValue(var16, var17), var17); + } + + byte var27 = 0; + if(var6 == BiomeGenBase.forest) { + var27 = 2; + } + + if(var6 == BiomeGenBase.seasonalForest) { + var27 = 4; + } + + if(var6 == BiomeGenBase.taiga) { + var27 = 2; + } + + if(var6 == BiomeGenBase.plains) { + var27 = 3; + } + + int var19; + int var25; + for(var16 = 0; var16 < var27; ++var16) { + var17 = var4 + this.rand.nextInt(16) + 8; + var25 = this.rand.nextInt(128); + var19 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.plantYellow.blockID)).generate(this.worldObj, this.rand, var17, var25, var19); + } + + byte var28 = 0; + if(var6 == BiomeGenBase.forest) { + var28 = 2; + } + + if(var6 == BiomeGenBase.rainforest) { + var28 = 10; + } + + if(var6 == BiomeGenBase.seasonalForest) { + var28 = 2; + } + + if(var6 == BiomeGenBase.taiga) { + var28 = 1; + } + + if(var6 == BiomeGenBase.plains) { + var28 = 10; + } + + int var20; + int var21; + for(var17 = 0; var17 < var28; ++var17) { + byte var26 = 1; + if(var6 == BiomeGenBase.rainforest && this.rand.nextInt(3) != 0) { + var26 = 2; + } + + var19 = var4 + this.rand.nextInt(16) + 8; + var20 = this.rand.nextInt(128); + var21 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenTallGrass(Block.tallGrass.blockID, var26)).generate(this.worldObj, this.rand, var19, var20, var21); + } + + var28 = 0; + if(var6 == BiomeGenBase.desert) { + var28 = 2; + } + + for(var17 = 0; var17 < var28; ++var17) { + var25 = var4 + this.rand.nextInt(16) + 8; + var19 = this.rand.nextInt(128); + var20 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenDeadBush(Block.deadBush.blockID)).generate(this.worldObj, this.rand, var25, var19, var20); + } + + if(this.rand.nextInt(2) == 0) { + var17 = var4 + this.rand.nextInt(16) + 8; + var25 = this.rand.nextInt(128); + var19 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.plantRed.blockID)).generate(this.worldObj, this.rand, var17, var25, var19); + } + + if(this.rand.nextInt(4) == 0) { + var17 = var4 + this.rand.nextInt(16) + 8; + var25 = this.rand.nextInt(128); + var19 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.worldObj, this.rand, var17, var25, var19); + } + + if(this.rand.nextInt(8) == 0) { + var17 = var4 + this.rand.nextInt(16) + 8; + var25 = this.rand.nextInt(128); + var19 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.worldObj, this.rand, var17, var25, var19); + } + + for(var17 = 0; var17 < 10; ++var17) { + var25 = var4 + this.rand.nextInt(16) + 8; + var19 = this.rand.nextInt(128); + var20 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenReed()).generate(this.worldObj, this.rand, var25, var19, var20); + } + + if(this.rand.nextInt(32) == 0) { + var17 = var4 + this.rand.nextInt(16) + 8; + var25 = this.rand.nextInt(128); + var19 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenPumpkin()).generate(this.worldObj, this.rand, var17, var25, var19); + } + + var17 = 0; + if(var6 == BiomeGenBase.desert) { + var17 += 10; + } + + for(var25 = 0; var25 < var17; ++var25) { + var19 = var4 + this.rand.nextInt(16) + 8; + var20 = this.rand.nextInt(128); + var21 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenCactus()).generate(this.worldObj, this.rand, var19, var20, var21); + } + + for(var25 = 0; var25 < 50; ++var25) { + var19 = var4 + this.rand.nextInt(16) + 8; + var20 = this.rand.nextInt(this.rand.nextInt(120) + 8); + var21 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenLiquids(Block.waterMoving.blockID)).generate(this.worldObj, this.rand, var19, var20, var21); + } + + for(var25 = 0; var25 < 20; ++var25) { + var19 = var4 + this.rand.nextInt(16) + 8; + var20 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(112) + 8) + 8); + var21 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenLiquids(Block.lavaMoving.blockID)).generate(this.worldObj, this.rand, var19, var20, var21); + } + + this.generatedTemperatures = this.worldObj.getWorldChunkManager().getTemperatures(this.generatedTemperatures, var4 + 8, var5 + 8, 16, 16); + + for(var25 = var4 + 8; var25 < var4 + 8 + 16; ++var25) { + for(var19 = var5 + 8; var19 < var5 + 8 + 16; ++var19) { + var20 = var25 - (var4 + 8); + var21 = var19 - (var5 + 8); + int var22 = this.worldObj.getTopSolidOrLiquidBlock(var25, var19); + double var23 = this.generatedTemperatures[var20 * 16 + var21] - (double)(var22 - 64) / 64.0D * 0.3D; + if(var23 < 0.5D && var22 > 0 && var22 < 128 && this.worldObj.isAirBlock(var25, var22, var19) && this.worldObj.getBlockMaterial(var25, var22 - 1, var19).getIsSolid() && this.worldObj.getBlockMaterial(var25, var22 - 1, var19) != Material.ice) { + this.worldObj.setBlockWithNotify(var25, var22, var19, Block.snow.blockID); + } + } + } + + BlockSand.fallInstantly = false; + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public boolean func_361_a() { + return false; + } + + public boolean func_364_b() { + return true; + } +} diff --git a/src/net/minecraft/src/ChunkProviderHell.java b/src/net/minecraft/src/ChunkProviderHell.java new file mode 100644 index 0000000..b79effc --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderHell.java @@ -0,0 +1,372 @@ +package net.minecraft.src; + +import java.util.Random; + +public class ChunkProviderHell implements IChunkProvider { + private Random hellRNG; + 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.hellRNG = new Random(var2); + this.field_4240_i = new NoiseGeneratorOctaves(this.hellRNG, 16); + this.field_4239_j = new NoiseGeneratorOctaves(this.hellRNG, 16); + this.field_4238_k = new NoiseGeneratorOctaves(this.hellRNG, 8); + this.field_4237_l = new NoiseGeneratorOctaves(this.hellRNG, 4); + this.field_4236_m = new NoiseGeneratorOctaves(this.hellRNG, 4); + this.field_4248_a = new NoiseGeneratorOctaves(this.hellRNG, 10); + this.field_4247_b = new NoiseGeneratorOctaves(this.hellRNG, 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.lavaStill.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.generateNoiseOctaves(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.generateNoiseOctaves(this.field_4232_q, (double)(var1 * 16), 109.0134D, (double)(var2 * 16), 16, 1, 16, var5, 1.0D, var5); + this.field_4231_r = this.field_4236_m.generateNoiseOctaves(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.hellRNG.nextDouble() * 0.2D > 0.0D; + boolean var10 = this.field_4232_q[var7 + var8 * 16] + this.hellRNG.nextDouble() * 0.2D > 0.0D; + int var11 = (int)(this.field_4231_r[var7 + var8 * 16] / 3.0D + 3.0D + this.hellRNG.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 = (var8 * 16 + var7) * 128 + var15; + if(var15 >= 127 - this.hellRNG.nextInt(5)) { + var3[var16] = (byte)Block.bedrock.blockID; + } else if(var15 <= 0 + this.hellRNG.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.lavaStill.blockID; + } + + var12 = var11; + if(var15 >= var4 - 1) { + var3[var16] = var13; + } else { + var3[var16] = var14; + } + } else if(var12 > 0) { + --var12; + var3[var16] = var14; + } + } + } + } + } + } + + } + + public Chunk loadChunk(int var1, int var2) { + return this.provideChunk(var1, var2); + } + + public Chunk provideChunk(int var1, int var2) { + this.hellRNG.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L); + byte[] var3 = new byte[-Short.MIN_VALUE]; + this.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); + 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.generateNoiseOctaves(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.generateNoiseOctaves(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.generateNoiseOctaves(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.generateNoiseOctaves(this.field_4245_d, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8); + this.field_4244_e = this.field_4239_j.generateNoiseOctaves(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.hellRNG.nextInt(16) + 8; + var8 = this.hellRNG.nextInt(120) + 4; + var9 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenHellLava(Block.lavaMoving.blockID)).generate(this.field_4235_n, this.hellRNG, var7, var8, var9); + } + + var6 = this.hellRNG.nextInt(this.hellRNG.nextInt(10) + 1) + 1; + + int var10; + for(var7 = 0; var7 < var6; ++var7) { + var8 = var4 + this.hellRNG.nextInt(16) + 8; + var9 = this.hellRNG.nextInt(120) + 4; + var10 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenFire()).generate(this.field_4235_n, this.hellRNG, var8, var9, var10); + } + + var6 = this.hellRNG.nextInt(this.hellRNG.nextInt(10) + 1); + + for(var7 = 0; var7 < var6; ++var7) { + var8 = var4 + this.hellRNG.nextInt(16) + 8; + var9 = this.hellRNG.nextInt(120) + 4; + var10 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenGlowStone1()).generate(this.field_4235_n, this.hellRNG, var8, var9, var10); + } + + for(var7 = 0; var7 < 10; ++var7) { + var8 = var4 + this.hellRNG.nextInt(16) + 8; + var9 = this.hellRNG.nextInt(128); + var10 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenGlowStone2()).generate(this.field_4235_n, this.hellRNG, var8, var9, var10); + } + + if(this.hellRNG.nextInt(1) == 0) { + var7 = var4 + this.hellRNG.nextInt(16) + 8; + var8 = this.hellRNG.nextInt(128); + var9 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.field_4235_n, this.hellRNG, var7, var8, var9); + } + + if(this.hellRNG.nextInt(1) == 0) { + var7 = var4 + this.hellRNG.nextInt(16) + 8; + var8 = this.hellRNG.nextInt(128); + var9 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.field_4235_n, this.hellRNG, var7, var8, var9); + } + + BlockSand.fallInstantly = false; + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public boolean func_361_a() { + return false; + } + + public boolean func_364_b() { + return true; + } +} diff --git a/src/net/minecraft/src/ChunkProviderServer.java b/src/net/minecraft/src/ChunkProviderServer.java new file mode 100644 index 0000000..99e55c8 --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderServer.java @@ -0,0 +1,198 @@ +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 dummyChunk; + private IChunkProvider serverChunkGenerator; + private IChunkLoader field_729_d; + public boolean chunkLoadOverride = false; + private Map id2ChunkMap = new HashMap(); + private List field_727_f = new ArrayList(); + private WorldServer world; + + public ChunkProviderServer(WorldServer var1, IChunkLoader var2, IChunkProvider var3) { + this.dummyChunk = new EmptyChunk(var1, new byte[-Short.MIN_VALUE], 0, 0); + this.world = var1; + this.field_729_d = var2; + this.serverChunkGenerator = var3; + } + + public boolean chunkExists(int var1, int var2) { + return this.id2ChunkMap.containsKey(Integer.valueOf(ChunkCoordIntPair.chunkXZ2Int(var1, var2))); + } + + public void func_374_c(int var1, int var2) { + ChunkCoordinates var3 = this.world.getSpawnPoint(); + int var4 = var1 * 16 + 8 - var3.posX; + int var5 = var2 * 16 + 8 - var3.posZ; + short var6 = 128; + if(var4 < -var6 || var4 > var6 || var5 < -var6 || var5 > var6) { + this.field_725_a.add(Integer.valueOf(ChunkCoordIntPair.chunkXZ2Int(var1, var2))); + } + + } + + public Chunk loadChunk(int var1, int var2) { + int var3 = ChunkCoordIntPair.chunkXZ2Int(var1, var2); + this.field_725_a.remove(Integer.valueOf(var3)); + Chunk var4 = (Chunk)this.id2ChunkMap.get(Integer.valueOf(var3)); + if(var4 == null) { + var4 = this.func_4063_e(var1, var2); + if(var4 == null) { + if(this.serverChunkGenerator == null) { + var4 = this.dummyChunk; + } else { + var4 = this.serverChunkGenerator.provideChunk(var1, var2); + } + } + + this.id2ChunkMap.put(Integer.valueOf(var3), var4); + this.field_727_f.add(var4); + if(var4 != null) { + var4.func_4053_c(); + var4.onChunkLoad(); + } + + 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.provideChunk(var1 - 1, var2).isTerrainPopulated && this.chunkExists(var1 - 1, var2 + 1) && this.chunkExists(var1, var2 + 1) && this.chunkExists(var1 - 1, var2)) { + this.populate(this, var1 - 1, var2); + } + + if(this.chunkExists(var1, var2 - 1) && !this.provideChunk(var1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 + 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 + 1, var2)) { + this.populate(this, var1, var2 - 1); + } + + if(this.chunkExists(var1 - 1, var2 - 1) && !this.provideChunk(var1 - 1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 - 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 - 1, var2)) { + this.populate(this, var1 - 1, var2 - 1); + } + } + + return var4; + } + + public Chunk provideChunk(int var1, int var2) { + Chunk var3 = (Chunk)this.id2ChunkMap.get(Integer.valueOf(ChunkCoordIntPair.chunkXZ2Int(var1, var2))); + return var3 == null ? (!this.world.worldChunkLoadOverride && !this.chunkLoadOverride ? this.dummyChunk : this.loadChunk(var1, var2)) : var3; + } + + 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.loadChunk(this.world, var1, var2); + if(var3 != null) { + var3.lastSaveTime = this.world.getWorldTime(); + } + + 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.saveExtraChunkData(this.world, var1); + } catch (Exception var3) { + var3.printStackTrace(); + } + + } + } + + private void func_373_b(Chunk var1) { + if(this.field_729_d != null) { + try { + var1.lastSaveTime = this.world.getWorldTime(); + this.field_729_d.saveChunk(this.world, var1); + } catch (IOException var3) { + var3.printStackTrace(); + } + + } + } + + public void populate(IChunkProvider var1, int var2, int var3) { + Chunk var4 = this.provideChunk(var2, var3); + if(!var4.isTerrainPopulated) { + var4.isTerrainPopulated = true; + if(this.serverChunkGenerator != null) { + this.serverChunkGenerator.populate(var1, var2, var3); + var4.setChunkModified(); + } + } + + } + + public boolean saveChunks(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.neverSave) { + this.func_375_a(var5); + } + + if(var5.needsSaving(var1)) { + this.func_373_b(var5); + var5.isModified = false; + ++var3; + if(var3 == 24 && !var1) { + return false; + } + } + } + + if(var1) { + if(this.field_729_d == null) { + return true; + } + + this.field_729_d.saveExtraData(); + } + + return true; + } + + public boolean func_361_a() { + if(!this.world.levelSaving) { + for(int var1 = 0; var1 < 100; ++var1) { + if(!this.field_725_a.isEmpty()) { + Integer var2 = (Integer)this.field_725_a.iterator().next(); + Chunk var3 = (Chunk)this.id2ChunkMap.get(var2); + var3.onChunkUnload(); + this.func_373_b(var3); + this.func_375_a(var3); + this.field_725_a.remove(var2); + this.id2ChunkMap.remove(var2); + this.field_727_f.remove(var3); + } + } + + if(this.field_729_d != null) { + this.field_729_d.func_661_a(); + } + } + + return this.serverChunkGenerator.func_361_a(); + } + + public boolean func_364_b() { + return !this.world.levelSaving; + } +} diff --git a/src/net/minecraft/src/ChunkProviderSky.java b/src/net/minecraft/src/ChunkProviderSky.java new file mode 100644 index 0000000..0200e28 --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderSky.java @@ -0,0 +1,511 @@ +package net.minecraft.src; + +import java.util.Random; + +public class ChunkProviderSky implements IChunkProvider { + private Random field_28085_j; + private NoiseGeneratorOctaves field_28084_k; + private NoiseGeneratorOctaves field_28083_l; + private NoiseGeneratorOctaves field_28082_m; + private NoiseGeneratorOctaves field_28081_n; + private NoiseGeneratorOctaves field_28080_o; + public NoiseGeneratorOctaves field_28094_a; + public NoiseGeneratorOctaves field_28093_b; + public NoiseGeneratorOctaves field_28092_c; + private World field_28079_p; + private double[] field_28078_q; + private double[] field_28077_r = new double[256]; + private double[] field_28076_s = new double[256]; + private double[] field_28075_t = new double[256]; + private MapGenBase field_28074_u = new MapGenCaves(); + private BiomeGenBase[] field_28073_v; + double[] field_28091_d; + double[] field_28090_e; + double[] field_28089_f; + double[] field_28088_g; + double[] field_28087_h; + int[][] field_28086_i = new int[32][32]; + private double[] field_28072_w; + + public ChunkProviderSky(World var1, long var2) { + this.field_28079_p = var1; + this.field_28085_j = new Random(var2); + this.field_28084_k = new NoiseGeneratorOctaves(this.field_28085_j, 16); + this.field_28083_l = new NoiseGeneratorOctaves(this.field_28085_j, 16); + this.field_28082_m = new NoiseGeneratorOctaves(this.field_28085_j, 8); + this.field_28081_n = new NoiseGeneratorOctaves(this.field_28085_j, 4); + this.field_28080_o = new NoiseGeneratorOctaves(this.field_28085_j, 4); + this.field_28094_a = new NoiseGeneratorOctaves(this.field_28085_j, 10); + this.field_28093_b = new NoiseGeneratorOctaves(this.field_28085_j, 16); + this.field_28092_c = new NoiseGeneratorOctaves(this.field_28085_j, 8); + } + + public void func_28070_a(int var1, int var2, byte[] var3, BiomeGenBase[] var4, double[] var5) { + byte var6 = 2; + int var7 = var6 + 1; + byte var8 = 33; + int var9 = var6 + 1; + this.field_28078_q = this.func_28071_a(this.field_28078_q, var1 * var6, 0, var2 * var6, var7, var8, var9); + + for(int var10 = 0; var10 < var6; ++var10) { + for(int var11 = 0; var11 < var6; ++var11) { + for(int var12 = 0; var12 < 32; ++var12) { + double var13 = 0.25D; + double var15 = this.field_28078_q[((var10 + 0) * var9 + var11 + 0) * var8 + var12 + 0]; + double var17 = this.field_28078_q[((var10 + 0) * var9 + var11 + 1) * var8 + var12 + 0]; + double var19 = this.field_28078_q[((var10 + 1) * var9 + var11 + 0) * var8 + var12 + 0]; + double var21 = this.field_28078_q[((var10 + 1) * var9 + var11 + 1) * var8 + var12 + 0]; + double var23 = (this.field_28078_q[((var10 + 0) * var9 + var11 + 0) * var8 + var12 + 1] - var15) * var13; + double var25 = (this.field_28078_q[((var10 + 0) * var9 + var11 + 1) * var8 + var12 + 1] - var17) * var13; + double var27 = (this.field_28078_q[((var10 + 1) * var9 + var11 + 0) * var8 + var12 + 1] - var19) * var13; + double var29 = (this.field_28078_q[((var10 + 1) * var9 + var11 + 1) * var8 + var12 + 1] - var21) * var13; + + for(int var31 = 0; var31 < 4; ++var31) { + double var32 = 0.125D; + double var34 = var15; + double var36 = var17; + double var38 = (var19 - var15) * var32; + double var40 = (var21 - var17) * var32; + + for(int var42 = 0; var42 < 8; ++var42) { + int var43 = var42 + var10 * 8 << 11 | 0 + var11 * 8 << 7 | var12 * 4 + var31; + short var44 = 128; + double var45 = 0.125D; + double var47 = var34; + double var49 = (var36 - var34) * var45; + + for(int var51 = 0; var51 < 8; ++var51) { + int var52 = 0; + if(var47 > 0.0D) { + var52 = Block.stone.blockID; + } + + var3[var43] = (byte)var52; + var43 += var44; + var47 += var49; + } + + var34 += var38; + var36 += var40; + } + + var15 += var23; + var17 += var25; + var19 += var27; + var21 += var29; + } + } + } + } + + } + + public void func_28069_a(int var1, int var2, byte[] var3, BiomeGenBase[] var4) { + double var5 = 1.0D / 32.0D; + this.field_28077_r = this.field_28081_n.generateNoiseOctaves(this.field_28077_r, (double)(var1 * 16), (double)(var2 * 16), 0.0D, 16, 16, 1, var5, var5, 1.0D); + this.field_28076_s = this.field_28081_n.generateNoiseOctaves(this.field_28076_s, (double)(var1 * 16), 109.0134D, (double)(var2 * 16), 16, 1, 16, var5, 1.0D, var5); + this.field_28075_t = this.field_28080_o.generateNoiseOctaves(this.field_28075_t, (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) { + BiomeGenBase var9 = var4[var7 + var8 * 16]; + int var10 = (int)(this.field_28075_t[var7 + var8 * 16] / 3.0D + 3.0D + this.field_28085_j.nextDouble() * 0.25D); + int var11 = -1; + byte var12 = var9.topBlock; + byte var13 = var9.fillerBlock; + + for(int var14 = 127; var14 >= 0; --var14) { + int var15 = (var8 * 16 + var7) * 128 + var14; + byte var16 = var3[var15]; + if(var16 == 0) { + var11 = -1; + } else if(var16 == Block.stone.blockID) { + if(var11 == -1) { + if(var10 <= 0) { + var12 = 0; + var13 = (byte)Block.stone.blockID; + } + + var11 = var10; + if(var14 >= 0) { + var3[var15] = var12; + } else { + var3[var15] = var13; + } + } else if(var11 > 0) { + --var11; + var3[var15] = var13; + if(var11 == 0 && var13 == Block.sand.blockID) { + var11 = this.field_28085_j.nextInt(4); + var13 = (byte)Block.sandStone.blockID; + } + } + } + } + } + } + + } + + public Chunk loadChunk(int var1, int var2) { + return this.provideChunk(var1, var2); + } + + public Chunk provideChunk(int var1, int var2) { + this.field_28085_j.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L); + byte[] var3 = new byte[-Short.MIN_VALUE]; + Chunk var4 = new Chunk(this.field_28079_p, var3, var1, var2); + this.field_28073_v = this.field_28079_p.getWorldChunkManager().loadBlockGeneratorData(this.field_28073_v, var1 * 16, var2 * 16, 16, 16); + double[] var5 = this.field_28079_p.getWorldChunkManager().temperature; + this.func_28070_a(var1, var2, var3, this.field_28073_v, var5); + this.func_28069_a(var1, var2, var3, this.field_28073_v); + this.field_28074_u.func_667_a(this, this.field_28079_p, var1, var2, var3); + var4.func_353_b(); + return var4; + } + + private double[] func_28071_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.field_28079_p.getWorldChunkManager().temperature; + double[] var13 = this.field_28079_p.getWorldChunkManager().humidity; + this.field_28088_g = this.field_28094_a.func_4103_a(this.field_28088_g, var2, var4, var5, var7, 1.121D, 1.121D, 0.5D); + this.field_28087_h = this.field_28093_b.func_4103_a(this.field_28087_h, var2, var4, var5, var7, 200.0D, 200.0D, 0.5D); + var8 *= 2.0D; + this.field_28091_d = this.field_28082_m.generateNoiseOctaves(this.field_28091_d, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8 / 80.0D, var10 / 160.0D, var8 / 80.0D); + this.field_28090_e = this.field_28084_k.generateNoiseOctaves(this.field_28090_e, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8); + this.field_28089_f = this.field_28083_l.generateNoiseOctaves(this.field_28089_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_28088_g[var15] + 256.0D) / 512.0D; + var27 *= var25; + if(var27 > 1.0D) { + var27 = 1.0D; + } + + double var29 = this.field_28087_h[var15] / 8000.0D; + if(var29 < 0.0D) { + var29 = -var29 * 0.3D; + } + + var29 = var29 * 3.0D - 2.0D; + if(var29 > 1.0D) { + var29 = 1.0D; + } + + var29 /= 8.0D; + var29 = 0.0D; + if(var27 < 0.0D) { + var27 = 0.0D; + } + + var27 += 0.5D; + var29 = var29 * (double)var6 / 16.0D; + ++var15; + double var31 = (double)var6 / 2.0D; + + for(int var33 = 0; var33 < var6; ++var33) { + double var34 = 0.0D; + double var36 = ((double)var33 - var31) * 8.0D / var27; + if(var36 < 0.0D) { + var36 *= -1.0D; + } + + double var38 = this.field_28090_e[var14] / 512.0D; + double var40 = this.field_28089_f[var14] / 512.0D; + double var42 = (this.field_28091_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 -= 8.0D; + byte var44 = 32; + double var45; + if(var33 > var6 - var44) { + var45 = (double)((float)(var33 - (var6 - var44)) / ((float)var44 - 1.0F)); + var34 = var34 * (1.0D - var45) + -30.0D * var45; + } + + var44 = 8; + if(var33 < var44) { + var45 = (double)((float)(var44 - var33) / ((float)var44 - 1.0F)); + var34 = var34 * (1.0D - var45) + -30.0D * var45; + } + + 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; + BiomeGenBase var6 = this.field_28079_p.getWorldChunkManager().getBiomeGenAt(var4 + 16, var5 + 16); + this.field_28085_j.setSeed(this.field_28079_p.getRandomSeed()); + long var7 = this.field_28085_j.nextLong() / 2L * 2L + 1L; + long var9 = this.field_28085_j.nextLong() / 2L * 2L + 1L; + this.field_28085_j.setSeed((long)var2 * var7 + (long)var3 * var9 ^ this.field_28079_p.getRandomSeed()); + double var11 = 0.25D; + int var13; + int var14; + int var15; + if(this.field_28085_j.nextInt(4) == 0) { + var13 = var4 + this.field_28085_j.nextInt(16) + 8; + var14 = this.field_28085_j.nextInt(128); + var15 = var5 + this.field_28085_j.nextInt(16) + 8; + (new WorldGenLakes(Block.waterStill.blockID)).generate(this.field_28079_p, this.field_28085_j, var13, var14, var15); + } + + if(this.field_28085_j.nextInt(8) == 0) { + var13 = var4 + this.field_28085_j.nextInt(16) + 8; + var14 = this.field_28085_j.nextInt(this.field_28085_j.nextInt(120) + 8); + var15 = var5 + this.field_28085_j.nextInt(16) + 8; + if(var14 < 64 || this.field_28085_j.nextInt(10) == 0) { + (new WorldGenLakes(Block.lavaStill.blockID)).generate(this.field_28079_p, this.field_28085_j, var13, var14, var15); + } + } + + int var16; + for(var13 = 0; var13 < 8; ++var13) { + var14 = var4 + this.field_28085_j.nextInt(16) + 8; + var15 = this.field_28085_j.nextInt(128); + var16 = var5 + this.field_28085_j.nextInt(16) + 8; + (new WorldGenDungeons()).generate(this.field_28079_p, this.field_28085_j, var14, var15, var16); + } + + for(var13 = 0; var13 < 10; ++var13) { + var14 = var4 + this.field_28085_j.nextInt(16); + var15 = this.field_28085_j.nextInt(128); + var16 = var5 + this.field_28085_j.nextInt(16); + (new WorldGenClay(32)).generate(this.field_28079_p, this.field_28085_j, var14, var15, var16); + } + + for(var13 = 0; var13 < 20; ++var13) { + var14 = var4 + this.field_28085_j.nextInt(16); + var15 = this.field_28085_j.nextInt(128); + var16 = var5 + this.field_28085_j.nextInt(16); + (new WorldGenMinable(Block.dirt.blockID, 32)).generate(this.field_28079_p, this.field_28085_j, var14, var15, var16); + } + + for(var13 = 0; var13 < 10; ++var13) { + var14 = var4 + this.field_28085_j.nextInt(16); + var15 = this.field_28085_j.nextInt(128); + var16 = var5 + this.field_28085_j.nextInt(16); + (new WorldGenMinable(Block.gravel.blockID, 32)).generate(this.field_28079_p, this.field_28085_j, var14, var15, var16); + } + + for(var13 = 0; var13 < 20; ++var13) { + var14 = var4 + this.field_28085_j.nextInt(16); + var15 = this.field_28085_j.nextInt(128); + var16 = var5 + this.field_28085_j.nextInt(16); + (new WorldGenMinable(Block.oreCoal.blockID, 16)).generate(this.field_28079_p, this.field_28085_j, var14, var15, var16); + } + + for(var13 = 0; var13 < 20; ++var13) { + var14 = var4 + this.field_28085_j.nextInt(16); + var15 = this.field_28085_j.nextInt(64); + var16 = var5 + this.field_28085_j.nextInt(16); + (new WorldGenMinable(Block.oreIron.blockID, 8)).generate(this.field_28079_p, this.field_28085_j, var14, var15, var16); + } + + for(var13 = 0; var13 < 2; ++var13) { + var14 = var4 + this.field_28085_j.nextInt(16); + var15 = this.field_28085_j.nextInt(32); + var16 = var5 + this.field_28085_j.nextInt(16); + (new WorldGenMinable(Block.oreGold.blockID, 8)).generate(this.field_28079_p, this.field_28085_j, var14, var15, var16); + } + + for(var13 = 0; var13 < 8; ++var13) { + var14 = var4 + this.field_28085_j.nextInt(16); + var15 = this.field_28085_j.nextInt(16); + var16 = var5 + this.field_28085_j.nextInt(16); + (new WorldGenMinable(Block.oreRedstone.blockID, 7)).generate(this.field_28079_p, this.field_28085_j, var14, var15, var16); + } + + for(var13 = 0; var13 < 1; ++var13) { + var14 = var4 + this.field_28085_j.nextInt(16); + var15 = this.field_28085_j.nextInt(16); + var16 = var5 + this.field_28085_j.nextInt(16); + (new WorldGenMinable(Block.oreDiamond.blockID, 7)).generate(this.field_28079_p, this.field_28085_j, var14, var15, var16); + } + + for(var13 = 0; var13 < 1; ++var13) { + var14 = var4 + this.field_28085_j.nextInt(16); + var15 = this.field_28085_j.nextInt(16) + this.field_28085_j.nextInt(16); + var16 = var5 + this.field_28085_j.nextInt(16); + (new WorldGenMinable(Block.oreLapis.blockID, 6)).generate(this.field_28079_p, this.field_28085_j, var14, var15, var16); + } + + var11 = 0.5D; + var13 = (int)((this.field_28092_c.func_647_a((double)var4 * var11, (double)var5 * var11) / 8.0D + this.field_28085_j.nextDouble() * 4.0D + 4.0D) / 3.0D); + var14 = 0; + if(this.field_28085_j.nextInt(10) == 0) { + ++var14; + } + + if(var6 == BiomeGenBase.forest) { + var14 += var13 + 5; + } + + if(var6 == BiomeGenBase.rainforest) { + var14 += var13 + 5; + } + + if(var6 == BiomeGenBase.seasonalForest) { + var14 += var13 + 2; + } + + if(var6 == BiomeGenBase.taiga) { + var14 += var13 + 5; + } + + if(var6 == BiomeGenBase.desert) { + var14 -= 20; + } + + if(var6 == BiomeGenBase.tundra) { + var14 -= 20; + } + + if(var6 == BiomeGenBase.plains) { + var14 -= 20; + } + + int var17; + for(var15 = 0; var15 < var14; ++var15) { + var16 = var4 + this.field_28085_j.nextInt(16) + 8; + var17 = var5 + this.field_28085_j.nextInt(16) + 8; + WorldGenerator var18 = var6.getRandomWorldGenForTrees(this.field_28085_j); + var18.func_420_a(1.0D, 1.0D, 1.0D); + var18.generate(this.field_28079_p, this.field_28085_j, var16, this.field_28079_p.getHeightValue(var16, var17), var17); + } + + int var23; + for(var15 = 0; var15 < 2; ++var15) { + var16 = var4 + this.field_28085_j.nextInt(16) + 8; + var17 = this.field_28085_j.nextInt(128); + var23 = var5 + this.field_28085_j.nextInt(16) + 8; + (new WorldGenFlowers(Block.plantYellow.blockID)).generate(this.field_28079_p, this.field_28085_j, var16, var17, var23); + } + + if(this.field_28085_j.nextInt(2) == 0) { + var15 = var4 + this.field_28085_j.nextInt(16) + 8; + var16 = this.field_28085_j.nextInt(128); + var17 = var5 + this.field_28085_j.nextInt(16) + 8; + (new WorldGenFlowers(Block.plantRed.blockID)).generate(this.field_28079_p, this.field_28085_j, var15, var16, var17); + } + + if(this.field_28085_j.nextInt(4) == 0) { + var15 = var4 + this.field_28085_j.nextInt(16) + 8; + var16 = this.field_28085_j.nextInt(128); + var17 = var5 + this.field_28085_j.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.field_28079_p, this.field_28085_j, var15, var16, var17); + } + + if(this.field_28085_j.nextInt(8) == 0) { + var15 = var4 + this.field_28085_j.nextInt(16) + 8; + var16 = this.field_28085_j.nextInt(128); + var17 = var5 + this.field_28085_j.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.field_28079_p, this.field_28085_j, var15, var16, var17); + } + + for(var15 = 0; var15 < 10; ++var15) { + var16 = var4 + this.field_28085_j.nextInt(16) + 8; + var17 = this.field_28085_j.nextInt(128); + var23 = var5 + this.field_28085_j.nextInt(16) + 8; + (new WorldGenReed()).generate(this.field_28079_p, this.field_28085_j, var16, var17, var23); + } + + if(this.field_28085_j.nextInt(32) == 0) { + var15 = var4 + this.field_28085_j.nextInt(16) + 8; + var16 = this.field_28085_j.nextInt(128); + var17 = var5 + this.field_28085_j.nextInt(16) + 8; + (new WorldGenPumpkin()).generate(this.field_28079_p, this.field_28085_j, var15, var16, var17); + } + + var15 = 0; + if(var6 == BiomeGenBase.desert) { + var15 += 10; + } + + int var19; + for(var16 = 0; var16 < var15; ++var16) { + var17 = var4 + this.field_28085_j.nextInt(16) + 8; + var23 = this.field_28085_j.nextInt(128); + var19 = var5 + this.field_28085_j.nextInt(16) + 8; + (new WorldGenCactus()).generate(this.field_28079_p, this.field_28085_j, var17, var23, var19); + } + + for(var16 = 0; var16 < 50; ++var16) { + var17 = var4 + this.field_28085_j.nextInt(16) + 8; + var23 = this.field_28085_j.nextInt(this.field_28085_j.nextInt(120) + 8); + var19 = var5 + this.field_28085_j.nextInt(16) + 8; + (new WorldGenLiquids(Block.waterMoving.blockID)).generate(this.field_28079_p, this.field_28085_j, var17, var23, var19); + } + + for(var16 = 0; var16 < 20; ++var16) { + var17 = var4 + this.field_28085_j.nextInt(16) + 8; + var23 = this.field_28085_j.nextInt(this.field_28085_j.nextInt(this.field_28085_j.nextInt(112) + 8) + 8); + var19 = var5 + this.field_28085_j.nextInt(16) + 8; + (new WorldGenLiquids(Block.lavaMoving.blockID)).generate(this.field_28079_p, this.field_28085_j, var17, var23, var19); + } + + this.field_28072_w = this.field_28079_p.getWorldChunkManager().getTemperatures(this.field_28072_w, var4 + 8, var5 + 8, 16, 16); + + for(var16 = var4 + 8; var16 < var4 + 8 + 16; ++var16) { + for(var17 = var5 + 8; var17 < var5 + 8 + 16; ++var17) { + var23 = var16 - (var4 + 8); + var19 = var17 - (var5 + 8); + int var20 = this.field_28079_p.getTopSolidOrLiquidBlock(var16, var17); + double var21 = this.field_28072_w[var23 * 16 + var19] - (double)(var20 - 64) / 64.0D * 0.3D; + if(var21 < 0.5D && var20 > 0 && var20 < 128 && this.field_28079_p.isAirBlock(var16, var20, var17) && this.field_28079_p.getBlockMaterial(var16, var20 - 1, var17).getIsSolid() && this.field_28079_p.getBlockMaterial(var16, var20 - 1, var17) != Material.ice) { + this.field_28079_p.setBlockWithNotify(var16, var20, var17, Block.snow.blockID); + } + } + } + + BlockSand.fallInstantly = false; + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public boolean func_361_a() { + return false; + } + + public boolean func_364_b() { + return true; + } +} diff --git a/src/net/minecraft/src/CompressedStreamTools.java b/src/net/minecraft/src/CompressedStreamTools.java new file mode 100644 index 0000000..b09db98 --- /dev/null +++ b/src/net/minecraft/src/CompressedStreamTools.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + +public class CompressedStreamTools { + public static NBTTagCompound 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 writeGzippedCompoundToOutputStream(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_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/src/net/minecraft/src/ConsoleCommandHandler.java b/src/net/minecraft/src/ConsoleCommandHandler.java new file mode 100644 index 0000000..4d1483e --- /dev/null +++ b/src/net/minecraft/src/ConsoleCommandHandler.java @@ -0,0 +1,309 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.Set; +import java.util.logging.Logger; +import net.minecraft.server.MinecraftServer; + +public class ConsoleCommandHandler { + private static Logger minecraftLogger = Logger.getLogger("Minecraft"); + private MinecraftServer minecraftServer; + + public ConsoleCommandHandler(MinecraftServer var1) { + this.minecraftServer = var1; + } + + public void handleCommand(ServerCommand var1) { + String var2 = var1.command; + ICommandListener var3 = var1.commandListener; + String var4 = var3.getUsername(); + ServerConfigurationManager var5 = this.minecraftServer.configManager; + if(!var2.toLowerCase().startsWith("help") && !var2.toLowerCase().startsWith("?")) { + if(var2.toLowerCase().startsWith("list")) { + var3.log("Connected players: " + var5.getPlayerList()); + } else if(var2.toLowerCase().startsWith("stop")) { + this.sendNoticeToOps(var4, "Stopping the server.."); + this.minecraftServer.initiateShutdown(); + } else { + int var6; + WorldServer var7; + if(var2.toLowerCase().startsWith("save-all")) { + this.sendNoticeToOps(var4, "Forcing save.."); + if(var5 != null) { + var5.savePlayerStates(); + } + + for(var6 = 0; var6 < this.minecraftServer.worldMngr.length; ++var6) { + var7 = this.minecraftServer.worldMngr[var6]; + var7.saveWorld(true, (IProgressUpdate)null); + } + + this.sendNoticeToOps(var4, "Save complete."); + } else if(var2.toLowerCase().startsWith("save-off")) { + this.sendNoticeToOps(var4, "Disabling level saving.."); + + for(var6 = 0; var6 < this.minecraftServer.worldMngr.length; ++var6) { + var7 = this.minecraftServer.worldMngr[var6]; + var7.levelSaving = true; + } + } else if(var2.toLowerCase().startsWith("save-on")) { + this.sendNoticeToOps(var4, "Enabling level saving.."); + + for(var6 = 0; var6 < this.minecraftServer.worldMngr.length; ++var6) { + var7 = this.minecraftServer.worldMngr[var6]; + var7.levelSaving = false; + } + } else { + String var13; + if(var2.toLowerCase().startsWith("op ")) { + var13 = var2.substring(var2.indexOf(" ")).trim(); + var5.opPlayer(var13); + this.sendNoticeToOps(var4, "Opping " + var13); + var5.sendChatMessageToPlayer(var13, "\u00a7eYou are now op!"); + } else if(var2.toLowerCase().startsWith("deop ")) { + var13 = var2.substring(var2.indexOf(" ")).trim(); + var5.deopPlayer(var13); + var5.sendChatMessageToPlayer(var13, "\u00a7eYou are no longer op!"); + this.sendNoticeToOps(var4, "De-opping " + var13); + } else if(var2.toLowerCase().startsWith("ban-ip ")) { + var13 = var2.substring(var2.indexOf(" ")).trim(); + var5.banIP(var13); + this.sendNoticeToOps(var4, "Banning ip " + var13); + } else if(var2.toLowerCase().startsWith("pardon-ip ")) { + var13 = var2.substring(var2.indexOf(" ")).trim(); + var5.pardonIP(var13); + this.sendNoticeToOps(var4, "Pardoning ip " + var13); + } else { + EntityPlayerMP var14; + if(var2.toLowerCase().startsWith("ban ")) { + var13 = var2.substring(var2.indexOf(" ")).trim(); + var5.banPlayer(var13); + this.sendNoticeToOps(var4, "Banning " + var13); + var14 = var5.getPlayerEntity(var13); + if(var14 != null) { + var14.playerNetServerHandler.kickPlayer("Banned by admin"); + } + } else if(var2.toLowerCase().startsWith("pardon ")) { + var13 = var2.substring(var2.indexOf(" ")).trim(); + var5.pardonPlayer(var13); + this.sendNoticeToOps(var4, "Pardoning " + var13); + } else { + int var8; + if(var2.toLowerCase().startsWith("kick ")) { + var13 = var2.substring(var2.indexOf(" ")).trim(); + var14 = null; + + for(var8 = 0; var8 < var5.playerEntities.size(); ++var8) { + EntityPlayerMP var9 = (EntityPlayerMP)var5.playerEntities.get(var8); + if(var9.username.equalsIgnoreCase(var13)) { + var14 = var9; + } + } + + if(var14 != null) { + var14.playerNetServerHandler.kickPlayer("Kicked by admin"); + this.sendNoticeToOps(var4, "Kicking " + var14.username); + } else { + var3.log("Can\'t find user " + var13 + ". No kick."); + } + } else { + EntityPlayerMP var15; + String[] var18; + if(var2.toLowerCase().startsWith("tp ")) { + var18 = var2.split(" "); + if(var18.length == 3) { + var14 = var5.getPlayerEntity(var18[1]); + var15 = var5.getPlayerEntity(var18[2]); + if(var14 == null) { + var3.log("Can\'t find user " + var18[1] + ". No tp."); + } else if(var15 == null) { + var3.log("Can\'t find user " + var18[2] + ". No tp."); + } else if(var14.dimension != var15.dimension) { + var3.log("User " + var18[1] + " and " + var18[2] + " are in different dimensions. No tp."); + } else { + var14.playerNetServerHandler.teleportTo(var15.posX, var15.posY, var15.posZ, var15.rotationYaw, var15.rotationPitch); + this.sendNoticeToOps(var4, "Teleporting " + var18[1] + " to " + var18[2] + "."); + } + } else { + var3.log("Syntax error, please provice a source and a target."); + } + } else { + String var16; + int var17; + if(var2.toLowerCase().startsWith("give ")) { + var18 = var2.split(" "); + if(var18.length != 3 && var18.length != 4) { + return; + } + + var16 = var18[1]; + var15 = var5.getPlayerEntity(var16); + if(var15 != null) { + try { + var17 = Integer.parseInt(var18[2]); + if(Item.itemsList[var17] != null) { + this.sendNoticeToOps(var4, "Giving " + var15.username + " some " + var17); + int var10 = 1; + if(var18.length > 3) { + var10 = this.tryParse(var18[3], 1); + } + + if(var10 < 1) { + var10 = 1; + } + + if(var10 > 64) { + var10 = 64; + } + + var15.dropPlayerItem(new ItemStack(var17, var10, 0)); + } else { + var3.log("There\'s no item with id " + var17); + } + } catch (NumberFormatException var11) { + var3.log("There\'s no item with id " + var18[2]); + } + } else { + var3.log("Can\'t find user " + var16); + } + } else if(var2.toLowerCase().startsWith("time ")) { + var18 = var2.split(" "); + if(var18.length != 3) { + return; + } + + var16 = var18[1]; + + try { + var8 = Integer.parseInt(var18[2]); + WorldServer var19; + if("add".equalsIgnoreCase(var16)) { + for(var17 = 0; var17 < this.minecraftServer.worldMngr.length; ++var17) { + var19 = this.minecraftServer.worldMngr[var17]; + var19.func_32005_b(var19.getWorldTime() + (long)var8); + } + + this.sendNoticeToOps(var4, "Added " + var8 + " to time"); + } else if("set".equalsIgnoreCase(var16)) { + for(var17 = 0; var17 < this.minecraftServer.worldMngr.length; ++var17) { + var19 = this.minecraftServer.worldMngr[var17]; + var19.func_32005_b((long)var8); + } + + this.sendNoticeToOps(var4, "Set time to " + var8); + } else { + var3.log("Unknown method, use either \"add\" or \"set\""); + } + } catch (NumberFormatException var12) { + var3.log("Unable to convert time value, " + var18[2]); + } + } else if(var2.toLowerCase().startsWith("say ")) { + var2 = var2.substring(var2.indexOf(" ")).trim(); + minecraftLogger.info("[" + var4 + "] " + var2); + var5.sendPacketToAllPlayers(new Packet3Chat("\u00a7d[Server] " + var2)); + } else if(var2.toLowerCase().startsWith("tell ")) { + var18 = var2.split(" "); + if(var18.length >= 3) { + var2 = var2.substring(var2.indexOf(" ")).trim(); + var2 = var2.substring(var2.indexOf(" ")).trim(); + minecraftLogger.info("[" + var4 + "->" + var18[1] + "] " + var2); + var2 = "\u00a77" + var4 + " whispers " + var2; + minecraftLogger.info(var2); + if(!var5.sendPacketToPlayer(var18[1], new Packet3Chat(var2))) { + var3.log("There\'s no player by that name online."); + } + } + } else if(var2.toLowerCase().startsWith("whitelist ")) { + this.handleWhitelist(var4, var2, var3); + } else { + minecraftLogger.info("Unknown console command. Type \"help\" for help."); + } + } + } + } + } + } + } + } else { + this.printHelp(var3); + } + + } + + private void handleWhitelist(String var1, String var2, ICommandListener var3) { + String[] var4 = var2.split(" "); + if(var4.length >= 2) { + String var5 = var4[1].toLowerCase(); + if("on".equals(var5)) { + this.sendNoticeToOps(var1, "Turned on white-listing"); + this.minecraftServer.propertyManagerObj.setProperty("white-list", true); + } else if("off".equals(var5)) { + this.sendNoticeToOps(var1, "Turned off white-listing"); + this.minecraftServer.propertyManagerObj.setProperty("white-list", false); + } else if("list".equals(var5)) { + Set var6 = this.minecraftServer.configManager.getWhiteListedIPs(); + String var7 = ""; + + String var9; + for(Iterator var8 = var6.iterator(); var8.hasNext(); var7 = var7 + var9 + " ") { + var9 = (String)var8.next(); + } + + var3.log("White-listed players: " + var7); + } else { + String var10; + if("add".equals(var5) && var4.length == 3) { + var10 = var4[2].toLowerCase(); + this.minecraftServer.configManager.addToWhiteList(var10); + this.sendNoticeToOps(var1, "Added " + var10 + " to white-list"); + } else if("remove".equals(var5) && var4.length == 3) { + var10 = var4[2].toLowerCase(); + this.minecraftServer.configManager.removeFromWhiteList(var10); + this.sendNoticeToOps(var1, "Removed " + var10 + " from white-list"); + } else if("reload".equals(var5)) { + this.minecraftServer.configManager.reloadWhiteList(); + this.sendNoticeToOps(var1, "Reloaded white-list from file"); + } + } + + } + } + + private void printHelp(ICommandListener var1) { + var1.log("To run the server without a gui, start it like this:"); + var1.log(" java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui"); + var1.log("Console commands:"); + var1.log(" help or ? shows this message"); + var1.log(" kick removes a player from the server"); + var1.log(" ban bans a player from the server"); + var1.log(" pardon pardons a banned player so that they can connect again"); + var1.log(" ban-ip bans an IP address from the server"); + var1.log(" pardon-ip pardons a banned IP address so that they can connect again"); + var1.log(" op turns a player into an op"); + var1.log(" deop removes op status from a player"); + var1.log(" tp moves one player to the same location as another player"); + var1.log(" give [num] gives a player a resource"); + var1.log(" tell sends a private message to a player"); + var1.log(" stop gracefully stops the server"); + var1.log(" save-all forces a server-wide level save"); + var1.log(" save-off disables terrain saving (useful for backup scripts)"); + var1.log(" save-on re-enables terrain saving"); + var1.log(" list lists all currently connected players"); + var1.log(" say broadcasts a message to all players"); + var1.log(" time adds to or sets the world time (0-24000)"); + } + + private void sendNoticeToOps(String var1, String var2) { + String var3 = var1 + ": " + var2; + this.minecraftServer.configManager.sendChatMessageToAllOps("\u00a77(" + var3 + ")"); + minecraftLogger.info(var3); + } + + private int tryParse(String var1, int var2) { + try { + return Integer.parseInt(var1); + } catch (NumberFormatException var4) { + return var2; + } + } +} diff --git a/src/net/minecraft/src/ConsoleLogFormatter.java b/src/net/minecraft/src/ConsoleLogFormatter.java new file mode 100644 index 0000000..67b463a --- /dev/null +++ b/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/src/net/minecraft/src/ConsoleLogManager.java b/src/net/minecraft/src/ConsoleLogManager.java new file mode 100644 index 0000000..0da1e62 --- /dev/null +++ b/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/src/net/minecraft/src/Container.java b/src/net/minecraft/src/Container.java new file mode 100644 index 0000000..33b5c62 --- /dev/null +++ b/src/net/minecraft/src/Container.java @@ -0,0 +1,272 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public abstract class Container { + public List inventoryItemStacks = new ArrayList(); + public List inventorySlots = new ArrayList(); + public int windowId = 0; + private short field_20132_a = 0; + protected List crafters = new ArrayList(); + private Set field_20131_b = new HashSet(); + + protected void addSlot(Slot var1) { + var1.id = this.inventorySlots.size(); + this.inventorySlots.add(var1); + this.inventoryItemStacks.add((Object)null); + } + + public void onCraftGuiOpened(ICrafting var1) { + if(this.crafters.contains(var1)) { + throw new IllegalArgumentException("Listener already listening"); + } else { + this.crafters.add(var1); + var1.updateCraftingInventory(this, this.func_28127_b()); + this.updateCraftingMatrix(); + } + } + + public List func_28127_b() { + ArrayList var1 = new ArrayList(); + + for(int var2 = 0; var2 < this.inventorySlots.size(); ++var2) { + var1.add(((Slot)this.inventorySlots.get(var2)).getStack()); + } + + return var1; + } + + public void updateCraftingMatrix() { + for(int var1 = 0; var1 < this.inventorySlots.size(); ++var1) { + ItemStack var2 = ((Slot)this.inventorySlots.get(var1)).getStack(); + ItemStack var3 = (ItemStack)this.inventoryItemStacks.get(var1); + if(!ItemStack.areItemStacksEqual(var3, var2)) { + var3 = var2 == null ? null : var2.copy(); + this.inventoryItemStacks.set(var1, var3); + + for(int var4 = 0; var4 < this.crafters.size(); ++var4) { + ((ICrafting)this.crafters.get(var4)).updateCraftingInventorySlot(this, var1, var3); + } + } + } + + } + + public Slot func_20127_a(IInventory var1, int var2) { + for(int var3 = 0; var3 < this.inventorySlots.size(); ++var3) { + Slot var4 = (Slot)this.inventorySlots.get(var3); + if(var4.isHere(var1, var2)) { + return var4; + } + } + + return null; + } + + public Slot getSlot(int var1) { + return (Slot)this.inventorySlots.get(var1); + } + + public ItemStack func_27086_a(int var1) { + Slot var2 = (Slot)this.inventorySlots.get(var1); + return var2 != null ? var2.getStack() : null; + } + + public ItemStack func_27085_a(int var1, int var2, boolean var3, EntityPlayer var4) { + ItemStack var5 = null; + if(var2 == 0 || var2 == 1) { + InventoryPlayer var6 = var4.inventory; + if(var1 == -999) { + if(var6.getItemStack() != null && var1 == -999) { + if(var2 == 0) { + var4.dropPlayerItem(var6.getItemStack()); + var6.setItemStack((ItemStack)null); + } + + if(var2 == 1) { + var4.dropPlayerItem(var6.getItemStack().splitStack(1)); + if(var6.getItemStack().stackSize == 0) { + var6.setItemStack((ItemStack)null); + } + } + } + } else { + int var10; + if(var3) { + ItemStack var7 = this.func_27086_a(var1); + if(var7 != null) { + int var8 = var7.stackSize; + var5 = var7.copy(); + Slot var9 = (Slot)this.inventorySlots.get(var1); + if(var9 != null && var9.getStack() != null) { + var10 = var9.getStack().stackSize; + if(var10 < var8) { + this.func_27085_a(var1, var2, var3, var4); + } + } + } + } else { + Slot var12 = (Slot)this.inventorySlots.get(var1); + if(var12 != null) { + var12.onSlotChanged(); + ItemStack var13 = var12.getStack(); + ItemStack var14 = var6.getItemStack(); + if(var13 != null) { + var5 = var13.copy(); + } + + if(var13 == null) { + if(var14 != null && var12.isItemValid(var14)) { + var10 = var2 == 0 ? var14.stackSize : 1; + if(var10 > var12.getSlotStackLimit()) { + var10 = var12.getSlotStackLimit(); + } + + var12.putStack(var14.splitStack(var10)); + if(var14.stackSize == 0) { + var6.setItemStack((ItemStack)null); + } + } + } else if(var14 == null) { + var10 = var2 == 0 ? var13.stackSize : (var13.stackSize + 1) / 2; + ItemStack var11 = var12.decrStackSize(var10); + var6.setItemStack(var11); + if(var13.stackSize == 0) { + var12.putStack((ItemStack)null); + } + + var12.onPickupFromSlot(var6.getItemStack()); + } else if(var12.isItemValid(var14)) { + if(var13.itemID != var14.itemID || var13.getHasSubtypes() && var13.getItemDamage() != var14.getItemDamage()) { + if(var14.stackSize <= var12.getSlotStackLimit()) { + var12.putStack(var14); + var6.setItemStack(var13); + } + } else { + var10 = var2 == 0 ? var14.stackSize : 1; + if(var10 > var12.getSlotStackLimit() - var13.stackSize) { + var10 = var12.getSlotStackLimit() - var13.stackSize; + } + + if(var10 > var14.getMaxStackSize() - var13.stackSize) { + var10 = var14.getMaxStackSize() - var13.stackSize; + } + + var14.splitStack(var10); + if(var14.stackSize == 0) { + var6.setItemStack((ItemStack)null); + } + + var13.stackSize += var10; + } + } else if(var13.itemID == var14.itemID && var14.getMaxStackSize() > 1 && (!var13.getHasSubtypes() || var13.getItemDamage() == var14.getItemDamage())) { + var10 = var13.stackSize; + if(var10 > 0 && var10 + var14.stackSize <= var14.getMaxStackSize()) { + var14.stackSize += var10; + var13.splitStack(var10); + if(var13.stackSize == 0) { + var12.putStack((ItemStack)null); + } + + var12.onPickupFromSlot(var6.getItemStack()); + } + } + } + } + } + } + + return var5; + } + + public void onCraftGuiClosed(EntityPlayer var1) { + InventoryPlayer var2 = var1.inventory; + if(var2.getItemStack() != null) { + var1.dropPlayerItem(var2.getItemStack()); + var2.setItemStack((ItemStack)null); + } + + } + + public void onCraftMatrixChanged(IInventory var1) { + this.updateCraftingMatrix(); + } + + public boolean getCanCraft(EntityPlayer var1) { + return !this.field_20131_b.contains(var1); + } + + public void setCanCraft(EntityPlayer var1, boolean var2) { + if(var2) { + this.field_20131_b.remove(var1); + } else { + this.field_20131_b.add(var1); + } + + } + + public abstract boolean canInteractWith(EntityPlayer var1); + + protected void func_28126_a(ItemStack var1, int var2, int var3, boolean var4) { + int var5 = var2; + if(var4) { + var5 = var3 - 1; + } + + Slot var6; + ItemStack var7; + if(var1.func_21132_c()) { + while(var1.stackSize > 0 && (!var4 && var5 < var3 || var4 && var5 >= var2)) { + var6 = (Slot)this.inventorySlots.get(var5); + var7 = var6.getStack(); + if(var7 != null && var7.itemID == var1.itemID && (!var1.getHasSubtypes() || var1.getItemDamage() == var7.getItemDamage())) { + int var8 = var7.stackSize + var1.stackSize; + if(var8 <= var1.getMaxStackSize()) { + var1.stackSize = 0; + var7.stackSize = var8; + var6.onSlotChanged(); + } else if(var7.stackSize < var1.getMaxStackSize()) { + var1.stackSize -= var1.getMaxStackSize() - var7.stackSize; + var7.stackSize = var1.getMaxStackSize(); + var6.onSlotChanged(); + } + } + + if(var4) { + --var5; + } else { + ++var5; + } + } + } + + if(var1.stackSize > 0) { + if(var4) { + var5 = var3 - 1; + } else { + var5 = var2; + } + + while(!var4 && var5 < var3 || var4 && var5 >= var2) { + var6 = (Slot)this.inventorySlots.get(var5); + var7 = var6.getStack(); + if(var7 == null) { + var6.putStack(var1.copy()); + var6.onSlotChanged(); + var1.stackSize = 0; + break; + } + + if(var4) { + --var5; + } else { + ++var5; + } + } + } + + } +} diff --git a/src/net/minecraft/src/ContainerChest.java b/src/net/minecraft/src/ContainerChest.java new file mode 100644 index 0000000..1cc9adf --- /dev/null +++ b/src/net/minecraft/src/ContainerChest.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +public class ContainerChest extends Container { + private IInventory field_20137_a; + private int field_27088_b; + + public ContainerChest(IInventory var1, IInventory var2) { + this.field_20137_a = var2; + this.field_27088_b = var2.getSizeInventory() / 9; + int var3 = (this.field_27088_b - 4) * 18; + + int var4; + int var5; + for(var4 = 0; var4 < this.field_27088_b; ++var4) { + for(var5 = 0; var5 < 9; ++var5) { + this.addSlot(new Slot(var2, var5 + var4 * 9, 8 + var5 * 18, 18 + var4 * 18)); + } + } + + for(var4 = 0; var4 < 3; ++var4) { + for(var5 = 0; var5 < 9; ++var5) { + this.addSlot(new Slot(var1, var5 + var4 * 9 + 9, 8 + var5 * 18, 103 + var4 * 18 + var3)); + } + } + + for(var4 = 0; var4 < 9; ++var4) { + this.addSlot(new Slot(var1, var4, 8 + var4 * 18, 161 + var3)); + } + + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.field_20137_a.canInteractWith(var1); + } + + public ItemStack func_27086_a(int var1) { + ItemStack var2 = null; + Slot var3 = (Slot)this.inventorySlots.get(var1); + if(var3 != null && var3.func_27006_b()) { + ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + if(var1 < this.field_27088_b * 9) { + this.func_28126_a(var4, this.field_27088_b * 9, this.inventorySlots.size(), true); + } else { + this.func_28126_a(var4, 0, this.field_27088_b * 9, false); + } + + if(var4.stackSize == 0) { + var3.putStack((ItemStack)null); + } else { + var3.onSlotChanged(); + } + } + + return var2; + } +} diff --git a/src/net/minecraft/src/ContainerDispenser.java b/src/net/minecraft/src/ContainerDispenser.java new file mode 100644 index 0000000..2a250e2 --- /dev/null +++ b/src/net/minecraft/src/ContainerDispenser.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +public class ContainerDispenser extends Container { + private TileEntityDispenser field_21133_a; + + public ContainerDispenser(IInventory var1, TileEntityDispenser var2) { + this.field_21133_a = var2; + + int var3; + int var4; + for(var3 = 0; var3 < 3; ++var3) { + for(var4 = 0; var4 < 3; ++var4) { + this.addSlot(new Slot(var2, var4 + var3 * 3, 62 + var4 * 18, 17 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 3; ++var3) { + for(var4 = 0; var4 < 9; ++var4) { + this.addSlot(new Slot(var1, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 9; ++var3) { + this.addSlot(new Slot(var1, var3, 8 + var3 * 18, 142)); + } + + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.field_21133_a.canInteractWith(var1); + } +} diff --git a/src/net/minecraft/src/ContainerFurnace.java b/src/net/minecraft/src/ContainerFurnace.java new file mode 100644 index 0000000..4c3a06c --- /dev/null +++ b/src/net/minecraft/src/ContainerFurnace.java @@ -0,0 +1,93 @@ +package net.minecraft.src; + +public class ContainerFurnace extends Container { + private TileEntityFurnace furnace; + private int lastCookTime = 0; + private int lastBurnTime = 0; + private int lastItemBurnTime = 0; + + public ContainerFurnace(InventoryPlayer var1, TileEntityFurnace var2) { + this.furnace = var2; + this.addSlot(new Slot(var2, 0, 56, 17)); + this.addSlot(new Slot(var2, 1, 56, 53)); + this.addSlot(new SlotFurnace(var1.player, var2, 2, 116, 35)); + + int var3; + for(var3 = 0; var3 < 3; ++var3) { + for(int var4 = 0; var4 < 9; ++var4) { + this.addSlot(new Slot(var1, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 9; ++var3) { + this.addSlot(new Slot(var1, var3, 8 + var3 * 18, 142)); + } + + } + + public void onCraftGuiOpened(ICrafting var1) { + super.onCraftGuiOpened(var1); + var1.updateCraftingInventoryInfo(this, 0, this.furnace.furnaceCookTime); + var1.updateCraftingInventoryInfo(this, 1, this.furnace.furnaceBurnTime); + var1.updateCraftingInventoryInfo(this, 2, this.furnace.currentItemBurnTime); + } + + public void updateCraftingMatrix() { + super.updateCraftingMatrix(); + + for(int var1 = 0; var1 < this.crafters.size(); ++var1) { + ICrafting var2 = (ICrafting)this.crafters.get(var1); + if(this.lastCookTime != this.furnace.furnaceCookTime) { + var2.updateCraftingInventoryInfo(this, 0, this.furnace.furnaceCookTime); + } + + if(this.lastBurnTime != this.furnace.furnaceBurnTime) { + var2.updateCraftingInventoryInfo(this, 1, this.furnace.furnaceBurnTime); + } + + if(this.lastItemBurnTime != this.furnace.currentItemBurnTime) { + var2.updateCraftingInventoryInfo(this, 2, this.furnace.currentItemBurnTime); + } + } + + this.lastCookTime = this.furnace.furnaceCookTime; + this.lastBurnTime = this.furnace.furnaceBurnTime; + this.lastItemBurnTime = this.furnace.currentItemBurnTime; + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.furnace.canInteractWith(var1); + } + + public ItemStack func_27086_a(int var1) { + ItemStack var2 = null; + Slot var3 = (Slot)this.inventorySlots.get(var1); + if(var3 != null && var3.func_27006_b()) { + ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + if(var1 == 2) { + this.func_28126_a(var4, 3, 39, true); + } else if(var1 >= 3 && var1 < 30) { + this.func_28126_a(var4, 30, 39, false); + } else if(var1 >= 30 && var1 < 39) { + this.func_28126_a(var4, 3, 30, false); + } else { + this.func_28126_a(var4, 3, 39, false); + } + + if(var4.stackSize == 0) { + var3.putStack((ItemStack)null); + } else { + var3.onSlotChanged(); + } + + if(var4.stackSize == var2.stackSize) { + return null; + } + + var3.onPickupFromSlot(var4); + } + + return var2; + } +} diff --git a/src/net/minecraft/src/ContainerPlayer.java b/src/net/minecraft/src/ContainerPlayer.java new file mode 100644 index 0000000..db9cc13 --- /dev/null +++ b/src/net/minecraft/src/ContainerPlayer.java @@ -0,0 +1,96 @@ +package net.minecraft.src; + +public class ContainerPlayer extends Container { + public InventoryCrafting craftMatrix; + public IInventory craftResult; + public boolean isMP; + + public ContainerPlayer(InventoryPlayer var1) { + this(var1, true); + } + + public ContainerPlayer(InventoryPlayer var1, boolean var2) { + this.craftMatrix = new InventoryCrafting(this, 2, 2); + this.craftResult = new InventoryCraftResult(); + this.isMP = false; + this.isMP = var2; + this.addSlot(new SlotCrafting(var1.player, this.craftMatrix, this.craftResult, 0, 144, 36)); + + int var3; + int var4; + for(var3 = 0; var3 < 2; ++var3) { + for(var4 = 0; var4 < 2; ++var4) { + this.addSlot(new Slot(this.craftMatrix, var4 + var3 * 2, 88 + var4 * 18, 26 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 4; ++var3) { + this.addSlot(new SlotArmor(this, var1, var1.getSizeInventory() - 1 - var3, 8, 8 + var3 * 18, var3)); + } + + for(var3 = 0; var3 < 3; ++var3) { + for(var4 = 0; var4 < 9; ++var4) { + this.addSlot(new Slot(var1, var4 + (var3 + 1) * 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 9; ++var3) { + this.addSlot(new Slot(var1, var3, 8 + var3 * 18, 142)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + public void onCraftMatrixChanged(IInventory var1) { + this.craftResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(this.craftMatrix)); + } + + public void onCraftGuiClosed(EntityPlayer var1) { + super.onCraftGuiClosed(var1); + + for(int var2 = 0; var2 < 4; ++var2) { + ItemStack var3 = this.craftMatrix.getStackInSlot(var2); + if(var3 != null) { + var1.dropPlayerItem(var3); + this.craftMatrix.setInventorySlotContents(var2, (ItemStack)null); + } + } + + } + + public boolean canInteractWith(EntityPlayer var1) { + return true; + } + + public ItemStack func_27086_a(int var1) { + ItemStack var2 = null; + Slot var3 = (Slot)this.inventorySlots.get(var1); + if(var3 != null && var3.func_27006_b()) { + ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + if(var1 == 0) { + this.func_28126_a(var4, 9, 45, true); + } else if(var1 >= 9 && var1 < 36) { + this.func_28126_a(var4, 36, 45, false); + } else if(var1 >= 36 && var1 < 45) { + this.func_28126_a(var4, 9, 36, false); + } else { + this.func_28126_a(var4, 9, 45, false); + } + + if(var4.stackSize == 0) { + var3.putStack((ItemStack)null); + } else { + var3.onSlotChanged(); + } + + if(var4.stackSize == var2.stackSize) { + return null; + } + + var3.onPickupFromSlot(var4); + } + + return var2; + } +} diff --git a/src/net/minecraft/src/ContainerWorkbench.java b/src/net/minecraft/src/ContainerWorkbench.java new file mode 100644 index 0000000..8192407 --- /dev/null +++ b/src/net/minecraft/src/ContainerWorkbench.java @@ -0,0 +1,91 @@ +package net.minecraft.src; + +public class ContainerWorkbench extends Container { + public InventoryCrafting craftMatrix = new InventoryCrafting(this, 3, 3); + public IInventory craftResult = new InventoryCraftResult(); + private World field_20150_c; + private int field_20149_h; + private int field_20148_i; + private int field_20147_j; + + public ContainerWorkbench(InventoryPlayer var1, World var2, int var3, int var4, int var5) { + this.field_20150_c = var2; + this.field_20149_h = var3; + this.field_20148_i = var4; + this.field_20147_j = var5; + this.addSlot(new SlotCrafting(var1.player, this.craftMatrix, this.craftResult, 0, 124, 35)); + + int var6; + int var7; + for(var6 = 0; var6 < 3; ++var6) { + for(var7 = 0; var7 < 3; ++var7) { + this.addSlot(new Slot(this.craftMatrix, var7 + var6 * 3, 30 + var7 * 18, 17 + var6 * 18)); + } + } + + for(var6 = 0; var6 < 3; ++var6) { + for(var7 = 0; var7 < 9; ++var7) { + this.addSlot(new Slot(var1, var7 + var6 * 9 + 9, 8 + var7 * 18, 84 + var6 * 18)); + } + } + + for(var6 = 0; var6 < 9; ++var6) { + this.addSlot(new Slot(var1, var6, 8 + var6 * 18, 142)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + public void onCraftMatrixChanged(IInventory var1) { + this.craftResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(this.craftMatrix)); + } + + public void onCraftGuiClosed(EntityPlayer var1) { + super.onCraftGuiClosed(var1); + if(!this.field_20150_c.singleplayerWorld) { + for(int var2 = 0; var2 < 9; ++var2) { + ItemStack var3 = this.craftMatrix.getStackInSlot(var2); + if(var3 != null) { + var1.dropPlayerItem(var3); + } + } + + } + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.field_20150_c.getBlockId(this.field_20149_h, this.field_20148_i, this.field_20147_j) != Block.workbench.blockID ? false : var1.getDistanceSq((double)this.field_20149_h + 0.5D, (double)this.field_20148_i + 0.5D, (double)this.field_20147_j + 0.5D) <= 64.0D; + } + + public ItemStack func_27086_a(int var1) { + ItemStack var2 = null; + Slot var3 = (Slot)this.inventorySlots.get(var1); + if(var3 != null && var3.func_27006_b()) { + ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + if(var1 == 0) { + this.func_28126_a(var4, 10, 46, true); + } else if(var1 >= 10 && var1 < 37) { + this.func_28126_a(var4, 37, 46, false); + } else if(var1 >= 37 && var1 < 46) { + this.func_28126_a(var4, 10, 37, false); + } else { + this.func_28126_a(var4, 10, 46, false); + } + + if(var4.stackSize == 0) { + var3.putStack((ItemStack)null); + } else { + var3.onSlotChanged(); + } + + if(var4.stackSize == var2.stackSize) { + return null; + } + + var3.onPickupFromSlot(var4); + } + + return var2; + } +} diff --git a/src/net/minecraft/src/ConvertProgressUpdater.java b/src/net/minecraft/src/ConvertProgressUpdater.java new file mode 100644 index 0000000..b8621f3 --- /dev/null +++ b/src/net/minecraft/src/ConvertProgressUpdater.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class ConvertProgressUpdater implements IProgressUpdate { + private long lastTimeMillis; + final MinecraftServer mcServer; + + public ConvertProgressUpdater(MinecraftServer var1) { + this.mcServer = var1; + this.lastTimeMillis = System.currentTimeMillis(); + } + + public void func_438_a(String var1) { + } + + public void setLoadingProgress(int var1) { + if(System.currentTimeMillis() - this.lastTimeMillis >= 1000L) { + this.lastTimeMillis = System.currentTimeMillis(); + MinecraftServer.logger.info("Converting... " + var1 + "%"); + } + + } + + public void displayLoadingString(String var1) { + } +} diff --git a/src/net/minecraft/src/CraftingManager.java b/src/net/minecraft/src/CraftingManager.java new file mode 100644 index 0000000..263c33e --- /dev/null +++ b/src/net/minecraft/src/CraftingManager.java @@ -0,0 +1,174 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +public class CraftingManager { + private static final CraftingManager instance = new CraftingManager(); + private List recipes = new ArrayList(); + + public static final CraftingManager getInstance() { + return instance; + } + + private CraftingManager() { + (new RecipesTools()).addRecipes(this); + (new RecipesWeapons()).addRecipes(this); + (new RecipesIngots()).addRecipes(this); + (new RecipesFood()).addRecipes(this); + (new RecipesCrafting()).addRecipes(this); + (new RecipesArmor()).addRecipes(this); + (new RecipesDyes()).addRecipes(this); + this.addRecipe(new ItemStack(Item.paper, 3), new Object[]{"###", Character.valueOf('#'), Item.reed}); + this.addRecipe(new ItemStack(Item.book, 1), new Object[]{"#", "#", "#", Character.valueOf('#'), Item.paper}); + this.addRecipe(new ItemStack(Block.fence, 2), new Object[]{"###", "###", Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Block.jukebox, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Block.planks, Character.valueOf('X'), Item.diamond}); + this.addRecipe(new ItemStack(Block.musicBlock, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Block.planks, Character.valueOf('X'), Item.redstone}); + this.addRecipe(new ItemStack(Block.bookShelf, 1), new Object[]{"###", "XXX", "###", Character.valueOf('#'), Block.planks, Character.valueOf('X'), Item.book}); + this.addRecipe(new ItemStack(Block.blockSnow, 1), new Object[]{"##", "##", Character.valueOf('#'), Item.snowball}); + this.addRecipe(new ItemStack(Block.blockClay, 1), new Object[]{"##", "##", Character.valueOf('#'), Item.clay}); + this.addRecipe(new ItemStack(Block.brick, 1), new Object[]{"##", "##", Character.valueOf('#'), Item.brick}); + this.addRecipe(new ItemStack(Block.glowStone, 1), new Object[]{"##", "##", Character.valueOf('#'), Item.lightStoneDust}); + this.addRecipe(new ItemStack(Block.cloth, 1), new Object[]{"##", "##", Character.valueOf('#'), Item.silk}); + this.addRecipe(new ItemStack(Block.tnt, 1), new Object[]{"X#X", "#X#", "X#X", Character.valueOf('X'), Item.gunpowder, Character.valueOf('#'), Block.sand}); + this.addRecipe(new ItemStack(Block.stairSingle, 3, 3), new Object[]{"###", Character.valueOf('#'), Block.cobblestone}); + this.addRecipe(new ItemStack(Block.stairSingle, 3, 0), new Object[]{"###", Character.valueOf('#'), Block.stone}); + this.addRecipe(new ItemStack(Block.stairSingle, 3, 1), new Object[]{"###", Character.valueOf('#'), Block.sandStone}); + this.addRecipe(new ItemStack(Block.stairSingle, 3, 2), new Object[]{"###", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.ladder, 2), new Object[]{"# #", "###", "# #", Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Item.doorWood, 1), new Object[]{"##", "##", "##", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.trapdoor, 2), new Object[]{"###", "###", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Item.doorSteel, 1), new Object[]{"##", "##", "##", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Item.sign, 1), new Object[]{"###", "###", " X ", Character.valueOf('#'), Block.planks, Character.valueOf('X'), Item.stick}); + this.addRecipe(new ItemStack(Item.cake, 1), new Object[]{"AAA", "BEB", "CCC", Character.valueOf('A'), Item.bucketMilk, Character.valueOf('B'), Item.sugar, Character.valueOf('C'), Item.wheat, Character.valueOf('E'), Item.egg}); + this.addRecipe(new ItemStack(Item.sugar, 1), new Object[]{"#", Character.valueOf('#'), Item.reed}); + this.addRecipe(new ItemStack(Block.planks, 4), new Object[]{"#", Character.valueOf('#'), Block.wood}); + this.addRecipe(new ItemStack(Item.stick, 4), new Object[]{"#", "#", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.torchWood, 4), new Object[]{"X", "#", Character.valueOf('X'), Item.coal, Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Block.torchWood, 4), new Object[]{"X", "#", Character.valueOf('X'), new ItemStack(Item.coal, 1, 1), Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Item.bowlEmpty, 4), new Object[]{"# #", " # ", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.minecartTrack, 16), new Object[]{"X X", "X#X", "X X", Character.valueOf('X'), Item.ingotIron, Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Block.railPowered, 6), new Object[]{"X X", "X#X", "XRX", Character.valueOf('X'), Item.ingotGold, Character.valueOf('R'), Item.redstone, Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Block.railDetector, 6), new Object[]{"X X", "X#X", "XRX", Character.valueOf('X'), Item.ingotIron, Character.valueOf('R'), Item.redstone, Character.valueOf('#'), Block.pressurePlateStone}); + this.addRecipe(new ItemStack(Item.minecartEmpty, 1), new Object[]{"# #", "###", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Block.pumpkinLantern, 1), new Object[]{"A", "B", Character.valueOf('A'), Block.pumpkin, Character.valueOf('B'), Block.torchWood}); + this.addRecipe(new ItemStack(Item.minecartCrate, 1), new Object[]{"A", "B", Character.valueOf('A'), Block.chest, Character.valueOf('B'), Item.minecartEmpty}); + this.addRecipe(new ItemStack(Item.minecartPowered, 1), new Object[]{"A", "B", Character.valueOf('A'), Block.stoneOvenIdle, Character.valueOf('B'), Item.minecartEmpty}); + this.addRecipe(new ItemStack(Item.boat, 1), new Object[]{"# #", "###", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Item.bucketEmpty, 1), new Object[]{"# #", " # ", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Item.flintAndSteel, 1), new Object[]{"A ", " B", Character.valueOf('A'), Item.ingotIron, Character.valueOf('B'), Item.flint}); + this.addRecipe(new ItemStack(Item.bread, 1), new Object[]{"###", Character.valueOf('#'), Item.wheat}); + this.addRecipe(new ItemStack(Block.stairCompactPlanks, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Item.fishingRod, 1), new Object[]{" #", " #X", "# X", Character.valueOf('#'), Item.stick, Character.valueOf('X'), Item.silk}); + this.addRecipe(new ItemStack(Block.stairCompactCobblestone, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.cobblestone}); + this.addRecipe(new ItemStack(Item.painting, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Item.stick, Character.valueOf('X'), Block.cloth}); + this.addRecipe(new ItemStack(Item.appleGold, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Block.blockGold, Character.valueOf('X'), Item.appleRed}); + this.addRecipe(new ItemStack(Block.lever, 1), new Object[]{"X", "#", Character.valueOf('#'), Block.cobblestone, Character.valueOf('X'), Item.stick}); + this.addRecipe(new ItemStack(Block.torchRedstoneActive, 1), new Object[]{"X", "#", Character.valueOf('#'), Item.stick, Character.valueOf('X'), Item.redstone}); + this.addRecipe(new ItemStack(Item.redstoneRepeater, 1), new Object[]{"#X#", "III", Character.valueOf('#'), Block.torchRedstoneActive, Character.valueOf('X'), Item.redstone, Character.valueOf('I'), Block.stone}); + this.addRecipe(new ItemStack(Item.pocketSundial, 1), new Object[]{" # ", "#X#", " # ", Character.valueOf('#'), Item.ingotGold, Character.valueOf('X'), Item.redstone}); + this.addRecipe(new ItemStack(Item.compass, 1), new Object[]{" # ", "#X#", " # ", Character.valueOf('#'), Item.ingotIron, Character.valueOf('X'), Item.redstone}); + this.addRecipe(new ItemStack(Item.field_28021_bb, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Item.paper, Character.valueOf('X'), Item.compass}); + this.addRecipe(new ItemStack(Block.button, 1), new Object[]{"#", "#", Character.valueOf('#'), Block.stone}); + this.addRecipe(new ItemStack(Block.pressurePlateStone, 1), new Object[]{"##", Character.valueOf('#'), Block.stone}); + this.addRecipe(new ItemStack(Block.pressurePlatePlanks, 1), new Object[]{"##", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.dispenser, 1), new Object[]{"###", "#X#", "#R#", Character.valueOf('#'), Block.cobblestone, Character.valueOf('X'), Item.bow, Character.valueOf('R'), Item.redstone}); + this.addRecipe(new ItemStack(Block.pistonBase, 1), new Object[]{"TTT", "#X#", "#R#", Character.valueOf('#'), Block.cobblestone, Character.valueOf('X'), Item.ingotIron, Character.valueOf('R'), Item.redstone, Character.valueOf('T'), Block.planks}); + this.addRecipe(new ItemStack(Block.pistonStickyBase, 1), new Object[]{"S", "P", Character.valueOf('S'), Item.slimeBall, Character.valueOf('P'), Block.pistonBase}); + this.addRecipe(new ItemStack(Item.bed, 1), new Object[]{"###", "XXX", Character.valueOf('#'), Block.cloth, Character.valueOf('X'), Block.planks}); + Collections.sort(this.recipes, new RecipeSorter(this)); + System.out.println(this.recipes.size() + " recipes"); + } + + void addRecipe(ItemStack var1, Object... var2) { + String var3 = ""; + int var4 = 0; + int var5 = 0; + int var6 = 0; + if(var2[var4] instanceof String[]) { + String[] var11 = (String[])((String[])var2[var4++]); + + for(int var8 = 0; var8 < var11.length; ++var8) { + String var9 = var11[var8]; + ++var6; + var5 = var9.length(); + var3 = var3 + var9; + } + } else { + while(var2[var4] instanceof String) { + String var7 = (String)var2[var4++]; + ++var6; + var5 = var7.length(); + var3 = var3 + var7; + } + } + + HashMap var12; + for(var12 = new HashMap(); var4 < var2.length; var4 += 2) { + Character var13 = (Character)var2[var4]; + ItemStack var15 = null; + if(var2[var4 + 1] instanceof Item) { + var15 = new ItemStack((Item)var2[var4 + 1]); + } else if(var2[var4 + 1] instanceof Block) { + var15 = new ItemStack((Block)var2[var4 + 1], 1, -1); + } else if(var2[var4 + 1] instanceof ItemStack) { + var15 = (ItemStack)var2[var4 + 1]; + } + + var12.put(var13, var15); + } + + ItemStack[] var14 = new ItemStack[var5 * var6]; + + for(int var16 = 0; var16 < var5 * var6; ++var16) { + char var10 = var3.charAt(var16); + if(var12.containsKey(Character.valueOf(var10))) { + var14[var16] = ((ItemStack)var12.get(Character.valueOf(var10))).copy(); + } else { + var14[var16] = null; + } + } + + this.recipes.add(new ShapedRecipes(var5, var6, var14, var1)); + } + + void addShapelessRecipe(ItemStack var1, Object... var2) { + ArrayList var3 = new ArrayList(); + Object[] var4 = var2; + int var5 = var2.length; + + for(int var6 = 0; var6 < var5; ++var6) { + Object var7 = var4[var6]; + if(var7 instanceof ItemStack) { + var3.add(((ItemStack)var7).copy()); + } else if(var7 instanceof Item) { + var3.add(new ItemStack((Item)var7)); + } else { + if(!(var7 instanceof Block)) { + throw new RuntimeException("Invalid shapeless recipy!"); + } + + var3.add(new ItemStack((Block)var7)); + } + } + + this.recipes.add(new ShapelessRecipes(var1, var3)); + } + + public ItemStack findMatchingRecipe(InventoryCrafting var1) { + for(int var2 = 0; var2 < this.recipes.size(); ++var2) { + IRecipe var3 = (IRecipe)this.recipes.get(var2); + if(var3.func_21134_a(var1)) { + return var3.func_21136_b(var1); + } + } + + return null; + } + + public List getRecipeList() { + return this.recipes; + } +} diff --git a/src/net/minecraft/src/DataWatcher.java b/src/net/minecraft/src/DataWatcher.java new file mode 100644 index 0000000..abd3115 --- /dev/null +++ b/src/net/minecraft/src/DataWatcher.java @@ -0,0 +1,192 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class DataWatcher { + private static final HashMap dataTypes = new HashMap(); + private final Map watchedObjects = new HashMap(); + private boolean objectChanged; + + public void addObject(int var1, Object var2) { + Integer var3 = (Integer)dataTypes.get(var2.getClass()); + if(var3 == null) { + throw new IllegalArgumentException("Unknown data type: " + var2.getClass()); + } else if(var1 > 31) { + throw new IllegalArgumentException("Data value id is too big with " + var1 + "! (Max is " + 31 + ")"); + } else if(this.watchedObjects.containsKey(Integer.valueOf(var1))) { + throw new IllegalArgumentException("Duplicate id value for " + var1 + "!"); + } else { + WatchableObject var4 = new WatchableObject(var3.intValue(), var1, var2); + this.watchedObjects.put(Integer.valueOf(var1), var4); + } + } + + public byte getWatchableObjectByte(int var1) { + return ((Byte)((WatchableObject)this.watchedObjects.get(Integer.valueOf(var1))).getObject()).byteValue(); + } + + public int getWatchableObjectInteger(int var1) { + return ((Integer)((WatchableObject)this.watchedObjects.get(Integer.valueOf(var1))).getObject()).intValue(); + } + + public String getWatchableObjectString(int var1) { + return (String)((WatchableObject)this.watchedObjects.get(Integer.valueOf(var1))).getObject(); + } + + public void updateObject(int var1, Object var2) { + WatchableObject var3 = (WatchableObject)this.watchedObjects.get(Integer.valueOf(var1)); + if(!var2.equals(var3.getObject())) { + var3.setObject(var2); + var3.setWatching(true); + this.objectChanged = true; + } + + } + + public boolean hasObjectChanged() { + return this.objectChanged; + } + + public static void writeObjectsInListToStream(List var0, DataOutputStream var1) throws IOException { + if(var0 != null) { + Iterator var2 = var0.iterator(); + + while(var2.hasNext()) { + WatchableObject var3 = (WatchableObject)var2.next(); + writeWatchableObject(var1, var3); + } + } + + var1.writeByte(127); + } + + public ArrayList getChangedObjects() { + ArrayList var1 = null; + if(this.objectChanged) { + Iterator var2 = this.watchedObjects.values().iterator(); + + while(var2.hasNext()) { + WatchableObject var3 = (WatchableObject)var2.next(); + if(var3.getWatching()) { + var3.setWatching(false); + if(var1 == null) { + var1 = new ArrayList(); + } + + var1.add(var3); + } + } + } + + this.objectChanged = false; + return var1; + } + + public void writeWatchableObjects(DataOutputStream var1) throws IOException { + Iterator var2 = this.watchedObjects.values().iterator(); + + while(var2.hasNext()) { + WatchableObject var3 = (WatchableObject)var2.next(); + writeWatchableObject(var1, var3); + } + + var1.writeByte(127); + } + + private static void writeWatchableObject(DataOutputStream var0, WatchableObject var1) throws IOException { + int var2 = (var1.getObjectType() << 5 | var1.getDataValueId() & 31) & 255; + var0.writeByte(var2); + switch(var1.getObjectType()) { + case 0: + var0.writeByte(((Byte)var1.getObject()).byteValue()); + break; + case 1: + var0.writeShort(((Short)var1.getObject()).shortValue()); + break; + case 2: + var0.writeInt(((Integer)var1.getObject()).intValue()); + break; + case 3: + var0.writeFloat(((Float)var1.getObject()).floatValue()); + break; + case 4: + Packet.writeString((String)var1.getObject(), var0); + break; + case 5: + ItemStack var4 = (ItemStack)var1.getObject(); + var0.writeShort(var4.getItem().shiftedIndex); + var0.writeByte(var4.stackSize); + var0.writeShort(var4.getItemDamage()); + break; + case 6: + ChunkCoordinates var3 = (ChunkCoordinates)var1.getObject(); + var0.writeInt(var3.posX); + var0.writeInt(var3.posY); + var0.writeInt(var3.posZ); + } + + } + + public static List readWatchableObjects(DataInputStream var0) throws IOException { + ArrayList var1 = null; + + for(byte var2 = var0.readByte(); var2 != 127; var2 = var0.readByte()) { + if(var1 == null) { + var1 = new ArrayList(); + } + + int var3 = (var2 & 224) >> 5; + int var4 = var2 & 31; + WatchableObject var5 = null; + switch(var3) { + case 0: + var5 = new WatchableObject(var3, var4, Byte.valueOf(var0.readByte())); + break; + case 1: + var5 = new WatchableObject(var3, var4, Short.valueOf(var0.readShort())); + break; + case 2: + var5 = new WatchableObject(var3, var4, Integer.valueOf(var0.readInt())); + break; + case 3: + var5 = new WatchableObject(var3, var4, Float.valueOf(var0.readFloat())); + break; + case 4: + var5 = new WatchableObject(var3, var4, Packet.readString(var0, 64)); + break; + case 5: + short var9 = var0.readShort(); + byte var10 = var0.readByte(); + short var11 = var0.readShort(); + var5 = new WatchableObject(var3, var4, new ItemStack(var9, var10, var11)); + break; + case 6: + int var6 = var0.readInt(); + int var7 = var0.readInt(); + int var8 = var0.readInt(); + var5 = new WatchableObject(var3, var4, new ChunkCoordinates(var6, var7, var8)); + } + + var1.add(var5); + } + + return var1; + } + + static { + dataTypes.put(Byte.class, Integer.valueOf(0)); + dataTypes.put(Short.class, Integer.valueOf(1)); + dataTypes.put(Integer.class, Integer.valueOf(2)); + dataTypes.put(Float.class, Integer.valueOf(3)); + dataTypes.put(String.class, Integer.valueOf(4)); + dataTypes.put(ItemStack.class, Integer.valueOf(5)); + dataTypes.put(ChunkCoordinates.class, Integer.valueOf(6)); + } +} diff --git a/src/net/minecraft/src/Empty1.java b/src/net/minecraft/src/Empty1.java new file mode 100644 index 0000000..1eb0d12 --- /dev/null +++ b/src/net/minecraft/src/Empty1.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +class Empty1 { +} diff --git a/src/net/minecraft/src/Empty2.java b/src/net/minecraft/src/Empty2.java new file mode 100644 index 0000000..29174df --- /dev/null +++ b/src/net/minecraft/src/Empty2.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +class Empty2 { +} diff --git a/src/net/minecraft/src/EmptyChunk.java b/src/net/minecraft/src/EmptyChunk.java new file mode 100644 index 0000000..431840c --- /dev/null +++ b/src/net/minecraft/src/EmptyChunk.java @@ -0,0 +1,127 @@ +package net.minecraft.src; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +public class EmptyChunk extends Chunk { + public EmptyChunk(World var1, int var2, int var3) { + super(var1, var2, var3); + this.neverSave = true; + } + + public EmptyChunk(World var1, byte[] var2, int var3, int var4) { + super(var1, var2, var3, var4); + this.neverSave = true; + } + + public boolean isAtLocation(int var1, int var2) { + return var1 == this.xPosition && var2 == this.zPosition; + } + + public int getHeightValue(int var1, int var2) { + return 0; + } + + public void func_348_a() { + } + + public void func_353_b() { + } + + public void func_4053_c() { + } + + public int getBlockID(int var1, int var2, int var3) { + return 0; + } + + public boolean setBlockIDWithMetadata(int var1, int var2, int var3, int var4, int var5) { + return true; + } + + public boolean setBlockID(int var1, int var2, int var3, int var4) { + return true; + } + + public int getBlockMetadata(int var1, int var2, int var3) { + return 0; + } + + public void setBlockMetadata(int var1, int var2, int var3, int var4) { + } + + public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) { + return 0; + } + + public void setLightValue(EnumSkyBlock var1, int var2, int var3, int var4, int var5) { + } + + public int getBlockLightValue(int var1, int var2, int var3, int var4) { + return 0; + } + + public void addEntity(Entity var1) { + } + + public void removeEntity(Entity var1) { + } + + public void removeEntityAtIndex(Entity var1, int var2) { + } + + public boolean canBlockSeeTheSky(int var1, int var2, int var3) { + return false; + } + + public TileEntity getChunkBlockTileEntity(int var1, int var2, int var3) { + return null; + } + + public void addTileEntity(TileEntity var1) { + } + + public void setChunkBlockTileEntity(int var1, int var2, int var3, TileEntity var4) { + } + + public void removeChunkBlockTileEntity(int var1, int var2, int var3) { + } + + public void onChunkLoad() { + } + + public void onChunkUnload() { + } + + public void setChunkModified() { + } + + public void getEntitiesWithinAABBForEntity(Entity var1, AxisAlignedBB var2, List var3) { + } + + public void getEntitiesOfTypeWithinAAAB(Class var1, AxisAlignedBB var2, List var3) { + } + + public boolean needsSaving(boolean var1) { + return false; + } + + public int getChunkData(byte[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { + int var9 = var5 - var2; + int var10 = var6 - var3; + int var11 = var7 - var4; + int var12 = var9 * var10 * var11; + int var13 = var12 + var12 / 2 * 3; + Arrays.fill(var1, var8, var8 + var13, (byte)0); + return var13; + } + + public Random func_334_a(long var1) { + return new Random(this.worldObj.getRandomSeed() + (long)(this.xPosition * this.xPosition * 4987142) + (long)(this.xPosition * 5947611) + (long)(this.zPosition * this.zPosition) * 4392871L + (long)(this.zPosition * 389711) ^ var1); + } + + public boolean func_21101_g() { + return true; + } +} diff --git a/src/net/minecraft/src/Entity.java b/src/net/minecraft/src/Entity.java new file mode 100644 index 0000000..82bce4e --- /dev/null +++ b/src/net/minecraft/src/Entity.java @@ -0,0 +1,1028 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public abstract class Entity { + private static int nextEntityID = 0; + public int entityId = nextEntityID++; + public double renderDistanceWeight = 1.0D; + public boolean preventEntitySpawning = false; + public Entity riddenByEntity; + public Entity ridingEntity; + public World worldObj; + public double prevPosX; + public double prevPosY; + public double prevPosZ; + public double posX; + public double posY; + public double posZ; + public double motionX; + public double motionY; + public double motionZ; + public float rotationYaw; + public float rotationPitch; + public float prevRotationYaw; + public float prevRotationPitch; + public final AxisAlignedBB boundingBox = AxisAlignedBB.getBoundingBox(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + public boolean onGround = false; + public boolean isCollidedHorizontally; + public boolean isCollidedVertically; + public boolean isCollided = false; + public boolean beenAttacked = false; + public boolean field_27012_bb; + public boolean field_9077_F = true; + public boolean isDead = false; + public float yOffset = 0.0F; + public float width = 0.6F; + public float height = 1.8F; + public float prevDistanceWalkedModified = 0.0F; + public float distanceWalkedModified = 0.0F; + protected float fallDistance = 0.0F; + private int nextStepDistance = 1; + public double lastTickPosX; + public double lastTickPosY; + public double lastTickPosZ; + public float ySize = 0.0F; + public float stepHeight = 0.0F; + public boolean noClip = false; + public float entityCollisionReduction = 0.0F; + protected Random rand = new Random(); + public int ticksExisted = 0; + public int fireResistance = 1; + public int fire = 0; + protected int maxAir = 300; + protected boolean inWater = false; + public int field_9083_ac = 0; + public int air = 300; + private boolean firstUpdate = true; + protected boolean isImmuneToFire = false; + protected DataWatcher dataWatcher = new DataWatcher(); + public float field_31001_bF = 0.0F; + private double entityRiderPitchDelta; + private double entityRiderYawDelta; + public boolean addedToChunk = false; + public int chunkCoordX; + public int chunkCoordY; + public int chunkCoordZ; + public boolean field_28008_bI; + + public Entity(World var1) { + this.worldObj = var1; + this.setPosition(0.0D, 0.0D, 0.0D); + this.dataWatcher.addObject(0, Byte.valueOf((byte)0)); + this.entityInit(); + } + + protected abstract void entityInit(); + + public DataWatcher getDataWatcher() { + return this.dataWatcher; + } + + public boolean equals(Object var1) { + return var1 instanceof Entity ? ((Entity)var1).entityId == this.entityId : false; + } + + public int hashCode() { + return this.entityId; + } + + public void setEntityDead() { + this.isDead = true; + } + + protected void setSize(float var1, float var2) { + this.width = var1; + this.height = var2; + } + + protected void setRotation(float var1, float var2) { + this.rotationYaw = var1 % 360.0F; + this.rotationPitch = var2 % 360.0F; + } + + public void setPosition(double var1, double var3, double var5) { + this.posX = var1; + this.posY = var3; + this.posZ = var5; + float var7 = this.width / 2.0F; + float var8 = this.height; + this.boundingBox.setBounds(var1 - (double)var7, var3 - (double)this.yOffset + (double)this.ySize, var5 - (double)var7, var1 + (double)var7, var3 - (double)this.yOffset + (double)this.ySize + (double)var8, var5 + (double)var7); + } + + public void onUpdate() { + this.onEntityUpdate(); + } + + public void onEntityUpdate() { + if(this.ridingEntity != null && this.ridingEntity.isDead) { + this.ridingEntity = null; + } + + ++this.ticksExisted; + this.prevDistanceWalkedModified = this.distanceWalkedModified; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + if(this.handleWaterMovement()) { + if(!this.inWater && !this.firstUpdate) { + float var1 = MathHelper.sqrt_double(this.motionX * this.motionX * (double)0.2F + this.motionY * this.motionY + this.motionZ * this.motionZ * (double)0.2F) * 0.2F; + if(var1 > 1.0F) { + var1 = 1.0F; + } + + this.worldObj.playSoundAtEntity(this, "random.splash", var1, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + float var2 = (float)MathHelper.floor_double(this.boundingBox.minY); + + int var3; + float var4; + float var5; + for(var3 = 0; (float)var3 < 1.0F + this.width * 20.0F; ++var3) { + var4 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + var5 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + this.worldObj.spawnParticle("bubble", this.posX + (double)var4, (double)(var2 + 1.0F), this.posZ + (double)var5, this.motionX, this.motionY - (double)(this.rand.nextFloat() * 0.2F), this.motionZ); + } + + for(var3 = 0; (float)var3 < 1.0F + this.width * 20.0F; ++var3) { + var4 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + var5 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + this.worldObj.spawnParticle("splash", this.posX + (double)var4, (double)(var2 + 1.0F), this.posZ + (double)var5, this.motionX, this.motionY, this.motionZ); + } + } + + this.fallDistance = 0.0F; + this.inWater = true; + this.fire = 0; + } else { + this.inWater = false; + } + + if(this.worldObj.singleplayerWorld) { + this.fire = 0; + } else if(this.fire > 0) { + if(this.isImmuneToFire) { + this.fire -= 4; + if(this.fire < 0) { + this.fire = 0; + } + } else { + if(this.fire % 20 == 0) { + this.attackEntityFrom((Entity)null, 1); + } + + --this.fire; + } + } + + if(this.handleLavaMovement()) { + this.setOnFireFromLava(); + } + + if(this.posY < -64.0D) { + this.kill(); + } + + if(!this.worldObj.singleplayerWorld) { + this.setFlag(0, this.fire > 0); + this.setFlag(2, this.ridingEntity != null); + } + + this.firstUpdate = false; + } + + protected void setOnFireFromLava() { + if(!this.isImmuneToFire) { + this.attackEntityFrom((Entity)null, 4); + this.fire = 600; + } + + } + + protected void kill() { + this.setEntityDead(); + } + + public boolean isOffsetPositionInLiquid(double var1, double var3, double var5) { + AxisAlignedBB var7 = this.boundingBox.getOffsetBoundingBox(var1, var3, var5); + List var8 = this.worldObj.getCollidingBoundingBoxes(this, var7); + return var8.size() > 0 ? false : !this.worldObj.getIsAnyLiquid(var7); + } + + public void moveEntity(double var1, double var3, double var5) { + if(this.noClip) { + this.boundingBox.offset(var1, var3, var5); + this.posX = (this.boundingBox.minX + this.boundingBox.maxX) / 2.0D; + this.posY = this.boundingBox.minY + (double)this.yOffset - (double)this.ySize; + this.posZ = (this.boundingBox.minZ + this.boundingBox.maxZ) / 2.0D; + } else { + this.ySize *= 0.4F; + double var7 = this.posX; + double var9 = this.posZ; + if(this.field_27012_bb) { + this.field_27012_bb = false; + var1 *= 0.25D; + var3 *= (double)0.05F; + var5 *= 0.25D; + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + } + + double var11 = var1; + double var13 = var3; + double var15 = var5; + AxisAlignedBB var17 = this.boundingBox.copy(); + boolean var18 = this.onGround && this.isSneaking(); + 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)).calculateYOffset(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)).calculateXOffset(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)).calculateZOffset(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.stepHeight > 0.0F && var36 && (var18 || this.ySize < 0.05F) && (var11 != var1 || var15 != var5)) { + var37 = var1; + var23 = var3; + double var25 = var5; + var1 = var11; + var3 = (double)this.stepHeight; + 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)).calculateYOffset(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)).calculateXOffset(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)).calculateZOffset(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(!this.field_9077_F && var13 != var3) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } else { + var3 = (double)(-this.stepHeight); + + for(var28 = 0; var28 < var35.size(); ++var28) { + var3 = ((AxisAlignedBB)var35.get(var28)).calculateYOffset(this.boundingBox, var3); + } + + this.boundingBox.offset(0.0D, var3, 0.0D); + } + + if(var37 * var37 + var25 * var25 >= var1 * var1 + var5 * var5) { + var1 = var37; + var3 = var23; + var5 = var25; + this.boundingBox.setBB(var27); + } else { + double var41 = this.boundingBox.minY - (double)((int)this.boundingBox.minY); + if(var41 > 0.0D) { + this.ySize = (float)((double)this.ySize + var41 + 0.01D); + } + } + } + + this.posX = (this.boundingBox.minX + this.boundingBox.maxX) / 2.0D; + this.posY = this.boundingBox.minY + (double)this.yOffset - (double)this.ySize; + this.posZ = (this.boundingBox.minZ + this.boundingBox.maxZ) / 2.0D; + this.isCollidedHorizontally = var11 != var1 || var15 != var5; + this.isCollidedVertically = var13 != var3; + this.onGround = var13 != var3 && var13 < 0.0D; + this.isCollided = this.isCollidedHorizontally || this.isCollidedVertically; + this.updateFallState(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 var39; + if(this.func_25017_l() && !var18 && this.ridingEntity == null) { + this.distanceWalkedModified = (float)((double)this.distanceWalkedModified + (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); + var39 = MathHelper.floor_double(this.posZ); + var28 = this.worldObj.getBlockId(var38, var26, var39); + if(this.worldObj.getBlockId(var38, var26 - 1, var39) == Block.fence.blockID) { + var28 = this.worldObj.getBlockId(var38, var26 - 1, var39); + } + + if(this.distanceWalkedModified > (float)this.nextStepDistance && var28 > 0) { + ++this.nextStepDistance; + StepSound var29 = Block.blocksList[var28].stepSound; + if(this.worldObj.getBlockId(var38, var26 + 1, var39) == Block.snow.blockID) { + var29 = Block.snow.stepSound; + this.worldObj.playSoundAtEntity(this, var29.func_737_c(), var29.getVolume() * 0.15F, var29.getPitch()); + } else if(!Block.blocksList[var28].blockMaterial.getIsLiquid()) { + this.worldObj.playSoundAtEntity(this, var29.func_737_c(), var29.getVolume() * 0.15F, var29.getPitch()); + } + + Block.blocksList[var28].onEntityWalking(this.worldObj, var38, var26, var39, this); + } + } + + var38 = MathHelper.floor_double(this.boundingBox.minX + 0.001D); + var26 = MathHelper.floor_double(this.boundingBox.minY + 0.001D); + var39 = MathHelper.floor_double(this.boundingBox.minZ + 0.001D); + var28 = MathHelper.floor_double(this.boundingBox.maxX - 0.001D); + int var40 = MathHelper.floor_double(this.boundingBox.maxY - 0.001D); + int var30 = MathHelper.floor_double(this.boundingBox.maxZ - 0.001D); + if(this.worldObj.checkChunksExist(var38, var26, var39, var28, var40, var30)) { + for(int var31 = var38; var31 <= var28; ++var31) { + for(int var32 = var26; var32 <= var40; ++var32) { + for(int var33 = var39; var33 <= var30; ++var33) { + int var34 = this.worldObj.getBlockId(var31, var32, var33); + if(var34 > 0) { + Block.blocksList[var34].onEntityCollidedWithBlock(this.worldObj, var31, var32, var33, this); + } + } + } + } + } + + boolean var42 = this.func_27008_Y(); + if(this.worldObj.isBoundingBoxBurning(this.boundingBox.getInsetBoundingBox(0.001D, 0.001D, 0.001D))) { + this.dealFireDamage(1); + if(!var42) { + ++this.fire; + if(this.fire == 0) { + this.fire = 300; + } + } + } else if(this.fire <= 0) { + this.fire = -this.fireResistance; + } + + if(var42 && this.fire > 0) { + this.worldObj.playSoundAtEntity(this, "random.fizz", 0.7F, 1.6F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + this.fire = -this.fireResistance; + } + + } + } + + protected boolean func_25017_l() { + return true; + } + + protected void updateFallState(double var1, boolean var3) { + if(var3) { + if(this.fallDistance > 0.0F) { + this.fall(this.fallDistance); + this.fallDistance = 0.0F; + } + } else if(var1 < 0.0D) { + this.fallDistance = (float)((double)this.fallDistance - var1); + } + + } + + public AxisAlignedBB getBoundingBox() { + return null; + } + + protected void dealFireDamage(int var1) { + if(!this.isImmuneToFire) { + this.attackEntityFrom((Entity)null, var1); + } + + } + + protected void fall(float var1) { + if(this.riddenByEntity != null) { + this.riddenByEntity.fall(var1); + } + + } + + public boolean func_27008_Y() { + return this.inWater || this.worldObj.canLightningStrikeAt(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)); + } + + public boolean isInWater() { + return this.inWater; + } + + public boolean handleWaterMovement() { + return this.worldObj.handleMaterialAcceleration(this.boundingBox.expand(0.0D, (double)-0.4F, 0.0D).getInsetBoundingBox(0.001D, 0.001D, 0.001D), Material.water, this); + } + + public boolean isInsideOfMaterial(Material var1) { + double var2 = this.posY + (double)this.getEyeHeight(); + int var4 = MathHelper.floor_double(this.posX); + int var5 = MathHelper.floor_float((float)MathHelper.floor_double(var2)); + int var6 = MathHelper.floor_double(this.posZ); + int var7 = this.worldObj.getBlockId(var4, var5, var6); + if(var7 != 0 && Block.blocksList[var7].blockMaterial == var1) { + float var8 = BlockFluid.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 getEyeHeight() { + return 0.0F; + } + + public boolean handleLavaMovement() { + return this.worldObj.isMaterialInBB(this.boundingBox.expand((double)-0.1F, (double)-0.4F, (double)-0.1F), Material.lava); + } + + public void moveFlying(float var1, float var2, float var3) { + float var4 = 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); + if(this.worldObj.checkChunksExist(MathHelper.floor_double(this.boundingBox.minX), MathHelper.floor_double(this.boundingBox.minY), MathHelper.floor_double(this.boundingBox.minZ), MathHelper.floor_double(this.boundingBox.maxX), MathHelper.floor_double(this.boundingBox.maxY), MathHelper.floor_double(this.boundingBox.maxZ))) { + float var7 = this.worldObj.getLightBrightness(var2, var5, var6); + if(var7 < this.field_31001_bF) { + var7 = this.field_31001_bF; + } + + return var7; + } else { + return this.field_31001_bF; + } + } + + public void setWorldHandler(World var1) { + this.worldObj = var1; + } + + public void setPositionAndRotation(double var1, double var3, double var5, float var7, float var8) { + this.prevPosX = this.posX = var1; + this.prevPosY = this.posY = var3; + this.prevPosZ = this.posZ = var5; + this.prevRotationYaw = this.rotationYaw = var7; + this.prevRotationPitch = this.rotationPitch = var8; + this.ySize = 0.0F; + double var9 = (double)(this.prevRotationYaw - var7); + if(var9 < -180.0D) { + this.prevRotationYaw += 360.0F; + } + + if(var9 >= 180.0D) { + this.prevRotationYaw -= 360.0F; + } + + this.setPosition(this.posX, this.posY, this.posZ); + this.setRotation(var7, var8); + } + + public void setLocationAndAngles(double var1, double var3, double var5, float var7, float var8) { + this.lastTickPosX = this.prevPosX = this.posX = var1; + this.lastTickPosY = this.prevPosY = this.posY = var3 + (double)this.yOffset; + this.lastTickPosZ = this.prevPosZ = this.posZ = var5; + this.rotationYaw = var7; + this.rotationPitch = var8; + this.setPosition(this.posX, this.posY, this.posZ); + } + + public float getDistanceToEntity(Entity var1) { + float var2 = (float)(this.posX - var1.posX); + float var3 = (float)(this.posY - var1.posY); + float var4 = (float)(this.posZ - var1.posZ); + return MathHelper.sqrt_float(var2 * var2 + var3 * var3 + var4 * var4); + } + + public double getDistanceSq(double var1, double var3, double var5) { + double var7 = this.posX - var1; + double var9 = this.posY - var3; + double var11 = this.posZ - var5; + return var7 * var7 + var9 * var9 + var11 * var11; + } + + public double getDistance(double var1, double var3, double var5) { + double var7 = this.posX - var1; + double var9 = this.posY - var3; + double var11 = this.posZ - var5; + return (double)MathHelper.sqrt_double(var7 * var7 + var9 * var9 + var11 * var11); + } + + public double getDistanceSqToEntity(Entity var1) { + double var2 = this.posX - var1.posX; + double var4 = this.posY - var1.posY; + double var6 = this.posZ - var1.posZ; + return var2 * var2 + var4 * var4 + var6 * var6; + } + + public void onCollideWithPlayer(EntityPlayer var1) { + } + + public void applyEntityCollision(Entity var1) { + if(var1.riddenByEntity != this && var1.ridingEntity != this) { + double var2 = var1.posX - this.posX; + double var4 = var1.posZ - this.posZ; + double var6 = MathHelper.abs_max(var2, var4); + if(var6 >= (double)0.01F) { + var6 = (double)MathHelper.sqrt_double(var6); + var2 /= var6; + var4 /= var6; + double var8 = 1.0D / var6; + if(var8 > 1.0D) { + var8 = 1.0D; + } + + var2 *= var8; + var4 *= var8; + var2 *= (double)0.05F; + var4 *= (double)0.05F; + var2 *= (double)(1.0F - this.entityCollisionReduction); + var4 *= (double)(1.0F - this.entityCollisionReduction); + this.addVelocity(-var2, 0.0D, -var4); + var1.addVelocity(var2, 0.0D, var4); + } + + } + } + + public void addVelocity(double var1, double var3, double var5) { + this.motionX += var1; + this.motionY += var3; + this.motionZ += var5; + } + + protected void setBeenAttacked() { + this.beenAttacked = true; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.setBeenAttacked(); + return false; + } + + public boolean canBeCollidedWith() { + return false; + } + + public boolean canBePushed() { + return false; + } + + public void addToPlayerScore(Entity var1, int var2) { + } + + public boolean addEntityID(NBTTagCompound var1) { + String var2 = this.getEntityString(); + if(!this.isDead && var2 != null) { + var1.setString("id", var2); + this.writeToNBT(var1); + return true; + } else { + return false; + } + } + + public void writeToNBT(NBTTagCompound var1) { + var1.setTag("Pos", this.newDoubleNBTList(new double[]{this.posX, this.posY + (double)this.ySize, this.posZ})); + var1.setTag("Motion", this.newDoubleNBTList(new double[]{this.motionX, this.motionY, this.motionZ})); + var1.setTag("Rotation", this.newFloatNBTList(new float[]{this.rotationYaw, this.rotationPitch})); + var1.setFloat("FallDistance", this.fallDistance); + var1.setShort("Fire", (short)this.fire); + var1.setShort("Air", (short)this.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.motionX = ((NBTTagDouble)var3.tagAt(0)).doubleValue; + this.motionY = ((NBTTagDouble)var3.tagAt(1)).doubleValue; + this.motionZ = ((NBTTagDouble)var3.tagAt(2)).doubleValue; + if(Math.abs(this.motionX) > 10.0D) { + this.motionX = 0.0D; + } + + if(Math.abs(this.motionY) > 10.0D) { + this.motionY = 0.0D; + } + + if(Math.abs(this.motionZ) > 10.0D) { + this.motionZ = 0.0D; + } + + this.prevPosX = this.lastTickPosX = this.posX = ((NBTTagDouble)var2.tagAt(0)).doubleValue; + this.prevPosY = this.lastTickPosY = this.posY = ((NBTTagDouble)var2.tagAt(1)).doubleValue; + this.prevPosZ = this.lastTickPosZ = this.posZ = ((NBTTagDouble)var2.tagAt(2)).doubleValue; + this.prevRotationYaw = this.rotationYaw = ((NBTTagFloat)var4.tagAt(0)).floatValue; + this.prevRotationPitch = this.rotationPitch = ((NBTTagFloat)var4.tagAt(1)).floatValue; + this.fallDistance = var1.getFloat("FallDistance"); + this.fire = var1.getShort("Fire"); + this.air = var1.getShort("Air"); + this.onGround = var1.getBoolean("OnGround"); + this.setPosition(this.posX, this.posY, this.posZ); + this.setRotation(this.rotationYaw, this.rotationPitch); + this.readEntityFromNBT(var1); + } + + protected final String getEntityString() { + return EntityList.getEntityString(this); + } + + protected abstract void readEntityFromNBT(NBTTagCompound var1); + + protected abstract void writeEntityToNBT(NBTTagCompound var1); + + protected NBTTagList newDoubleNBTList(double... var1) { + NBTTagList var2 = new NBTTagList(); + double[] var3 = var1; + int var4 = var1.length; + + for(int var5 = 0; var5 < var4; ++var5) { + double var6 = var3[var5]; + var2.setTag(new NBTTagDouble(var6)); + } + + return var2; + } + + protected NBTTagList newFloatNBTList(float... var1) { + NBTTagList var2 = new NBTTagList(); + float[] var3 = var1; + int var4 = var1.length; + + for(int var5 = 0; var5 < var4; ++var5) { + float var6 = var3[var5]; + var2.setTag(new NBTTagFloat(var6)); + } + + return var2; + } + + public EntityItem dropItem(int var1, int var2) { + return this.dropItemWithOffset(var1, var2, 0.0F); + } + + public EntityItem dropItemWithOffset(int var1, int var2, float var3) { + return this.entityDropItem(new ItemStack(var1, var2, 0), var3); + } + + public EntityItem entityDropItem(ItemStack var1, float var2) { + EntityItem var3 = new EntityItem(this.worldObj, this.posX, this.posY + (double)var2, this.posZ, var1); + var3.delayBeforeCanPickup = 10; + this.worldObj.entityJoinedWorld(var3); + return var3; + } + + public boolean isEntityAlive() { + return !this.isDead; + } + + public boolean isEntityInsideOpaqueBlock() { + for(int var1 = 0; var1 < 8; ++var1) { + float var2 = ((float)((var1 >> 0) % 2) - 0.5F) * this.width * 0.9F; + float var3 = ((float)((var1 >> 1) % 2) - 0.5F) * 0.1F; + float var4 = ((float)((var1 >> 2) % 2) - 0.5F) * this.width * 0.9F; + int var5 = MathHelper.floor_double(this.posX + (double)var2); + int var6 = MathHelper.floor_double(this.posY + (double)this.getEyeHeight() + (double)var3); + int var7 = MathHelper.floor_double(this.posZ + (double)var4); + if(this.worldObj.isBlockNormalCube(var5, var6, var7)) { + return true; + } + } + + return false; + } + + public boolean interact(EntityPlayer var1) { + return false; + } + + public AxisAlignedBB func_89_d(Entity var1) { + return null; + } + + public void updateRidden() { + if(this.ridingEntity.isDead) { + this.ridingEntity = null; + } else { + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.onUpdate(); + if(this.ridingEntity != null) { + this.ridingEntity.updateRiderPosition(); + this.entityRiderYawDelta += (double)(this.ridingEntity.rotationYaw - this.ridingEntity.prevRotationYaw); + + for(this.entityRiderPitchDelta += (double)(this.ridingEntity.rotationPitch - this.ridingEntity.prevRotationPitch); this.entityRiderYawDelta >= 180.0D; this.entityRiderYawDelta -= 360.0D) { + } + + while(this.entityRiderYawDelta < -180.0D) { + this.entityRiderYawDelta += 360.0D; + } + + while(this.entityRiderPitchDelta >= 180.0D) { + this.entityRiderPitchDelta -= 360.0D; + } + + while(this.entityRiderPitchDelta < -180.0D) { + this.entityRiderPitchDelta += 360.0D; + } + + double var1 = this.entityRiderYawDelta * 0.5D; + double var3 = this.entityRiderPitchDelta * 0.5D; + float var5 = 10.0F; + if(var1 > (double)var5) { + var1 = (double)var5; + } + + if(var1 < (double)(-var5)) { + var1 = (double)(-var5); + } + + if(var3 > (double)var5) { + var3 = (double)var5; + } + + if(var3 < (double)(-var5)) { + var3 = (double)(-var5); + } + + this.entityRiderYawDelta -= var1; + this.entityRiderPitchDelta -= var3; + this.rotationYaw = (float)((double)this.rotationYaw + var1); + this.rotationPitch = (float)((double)this.rotationPitch + var3); + } + } + } + + public void updateRiderPosition() { + this.riddenByEntity.setPosition(this.posX, this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(), this.posZ); + } + + public double getYOffset() { + return (double)this.yOffset; + } + + public double getMountedYOffset() { + return (double)this.height * 0.75D; + } + + public void mountEntity(Entity var1) { + this.entityRiderPitchDelta = 0.0D; + this.entityRiderYawDelta = 0.0D; + if(var1 == null) { + if(this.ridingEntity != null) { + this.setLocationAndAngles(this.ridingEntity.posX, this.ridingEntity.boundingBox.minY + (double)this.ridingEntity.height, this.ridingEntity.posZ, this.rotationYaw, this.rotationPitch); + this.ridingEntity.riddenByEntity = null; + } + + this.ridingEntity = null; + } else if(this.ridingEntity == var1) { + this.ridingEntity.riddenByEntity = null; + this.ridingEntity = null; + this.setLocationAndAngles(var1.posX, var1.boundingBox.minY + (double)var1.height, var1.posZ, this.rotationYaw, this.rotationPitch); + } else { + if(this.ridingEntity != null) { + this.ridingEntity.riddenByEntity = null; + } + + if(var1.riddenByEntity != null) { + var1.riddenByEntity.ridingEntity = null; + } + + this.ridingEntity = var1; + var1.riddenByEntity = this; + } + } + + public Vec3D getLookVec() { + return null; + } + + public void setInPortal() { + } + + public ItemStack[] getInventory() { + return null; + } + + public boolean isSneaking() { + return this.getFlag(1); + } + + public void setSneaking(boolean var1) { + this.setFlag(1, var1); + } + + protected boolean getFlag(int var1) { + return (this.dataWatcher.getWatchableObjectByte(0) & 1 << var1) != 0; + } + + protected void setFlag(int var1, boolean var2) { + byte var3 = this.dataWatcher.getWatchableObjectByte(0); + if(var2) { + this.dataWatcher.updateObject(0, Byte.valueOf((byte)(var3 | 1 << var1))); + } else { + this.dataWatcher.updateObject(0, Byte.valueOf((byte)(var3 & ~(1 << var1)))); + } + + } + + public void onStruckByLightning(EntityLightningBolt var1) { + this.dealFireDamage(5); + ++this.fire; + if(this.fire == 0) { + this.fire = 300; + } + + } + + public void func_27010_a(EntityLiving var1) { + } + + protected boolean func_28005_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(this.worldObj.isBlockNormalCube(var7, var8, var9)) { + boolean var16 = !this.worldObj.isBlockNormalCube(var7 - 1, var8, var9); + boolean var17 = !this.worldObj.isBlockNormalCube(var7 + 1, var8, var9); + boolean var18 = !this.worldObj.isBlockNormalCube(var7, var8 - 1, var9); + boolean var19 = !this.worldObj.isBlockNormalCube(var7, var8 + 1, var9); + boolean var20 = !this.worldObj.isBlockNormalCube(var7, var8, var9 - 1); + boolean var21 = !this.worldObj.isBlockNormalCube(var7, var8, var9 + 1); + byte var22 = -1; + double var23 = 9999.0D; + if(var16 && var10 < var23) { + var23 = var10; + var22 = 0; + } + + if(var17 && 1.0D - var10 < var23) { + var23 = 1.0D - var10; + var22 = 1; + } + + if(var18 && var12 < var23) { + var23 = var12; + var22 = 2; + } + + if(var19 && 1.0D - var12 < var23) { + var23 = 1.0D - var12; + var22 = 3; + } + + if(var20 && var14 < var23) { + var23 = var14; + var22 = 4; + } + + if(var21 && 1.0D - var14 < var23) { + var23 = 1.0D - var14; + var22 = 5; + } + + float var25 = this.rand.nextFloat() * 0.2F + 0.1F; + if(var22 == 0) { + this.motionX = (double)(-var25); + } + + if(var22 == 1) { + this.motionX = (double)var25; + } + + if(var22 == 2) { + this.motionY = (double)(-var25); + } + + if(var22 == 3) { + this.motionY = (double)var25; + } + + if(var22 == 4) { + this.motionZ = (double)(-var25); + } + + if(var22 == 5) { + this.motionZ = (double)var25; + } + } + + return false; + } +} diff --git a/src/net/minecraft/src/EntityAnimal.java b/src/net/minecraft/src/EntityAnimal.java new file mode 100644 index 0000000..640d4ee --- /dev/null +++ b/src/net/minecraft/src/EntityAnimal.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +public abstract class EntityAnimal extends EntityCreature implements IAnimals { + public EntityAnimal(World var1) { + super(var1); + } + + protected float getBlockPathWeight(int var1, int var2, int var3) { + return this.worldObj.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID ? 10.0F : this.worldObj.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.getBlockLightValueNoChecks(var1, var2, var3) > 8 && super.getCanSpawnHere(); + } + + public int getTalkInterval() { + return 120; + } +} diff --git a/src/net/minecraft/src/EntityArrow.java b/src/net/minecraft/src/EntityArrow.java new file mode 100644 index 0000000..3cb274e --- /dev/null +++ b/src/net/minecraft/src/EntityArrow.java @@ -0,0 +1,251 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityArrow extends Entity { + private int xTile = -1; + private int yTile = -1; + private int zTile = -1; + private int inTile = 0; + private int field_28011_h = 0; + private boolean inGround = false; + public boolean field_28012_a = false; + public int arrowShake = 0; + public EntityLiving owner; + private int ticksInGround; + private int ticksInAir = 0; + + public EntityArrow(World var1) { + super(var1); + this.setSize(0.5F, 0.5F); + } + + public EntityArrow(World var1, double var2, double var4, double var6) { + super(var1); + this.setSize(0.5F, 0.5F); + this.setPosition(var2, var4, var6); + this.yOffset = 0.0F; + } + + public EntityArrow(World var1, EntityLiving var2) { + super(var1); + this.owner = var2; + this.field_28012_a = var2 instanceof EntityPlayer; + this.setSize(0.5F, 0.5F); + this.setLocationAndAngles(var2.posX, var2.posY + (double)var2.getEyeHeight(), var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.posY -= (double)0.1F; + this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI)); + this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI)); + this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI)); + this.setArrowHeading(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); + } + + protected void entityInit() { + } + + public void setArrowHeading(double var1, double var3, double var5, float var7, float var8) { + float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); + var1 /= (double)var9; + var3 /= (double)var9; + var5 /= (double)var9; + var1 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var3 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var5 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var1 *= (double)var7; + var3 *= (double)var7; + var5 *= (double)var7; + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var10) * 180.0D / (double)((float)Math.PI)); + this.ticksInGround = 0; + } + + public void onUpdate() { + super.onUpdate(); + if(this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) { + float var1 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var1) * 180.0D / (double)((float)Math.PI)); + } + + int var15 = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + if(var15 > 0) { + Block.blocksList[var15].setBlockBoundsBasedOnState(this.worldObj, this.xTile, this.yTile, this.zTile); + AxisAlignedBB var2 = Block.blocksList[var15].getCollisionBoundingBoxFromPool(this.worldObj, this.xTile, this.yTile, this.zTile); + if(var2 != null && var2.isVecInXYZ(Vec3D.createVector(this.posX, this.posY, this.posZ))) { + this.inGround = true; + } + } + + if(this.arrowShake > 0) { + --this.arrowShake; + } + + if(this.inGround) { + var15 = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + int var18 = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile); + if(var15 == this.inTile && var18 == this.field_28011_h) { + ++this.ticksInGround; + if(this.ticksInGround == 1200) { + this.setEntityDead(); + } + + } else { + this.inGround = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.ticksInGround = 0; + this.ticksInAir = 0; + } + } else { + ++this.ticksInAir; + Vec3D var16 = Vec3D.createVector(this.posX, this.posY, this.posZ); + Vec3D var17 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition var3 = this.worldObj.func_28099_a(var16, var17, false, true); + var16 = Vec3D.createVector(this.posX, this.posY, this.posZ); + var17 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if(var3 != null) { + var17 = Vec3D.createVector(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord); + } + + Entity var4 = null; + List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double var6 = 0.0D; + + float var10; + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.canBeCollidedWith() && (var9 != this.owner || this.ticksInAir >= 5)) { + var10 = 0.3F; + AxisAlignedBB var11 = var9.boundingBox.expand((double)var10, (double)var10, (double)var10); + MovingObjectPosition var12 = var11.func_706_a(var16, var17); + 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 var19; + if(var3 != null) { + if(var3.entityHit != null) { + if(var3.entityHit.attackEntityFrom(this.owner, 4)) { + this.worldObj.playSoundAtEntity(this, "random.drr", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.setEntityDead(); + } else { + this.motionX *= (double)-0.1F; + this.motionY *= (double)-0.1F; + this.motionZ *= (double)-0.1F; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + } + } else { + this.xTile = var3.blockX; + this.yTile = var3.blockY; + this.zTile = var3.blockZ; + this.inTile = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + this.field_28011_h = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile); + this.motionX = (double)((float)(var3.hitVec.xCoord - this.posX)); + this.motionY = (double)((float)(var3.hitVec.yCoord - this.posY)); + this.motionZ = (double)((float)(var3.hitVec.zCoord - this.posZ)); + var19 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / (double)var19 * (double)0.05F; + this.posY -= this.motionY / (double)var19 * (double)0.05F; + this.posZ -= this.motionZ / (double)var19 * (double)0.05F; + this.worldObj.playSoundAtEntity(this, "random.drr", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.arrowShake = 7; + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + var19 = 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)var19) * 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 var20 = 0.99F; + var10 = 0.03F; + if(this.isInWater()) { + for(int var21 = 0; var21 < 4; ++var21) { + float var22 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var22, this.posY - this.motionY * (double)var22, this.posZ - this.motionZ * (double)var22, this.motionX, this.motionY, this.motionZ); + } + + var20 = 0.8F; + } + + this.motionX *= (double)var20; + this.motionY *= (double)var20; + this.motionZ *= (double)var20; + this.motionY -= (double)var10; + this.setPosition(this.posX, this.posY, this.posZ); + } + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.xTile); + var1.setShort("yTile", (short)this.yTile); + var1.setShort("zTile", (short)this.zTile); + var1.setByte("inTile", (byte)this.inTile); + var1.setByte("inData", (byte)this.field_28011_h); + var1.setByte("shake", (byte)this.arrowShake); + var1.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + var1.setBoolean("player", this.field_28012_a); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.xTile = var1.getShort("xTile"); + this.yTile = var1.getShort("yTile"); + this.zTile = var1.getShort("zTile"); + this.inTile = var1.getByte("inTile") & 255; + this.field_28011_h = var1.getByte("inData") & 255; + this.arrowShake = var1.getByte("shake") & 255; + this.inGround = var1.getByte("inGround") == 1; + this.field_28012_a = var1.getBoolean("player"); + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(!this.worldObj.singleplayerWorld) { + if(this.inGround && this.field_28012_a && this.arrowShake <= 0 && var1.inventory.addItemStackToInventory(new ItemStack(Item.arrow, 1))) { + this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.onItemPickup(this, 1); + this.setEntityDead(); + } + + } + } +} diff --git a/src/net/minecraft/src/EntityBoat.java b/src/net/minecraft/src/EntityBoat.java new file mode 100644 index 0000000..0ac9eaa --- /dev/null +++ b/src/net/minecraft/src/EntityBoat.java @@ -0,0 +1,316 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityBoat extends Entity { + public int damageTaken; + public int field_9177_b; + public int forwardDirection; + 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.damageTaken = 0; + this.field_9177_b = 0; + this.forwardDirection = 1; + this.preventEntitySpawning = true; + this.setSize(1.5F, 0.6F); + this.yOffset = this.height / 2.0F; + } + + protected boolean func_25017_l() { + return false; + } + + protected void entityInit() { + } + + public AxisAlignedBB func_89_d(Entity var1) { + return var1.boundingBox; + } + + public AxisAlignedBB getBoundingBox() { + return this.boundingBox; + } + + public boolean canBePushed() { + return true; + } + + public EntityBoat(World var1, double var2, double var4, double var6) { + this(var1); + this.setPosition(var2, var4 + (double)this.yOffset, var6); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevPosX = var2; + this.prevPosY = var4; + this.prevPosZ = var6; + } + + public double getMountedYOffset() { + return (double)this.height * 0.0D - (double)0.3F; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + if(!this.worldObj.singleplayerWorld && !this.isDead) { + this.forwardDirection = -this.forwardDirection; + this.field_9177_b = 10; + this.damageTaken += var2 * 10; + this.setBeenAttacked(); + if(this.damageTaken > 40) { + if(this.riddenByEntity != null) { + this.riddenByEntity.mountEntity(this); + } + + 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.shiftedIndex, 1, 0.0F); + } + + this.setEntityDead(); + } + + return true; + } else { + return true; + } + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void onUpdate() { + super.onUpdate(); + if(this.field_9177_b > 0) { + --this.field_9177_b; + } + + if(this.damageTaken > 0) { + --this.damageTaken; + } + + 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.isAABBInMaterial(var9, Material.water)) { + var2 += 1.0D / (double)var1; + } + } + + double var6; + double var8; + double var10; + double var21; + if(this.worldObj.singleplayerWorld) { + if(this.field_9176_d > 0) { + var21 = 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(var21, var6, var8); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else { + var21 = this.posX + this.motionX; + var6 = this.posY + this.motionY; + var8 = this.posZ + this.motionZ; + this.setPosition(var21, 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 { + if(var2 < 1.0D) { + var21 = var2 * 2.0D - 1.0D; + this.motionY += (double)0.04F * var21; + } else { + if(this.motionY < 0.0D) { + this.motionY /= 2.0D; + } + + this.motionY += (double)0.007F; + } + + if(this.riddenByEntity != null) { + this.motionX += this.riddenByEntity.motionX * 0.2D; + this.motionZ += this.riddenByEntity.motionZ * 0.2D; + } + + var21 = 0.4D; + if(this.motionX < -var21) { + this.motionX = -var21; + } + + if(this.motionX > var21) { + this.motionX = var21; + } + + if(this.motionZ < -var21) { + this.motionZ = -var21; + } + + if(this.motionZ > var21) { + this.motionZ = var21; + } + + if(this.onGround) { + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + var6 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var6 > 0.15D) { + var8 = Math.cos((double)this.rotationYaw * Math.PI / 180.0D); + var10 = Math.sin((double)this.rotationYaw * Math.PI / 180.0D); + + for(int var12 = 0; (double)var12 < 1.0D + var6 * 60.0D; ++var12) { + double var13 = (double)(this.rand.nextFloat() * 2.0F - 1.0F); + double var15 = (double)(this.rand.nextInt(2) * 2 - 1) * 0.7D; + double var17; + double var19; + if(this.rand.nextBoolean()) { + var17 = this.posX - var8 * var13 * 0.8D + var10 * var15; + var19 = this.posZ - var10 * var13 * 0.8D - var8 * var15; + this.worldObj.spawnParticle("splash", var17, this.posY - 0.125D, var19, this.motionX, this.motionY, this.motionZ); + } else { + var17 = this.posX + var8 + var10 * var13 * 0.7D; + var19 = this.posZ + var10 - var8 * var13 * 0.7D; + this.worldObj.spawnParticle("splash", var17, this.posY - 0.125D, var19, this.motionX, this.motionY, this.motionZ); + } + } + } + + if(this.isCollidedHorizontally && var6 > 0.15D) { + if(!this.worldObj.singleplayerWorld) { + this.setEntityDead(); + + int var22; + for(var22 = 0; var22 < 3; ++var22) { + this.dropItemWithOffset(Block.planks.blockID, 1, 0.0F); + } + + for(var22 = 0; var22 < 2; ++var22) { + this.dropItemWithOffset(Item.stick.shiftedIndex, 1, 0.0F); + } + } + } else { + this.motionX *= (double)0.99F; + this.motionY *= (double)0.95F; + this.motionZ *= (double)0.99F; + } + + this.rotationPitch = 0.0F; + var8 = (double)this.rotationYaw; + var10 = this.prevPosX - this.posX; + double var23 = this.prevPosZ - this.posZ; + if(var10 * var10 + var23 * var23 > 0.001D) { + var8 = (double)((float)(Math.atan2(var23, var10) * 180.0D / Math.PI)); + } + + double var14; + for(var14 = var8 - (double)this.rotationYaw; var14 >= 180.0D; var14 -= 360.0D) { + } + + while(var14 < -180.0D) { + var14 += 360.0D; + } + + if(var14 > 20.0D) { + var14 = 20.0D; + } + + if(var14 < -20.0D) { + var14 = -20.0D; + } + + this.rotationYaw = (float)((double)this.rotationYaw + var14); + this.setRotation(this.rotationYaw, this.rotationPitch); + List var16 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand((double)0.2F, 0.0D, (double)0.2F)); + int var24; + if(var16 != null && var16.size() > 0) { + for(var24 = 0; var24 < var16.size(); ++var24) { + Entity var18 = (Entity)var16.get(var24); + if(var18 != this.riddenByEntity && var18.canBePushed() && var18 instanceof EntityBoat) { + var18.applyEntityCollision(this); + } + } + } + + for(var24 = 0; var24 < 4; ++var24) { + int var25 = MathHelper.floor_double(this.posX + ((double)(var24 % 2) - 0.5D) * 0.8D); + int var26 = MathHelper.floor_double(this.posY); + int var20 = MathHelper.floor_double(this.posZ + ((double)(var24 / 2) - 0.5D) * 0.8D); + if(this.worldObj.getBlockId(var25, var26, var20) == Block.snow.blockID) { + this.worldObj.setBlockWithNotify(var25, var26, var20, 0); + } + } + + if(this.riddenByEntity != null && this.riddenByEntity.isDead) { + this.riddenByEntity = null; + } + + } + } + + public void updateRiderPosition() { + if(this.riddenByEntity != null) { + double var1 = Math.cos((double)this.rotationYaw * Math.PI / 180.0D) * 0.4D; + double var3 = Math.sin((double)this.rotationYaw * Math.PI / 180.0D) * 0.4D; + this.riddenByEntity.setPosition(this.posX + var1, this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(), this.posZ + var3); + } + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + } + + public boolean interact(EntityPlayer var1) { + if(this.riddenByEntity != null && this.riddenByEntity instanceof EntityPlayer && this.riddenByEntity != var1) { + return true; + } else { + if(!this.worldObj.singleplayerWorld) { + var1.mountEntity(this); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/EntityChicken.java b/src/net/minecraft/src/EntityChicken.java new file mode 100644 index 0000000..a611b2d --- /dev/null +++ b/src/net/minecraft/src/EntityChicken.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +public class EntityChicken extends EntityAnimal { + 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 timeUntilNextEgg; + + public EntityChicken(World var1) { + super(var1); + this.texture = "/mob/chicken.png"; + this.setSize(0.3F, 0.4F); + this.health = 4; + this.timeUntilNextEgg = this.rand.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.singleplayerWorld && --this.timeUntilNextEgg <= 0) { + this.worldObj.playSoundAtEntity(this, "mob.chickenplop", 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + this.dropItem(Item.egg.shiftedIndex, 1); + this.timeUntilNextEgg = this.rand.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.shiftedIndex; + } +} diff --git a/src/net/minecraft/src/EntityCow.java b/src/net/minecraft/src/EntityCow.java new file mode 100644 index 0000000..87c6cb9 --- /dev/null +++ b/src/net/minecraft/src/EntityCow.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +public class EntityCow extends EntityAnimal { + public EntityCow(World var1) { + super(var1); + this.texture = "/mob/cow.png"; + this.setSize(0.9F, 1.3F); + } + + 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.shiftedIndex; + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(var2 != null && var2.itemID == Item.bucketEmpty.shiftedIndex) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, new ItemStack(Item.bucketMilk)); + return true; + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/EntityCreature.java b/src/net/minecraft/src/EntityCreature.java new file mode 100644 index 0000000..30829f4 --- /dev/null +++ b/src/net/minecraft/src/EntityCreature.java @@ -0,0 +1,181 @@ +package net.minecraft.src; + +public class EntityCreature extends EntityLiving { + private PathEntity pathToEntity; + protected Entity playerToAttack; + protected boolean hasAttacked = false; + + public EntityCreature(World var1) { + super(var1); + } + + protected boolean func_25026_u() { + return false; + } + + protected void updatePlayerActionState() { + this.hasAttacked = this.func_25026_u(); + float var1 = 16.0F; + if(this.playerToAttack == null) { + this.playerToAttack = this.findPlayerToAttack(); + if(this.playerToAttack != null) { + this.pathToEntity = this.worldObj.getPathToEntity(this, this.playerToAttack, var1); + } + } else if(!this.playerToAttack.isEntityAlive()) { + this.playerToAttack = null; + } else { + float var2 = this.playerToAttack.getDistanceToEntity(this); + if(this.canEntityBeSeen(this.playerToAttack)) { + this.attackEntity(this.playerToAttack, var2); + } else { + this.func_28013_b(this.playerToAttack, var2); + } + } + + if(this.hasAttacked || this.playerToAttack == null || this.pathToEntity != null && this.rand.nextInt(20) != 0) { + if(!this.hasAttacked && (this.pathToEntity == null && this.rand.nextInt(80) == 0 || this.rand.nextInt(80) == 0)) { + this.func_31021_B(); + } + } else { + this.pathToEntity = this.worldObj.getPathToEntity(this, this.playerToAttack, var1); + } + + int var21 = MathHelper.floor_double(this.boundingBox.minY + 0.5D); + boolean var3 = this.isInWater(); + boolean var4 = this.handleLavaMovement(); + this.rotationPitch = 0.0F; + if(this.pathToEntity != null && this.rand.nextInt(100) != 0) { + Vec3D var5 = this.pathToEntity.getPosition(this); + double var6 = (double)(this.width * 2.0F); + + while(var5 != null && var5.squareDistanceTo(this.posX, var5.yCoord, this.posZ) < var6 * var6) { + this.pathToEntity.incrementPathIndex(); + if(this.pathToEntity.isFinished()) { + var5 = null; + this.pathToEntity = null; + } else { + var5 = this.pathToEntity.getPosition(this); + } + } + + this.isJumping = false; + if(var5 != null) { + double var8 = var5.xCoord - this.posX; + double var10 = var5.zCoord - this.posZ; + double var12 = var5.yCoord - (double)var21; + float var14 = (float)(Math.atan2(var10, var8) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var15 = var14 - this.rotationYaw; + + for(this.moveForward = this.moveSpeed; 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.hasAttacked && this.playerToAttack != null) { + double var16 = this.playerToAttack.posX - this.posX; + double var18 = this.playerToAttack.posZ - this.posZ; + float var20 = this.rotationYaw; + this.rotationYaw = (float)(Math.atan2(var18, var16) * 180.0D / (double)((float)Math.PI)) - 90.0F; + var15 = (var20 - this.rotationYaw + 90.0F) * (float)Math.PI / 180.0F; + this.moveStrafing = -MathHelper.sin(var15) * this.moveForward * 1.0F; + this.moveForward = MathHelper.cos(var15) * this.moveForward * 1.0F; + } + + if(var12 > 0.0D) { + this.isJumping = true; + } + } + + if(this.playerToAttack != null) { + this.faceEntity(this.playerToAttack, 30.0F, 30.0F); + } + + if(this.isCollidedHorizontally && !this.getGotPath()) { + this.isJumping = true; + } + + if(this.rand.nextFloat() < 0.8F && (var3 || var4)) { + this.isJumping = true; + } + + } else { + super.updatePlayerActionState(); + this.pathToEntity = null; + } + } + + protected void func_31021_B() { + boolean var1 = false; + int var2 = -1; + int var3 = -1; + int var4 = -1; + float var5 = -99999.0F; + + for(int var6 = 0; var6 < 10; ++var6) { + int var7 = MathHelper.floor_double(this.posX + (double)this.rand.nextInt(13) - 6.0D); + int var8 = MathHelper.floor_double(this.posY + (double)this.rand.nextInt(7) - 3.0D); + int var9 = MathHelper.floor_double(this.posZ + (double)this.rand.nextInt(13) - 6.0D); + float var10 = this.getBlockPathWeight(var7, var8, var9); + if(var10 > var5) { + var5 = var10; + var2 = var7; + var3 = var8; + var4 = var9; + var1 = true; + } + } + + if(var1) { + this.pathToEntity = this.worldObj.getEntityPathToXYZ(this, var2, var3, var4, 10.0F); + } + + } + + protected void attackEntity(Entity var1, float var2) { + } + + protected void func_28013_b(Entity var1, float var2) { + } + + protected float getBlockPathWeight(int var1, int var2, int var3) { + return 0.0F; + } + + protected Entity findPlayerToAttack() { + return null; + } + + public boolean getCanSpawnHere() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.boundingBox.minY); + int var3 = MathHelper.floor_double(this.posZ); + return super.getCanSpawnHere() && this.getBlockPathWeight(var1, var2, var3) >= 0.0F; + } + + public boolean getGotPath() { + return this.pathToEntity != null; + } + + public void setPathToEntity(PathEntity var1) { + this.pathToEntity = var1; + } + + public Entity getEntityToAttack() { + return this.playerToAttack; + } + + public void setEntityToAttack(Entity var1) { + this.playerToAttack = var1; + } +} diff --git a/src/net/minecraft/src/EntityCreeper.java b/src/net/minecraft/src/EntityCreeper.java new file mode 100644 index 0000000..c67eca6 --- /dev/null +++ b/src/net/minecraft/src/EntityCreeper.java @@ -0,0 +1,141 @@ +package net.minecraft.src; + +public class EntityCreeper extends EntityMob { + int timeSinceIgnited; + int lastActiveTime; + + public EntityCreeper(World var1) { + super(var1); + this.texture = "/mob/creeper.png"; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, Byte.valueOf((byte)-1)); + this.dataWatcher.addObject(17, Byte.valueOf((byte)0)); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + if(this.dataWatcher.getWatchableObjectByte(17) == 1) { + var1.setBoolean("powered", true); + } + + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.dataWatcher.updateObject(17, Byte.valueOf((byte)(var1.getBoolean("powered") ? 1 : 0))); + } + + protected void func_28013_b(Entity var1, float var2) { + if(!this.worldObj.singleplayerWorld) { + if(this.timeSinceIgnited > 0) { + this.setCreeperState(-1); + --this.timeSinceIgnited; + if(this.timeSinceIgnited < 0) { + this.timeSinceIgnited = 0; + } + } + + } + } + + public void onUpdate() { + this.lastActiveTime = this.timeSinceIgnited; + if(this.worldObj.singleplayerWorld) { + int var1 = this.getCreeperState(); + if(var1 > 0 && this.timeSinceIgnited == 0) { + this.worldObj.playSoundAtEntity(this, "random.fuse", 1.0F, 0.5F); + } + + this.timeSinceIgnited += var1; + if(this.timeSinceIgnited < 0) { + this.timeSinceIgnited = 0; + } + + if(this.timeSinceIgnited >= 30) { + this.timeSinceIgnited = 30; + } + } + + super.onUpdate(); + if(this.playerToAttack == null && this.timeSinceIgnited > 0) { + this.setCreeperState(-1); + --this.timeSinceIgnited; + if(this.timeSinceIgnited < 0) { + this.timeSinceIgnited = 0; + } + } + + } + + 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.shiftedIndex + this.rand.nextInt(2), 1); + } + + } + + protected void attackEntity(Entity var1, float var2) { + if(!this.worldObj.singleplayerWorld) { + int var3 = this.getCreeperState(); + if(var3 <= 0 && var2 < 3.0F || var3 > 0 && var2 < 7.0F) { + if(this.timeSinceIgnited == 0) { + this.worldObj.playSoundAtEntity(this, "random.fuse", 1.0F, 0.5F); + } + + this.setCreeperState(1); + ++this.timeSinceIgnited; + if(this.timeSinceIgnited >= 30) { + if(this.getPowered()) { + this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 6.0F); + } else { + this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 3.0F); + } + + this.setEntityDead(); + } + + this.hasAttacked = true; + } else { + this.setCreeperState(-1); + --this.timeSinceIgnited; + if(this.timeSinceIgnited < 0) { + this.timeSinceIgnited = 0; + } + } + + } + } + + public boolean getPowered() { + return this.dataWatcher.getWatchableObjectByte(17) == 1; + } + + protected int getDropItemId() { + return Item.gunpowder.shiftedIndex; + } + + private int getCreeperState() { + return this.dataWatcher.getWatchableObjectByte(16); + } + + private void setCreeperState(int var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)var1)); + } + + public void onStruckByLightning(EntityLightningBolt var1) { + super.onStruckByLightning(var1); + this.dataWatcher.updateObject(17, Byte.valueOf((byte)1)); + } +} diff --git a/src/net/minecraft/src/EntityEgg.java b/src/net/minecraft/src/EntityEgg.java new file mode 100644 index 0000000..51a65a3 --- /dev/null +++ b/src/net/minecraft/src/EntityEgg.java @@ -0,0 +1,225 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityEgg extends Entity { + private int xTile = -1; + private int yTile = -1; + private int zTile = -1; + private int inTile = 0; + private boolean inGround = false; + public int shake = 0; + private EntityLiving field_20083_aj; + private int field_20081_ak; + private int field_20079_al = 0; + + public EntityEgg(World var1) { + super(var1); + this.setSize(0.25F, 0.25F); + } + + protected void entityInit() { + } + + public EntityEgg(World var1, EntityLiving var2) { + super(var1); + this.field_20083_aj = var2; + this.setSize(0.25F, 0.25F); + this.setLocationAndAngles(var2.posX, var2.posY + (double)var2.getEyeHeight(), var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.posY -= (double)0.1F; + this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + float var3 = 0.4F; + this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.func_20078_a(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); + } + + public EntityEgg(World var1, double var2, double var4, double var6) { + super(var1); + this.field_20081_ak = 0; + this.setSize(0.25F, 0.25F); + this.setPosition(var2, var4, var6); + this.yOffset = 0.0F; + } + + public void func_20078_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.rand.nextGaussian() * (double)0.0075F * (double)var8; + var3 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var5 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var1 *= (double)var7; + var3 *= (double)var7; + var5 *= (double)var7; + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var10) * 180.0D / (double)((float)Math.PI)); + this.field_20081_ak = 0; + } + + public void onUpdate() { + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + super.onUpdate(); + if(this.shake > 0) { + --this.shake; + } + + if(this.inGround) { + int var1 = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + if(var1 == this.inTile) { + ++this.field_20081_ak; + if(this.field_20081_ak == 1200) { + this.setEntityDead(); + } + + return; + } + + this.inGround = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.field_20081_ak = 0; + this.field_20079_al = 0; + } else { + ++this.field_20079_al; + } + + Vec3D var15 = Vec3D.createVector(this.posX, this.posY, this.posZ); + Vec3D var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition var3 = this.worldObj.rayTraceBlocks(var15, var2); + var15 = Vec3D.createVector(this.posX, this.posY, this.posZ); + var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if(var3 != null) { + var2 = Vec3D.createVector(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord); + } + + if(!this.worldObj.singleplayerWorld) { + Entity var4 = null; + List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double var6 = 0.0D; + + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.canBeCollidedWith() && (var9 != this.field_20083_aj || this.field_20079_al >= 5)) { + float var10 = 0.3F; + AxisAlignedBB var11 = var9.boundingBox.expand((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.attackEntityFrom(this.field_20083_aj, 0)) { + } + + if(!this.worldObj.singleplayerWorld && this.rand.nextInt(8) == 0) { + byte var16 = 1; + if(this.rand.nextInt(32) == 0) { + var16 = 4; + } + + for(int var17 = 0; var17 < var16; ++var17) { + EntityChicken var21 = new EntityChicken(this.worldObj); + var21.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); + this.worldObj.entityJoinedWorld(var21); + } + } + + for(int var18 = 0; var18 < 8; ++var18) { + 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 var20 = 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)var20) * 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 var19 = 0.99F; + float var22 = 0.03F; + if(this.isInWater()) { + for(int var7 = 0; var7 < 4; ++var7) { + float var23 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var23, this.posY - this.motionY * (double)var23, this.posZ - this.motionZ * (double)var23, this.motionX, this.motionY, this.motionZ); + } + + var19 = 0.8F; + } + + this.motionX *= (double)var19; + this.motionY *= (double)var19; + this.motionZ *= (double)var19; + this.motionY -= (double)var22; + this.setPosition(this.posX, this.posY, this.posZ); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.xTile); + var1.setShort("yTile", (short)this.yTile); + var1.setShort("zTile", (short)this.zTile); + var1.setByte("inTile", (byte)this.inTile); + var1.setByte("shake", (byte)this.shake); + var1.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.xTile = var1.getShort("xTile"); + this.yTile = var1.getShort("yTile"); + this.zTile = var1.getShort("zTile"); + this.inTile = var1.getByte("inTile") & 255; + this.shake = var1.getByte("shake") & 255; + this.inGround = var1.getByte("inGround") == 1; + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(this.inGround && this.field_20083_aj == var1 && this.shake <= 0 && var1.inventory.addItemStackToInventory(new ItemStack(Item.arrow, 1))) { + this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.onItemPickup(this, 1); + this.setEntityDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityFallingSand.java b/src/net/minecraft/src/EntityFallingSand.java new file mode 100644 index 0000000..7f85495 --- /dev/null +++ b/src/net/minecraft/src/EntityFallingSand.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +public class EntityFallingSand extends Entity { + public int blockID; + public int fallTime = 0; + + public EntityFallingSand(World var1) { + super(var1); + } + + public EntityFallingSand(World var1, double var2, double var4, double var6, int var8) { + super(var1); + this.blockID = var8; + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.98F); + this.yOffset = this.height / 2.0F; + this.setPosition(var2, var4, var6); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevPosX = var2; + this.prevPosY = var4; + this.prevPosZ = var6; + } + + protected boolean func_25017_l() { + return false; + } + + protected void entityInit() { + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void onUpdate() { + if(this.blockID == 0) { + this.setEntityDead(); + } else { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + ++this.fallTime; + this.motionY -= (double)0.04F; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.98F; + this.motionY *= (double)0.98F; + this.motionZ *= (double)0.98F; + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.posY); + int var3 = MathHelper.floor_double(this.posZ); + if(this.worldObj.getBlockId(var1, var2, var3) == this.blockID) { + this.worldObj.setBlockWithNotify(var1, var2, var3, 0); + } + + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + this.motionY *= -0.5D; + this.setEntityDead(); + if((!this.worldObj.canBlockBePlacedAt(this.blockID, var1, var2, var3, true, 1) || BlockSand.canFallBelow(this.worldObj, var1, var2 - 1, var3) || !this.worldObj.setBlockWithNotify(var1, var2, var3, this.blockID)) && !this.worldObj.singleplayerWorld) { + this.dropItem(this.blockID, 1); + } + } else if(this.fallTime > 100 && !this.worldObj.singleplayerWorld) { + this.dropItem(this.blockID, 1); + this.setEntityDead(); + } + + } + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Tile", (byte)this.blockID); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + this.blockID = var1.getByte("Tile") & 255; + } +} diff --git a/src/net/minecraft/src/EntityFireball.java b/src/net/minecraft/src/EntityFireball.java new file mode 100644 index 0000000..ae5528b --- /dev/null +++ b/src/net/minecraft/src/EntityFireball.java @@ -0,0 +1,199 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityFireball extends Entity { + private int xTile = -1; + private int yTile = -1; + private int zTile = -1; + private int inTile = 0; + private boolean inGround = false; + public int shake = 0; + public EntityLiving owner; + private int field_9190_an; + private int ticksInAir = 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); + } + + protected void entityInit() { + } + + public EntityFireball(World var1, EntityLiving var2, double var3, double var5, double var7) { + super(var1); + this.owner = var2; + this.setSize(1.0F, 1.0F); + this.setLocationAndAngles(var2.posX, var2.posY, var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + this.motionX = this.motionY = this.motionZ = 0.0D; + var3 += this.rand.nextGaussian() * 0.4D; + var5 += this.rand.nextGaussian() * 0.4D; + var7 += this.rand.nextGaussian() * 0.4D; + double var9 = (double)MathHelper.sqrt_double(var3 * var3 + var5 * var5 + var7 * var7); + this.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.fire = 10; + if(this.shake > 0) { + --this.shake; + } + + if(this.inGround) { + int var1 = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + if(var1 == this.inTile) { + ++this.field_9190_an; + if(this.field_9190_an == 1200) { + this.setEntityDead(); + } + + return; + } + + this.inGround = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.field_9190_an = 0; + this.ticksInAir = 0; + } else { + ++this.ticksInAir; + } + + Vec3D var15 = Vec3D.createVector(this.posX, this.posY, this.posZ); + Vec3D var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition var3 = this.worldObj.rayTraceBlocks(var15, var2); + var15 = Vec3D.createVector(this.posX, this.posY, this.posZ); + var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if(var3 != null) { + var2 = Vec3D.createVector(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord); + } + + Entity var4 = null; + List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double var6 = 0.0D; + + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.canBeCollidedWith() && (var9 != this.owner || this.ticksInAir >= 25)) { + float var10 = 0.3F; + AxisAlignedBB var11 = var9.boundingBox.expand((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(!this.worldObj.singleplayerWorld) { + if(var3.entityHit != null && var3.entityHit.attackEntityFrom(this.owner, 0)) { + } + + this.worldObj.newExplosion((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.isInWater()) { + for(int var18 = 0; var18 < 4; ++var18) { + float var19 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var19, this.posY - this.motionY * (double)var19, this.posZ - this.motionZ * (double)var19, this.motionX, this.motionY, this.motionZ); + } + + var17 = 0.8F; + } + + this.motionX += this.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.xTile); + var1.setShort("yTile", (short)this.yTile); + var1.setShort("zTile", (short)this.zTile); + var1.setByte("inTile", (byte)this.inTile); + var1.setByte("shake", (byte)this.shake); + var1.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.xTile = var1.getShort("xTile"); + this.yTile = var1.getShort("yTile"); + this.zTile = var1.getShort("zTile"); + this.inTile = var1.getByte("inTile") & 255; + this.shake = var1.getByte("shake") & 255; + this.inGround = var1.getByte("inGround") == 1; + } + + public boolean canBeCollidedWith() { + return true; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.setBeenAttacked(); + if(var1 != null) { + Vec3D var3 = var1.getLookVec(); + 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/src/net/minecraft/src/EntityFish.java b/src/net/minecraft/src/EntityFish.java new file mode 100644 index 0000000..3163720 --- /dev/null +++ b/src/net/minecraft/src/EntityFish.java @@ -0,0 +1,326 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityFish extends Entity { + private int xTile = -1; + private int yTile = -1; + private int zTile = -1; + private int inTile = 0; + private boolean inGround = false; + public int shake = 0; + public EntityPlayer angler; + private int ticksInGround; + private int ticksInAir = 0; + private int ticksCatchable = 0; + public Entity bobber = 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); + this.field_28008_bI = true; + } + + public EntityFish(World var1, EntityPlayer var2) { + super(var1); + this.field_28008_bI = true; + this.angler = var2; + this.angler.fishEntity = this; + this.setSize(0.25F, 0.25F); + this.setLocationAndAngles(var2.posX, var2.posY + 1.62D - (double)var2.yOffset, var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.posY -= (double)0.1F; + this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + float var3 = 0.4F; + this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.func_6142_a(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); + } + + protected void entityInit() { + } + + 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.rand.nextGaussian() * (double)0.0075F * (double)var8; + var3 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var5 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var1 *= (double)var7; + var3 *= (double)var7; + var5 *= (double)var7; + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var10) * 180.0D / (double)((float)Math.PI)); + this.ticksInGround = 0; + } + + public void onUpdate() { + super.onUpdate(); + if(this.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.singleplayerWorld) { + ItemStack var1 = this.angler.getCurrentEquippedItem(); + if(this.angler.isDead || !this.angler.isEntityAlive() || var1 == null || var1.getItem() != Item.fishingRod || this.getDistanceSqToEntity(this.angler) > 1024.0D) { + this.setEntityDead(); + this.angler.fishEntity = null; + return; + } + + if(this.bobber != null) { + if(!this.bobber.isDead) { + this.posX = this.bobber.posX; + this.posY = this.bobber.boundingBox.minY + (double)this.bobber.height * 0.8D; + this.posZ = this.bobber.posZ; + return; + } + + this.bobber = null; + } + } + + if(this.shake > 0) { + --this.shake; + } + + if(this.inGround) { + int var19 = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + if(var19 == this.inTile) { + ++this.ticksInGround; + if(this.ticksInGround == 1200) { + this.setEntityDead(); + } + + return; + } + + this.inGround = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.ticksInGround = 0; + this.ticksInAir = 0; + } else { + ++this.ticksInAir; + } + + Vec3D 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.rayTraceBlocks(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).expand(1.0D, 1.0D, 1.0D)); + double var6 = 0.0D; + + double var13; + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.canBeCollidedWith() && (var9 != this.angler || this.ticksInAir >= 5)) { + float var10 = 0.3F; + AxisAlignedBB var11 = var9.boundingBox.expand((double)var10, (double)var10, (double)var10); + MovingObjectPosition var12 = var11.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.attackEntityFrom(this.angler, 0)) { + this.bobber = var3.entityHit; + } + } else { + this.inGround = true; + } + } + + if(!this.inGround) { + this.moveEntity(this.motionX, this.motionY, this.motionZ); + float var24 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + + for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var24) * 180.0D / (double)((float)Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) { + } + + while(this.rotationPitch - this.prevRotationPitch >= 180.0F) { + this.prevRotationPitch += 360.0F; + } + + while(this.rotationYaw - this.prevRotationYaw < -180.0F) { + this.prevRotationYaw -= 360.0F; + } + + while(this.rotationYaw - this.prevRotationYaw >= 180.0F) { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + float var25 = 0.92F; + if(this.onGround || this.isCollidedHorizontally) { + var25 = 0.5F; + } + + byte var26 = 5; + double var27 = 0.0D; + + for(int var28 = 0; var28 < var26; ++var28) { + double var14 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var28 + 0) / (double)var26 - 0.125D + 0.125D; + double var16 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var28 + 1) / (double)var26 - 0.125D + 0.125D; + AxisAlignedBB var18 = AxisAlignedBB.getBoundingBoxFromPool(this.boundingBox.minX, var14, this.boundingBox.minZ, this.boundingBox.maxX, var16, this.boundingBox.maxZ); + if(this.worldObj.isAABBInMaterial(var18, Material.water)) { + var27 += 1.0D / (double)var26; + } + } + + if(var27 > 0.0D) { + if(this.ticksCatchable > 0) { + --this.ticksCatchable; + } else { + short var29 = 500; + if(this.worldObj.canLightningStrikeAt(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY) + 1, MathHelper.floor_double(this.posZ))) { + var29 = 300; + } + + if(this.rand.nextInt(var29) == 0) { + this.ticksCatchable = this.rand.nextInt(30) + 10; + this.motionY -= (double)0.2F; + this.worldObj.playSoundAtEntity(this, "random.splash", 0.25F, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + float var30 = (float)MathHelper.floor_double(this.boundingBox.minY); + + int var15; + float var17; + float var31; + for(var15 = 0; (float)var15 < 1.0F + this.width * 20.0F; ++var15) { + var31 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + var17 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + this.worldObj.spawnParticle("bubble", this.posX + (double)var31, (double)(var30 + 1.0F), this.posZ + (double)var17, this.motionX, this.motionY - (double)(this.rand.nextFloat() * 0.2F), this.motionZ); + } + + for(var15 = 0; (float)var15 < 1.0F + this.width * 20.0F; ++var15) { + var31 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + var17 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + this.worldObj.spawnParticle("splash", this.posX + (double)var31, (double)(var30 + 1.0F), this.posZ + (double)var17, this.motionX, this.motionY, this.motionZ); + } + } + } + } + + if(this.ticksCatchable > 0) { + this.motionY -= (double)(this.rand.nextFloat() * this.rand.nextFloat() * this.rand.nextFloat()) * 0.2D; + } + + var13 = var27 * 2.0D - 1.0D; + this.motionY += (double)0.04F * var13; + if(var27 > 0.0D) { + var25 = (float)((double)var25 * 0.9D); + this.motionY *= 0.8D; + } + + this.motionX *= (double)var25; + this.motionY *= (double)var25; + this.motionZ *= (double)var25; + this.setPosition(this.posX, this.posY, this.posZ); + } + } + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.xTile); + var1.setShort("yTile", (short)this.yTile); + var1.setShort("zTile", (short)this.zTile); + var1.setByte("inTile", (byte)this.inTile); + var1.setByte("shake", (byte)this.shake); + var1.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.xTile = var1.getShort("xTile"); + this.yTile = var1.getShort("yTile"); + this.zTile = var1.getShort("zTile"); + this.inTile = var1.getByte("inTile") & 255; + this.shake = var1.getByte("shake") & 255; + this.inGround = var1.getByte("inGround") == 1; + } + + public int catchFish() { + byte var1 = 0; + if(this.bobber != null) { + double var2 = this.angler.posX - this.posX; + double var4 = this.angler.posY - this.posY; + double var6 = this.angler.posZ - this.posZ; + double var8 = (double)MathHelper.sqrt_double(var2 * var2 + var4 * var4 + var6 * var6); + double var10 = 0.1D; + this.bobber.motionX += var2 * var10; + this.bobber.motionY += var4 * var10 + (double)MathHelper.sqrt_double(var8) * 0.08D; + this.bobber.motionZ += var6 * var10; + var1 = 3; + } else if(this.ticksCatchable > 0) { + EntityItem var13 = new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.fishRaw)); + double var3 = this.angler.posX - this.posX; + double var5 = this.angler.posY - this.posY; + double var7 = this.angler.posZ - this.posZ; + double var9 = (double)MathHelper.sqrt_double(var3 * var3 + var5 * var5 + var7 * var7); + double var11 = 0.1D; + var13.motionX = var3 * var11; + var13.motionY = var5 * var11 + (double)MathHelper.sqrt_double(var9) * 0.08D; + var13.motionZ = var7 * var11; + this.worldObj.entityJoinedWorld(var13); + this.angler.addStat(StatList.fishCaughtStat, 1); + var1 = 1; + } + + if(this.inGround) { + var1 = 2; + } + + this.setEntityDead(); + this.angler.fishEntity = null; + return var1; + } +} diff --git a/src/net/minecraft/src/EntityFlying.java b/src/net/minecraft/src/EntityFlying.java new file mode 100644 index 0000000..cd3e36c --- /dev/null +++ b/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 moveEntityWithHeading(float var1, float var2) { + if(this.isInWater()) { + this.moveFlying(var1, var2, 0.02F); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.8F; + this.motionY *= (double)0.8F; + this.motionZ *= (double)0.8F; + } else if(this.handleLavaMovement()) { + this.moveFlying(var1, var2, 0.02F); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } else { + float var3 = 0.91F; + if(this.onGround) { + var3 = 546.0F * 0.1F * 0.1F * 0.1F; + int var4 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var4 > 0) { + var3 = Block.blocksList[var4].slipperiness * 0.91F; + } + } + + float var8 = 0.16277136F / (var3 * var3 * var3); + this.moveFlying(var1, var2, this.onGround ? 0.1F * var8 : 0.02F); + var3 = 0.91F; + if(this.onGround) { + var3 = 546.0F * 0.1F * 0.1F * 0.1F; + int var5 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var5 > 0) { + var3 = Block.blocksList[var5].slipperiness * 0.91F; + } + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)var3; + this.motionY *= (double)var3; + this.motionZ *= (double)var3; + } + + this.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 isOnLadder() { + return false; + } +} diff --git a/src/net/minecraft/src/EntityGhast.java b/src/net/minecraft/src/EntityGhast.java new file mode 100644 index 0000000..1991fe3 --- /dev/null +++ b/src/net/minecraft/src/EntityGhast.java @@ -0,0 +1,158 @@ +package net.minecraft.src; + +public class EntityGhast extends EntityFlying implements IMob { + public int courseChangeCooldown = 0; + public double waypointX; + public double waypointY; + public double waypointZ; + private Entity targetedEntity = null; + private int aggroCooldown = 0; + public int prevAttackCounter = 0; + public int attackCounter = 0; + + public EntityGhast(World var1) { + super(var1); + this.texture = "/mob/ghast.png"; + this.setSize(4.0F, 4.0F); + this.isImmuneToFire = true; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); + } + + public void onUpdate() { + super.onUpdate(); + byte var1 = this.dataWatcher.getWatchableObjectByte(16); + this.texture = var1 == 1 ? "/mob/ghast_fire.png" : "/mob/ghast.png"; + } + + protected void updatePlayerActionState() { + if(!this.worldObj.singleplayerWorld && this.worldObj.difficultySetting == 0) { + this.setEntityDead(); + } + + this.func_27013_Q(); + this.prevAttackCounter = this.attackCounter; + double var1 = this.waypointX - this.posX; + double var3 = this.waypointY - this.posY; + double var5 = this.waypointZ - this.posZ; + double var7 = (double)MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); + if(var7 < 1.0D || var7 > 60.0D) { + this.waypointX = this.posX + (double)((this.rand.nextFloat() * 2.0F - 1.0F) * 16.0F); + this.waypointY = this.posY + (double)((this.rand.nextFloat() * 2.0F - 1.0F) * 16.0F); + this.waypointZ = this.posZ + (double)((this.rand.nextFloat() * 2.0F - 1.0F) * 16.0F); + } + + if(this.courseChangeCooldown-- <= 0) { + this.courseChangeCooldown += this.rand.nextInt(5) + 2; + if(this.isCourseTraversable(this.waypointX, this.waypointY, this.waypointZ, var7)) { + this.motionX += var1 / var7 * 0.1D; + this.motionY += var3 / var7 * 0.1D; + this.motionZ += var5 / var7 * 0.1D; + } else { + this.waypointX = this.posX; + this.waypointY = this.posY; + this.waypointZ = this.posZ; + } + } + + if(this.targetedEntity != null && this.targetedEntity.isDead) { + this.targetedEntity = null; + } + + if(this.targetedEntity == null || this.aggroCooldown-- <= 0) { + this.targetedEntity = this.worldObj.getClosestPlayerToEntity(this, 100.0D); + if(this.targetedEntity != null) { + this.aggroCooldown = 20; + } + } + + double var9 = 64.0D; + if(this.targetedEntity != null && this.targetedEntity.getDistanceSqToEntity(this) < var9 * var9) { + double var11 = this.targetedEntity.posX - this.posX; + double var13 = this.targetedEntity.boundingBox.minY + (double)(this.targetedEntity.height / 2.0F) - (this.posY + (double)(this.height / 2.0F)); + double var15 = this.targetedEntity.posZ - this.posZ; + this.renderYawOffset = this.rotationYaw = -((float)Math.atan2(var11, var15)) * 180.0F / (float)Math.PI; + if(this.canEntityBeSeen(this.targetedEntity)) { + if(this.attackCounter == 10) { + this.worldObj.playSoundAtEntity(this, "mob.ghast.charge", this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + ++this.attackCounter; + if(this.attackCounter == 20) { + this.worldObj.playSoundAtEntity(this, "mob.ghast.fireball", this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + EntityFireball var17 = new EntityFireball(this.worldObj, this, var11, var13, var15); + double var18 = 4.0D; + Vec3D var20 = this.getLook(1.0F); + var17.posX = this.posX + var20.xCoord * var18; + var17.posY = this.posY + (double)(this.height / 2.0F) + 0.5D; + var17.posZ = this.posZ + var20.zCoord * var18; + this.worldObj.entityJoinedWorld(var17); + this.attackCounter = -40; + } + } else if(this.attackCounter > 0) { + --this.attackCounter; + } + } else { + this.renderYawOffset = this.rotationYaw = -((float)Math.atan2(this.motionX, this.motionZ)) * 180.0F / (float)Math.PI; + if(this.attackCounter > 0) { + --this.attackCounter; + } + } + + if(!this.worldObj.singleplayerWorld) { + byte var21 = this.dataWatcher.getWatchableObjectByte(16); + byte var12 = (byte)(this.attackCounter > 10 ? 1 : 0); + if(var21 != var12) { + this.dataWatcher.updateObject(16, Byte.valueOf(var12)); + } + } + + } + + private boolean isCourseTraversable(double var1, double var3, double var5, double var7) { + double var9 = (this.waypointX - this.posX) / var7; + double var11 = (this.waypointY - this.posY) / var7; + double var13 = (this.waypointZ - this.posZ) / var7; + AxisAlignedBB var15 = this.boundingBox.copy(); + + for(int var16 = 1; (double)var16 < var7; ++var16) { + var15.offset(var9, var11, var13); + if(this.worldObj.getCollidingBoundingBoxes(this, var15).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.shiftedIndex; + } + + protected float getSoundVolume() { + return 10.0F; + } + + public boolean getCanSpawnHere() { + return this.rand.nextInt(20) == 0 && super.getCanSpawnHere() && this.worldObj.difficultySetting > 0; + } + + public int getMaxSpawnedInChunk() { + return 1; + } +} diff --git a/src/net/minecraft/src/EntityGiantZombie.java b/src/net/minecraft/src/EntityGiantZombie.java new file mode 100644 index 0000000..8ed011e --- /dev/null +++ b/src/net/minecraft/src/EntityGiantZombie.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class EntityGiantZombie extends EntityMob { + public EntityGiantZombie(World var1) { + super(var1); + this.texture = "/mob/zombie.png"; + this.moveSpeed = 0.5F; + this.attackStrength = 50; + this.health *= 10; + this.yOffset *= 6.0F; + this.setSize(this.width * 6.0F, this.height * 6.0F); + } + + protected float getBlockPathWeight(int var1, int var2, int var3) { + return this.worldObj.getLightBrightness(var1, var2, var3) - 0.5F; + } +} diff --git a/src/net/minecraft/src/EntityItem.java b/src/net/minecraft/src/EntityItem.java new file mode 100644 index 0000000..218309b --- /dev/null +++ b/src/net/minecraft/src/EntityItem.java @@ -0,0 +1,131 @@ +package net.minecraft.src; + +public class EntityItem extends Entity { + public ItemStack item; + private int field_9170_e; + public int age = 0; + public int delayBeforeCanPickup; + 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)); + } + + protected boolean func_25017_l() { + return false; + } + + public EntityItem(World var1) { + super(var1); + this.setSize(0.25F, 0.25F); + this.yOffset = this.height / 2.0F; + } + + protected void entityInit() { + } + + public void onUpdate() { + super.onUpdate(); + if(this.delayBeforeCanPickup > 0) { + --this.delayBeforeCanPickup; + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= (double)0.04F; + if(this.worldObj.getBlockMaterial(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) == Material.lava) { + this.motionY = (double)0.2F; + this.motionX = (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + this.motionZ = (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + this.worldObj.playSoundAtEntity(this, "random.fizz", 0.4F, 2.0F + this.rand.nextFloat() * 0.4F); + } + + this.func_28005_g(this.posX, (this.boundingBox.minY + this.boundingBox.maxY) / 2.0D, this.posZ); + 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.age; + if(this.age >= 6000) { + this.setEntityDead(); + } + + } + + public boolean handleWaterMovement() { + return this.worldObj.handleMaterialAcceleration(this.boundingBox, Material.water, this); + } + + protected void dealFireDamage(int var1) { + this.attackEntityFrom((Entity)null, var1); + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.setBeenAttacked(); + this.health -= var2; + if(this.health <= 0) { + this.setEntityDead(); + } + + return false; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("Health", (short)((byte)this.health)); + var1.setShort("Age", (short)this.age); + var1.setCompoundTag("Item", this.item.writeToNBT(new NBTTagCompound())); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.health = var1.getShort("Health") & 255; + this.age = var1.getShort("Age"); + NBTTagCompound var2 = var1.getCompoundTag("Item"); + this.item = new ItemStack(var2); + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(!this.worldObj.singleplayerWorld) { + int var2 = this.item.stackSize; + if(this.delayBeforeCanPickup == 0 && var1.inventory.addItemStackToInventory(this.item)) { + if(this.item.itemID == Block.wood.blockID) { + var1.func_27017_a(AchievementList.field_25131_c); + } + + if(this.item.itemID == Item.leather.shiftedIndex) { + var1.func_27017_a(AchievementList.field_27099_t); + } + + this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.onItemPickup(this, var2); + if(this.item.stackSize <= 0) { + this.setEntityDead(); + } + } + + } + } +} diff --git a/src/net/minecraft/src/EntityLightningBolt.java b/src/net/minecraft/src/EntityLightningBolt.java new file mode 100644 index 0000000..8a408de --- /dev/null +++ b/src/net/minecraft/src/EntityLightningBolt.java @@ -0,0 +1,84 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityLightningBolt extends EntityWeatherEffect { + private int field_27018_b; + public long field_27019_a = 0L; + private int field_27020_c; + + public EntityLightningBolt(World var1, double var2, double var4, double var6) { + super(var1); + this.setLocationAndAngles(var2, var4, var6, 0.0F, 0.0F); + this.field_27018_b = 2; + this.field_27019_a = this.rand.nextLong(); + this.field_27020_c = this.rand.nextInt(3) + 1; + if(var1.difficultySetting >= 2 && var1.doChunksNearChunkExist(MathHelper.floor_double(var2), MathHelper.floor_double(var4), MathHelper.floor_double(var6), 10)) { + int var8 = MathHelper.floor_double(var2); + int var9 = MathHelper.floor_double(var4); + int var10 = MathHelper.floor_double(var6); + if(var1.getBlockId(var8, var9, var10) == 0 && Block.fire.canPlaceBlockAt(var1, var8, var9, var10)) { + var1.setBlockWithNotify(var8, var9, var10, Block.fire.blockID); + } + + for(var8 = 0; var8 < 4; ++var8) { + var9 = MathHelper.floor_double(var2) + this.rand.nextInt(3) - 1; + var10 = MathHelper.floor_double(var4) + this.rand.nextInt(3) - 1; + int var11 = MathHelper.floor_double(var6) + this.rand.nextInt(3) - 1; + if(var1.getBlockId(var9, var10, var11) == 0 && Block.fire.canPlaceBlockAt(var1, var9, var10, var11)) { + var1.setBlockWithNotify(var9, var10, var11, Block.fire.blockID); + } + } + } + + } + + public void onUpdate() { + super.onUpdate(); + if(this.field_27018_b == 2) { + this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "ambient.weather.thunder", 10000.0F, 0.8F + this.rand.nextFloat() * 0.2F); + this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "random.explode", 2.0F, 0.5F + this.rand.nextFloat() * 0.2F); + } + + --this.field_27018_b; + if(this.field_27018_b < 0) { + if(this.field_27020_c == 0) { + this.setEntityDead(); + } else if(this.field_27018_b < -this.rand.nextInt(10)) { + --this.field_27020_c; + this.field_27018_b = 1; + this.field_27019_a = this.rand.nextLong(); + if(this.worldObj.doChunksNearChunkExist(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ), 10)) { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.posY); + int var3 = MathHelper.floor_double(this.posZ); + if(this.worldObj.getBlockId(var1, var2, var3) == 0 && Block.fire.canPlaceBlockAt(this.worldObj, var1, var2, var3)) { + this.worldObj.setBlockWithNotify(var1, var2, var3, Block.fire.blockID); + } + } + } + } + + if(this.field_27018_b >= 0) { + double var6 = 3.0D; + List var7 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getBoundingBoxFromPool(this.posX - var6, this.posY - var6, this.posZ - var6, this.posX + var6, this.posY + 6.0D + var6, this.posZ + var6)); + + for(int var4 = 0; var4 < var7.size(); ++var4) { + Entity var5 = (Entity)var7.get(var4); + var5.onStruckByLightning(this); + } + + this.worldObj.field_27080_i = 2; + } + + } + + protected void entityInit() { + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + } +} diff --git a/src/net/minecraft/src/EntityList.java b/src/net/minecraft/src/EntityList.java new file mode 100644 index 0000000..18b0316 --- /dev/null +++ b/src/net/minecraft/src/EntityList.java @@ -0,0 +1,89 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class EntityList { + private static Map stringToClassMapping = new HashMap(); + private static Map classToStringMapping = new HashMap(); + private static Map IDtoClassMapping = new HashMap(); + private static Map classToIDMapping = new HashMap(); + + private static void addMapping(Class var0, String var1, int var2) { + stringToClassMapping.put(var1, var0); + classToStringMapping.put(var0, var1); + IDtoClassMapping.put(Integer.valueOf(var2), var0); + classToIDMapping.put(var0, Integer.valueOf(var2)); + } + + public static Entity createEntityInWorld(String var0, World var1) { + Entity var2 = null; + + try { + Class var3 = (Class)stringToClassMapping.get(var0); + if(var3 != null) { + var2 = (Entity)var3.getConstructor(new Class[]{World.class}).newInstance(new Object[]{var1}); + } + } catch (Exception var4) { + var4.printStackTrace(); + } + + return var2; + } + + public static Entity createEntityFromNBT(NBTTagCompound var0, World var1) { + Entity var2 = null; + + try { + Class var3 = (Class)stringToClassMapping.get(var0.getString("id")); + if(var3 != null) { + var2 = (Entity)var3.getConstructor(new Class[]{World.class}).newInstance(new Object[]{var1}); + } + } catch (Exception var4) { + var4.printStackTrace(); + } + + if(var2 != null) { + var2.readFromNBT(var0); + } else { + System.out.println("Skipping Entity with id " + var0.getString("id")); + } + + return var2; + } + + public static int getEntityID(Entity var0) { + return ((Integer)classToIDMapping.get(var0.getClass())).intValue(); + } + + public static String getEntityString(Entity var0) { + return (String)classToStringMapping.get(var0.getClass()); + } + + static { + addMapping(EntityArrow.class, "Arrow", 10); + addMapping(EntitySnowball.class, "Snowball", 11); + addMapping(EntityItem.class, "Item", 1); + addMapping(EntityPainting.class, "Painting", 9); + addMapping(EntityLiving.class, "Mob", 48); + addMapping(EntityMob.class, "Monster", 49); + addMapping(EntityCreeper.class, "Creeper", 50); + addMapping(EntitySkeleton.class, "Skeleton", 51); + addMapping(EntitySpider.class, "Spider", 52); + addMapping(EntityGiantZombie.class, "Giant", 53); + addMapping(EntityZombie.class, "Zombie", 54); + addMapping(EntitySlime.class, "Slime", 55); + addMapping(EntityGhast.class, "Ghast", 56); + addMapping(EntityPigZombie.class, "PigZombie", 57); + addMapping(EntityPig.class, "Pig", 90); + addMapping(EntitySheep.class, "Sheep", 91); + addMapping(EntityCow.class, "Cow", 92); + addMapping(EntityChicken.class, "Chicken", 93); + addMapping(EntitySquid.class, "Squid", 94); + addMapping(EntityWolf.class, "Wolf", 95); + addMapping(EntityTNTPrimed.class, "PrimedTnt", 20); + addMapping(EntityFallingSand.class, "FallingSand", 21); + addMapping(EntityMinecart.class, "Minecart", 40); + addMapping(EntityBoat.class, "Boat", 41); + } +} diff --git a/src/net/minecraft/src/EntityLiving.java b/src/net/minecraft/src/EntityLiving.java new file mode 100644 index 0000000..33b93ee --- /dev/null +++ b/src/net/minecraft/src/EntityLiving.java @@ -0,0 +1,803 @@ +package net.minecraft.src; + +import java.util.List; + +public abstract class EntityLiving extends Entity { + public int field_9099_av = 20; + public float field_9098_aw; + public float field_9096_ay; + public float renderYawOffset = 0.0F; + public float prevRenderYawOffset = 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 texture = "/mob/char.png"; + protected boolean field_9118_aH = true; + protected float field_9117_aI = 0.0F; + protected String entityType = null; + protected float field_9115_aK = 1.0F; + protected int scoreValue = 0; + protected float field_9113_aM = 0.0F; + public boolean isMultiplayerEntity = false; + public float prevSwingProgress; + public float swingProgress; + public int health = 10; + public int prevHealth; + private int livingSoundTime; + public int hurtTime; + public int maxHurtTime; + public float attackedAtYaw = 0.0F; + public int deathTime = 0; + public int attackTime = 0; + public float field_9102_aX; + public float field_9101_aY; + protected boolean unused_flag = 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 age = 0; + protected float moveStrafing; + protected float moveForward; + protected float randomYawVelocity; + protected boolean isJumping = false; + protected float defaultPitch = 0.0F; + protected float moveSpeed = 0.7F; + private Entity currentTarget; + protected int numTicksToChaseTarget = 0; + + public EntityLiving(World var1) { + super(var1); + this.preventEntitySpawning = 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.stepHeight = 0.5F; + } + + protected void entityInit() { + } + + public boolean canEntityBeSeen(Entity var1) { + return this.worldObj.rayTraceBlocks(Vec3D.createVector(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ), Vec3D.createVector(var1.posX, var1.posY + (double)var1.getEyeHeight(), var1.posZ)) == null; + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public boolean canBePushed() { + return !this.isDead; + } + + public float getEyeHeight() { + return this.height * 0.85F; + } + + public int getTalkInterval() { + return 80; + } + + public void playLivingSound() { + String var1 = this.getLivingSound(); + if(var1 != null) { + this.worldObj.playSoundAtEntity(this, var1, this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + } + + public void onEntityUpdate() { + this.prevSwingProgress = this.swingProgress; + super.onEntityUpdate(); + if(this.rand.nextInt(1000) < this.livingSoundTime++) { + this.livingSoundTime = -this.getTalkInterval(); + this.playLivingSound(); + } + + if(this.isEntityAlive() && this.isEntityInsideOpaqueBlock()) { + this.attackEntityFrom((Entity)null, 1); + } + + if(this.isImmuneToFire || this.worldObj.singleplayerWorld) { + this.fire = 0; + } + + int var1; + if(this.isEntityAlive() && this.isInsideOfMaterial(Material.water) && !this.canBreatheUnderwater()) { + --this.air; + if(this.air == -20) { + this.air = 0; + + for(var1 = 0; var1 < 8; ++var1) { + float var2 = this.rand.nextFloat() - this.rand.nextFloat(); + float var3 = this.rand.nextFloat() - this.rand.nextFloat(); + float var4 = this.rand.nextFloat() - this.rand.nextFloat(); + this.worldObj.spawnParticle("bubble", this.posX + (double)var2, this.posY + (double)var3, this.posZ + (double)var4, this.motionX, this.motionY, this.motionZ); + } + + this.attackEntityFrom((Entity)null, 2); + } + + this.fire = 0; + } else { + this.air = this.maxAir; + } + + this.field_9102_aX = this.field_9101_aY; + if(this.attackTime > 0) { + --this.attackTime; + } + + if(this.hurtTime > 0) { + --this.hurtTime; + } + + if(this.field_9083_ac > 0) { + --this.field_9083_ac; + } + + if(this.health <= 0) { + ++this.deathTime; + if(this.deathTime > 20) { + this.func_6101_K(); + this.setEntityDead(); + + for(var1 = 0; var1 < 20; ++var1) { + double var8 = this.rand.nextGaussian() * 0.02D; + double var9 = this.rand.nextGaussian() * 0.02D; + double var6 = this.rand.nextGaussian() * 0.02D; + this.worldObj.spawnParticle("explode", this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, var8, var9, var6); + } + } + } + + this.field_9121_aE = this.field_9122_aD; + this.prevRenderYawOffset = this.renderYawOffset; + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + } + + public void spawnExplosionParticle() { + for(int var1 = 0; var1 < 20; ++var1) { + double var2 = this.rand.nextGaussian() * 0.02D; + double var4 = this.rand.nextGaussian() * 0.02D; + double var6 = this.rand.nextGaussian() * 0.02D; + double var8 = 10.0D; + this.worldObj.spawnParticle("explode", this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width - var2 * var8, this.posY + (double)(this.rand.nextFloat() * this.height) - var4 * var8, this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width - var6 * var8, var2, var4, var6); + } + + } + + public void updateRidden() { + super.updateRidden(); + this.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.renderYawOffset; + 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.swingProgress > 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.renderYawOffset; var9 < -180.0F; var9 += 360.0F) { + } + + while(var9 >= 180.0F) { + var9 -= 360.0F; + } + + this.renderYawOffset += var9 * 0.3F; + + float var10; + for(var10 = this.rotationYaw - this.renderYawOffset; var10 < -180.0F; var10 += 360.0F) { + } + + while(var10 >= 180.0F) { + var10 -= 360.0F; + } + + boolean var11 = var10 < -90.0F || var10 >= 90.0F; + if(var10 < -75.0F) { + var10 = -75.0F; + } + + if(var10 >= 75.0F) { + var10 = 75.0F; + } + + this.renderYawOffset = this.rotationYaw - var10; + if(var10 * var10 > 2500.0F) { + this.renderYawOffset += 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.renderYawOffset - this.prevRenderYawOffset < -180.0F) { + this.prevRenderYawOffset -= 360.0F; + } + + while(this.renderYawOffset - this.prevRenderYawOffset >= 180.0F) { + this.prevRenderYawOffset += 360.0F; + } + + while(this.rotationPitch - this.prevRotationPitch < -180.0F) { + this.prevRotationPitch -= 360.0F; + } + + while(this.rotationPitch - this.prevRotationPitch >= 180.0F) { + this.prevRotationPitch += 360.0F; + } + + this.field_9122_aD += var7; + } + + protected void setSize(float var1, float var2) { + super.setSize(var1, var2); + } + + public void heal(int var1) { + if(this.health > 0) { + this.health += var1; + if(this.health > 20) { + this.health = 20; + } + + this.field_9083_ac = this.field_9099_av / 2; + } + } + + public boolean attackEntityFrom(Entity var1, int var2) { + if(this.worldObj.singleplayerWorld) { + return false; + } else { + this.age = 0; + if(this.health <= 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.damageEntity(var2 - this.field_9133_bm); + this.field_9133_bm = var2; + var3 = false; + } else { + this.field_9133_bm = var2; + this.prevHealth = this.health; + this.field_9083_ac = this.field_9099_av; + this.damageEntity(var2); + this.hurtTime = this.maxHurtTime = 10; + } + + this.attackedAtYaw = 0.0F; + if(var3) { + this.worldObj.sendTrackedEntityStatusUpdatePacket(this, (byte)2); + this.setBeenAttacked(); + 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.attackedAtYaw = (float)(Math.atan2(var6, var4) * 180.0D / (double)((float)Math.PI)) - this.rotationYaw; + this.knockBack(var1, var2, var4, var6); + } else { + this.attackedAtYaw = (float)((int)(Math.random() * 2.0D) * 180); + } + } + + if(this.health <= 0) { + if(var3) { + this.worldObj.playSoundAtEntity(this, this.getDeathSound(), this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + this.onDeath(var1); + } else if(var3) { + this.worldObj.playSoundAtEntity(this, this.getHurtSound(), this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + return true; + } + } + } + + protected void damageEntity(int var1) { + this.health -= 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 knockBack(Entity var1, int var2, double var3, double var5) { + float var7 = MathHelper.sqrt_double(var3 * var3 + var5 * var5); + float var8 = 0.4F; + this.motionX /= 2.0D; + this.motionY /= 2.0D; + this.motionZ /= 2.0D; + this.motionX -= var3 / (double)var7 * (double)var8; + this.motionY += (double)0.4F; + this.motionZ -= var5 / (double)var7 * (double)var8; + if(this.motionY > (double)0.4F) { + this.motionY = (double)0.4F; + } + + } + + public void onDeath(Entity var1) { + if(this.scoreValue >= 0 && var1 != null) { + var1.addToPlayerScore(this, this.scoreValue); + } + + if(var1 != null) { + var1.func_27010_a(this); + } + + this.unused_flag = true; + if(!this.worldObj.singleplayerWorld) { + this.dropFewItems(); + } + + this.worldObj.sendTrackedEntityStatusUpdatePacket(this, (byte)3); + } + + protected void dropFewItems() { + int var1 = this.getDropItemId(); + if(var1 > 0) { + int var2 = this.rand.nextInt(3); + + for(int var3 = 0; var3 < var2; ++var3) { + this.dropItem(var1, 1); + } + } + + } + + protected int getDropItemId() { + return 0; + } + + protected void fall(float var1) { + super.fall(var1); + int var2 = (int)Math.ceil((double)(var1 - 3.0F)); + if(var2 > 0) { + this.attackEntityFrom((Entity)null, var2); + int var3 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY - (double)0.2F - (double)this.yOffset), MathHelper.floor_double(this.posZ)); + if(var3 > 0) { + StepSound var4 = Block.blocksList[var3].stepSound; + this.worldObj.playSoundAtEntity(this, var4.func_737_c(), var4.getVolume() * 0.5F, var4.getPitch() * (12.0F / 16.0F)); + } + } + + } + + public void moveEntityWithHeading(float var1, float var2) { + double var3; + if(this.isInWater()) { + var3 = this.posY; + this.moveFlying(var1, var2, 0.02F); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.8F; + this.motionY *= (double)0.8F; + this.motionZ *= (double)0.8F; + this.motionY -= 0.02D; + if(this.isCollidedHorizontally && this.isOffsetPositionInLiquid(this.motionX, this.motionY + (double)0.6F - this.posY + var3, this.motionZ)) { + this.motionY = (double)0.3F; + } + } else if(this.handleLavaMovement()) { + var3 = this.posY; + this.moveFlying(var1, var2, 0.02F); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + this.motionY -= 0.02D; + if(this.isCollidedHorizontally && this.isOffsetPositionInLiquid(this.motionX, this.motionY + (double)0.6F - this.posY + var3, this.motionZ)) { + this.motionY = (double)0.3F; + } + } else { + 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.moveFlying(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.isOnLadder()) { + float var10 = 0.15F; + if(this.motionX < (double)(-var10)) { + this.motionX = (double)(-var10); + } + + if(this.motionX > (double)var10) { + this.motionX = (double)var10; + } + + if(this.motionZ < (double)(-var10)) { + this.motionZ = (double)(-var10); + } + + if(this.motionZ > (double)var10) { + this.motionZ = (double)var10; + } + + this.fallDistance = 0.0F; + if(this.motionY < -0.15D) { + this.motionY = -0.15D; + } + + if(this.isSneaking() && this.motionY < 0.0D) { + this.motionY = 0.0D; + } + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.isCollidedHorizontally && this.isOnLadder()) { + this.motionY = 0.2D; + } + + 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 var11 = this.posZ - this.prevPosZ; + float var7 = MathHelper.sqrt_double(var3 * var3 + var11 * var11) * 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 isOnLadder() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.boundingBox.minY); + int var3 = MathHelper.floor_double(this.posZ); + return this.worldObj.getBlockId(var1, var2, var3) == Block.ladder.blockID; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("Health", (short)this.health); + var1.setShort("HurtTime", (short)this.hurtTime); + var1.setShort("DeathTime", (short)this.deathTime); + var1.setShort("AttackTime", (short)this.attackTime); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.health = var1.getShort("Health"); + if(!var1.hasKey("Health")) { + this.health = 10; + } + + this.hurtTime = var1.getShort("HurtTime"); + this.deathTime = var1.getShort("DeathTime"); + this.attackTime = var1.getShort("AttackTime"); + } + + public boolean isEntityAlive() { + return !this.isDead && this.health > 0; + } + + public boolean canBreatheUnderwater() { + return false; + } + + 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); + List var9 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.getInsetBoundingBox(1.0D / 32.0D, 0.0D, 1.0D / 32.0D)); + if(var9.size() > 0) { + double var10 = 0.0D; + + for(int var12 = 0; var12 < var9.size(); ++var12) { + AxisAlignedBB var13 = (AxisAlignedBB)var9.get(var12); + if(var13.maxY > var10) { + var10 = var13.maxY; + } + } + + var3 += var10 - this.boundingBox.minY; + this.setPosition(var1, var3, var5); + } + } + + if(this.isMovementBlocked()) { + this.isJumping = false; + this.moveStrafing = 0.0F; + this.moveForward = 0.0F; + this.randomYawVelocity = 0.0F; + } else if(!this.isMultiplayerEntity) { + this.updatePlayerActionState(); + } + + boolean var14 = this.isInWater(); + boolean var2 = this.handleLavaMovement(); + if(this.isJumping) { + if(var14) { + this.motionY += (double)0.04F; + } else if(var2) { + this.motionY += (double)0.04F; + } else if(this.onGround) { + this.jump(); + } + } + + this.moveStrafing *= 0.98F; + this.moveForward *= 0.98F; + this.randomYawVelocity *= 0.9F; + this.moveEntityWithHeading(this.moveStrafing, this.moveForward); + List var15 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand((double)0.2F, 0.0D, (double)0.2F)); + if(var15 != null && var15.size() > 0) { + for(int var4 = 0; var4 < var15.size(); ++var4) { + Entity var16 = (Entity)var15.get(var4); + if(var16.canBePushed()) { + var16.applyEntityCollision(this); + } + } + } + + } + + protected boolean isMovementBlocked() { + return this.health <= 0; + } + + protected void jump() { + this.motionY = (double)0.42F; + } + + protected boolean func_25020_s() { + return true; + } + + protected void func_27013_Q() { + EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, -1.0D); + if(this.func_25020_s() && 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.age > 600 && this.rand.nextInt(800) == 0) { + if(var8 < 1024.0D) { + this.age = 0; + } else { + this.setEntityDead(); + } + } + } + + } + + protected void updatePlayerActionState() { + ++this.age; + EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, -1.0D); + this.func_27013_Q(); + this.moveStrafing = 0.0F; + this.moveForward = 0.0F; + float var2 = 8.0F; + if(this.rand.nextFloat() < 0.02F) { + var1 = this.worldObj.getClosestPlayerToEntity(this, (double)var2); + if(var1 != null) { + this.currentTarget = var1; + this.numTicksToChaseTarget = 10 + this.rand.nextInt(20); + } else { + this.randomYawVelocity = (this.rand.nextFloat() - 0.5F) * 20.0F; + } + } + + if(this.currentTarget != null) { + this.faceEntity(this.currentTarget, 10.0F, (float)this.func_25018_n_()); + if(this.numTicksToChaseTarget-- <= 0 || this.currentTarget.isDead || this.currentTarget.getDistanceSqToEntity(this) > (double)(var2 * var2)) { + this.currentTarget = null; + } + } else { + if(this.rand.nextFloat() < 0.05F) { + this.randomYawVelocity = (this.rand.nextFloat() - 0.5F) * 20.0F; + } + + this.rotationYaw += this.randomYawVelocity; + this.rotationPitch = this.defaultPitch; + } + + boolean var3 = this.isInWater(); + boolean var4 = this.handleLavaMovement(); + if(var3 || var4) { + this.isJumping = this.rand.nextFloat() < 0.8F; + } + + } + + protected int func_25018_n_() { + return 40; + } + + public void faceEntity(Entity var1, float var2, float var3) { + double var4 = var1.posX - this.posX; + double var8 = var1.posZ - this.posZ; + double var6; + if(var1 instanceof EntityLiving) { + EntityLiving var10 = (EntityLiving)var1; + var6 = this.posY + (double)this.getEyeHeight() - (var10.posY + (double)var10.getEyeHeight()); + } else { + var6 = (var1.boundingBox.minY + var1.boundingBox.maxY) / 2.0D - (this.posY + (double)this.getEyeHeight()); + } + + double var14 = (double)MathHelper.sqrt_double(var4 * var4 + var8 * var8); + float var12 = (float)(Math.atan2(var8, var4) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var13 = (float)(-(Math.atan2(var6, var14) * 180.0D / (double)((float)Math.PI))); + this.rotationPitch = -this.updateRotation(this.rotationPitch, var13, var3); + this.rotationYaw = this.updateRotation(this.rotationYaw, var12, var2); + } + + public boolean func_25021_O() { + return this.currentTarget != null; + } + + public Entity getCurrentTarget() { + return this.currentTarget; + } + + private float updateRotation(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.checkIfAABBIsClear(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() == 0 && !this.worldObj.getIsAnyLiquid(this.boundingBox); + } + + protected void kill() { + this.attackEntityFrom((Entity)null, 4); + } + + public Vec3D getLookVec() { + return this.getLook(1.0F); + } + + public Vec3D getLook(float var1) { + float var2; + float var3; + float var4; + float var5; + if(var1 == 1.0F) { + var2 = MathHelper.cos(-this.rotationYaw * ((float)Math.PI / 180.0F) - (float)Math.PI); + var3 = MathHelper.sin(-this.rotationYaw * ((float)Math.PI / 180.0F) - (float)Math.PI); + var4 = -MathHelper.cos(-this.rotationPitch * ((float)Math.PI / 180.0F)); + var5 = MathHelper.sin(-this.rotationPitch * ((float)Math.PI / 180.0F)); + return 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 getMaxSpawnedInChunk() { + return 4; + } + + public boolean func_22057_E() { + return false; + } +} diff --git a/src/net/minecraft/src/EntityMinecart.java b/src/net/minecraft/src/EntityMinecart.java new file mode 100644 index 0000000..3cf227a --- /dev/null +++ b/src/net/minecraft/src/EntityMinecart.java @@ -0,0 +1,742 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityMinecart extends Entity implements IInventory { + private ItemStack[] cargoItems; + public int damageTaken; + public int field_9167_b; + public int forwardDirection; + private boolean field_469_aj; + public int minecartType; + public int fuel; + public double pushX; + public double pushZ; + 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.damageTaken = 0; + this.field_9167_b = 0; + this.forwardDirection = 1; + this.field_469_aj = false; + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.7F); + this.yOffset = this.height / 2.0F; + } + + protected boolean func_25017_l() { + return false; + } + + protected void entityInit() { + } + + public AxisAlignedBB func_89_d(Entity var1) { + return var1.boundingBox; + } + + public AxisAlignedBB getBoundingBox() { + return null; + } + + public boolean canBePushed() { + 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 getMountedYOffset() { + return (double)this.height * 0.0D - (double)0.3F; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + if(!this.worldObj.singleplayerWorld && !this.isDead) { + this.forwardDirection = -this.forwardDirection; + this.field_9167_b = 10; + this.setBeenAttacked(); + this.damageTaken += var2 * 10; + if(this.damageTaken > 40) { + if(this.riddenByEntity != null) { + this.riddenByEntity.mountEntity(this); + } + + this.setEntityDead(); + this.dropItemWithOffset(Item.minecartEmpty.shiftedIndex, 1, 0.0F); + if(this.minecartType == 1) { + EntityMinecart var3 = this; + + for(int var4 = 0; var4 < var3.getSizeInventory(); ++var4) { + ItemStack var5 = var3.getStackInSlot(var4); + if(var5 != null) { + float var6 = this.rand.nextFloat() * 0.8F + 0.1F; + float var7 = this.rand.nextFloat() * 0.8F + 0.1F; + float var8 = this.rand.nextFloat() * 0.8F + 0.1F; + + while(var5.stackSize > 0) { + int var9 = this.rand.nextInt(21) + 10; + if(var9 > var5.stackSize) { + var9 = var5.stackSize; + } + + var5.stackSize -= var9; + EntityItem var10 = new EntityItem(this.worldObj, this.posX + (double)var6, this.posY + (double)var7, this.posZ + (double)var8, new ItemStack(var5.itemID, var9, var5.getItemDamage())); + float var11 = 0.05F; + var10.motionX = (double)((float)this.rand.nextGaussian() * var11); + var10.motionY = (double)((float)this.rand.nextGaussian() * var11 + 0.2F); + var10.motionZ = (double)((float)this.rand.nextGaussian() * var11); + this.worldObj.entityJoinedWorld(var10); + } + } + } + + this.dropItemWithOffset(Block.chest.blockID, 1, 0.0F); + } else if(this.minecartType == 2) { + this.dropItemWithOffset(Block.stoneOvenIdle.blockID, 1, 0.0F); + } + } + + return true; + } else { + return true; + } + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void setEntityDead() { + for(int var1 = 0; var1 < this.getSizeInventory(); ++var1) { + ItemStack var2 = this.getStackInSlot(var1); + if(var2 != null) { + float var3 = this.rand.nextFloat() * 0.8F + 0.1F; + float var4 = this.rand.nextFloat() * 0.8F + 0.1F; + float var5 = this.rand.nextFloat() * 0.8F + 0.1F; + + while(var2.stackSize > 0) { + int var6 = this.rand.nextInt(21) + 10; + if(var6 > var2.stackSize) { + var6 = var2.stackSize; + } + + var2.stackSize -= var6; + EntityItem var7 = new EntityItem(this.worldObj, this.posX + (double)var3, this.posY + (double)var4, this.posZ + (double)var5, new ItemStack(var2.itemID, var6, var2.getItemDamage())); + float var8 = 0.05F; + var7.motionX = (double)((float)this.rand.nextGaussian() * var8); + var7.motionY = (double)((float)this.rand.nextGaussian() * var8 + 0.2F); + var7.motionZ = (double)((float)this.rand.nextGaussian() * var8); + this.worldObj.entityJoinedWorld(var7); + } + } + } + + super.setEntityDead(); + } + + public void onUpdate() { + if(this.field_9167_b > 0) { + --this.field_9167_b; + } + + if(this.damageTaken > 0) { + --this.damageTaken; + } + + double var7; + if(this.worldObj.singleplayerWorld && this.field_9163_an > 0) { + if(this.field_9163_an > 0) { + double var46 = this.posX + (this.field_9162_ao - this.posX) / (double)this.field_9163_an; + double var47 = 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(var46, var47, 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(BlockRail.func_27029_g(this.worldObj, var1, var2 - 1, var3)) { + --var2; + } + + double var4 = 0.4D; + boolean var6 = false; + var7 = 1.0D / 128.0D; + int var9 = this.worldObj.getBlockId(var1, var2, var3); + if(BlockRail.func_27030_c(var9)) { + Vec3D var10 = this.func_182_g(this.posX, this.posY, this.posZ); + int var11 = this.worldObj.getBlockMetadata(var1, var2, var3); + this.posY = (double)var2; + boolean var12 = false; + boolean var13 = false; + if(var9 == Block.railPowered.blockID) { + var12 = (var11 & 8) != 0; + var13 = !var12; + } + + if(((BlockRail)Block.blocksList[var9]).func_27028_d()) { + var11 &= 7; + } + + if(var11 >= 2 && var11 <= 5) { + this.posY = (double)(var2 + 1); + } + + if(var11 == 2) { + this.motionX -= var7; + } + + if(var11 == 3) { + this.motionX += var7; + } + + if(var11 == 4) { + this.motionZ += var7; + } + + if(var11 == 5) { + this.motionZ -= var7; + } + + int[][] var14 = field_468_ak[var11]; + double var15 = (double)(var14[1][0] - var14[0][0]); + double var17 = (double)(var14[1][2] - var14[0][2]); + double var19 = Math.sqrt(var15 * var15 + var17 * var17); + double var21 = this.motionX * var15 + this.motionZ * var17; + if(var21 < 0.0D) { + var15 = -var15; + var17 = -var17; + } + + double var23 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.motionX = var23 * var15 / var19; + this.motionZ = var23 * var17 / var19; + double var25; + if(var13) { + var25 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var25 < 0.03D) { + this.motionX *= 0.0D; + this.motionY *= 0.0D; + this.motionZ *= 0.0D; + } else { + this.motionX *= 0.5D; + this.motionY *= 0.0D; + this.motionZ *= 0.5D; + } + } + + var25 = 0.0D; + double var27 = (double)var1 + 0.5D + (double)var14[0][0] * 0.5D; + double var29 = (double)var3 + 0.5D + (double)var14[0][2] * 0.5D; + double var31 = (double)var1 + 0.5D + (double)var14[1][0] * 0.5D; + double var33 = (double)var3 + 0.5D + (double)var14[1][2] * 0.5D; + var15 = var31 - var27; + var17 = var33 - var29; + double var35; + double var37; + double var39; + if(var15 == 0.0D) { + this.posX = (double)var1 + 0.5D; + var25 = this.posZ - (double)var3; + } else if(var17 == 0.0D) { + this.posZ = (double)var3 + 0.5D; + var25 = this.posX - (double)var1; + } else { + var35 = this.posX - var27; + var37 = this.posZ - var29; + var39 = (var35 * var15 + var37 * var17) * 2.0D; + var25 = var39; + } + + this.posX = var27 + var15 * var25; + this.posZ = var29 + var17 * var25; + this.setPosition(this.posX, this.posY + (double)this.yOffset, this.posZ); + var35 = this.motionX; + var37 = this.motionZ; + if(this.riddenByEntity != null) { + var35 *= 0.75D; + var37 *= 0.75D; + } + + if(var35 < -var4) { + var35 = -var4; + } + + if(var35 > var4) { + var35 = var4; + } + + if(var37 < -var4) { + var37 = -var4; + } + + if(var37 > var4) { + var37 = var4; + } + + this.moveEntity(var35, 0.0D, var37); + if(var14[0][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var14[0][0] && MathHelper.floor_double(this.posZ) - var3 == var14[0][2]) { + this.setPosition(this.posX, this.posY + (double)var14[0][1], this.posZ); + } else if(var14[1][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var14[1][0] && MathHelper.floor_double(this.posZ) - var3 == var14[1][2]) { + this.setPosition(this.posX, this.posY + (double)var14[1][1], this.posZ); + } + + if(this.riddenByEntity != null) { + this.motionX *= (double)0.997F; + this.motionY *= 0.0D; + this.motionZ *= (double)0.997F; + } else { + if(this.minecartType == 2) { + var39 = (double)MathHelper.sqrt_double(this.pushX * this.pushX + this.pushZ * this.pushZ); + if(var39 > 0.01D) { + var6 = true; + this.pushX /= var39; + this.pushZ /= var39; + double var41 = 0.04D; + this.motionX *= (double)0.8F; + this.motionY *= 0.0D; + this.motionZ *= (double)0.8F; + this.motionX += this.pushX * var41; + this.motionZ += this.pushZ * var41; + } 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 var52 = this.func_182_g(this.posX, this.posY, this.posZ); + if(var52 != null && var10 != null) { + double var40 = (var10.yCoord - var52.yCoord) * 0.05D; + var23 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var23 > 0.0D) { + this.motionX = this.motionX / var23 * (var23 + var40); + this.motionZ = this.motionZ / var23 * (var23 + var40); + } + + this.setPosition(this.posX, var52.yCoord, this.posZ); + } + + int var53 = MathHelper.floor_double(this.posX); + int var54 = MathHelper.floor_double(this.posZ); + if(var53 != var1 || var54 != var3) { + var23 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.motionX = var23 * (double)(var53 - var1); + this.motionZ = var23 * (double)(var54 - var3); + } + + double var42; + if(this.minecartType == 2) { + var42 = (double)MathHelper.sqrt_double(this.pushX * this.pushX + this.pushZ * this.pushZ); + if(var42 > 0.01D && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.001D) { + this.pushX /= var42; + this.pushZ /= var42; + if(this.pushX * this.motionX + this.pushZ * this.motionZ < 0.0D) { + this.pushX = 0.0D; + this.pushZ = 0.0D; + } else { + this.pushX = this.motionX; + this.pushZ = this.motionZ; + } + } + } + + if(var12) { + var42 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var42 > 0.01D) { + double var44 = 0.06D; + this.motionX += this.motionX / var42 * var44; + this.motionZ += this.motionZ / var42 * var44; + } else if(var11 == 1) { + if(this.worldObj.isBlockNormalCube(var1 - 1, var2, var3)) { + this.motionX = 0.02D; + } else if(this.worldObj.isBlockNormalCube(var1 + 1, var2, var3)) { + this.motionX = -0.02D; + } + } else if(var11 == 0) { + if(this.worldObj.isBlockNormalCube(var1, var2, var3 - 1)) { + this.motionZ = 0.02D; + } else if(this.worldObj.isBlockNormalCube(var1, var2, var3 + 1)) { + this.motionZ = -0.02D; + } + } + } + } 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 var48 = this.prevPosX - this.posX; + double var49 = this.prevPosZ - this.posZ; + if(var48 * var48 + var49 * var49 > 0.001D) { + this.rotationYaw = (float)(Math.atan2(var49, var48) * 180.0D / Math.PI); + if(this.field_469_aj) { + this.rotationYaw += 180.0F; + } + } + + double var50; + for(var50 = (double)(this.rotationYaw - this.prevRotationYaw); var50 >= 180.0D; var50 -= 360.0D) { + } + + while(var50 < -180.0D) { + var50 += 360.0D; + } + + if(var50 < -170.0D || var50 >= 170.0D) { + this.rotationYaw += 180.0F; + this.field_469_aj = !this.field_469_aj; + } + + this.setRotation(this.rotationYaw, this.rotationPitch); + List var16 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand((double)0.2F, 0.0D, (double)0.2F)); + if(var16 != null && var16.size() > 0) { + for(int var51 = 0; var51 < var16.size(); ++var51) { + Entity var18 = (Entity)var16.get(var51); + if(var18 != this.riddenByEntity && var18.canBePushed() && var18 instanceof EntityMinecart) { + var18.applyEntityCollision(this); + } + } + } + + if(this.riddenByEntity != null && this.riddenByEntity.isDead) { + this.riddenByEntity = null; + } + + if(var6 && this.rand.nextInt(4) == 0) { + --this.fuel; + if(this.fuel < 0) { + this.pushX = this.pushZ = 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(BlockRail.func_27029_g(this.worldObj, var7, var8 - 1, var9)) { + --var8; + } + + int var10 = this.worldObj.getBlockId(var7, var8, var9); + if(BlockRail.func_27030_c(var10)) { + int var11 = this.worldObj.getBlockMetadata(var7, var8, var9); + var3 = (double)var8; + if(((BlockRail)Block.blocksList[var10]).func_27028_d()) { + var11 &= 7; + } + + if(var11 >= 2 && var11 <= 5) { + var3 = (double)(var8 + 1); + } + + int[][] var12 = field_468_ak[var11]; + double var13 = 0.0D; + double var15 = (double)var7 + 0.5D + (double)var12[0][0] * 0.5D; + double var17 = (double)var8 + 0.5D + (double)var12[0][1] * 0.5D; + double var19 = (double)var9 + 0.5D + (double)var12[0][2] * 0.5D; + double var21 = (double)var7 + 0.5D + (double)var12[1][0] * 0.5D; + double var23 = (double)var8 + 0.5D + (double)var12[1][1] * 0.5D; + double var25 = (double)var9 + 0.5D + (double)var12[1][2] * 0.5D; + double var27 = var21 - var15; + double var29 = (var23 - var17) * 2.0D; + double var31 = var25 - var19; + if(var27 == 0.0D) { + var1 = (double)var7 + 0.5D; + var13 = var5 - (double)var9; + } else if(var31 == 0.0D) { + var5 = (double)var9 + 0.5D; + var13 = var1 - (double)var7; + } else { + double var33 = var1 - var15; + double var35 = var5 - var19; + double var37 = (var33 * var27 + var35 * var31) * 2.0D; + var13 = var37; + } + + var1 = var15 + var27 * var13; + var3 = var17 + var29 * var13; + var5 = var19 + var31 * var13; + if(var29 < 0.0D) { + ++var3; + } + + if(var29 > 0.0D) { + var3 += 0.5D; + } + + return 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.pushX); + var1.setDouble("PushZ", this.pushZ); + var1.setShort("Fuel", (short)this.fuel); + } 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.pushX = var1.getDouble("PushX"); + this.pushZ = var1.getDouble("PushZ"); + this.fuel = var1.getShort("Fuel"); + } else if(this.minecartType == 1) { + NBTTagList var2 = var1.getTagList("Items"); + this.cargoItems = new ItemStack[this.getSizeInventory()]; + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + int var5 = var4.getByte("Slot") & 255; + if(var5 >= 0 && var5 < this.cargoItems.length) { + this.cargoItems[var5] = new ItemStack(var4); + } + } + } + + } + + public void applyEntityCollision(Entity var1) { + if(!this.worldObj.singleplayerWorld) { + if(var1 != this.riddenByEntity) { + if(var1 instanceof EntityLiving && !(var1 instanceof EntityPlayer) && this.minecartType == 0 && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.01D && this.riddenByEntity == null && var1.ridingEntity == null) { + var1.mountEntity(this); + } + + double var2 = var1.posX - this.posX; + double var4 = var1.posZ - this.posZ; + double var6 = var2 * var2 + var4 * var4; + if(var6 >= (double)1.0E-4F) { + var6 = (double)MathHelper.sqrt_double(var6); + var2 /= var6; + var4 /= var6; + double var8 = 1.0D / var6; + if(var8 > 1.0D) { + var8 = 1.0D; + } + + var2 *= var8; + var4 *= var8; + var2 *= (double)0.1F; + var4 *= (double)0.1F; + var2 *= (double)(1.0F - this.entityCollisionReduction); + var4 *= (double)(1.0F - this.entityCollisionReduction); + var2 *= 0.5D; + var4 *= 0.5D; + if(var1 instanceof EntityMinecart) { + double var10 = var1.posX - this.posX; + double var12 = var1.posZ - this.posZ; + double var14 = var10 * var1.motionZ + var12 * var1.prevPosX; + var14 *= var14; + if(var14 > 5.0D) { + return; + } + + double var16 = var1.motionX + this.motionX; + double var18 = 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 { + var16 /= 2.0D; + var18 /= 2.0D; + this.motionX *= (double)0.2F; + this.motionZ *= (double)0.2F; + this.addVelocity(var16 - var2, 0.0D, var18 - var4); + var1.motionX *= (double)0.2F; + var1.motionZ *= (double)0.2F; + var1.addVelocity(var16 + var2, 0.0D, var18 + var4); + } + } else { + this.addVelocity(-var2, 0.0D, -var4); + var1.addVelocity(var2 / 4.0D, 0.0D, var4 / 4.0D); + } + } + + } + } + } + + public int getSizeInventory() { + return 27; + } + + public ItemStack getStackInSlot(int var1) { + return this.cargoItems[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.cargoItems[var1] != null) { + ItemStack var3; + if(this.cargoItems[var1].stackSize <= var2) { + var3 = this.cargoItems[var1]; + this.cargoItems[var1] = null; + return var3; + } else { + var3 = this.cargoItems[var1].splitStack(var2); + if(this.cargoItems[var1].stackSize == 0) { + this.cargoItems[var1] = null; + } + + return var3; + } + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.cargoItems[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + } + + public String getInvName() { + return "Minecart"; + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + } + + public boolean interact(EntityPlayer var1) { + if(this.minecartType == 0) { + if(this.riddenByEntity != null && this.riddenByEntity instanceof EntityPlayer && this.riddenByEntity != var1) { + return true; + } + + if(!this.worldObj.singleplayerWorld) { + var1.mountEntity(this); + } + } else if(this.minecartType == 1) { + if(!this.worldObj.singleplayerWorld) { + var1.displayGUIChest(this); + } + } else if(this.minecartType == 2) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(var2 != null && var2.itemID == Item.coal.shiftedIndex) { + if(--var2.stackSize == 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + + this.fuel += 1200; + } + + this.pushX = this.posX - var1.posX; + this.pushZ = this.posZ - var1.posZ; + } + + return true; + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.isDead ? false : var1.getDistanceSqToEntity(this) <= 64.0D; + } +} diff --git a/src/net/minecraft/src/EntityMob.java b/src/net/minecraft/src/EntityMob.java new file mode 100644 index 0000000..0d5d50d --- /dev/null +++ b/src/net/minecraft/src/EntityMob.java @@ -0,0 +1,87 @@ +package net.minecraft.src; + +public class EntityMob extends EntityCreature implements IMob { + protected int attackStrength = 2; + + public EntityMob(World var1) { + super(var1); + this.health = 20; + } + + public void onLivingUpdate() { + float var1 = this.getEntityBrightness(1.0F); + if(var1 > 0.5F) { + this.age += 2; + } + + super.onLivingUpdate(); + } + + public void onUpdate() { + super.onUpdate(); + if(!this.worldObj.singleplayerWorld && this.worldObj.difficultySetting == 0) { + this.setEntityDead(); + } + + } + + protected Entity findPlayerToAttack() { + EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, 16.0D); + return var1 != null && this.canEntityBeSeen(var1) ? var1 : null; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + if(super.attackEntityFrom(var1, var2)) { + if(this.riddenByEntity != var1 && this.ridingEntity != var1) { + if(var1 != this) { + this.playerToAttack = var1; + } + + return true; + } else { + return true; + } + } else { + return false; + } + } + + protected void attackEntity(Entity var1, float var2) { + if(this.attackTime <= 0 && var2 < 2.0F && var1.boundingBox.maxY > this.boundingBox.minY && var1.boundingBox.minY < this.boundingBox.maxY) { + this.attackTime = 20; + var1.attackEntityFrom(this, this.attackStrength); + } + + } + + protected float getBlockPathWeight(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.rand.nextInt(32)) { + return false; + } else { + int var4 = this.worldObj.getBlockLightValue(var1, var2, var3); + if(this.worldObj.func_27067_u()) { + int var5 = this.worldObj.skylightSubtracted; + this.worldObj.skylightSubtracted = 10; + var4 = this.worldObj.getBlockLightValue(var1, var2, var3); + this.worldObj.skylightSubtracted = var5; + } + + return var4 <= this.rand.nextInt(8) && super.getCanSpawnHere(); + } + } +} diff --git a/src/net/minecraft/src/EntityPainting.java b/src/net/minecraft/src/EntityPainting.java new file mode 100644 index 0000000..e7d224d --- /dev/null +++ b/src/net/minecraft/src/EntityPainting.java @@ -0,0 +1,237 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class EntityPainting extends Entity { + private int field_452_ad; + public int direction; + public int xPosition; + public int yPosition; + public int zPosition; + public EnumArt art; + + public EntityPainting(World var1) { + super(var1); + this.field_452_ad = 0; + this.direction = 0; + this.yOffset = 0.0F; + this.setSize(0.5F, 0.5F); + } + + public EntityPainting(World var1, int var2, int var3, int var4, int var5) { + this(var1); + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + ArrayList var6 = new ArrayList(); + EnumArt[] var7 = EnumArt.values(); + int var8 = var7.length; + + for(int var9 = 0; var9 < var8; ++var9) { + EnumArt var10 = var7[var9]; + this.art = var10; + this.func_179_a(var5); + if(this.onValidSurface()) { + var6.add(var10); + } + } + + if(var6.size() > 0) { + this.art = (EnumArt)var6.get(this.rand.nextInt(var6.size())); + } + + this.func_179_a(var5); + } + + protected void entityInit() { + } + + public void func_179_a(int var1) { + this.direction = var1; + this.prevRotationYaw = this.rotationYaw = (float)(var1 * 90); + float var2 = (float)this.art.sizeX; + float var3 = (float)this.art.sizeY; + float var4 = (float)this.art.sizeX; + if(var1 != 0 && var1 != 2) { + var2 = 0.5F; + } else { + var4 = 0.5F; + } + + var2 /= 32.0F; + var3 /= 32.0F; + var4 /= 32.0F; + float var5 = (float)this.xPosition + 0.5F; + float var6 = (float)this.yPosition + 0.5F; + float var7 = (float)this.zPosition + 0.5F; + float var8 = 9.0F / 16.0F; + if(var1 == 0) { + var7 -= var8; + } + + if(var1 == 1) { + var5 -= var8; + } + + if(var1 == 2) { + var7 += var8; + } + + if(var1 == 3) { + var5 += var8; + } + + if(var1 == 0) { + var5 -= this.func_180_c(this.art.sizeX); + } + + if(var1 == 1) { + var7 += this.func_180_c(this.art.sizeX); + } + + if(var1 == 2) { + var5 += this.func_180_c(this.art.sizeX); + } + + if(var1 == 3) { + var7 -= this.func_180_c(this.art.sizeX); + } + + var6 += this.func_180_c(this.art.sizeY); + this.setPosition((double)var5, (double)var6, (double)var7); + float var9 = -(0.1F / 16.0F); + this.boundingBox.setBounds((double)(var5 - var2 - var9), (double)(var6 - var3 - var9), (double)(var7 - var4 - var9), (double)(var5 + var2 + var9), (double)(var6 + var3 + var9), (double)(var7 + var4 + var9)); + } + + private float 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.worldObj.singleplayerWorld) { + this.field_452_ad = 0; + if(!this.onValidSurface()) { + this.setEntityDead(); + this.worldObj.entityJoinedWorld(new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.painting))); + } + } + + } + + public boolean onValidSurface() { + if(this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() > 0) { + return false; + } else { + int var1 = this.art.sizeX / 16; + int var2 = this.art.sizeY / 16; + int var3 = this.xPosition; + int var4 = this.yPosition; + int var5 = this.zPosition; + if(this.direction == 0) { + var3 = MathHelper.floor_double(this.posX - (double)((float)this.art.sizeX / 32.0F)); + } + + if(this.direction == 1) { + var5 = MathHelper.floor_double(this.posZ - (double)((float)this.art.sizeX / 32.0F)); + } + + if(this.direction == 2) { + var3 = MathHelper.floor_double(this.posX - (double)((float)this.art.sizeX / 32.0F)); + } + + if(this.direction == 3) { + var5 = MathHelper.floor_double(this.posZ - (double)((float)this.art.sizeX / 32.0F)); + } + + var4 = MathHelper.floor_double(this.posY - (double)((float)this.art.sizeY / 32.0F)); + + int var7; + for(int var6 = 0; var6 < var1; ++var6) { + for(var7 = 0; var7 < var2; ++var7) { + Material var8; + if(this.direction != 0 && this.direction != 2) { + var8 = this.worldObj.getBlockMaterial(this.xPosition, var4 + var7, var5 + var6); + } else { + var8 = this.worldObj.getBlockMaterial(var3 + var6, var4 + var7, this.zPosition); + } + + if(!var8.isSolid()) { + return false; + } + } + } + + List var9 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox); + + for(var7 = 0; var7 < var9.size(); ++var7) { + if(var9.get(var7) instanceof EntityPainting) { + return false; + } + } + + return true; + } + } + + public boolean canBeCollidedWith() { + return true; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + if(!this.isDead && !this.worldObj.singleplayerWorld) { + this.setEntityDead(); + this.setBeenAttacked(); + 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.direction); + var1.setString("Motive", this.art.title); + var1.setInteger("TileX", this.xPosition); + var1.setInteger("TileY", this.yPosition); + var1.setInteger("TileZ", this.zPosition); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.direction = var1.getByte("Dir"); + this.xPosition = var1.getInteger("TileX"); + this.yPosition = var1.getInteger("TileY"); + this.zPosition = var1.getInteger("TileZ"); + String var2 = var1.getString("Motive"); + EnumArt[] var3 = EnumArt.values(); + int var4 = var3.length; + + for(int var5 = 0; var5 < var4; ++var5) { + EnumArt var6 = var3[var5]; + if(var6.title.equals(var2)) { + this.art = var6; + } + } + + if(this.art == null) { + this.art = EnumArt.Kebab; + } + + this.func_179_a(this.direction); + } + + public void moveEntity(double var1, double var3, double var5) { + if(!this.worldObj.singleplayerWorld && var1 * var1 + var3 * var3 + var5 * var5 > 0.0D) { + this.setEntityDead(); + this.worldObj.entityJoinedWorld(new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.painting))); + } + + } + + public void addVelocity(double var1, double var3, double var5) { + if(!this.worldObj.singleplayerWorld && var1 * var1 + var3 * var3 + var5 * var5 > 0.0D) { + this.setEntityDead(); + this.worldObj.entityJoinedWorld(new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.painting))); + } + + } +} diff --git a/src/net/minecraft/src/EntityPig.java b/src/net/minecraft/src/EntityPig.java new file mode 100644 index 0000000..7ac8237 --- /dev/null +++ b/src/net/minecraft/src/EntityPig.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +public class EntityPig extends EntityAnimal { + public EntityPig(World var1) { + super(var1); + this.texture = "/mob/pig.png"; + this.setSize(0.9F, 0.9F); + } + + protected void entityInit() { + this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("Saddle", this.getSaddled()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setSaddled(var1.getBoolean("Saddle")); + } + + protected String getLivingSound() { + return "mob.pig"; + } + + protected String getHurtSound() { + return "mob.pig"; + } + + protected String getDeathSound() { + return "mob.pigdeath"; + } + + public boolean interact(EntityPlayer var1) { + if(!this.getSaddled() || this.worldObj.singleplayerWorld || this.riddenByEntity != null && this.riddenByEntity != var1) { + return false; + } else { + var1.mountEntity(this); + return true; + } + } + + protected int getDropItemId() { + return this.fire > 0 ? Item.porkCooked.shiftedIndex : Item.porkRaw.shiftedIndex; + } + + public boolean getSaddled() { + return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0; + } + + public void setSaddled(boolean var1) { + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)1)); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)0)); + } + + } + + public void onStruckByLightning(EntityLightningBolt var1) { + if(!this.worldObj.singleplayerWorld) { + EntityPigZombie var2 = new EntityPigZombie(this.worldObj); + var2.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + this.worldObj.entityJoinedWorld(var2); + this.setEntityDead(); + } + } + + protected void fall(float var1) { + super.fall(var1); + if(var1 > 5.0F && this.riddenByEntity instanceof EntityPlayer) { + ((EntityPlayer)this.riddenByEntity).func_27017_a(AchievementList.field_27098_u); + } + + } +} diff --git a/src/net/minecraft/src/EntityPigZombie.java b/src/net/minecraft/src/EntityPigZombie.java new file mode 100644 index 0000000..df7eee9 --- /dev/null +++ b/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 angerLevel = 0; + private int randomSoundDelay = 0; + private static final ItemStack defaultHeldItem = new ItemStack(Item.swordGold, 1); + + public EntityPigZombie(World var1) { + super(var1); + this.texture = "/mob/pigzombie.png"; + this.moveSpeed = 0.5F; + this.attackStrength = 5; + this.isImmuneToFire = true; + } + + public void onUpdate() { + this.moveSpeed = this.playerToAttack != null ? 0.95F : 0.5F; + if(this.randomSoundDelay > 0 && --this.randomSoundDelay == 0) { + this.worldObj.playSoundAtEntity(this, "mob.zombiepig.zpigangry", this.getSoundVolume() * 2.0F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 1.8F); + } + + super.onUpdate(); + } + + public boolean getCanSpawnHere() { + return this.worldObj.difficultySetting > 0 && this.worldObj.checkIfAABBIsClear(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.angerLevel); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.angerLevel = var1.getShort("Anger"); + } + + protected Entity findPlayerToAttack() { + return this.angerLevel == 0 ? null : super.findPlayerToAttack(); + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + } + + public boolean attackEntityFrom(Entity var1, int var2) { + if(var1 instanceof EntityPlayer) { + List var3 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(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.becomeAngryAt(var1); + } + } + + this.becomeAngryAt(var1); + } + + return super.attackEntityFrom(var1, var2); + } + + private void becomeAngryAt(Entity var1) { + this.playerToAttack = var1; + this.angerLevel = 400 + this.rand.nextInt(400); + this.randomSoundDelay = this.rand.nextInt(40); + } + + protected String getLivingSound() { + return "mob.zombiepig.zpig"; + } + + protected String getHurtSound() { + return "mob.zombiepig.zpighurt"; + } + + protected String getDeathSound() { + return "mob.zombiepig.zpigdeath"; + } + + protected int getDropItemId() { + return Item.porkCooked.shiftedIndex; + } +} diff --git a/src/net/minecraft/src/EntityPlayer.java b/src/net/minecraft/src/EntityPlayer.java new file mode 100644 index 0000000..38e1f90 --- /dev/null +++ b/src/net/minecraft/src/EntityPlayer.java @@ -0,0 +1,757 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public abstract class EntityPlayer extends EntityLiving { + public InventoryPlayer inventory = new InventoryPlayer(this); + public Container personalCraftingInventory; + public Container currentCraftingInventory; + public byte field_9152_am = 0; + public int score = 0; + public float field_9150_ao; + public float field_9149_ap; + public boolean isSwinging = false; + public int swingProgressInt = 0; + public String username; + public int dimension; + public double field_20047_ay; + public double field_20046_az; + public double field_20051_aA; + public double field_20050_aB; + public double field_20049_aC; + public double field_20048_aD; + protected boolean sleeping; + public ChunkCoordinates playerLocation; + private int sleepTimer; + public float field_22066_z; + public float field_22067_A; + private ChunkCoordinates spawnChunk; + private ChunkCoordinates field_27995_d; + public int timeUntilPortal = 20; + protected boolean inPortal = false; + public float timeInPortal; + private int damageRemainder = 0; + public EntityFish fishEntity = null; + + public EntityPlayer(World var1) { + super(var1); + this.personalCraftingInventory = new ContainerPlayer(this.inventory, !var1.singleplayerWorld); + this.currentCraftingInventory = this.personalCraftingInventory; + this.yOffset = 1.62F; + ChunkCoordinates var2 = var1.getSpawnPoint(); + this.setLocationAndAngles((double)var2.posX + 0.5D, (double)(var2.posY + 1), (double)var2.posZ + 0.5D, 0.0F, 0.0F); + this.health = 20; + this.entityType = "humanoid"; + this.field_9117_aI = 180.0F; + this.fireResistance = 20; + this.texture = "/mob/char.png"; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); + } + + public void onUpdate() { + if(this.func_22057_E()) { + ++this.sleepTimer; + if(this.sleepTimer > 100) { + this.sleepTimer = 100; + } + + if(!this.worldObj.singleplayerWorld) { + if(!this.isInBed()) { + this.wakeUpPlayer(true, true, false); + } else if(this.worldObj.isDaytime()) { + this.wakeUpPlayer(false, true, true); + } + } + } else if(this.sleepTimer > 0) { + ++this.sleepTimer; + if(this.sleepTimer >= 110) { + this.sleepTimer = 0; + } + } + + super.onUpdate(); + if(!this.worldObj.singleplayerWorld && this.currentCraftingInventory != null && !this.currentCraftingInventory.canInteractWith(this)) { + this.usePersonalCraftingInventory(); + this.currentCraftingInventory = this.personalCraftingInventory; + } + + this.field_20047_ay = this.field_20050_aB; + this.field_20046_az = this.field_20049_aC; + this.field_20051_aA = this.field_20048_aD; + double var1 = this.posX - this.field_20050_aB; + double var3 = this.posY - this.field_20049_aC; + double var5 = this.posZ - this.field_20048_aD; + double var7 = 10.0D; + if(var1 > var7) { + this.field_20047_ay = this.field_20050_aB = this.posX; + } + + if(var5 > var7) { + this.field_20051_aA = this.field_20048_aD = this.posZ; + } + + if(var3 > var7) { + this.field_20046_az = this.field_20049_aC = this.posY; + } + + if(var1 < -var7) { + this.field_20047_ay = this.field_20050_aB = this.posX; + } + + if(var5 < -var7) { + this.field_20051_aA = this.field_20048_aD = this.posZ; + } + + if(var3 < -var7) { + this.field_20046_az = this.field_20049_aC = this.posY; + } + + this.field_20050_aB += var1 * 0.25D; + this.field_20048_aD += var5 * 0.25D; + this.field_20049_aC += var3 * 0.25D; + this.addStat(StatList.field_25114_j, 1); + if(this.ridingEntity == null) { + this.field_27995_d = null; + } + + } + + protected boolean isMovementBlocked() { + return this.health <= 0 || this.func_22057_E(); + } + + protected void usePersonalCraftingInventory() { + this.currentCraftingInventory = this.personalCraftingInventory; + } + + public void updateRidden() { + double var1 = this.posX; + double var3 = this.posY; + double var5 = this.posZ; + super.updateRidden(); + this.field_9150_ao = this.field_9149_ap; + this.field_9149_ap = 0.0F; + this.func_27015_h(this.posX - var1, this.posY - var3, this.posZ - var5); + } + + protected void updatePlayerActionState() { + if(this.isSwinging) { + ++this.swingProgressInt; + if(this.swingProgressInt >= 8) { + this.swingProgressInt = 0; + this.isSwinging = false; + } + } else { + this.swingProgressInt = 0; + } + + this.swingProgress = (float)this.swingProgressInt / 8.0F; + } + + public void onLivingUpdate() { + if(this.worldObj.difficultySetting == 0 && this.health < 20 && this.ticksExisted % 20 * 12 == 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.health <= 0) { + var1 = 0.0F; + } + + if(this.onGround || this.health <= 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.health > 0) { + List var3 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(1.0D, 0.0D, 1.0D)); + if(var3 != null) { + for(int var4 = 0; var4 < var3.size(); ++var4) { + Entity var5 = (Entity)var3.get(var4); + if(!var5.isDead) { + this.func_171_h(var5); + } + } + } + } + + } + + 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.dropPlayerItemWithRandomChoice(new ItemStack(Item.appleRed, 1), true); + } + + this.inventory.dropAllItems(); + if(var1 != null) { + this.motionX = (double)(-MathHelper.cos((this.attackedAtYaw + this.rotationYaw) * (float)Math.PI / 180.0F) * 0.1F); + this.motionZ = (double)(-MathHelper.sin((this.attackedAtYaw + this.rotationYaw) * (float)Math.PI / 180.0F) * 0.1F); + } else { + this.motionX = this.motionZ = 0.0D; + } + + this.yOffset = 0.1F; + this.addStat(StatList.field_25098_u, 1); + } + + public void addToPlayerScore(Entity var1, int var2) { + this.score += var2; + if(var1 instanceof EntityPlayer) { + this.addStat(StatList.field_25096_w, 1); + } else { + this.addStat(StatList.field_25097_v, 1); + } + + } + + public void dropCurrentItem() { + this.dropPlayerItemWithRandomChoice(this.inventory.decrStackSize(this.inventory.currentItem, 1), false); + } + + public void dropPlayerItem(ItemStack var1) { + this.dropPlayerItemWithRandomChoice(var1, false); + } + + public void dropPlayerItemWithRandomChoice(ItemStack var1, boolean var2) { + if(var1 != null) { + EntityItem var3 = new EntityItem(this.worldObj, this.posX, this.posY - (double)0.3F + (double)this.getEyeHeight(), this.posZ, var1); + var3.delayBeforeCanPickup = 40; + float var4 = 0.1F; + float var5; + if(var2) { + var5 = this.rand.nextFloat() * 0.5F; + float var6 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + var3.motionX = (double)(-MathHelper.sin(var6) * var5); + var3.motionZ = (double)(MathHelper.cos(var6) * var5); + var3.motionY = (double)0.2F; + } else { + var4 = 0.3F; + var3.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var4); + var3.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var4); + var3.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * var4 + 0.1F); + var4 = 0.02F; + var5 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + var4 *= this.rand.nextFloat(); + var3.motionX += Math.cos((double)var5) * (double)var4; + var3.motionY += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F); + var3.motionZ += Math.sin((double)var5) * (double)var4; + } + + this.joinEntityItemWithWorld(var3); + this.addStat(StatList.field_25103_r, 1); + } + } + + protected void joinEntityItemWithWorld(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 canHarvestBlock(Block var1) { + return this.inventory.canHarvestBlock(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + NBTTagList var2 = var1.getTagList("Inventory"); + this.inventory.readFromNBT(var2); + this.dimension = var1.getInteger("Dimension"); + this.sleeping = var1.getBoolean("Sleeping"); + this.sleepTimer = var1.getShort("SleepTimer"); + if(this.sleeping) { + this.playerLocation = new ChunkCoordinates(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)); + this.wakeUpPlayer(true, true, false); + } + + if(var1.hasKey("SpawnX") && var1.hasKey("SpawnY") && var1.hasKey("SpawnZ")) { + this.spawnChunk = new ChunkCoordinates(var1.getInteger("SpawnX"), var1.getInteger("SpawnY"), var1.getInteger("SpawnZ")); + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setTag("Inventory", this.inventory.writeToNBT(new NBTTagList())); + var1.setInteger("Dimension", this.dimension); + var1.setBoolean("Sleeping", this.sleeping); + var1.setShort("SleepTimer", (short)this.sleepTimer); + if(this.spawnChunk != null) { + var1.setInteger("SpawnX", this.spawnChunk.posX); + var1.setInteger("SpawnY", this.spawnChunk.posY); + var1.setInteger("SpawnZ", this.spawnChunk.posZ); + } + + } + + public void displayGUIChest(IInventory var1) { + } + + public void displayWorkbenchGUI(int var1, int var2, int var3) { + } + + public void onItemPickup(Entity var1, int var2) { + } + + public float getEyeHeight() { + return 0.12F; + } + + protected void resetHeight() { + this.yOffset = 1.62F; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.age = 0; + if(this.health <= 0) { + return false; + } else { + if(this.func_22057_E() && !this.worldObj.singleplayerWorld) { + this.wakeUpPlayer(true, true, false); + } + + if(var1 instanceof EntityMob || var1 instanceof EntityArrow) { + if(this.worldObj.difficultySetting == 0) { + var2 = 0; + } + + if(this.worldObj.difficultySetting == 1) { + var2 = var2 / 3 + 1; + } + + if(this.worldObj.difficultySetting == 3) { + var2 = var2 * 3 / 2; + } + } + + if(var2 == 0) { + return false; + } else { + Object var3 = var1; + if(var1 instanceof EntityArrow && ((EntityArrow)var1).owner != null) { + var3 = ((EntityArrow)var1).owner; + } + + if(var3 instanceof EntityLiving) { + this.func_25047_a((EntityLiving)var3, false); + } + + this.addStat(StatList.field_25100_t, var2); + return super.attackEntityFrom(var1, var2); + } + } + } + + protected boolean isPVPEnabled() { + return false; + } + + protected void func_25047_a(EntityLiving var1, boolean var2) { + if(!(var1 instanceof EntityCreeper) && !(var1 instanceof EntityGhast)) { + if(var1 instanceof EntityWolf) { + EntityWolf var3 = (EntityWolf)var1; + if(var3.func_25030_y() && this.username.equals(var3.getOwner())) { + return; + } + } + + if(!(var1 instanceof EntityPlayer) || this.isPVPEnabled()) { + List var7 = this.worldObj.getEntitiesWithinAABB(EntityWolf.class, AxisAlignedBB.getBoundingBoxFromPool(this.posX, this.posY, this.posZ, this.posX + 1.0D, this.posY + 1.0D, this.posZ + 1.0D).expand(16.0D, 4.0D, 16.0D)); + Iterator var4 = var7.iterator(); + + while(true) { + EntityWolf var6; + do { + do { + do { + do { + if(!var4.hasNext()) { + return; + } + + Entity var5 = (Entity)var4.next(); + var6 = (EntityWolf)var5; + } while(!var6.func_25030_y()); + } while(var6.getEntityToAttack() != null); + } while(!this.username.equals(var6.getOwner())); + } while(var2 && var6.getIsSitting()); + + var6.setIsSitting(false); + var6.setEntityToAttack(var1); + } + } + } + } + + protected void damageEntity(int var1) { + int var2 = 25 - this.inventory.getTotalArmorValue(); + int var3 = var1 * var2 + this.damageRemainder; + this.inventory.damageArmor(var1); + var1 = var3 / 25; + this.damageRemainder = var3 % 25; + super.damageEntity(var1); + } + + public void displayGUIFurnace(TileEntityFurnace var1) { + } + + public void displayGUIDispenser(TileEntityDispenser var1) { + } + + public void displayGUIEditSign(TileEntitySign var1) { + } + + public void useCurrentItemOnEntity(Entity var1) { + if(!var1.interact(this)) { + ItemStack var2 = this.getCurrentEquippedItem(); + if(var2 != null && var1 instanceof EntityLiving) { + var2.useItemOnEntity((EntityLiving)var1); + if(var2.stackSize <= 0) { + var2.func_577_a(this); + this.destroyCurrentEquippedItem(); + } + } + + } + } + + public ItemStack getCurrentEquippedItem() { + return this.inventory.getCurrentItem(); + } + + public void destroyCurrentEquippedItem() { + this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack)null); + } + + public double getYOffset() { + return (double)(this.yOffset - 0.5F); + } + + public void swingItem() { + this.swingProgressInt = -1; + this.isSwinging = true; + } + + public void attackTargetEntityWithCurrentItem(Entity var1) { + int var2 = this.inventory.getDamageVsEntity(var1); + if(var2 > 0) { + if(this.motionY < 0.0D) { + ++var2; + } + + var1.attackEntityFrom(this, var2); + ItemStack var3 = this.getCurrentEquippedItem(); + if(var3 != null && var1 instanceof EntityLiving) { + var3.hitEntity((EntityLiving)var1, this); + if(var3.stackSize <= 0) { + var3.func_577_a(this); + this.destroyCurrentEquippedItem(); + } + } + + if(var1 instanceof EntityLiving) { + if(var1.isEntityAlive()) { + this.func_25047_a((EntityLiving)var1, true); + } + + this.addStat(StatList.field_25102_s, var2); + } + } + + } + + public void onItemStackChanged(ItemStack var1) { + } + + public void setEntityDead() { + super.setEntityDead(); + this.personalCraftingInventory.onCraftGuiClosed(this); + if(this.currentCraftingInventory != null) { + this.currentCraftingInventory.onCraftGuiClosed(this); + } + + } + + public boolean isEntityInsideOpaqueBlock() { + return !this.sleeping && super.isEntityInsideOpaqueBlock(); + } + + public EnumStatus goToSleep(int var1, int var2, int var3) { + if(!this.worldObj.singleplayerWorld) { + if(this.func_22057_E() || !this.isEntityAlive()) { + return EnumStatus.OTHER_PROBLEM; + } + + if(this.worldObj.worldProvider.field_6167_c) { + return EnumStatus.NOT_POSSIBLE_HERE; + } + + if(this.worldObj.isDaytime()) { + return EnumStatus.NOT_POSSIBLE_NOW; + } + + if(Math.abs(this.posX - (double)var1) > 3.0D || Math.abs(this.posY - (double)var2) > 2.0D || Math.abs(this.posZ - (double)var3) > 3.0D) { + return EnumStatus.TOO_FAR_AWAY; + } + } + + this.setSize(0.2F, 0.2F); + this.yOffset = 0.2F; + if(this.worldObj.blockExists(var1, var2, var3)) { + int var4 = this.worldObj.getBlockMetadata(var1, var2, var3); + int var5 = BlockBed.func_22019_c(var4); + float var6 = 0.5F; + float var7 = 0.5F; + switch(var5) { + case 0: + var7 = 0.9F; + break; + case 1: + var6 = 0.1F; + break; + case 2: + var7 = 0.1F; + break; + case 3: + var6 = 0.9F; + } + + this.func_22059_e(var5); + this.setPosition((double)((float)var1 + var6), (double)((float)var2 + 15.0F / 16.0F), (double)((float)var3 + var7)); + } else { + this.setPosition((double)((float)var1 + 0.5F), (double)((float)var2 + 15.0F / 16.0F), (double)((float)var3 + 0.5F)); + } + + this.sleeping = true; + this.sleepTimer = 0; + this.playerLocation = new ChunkCoordinates(var1, var2, var3); + this.motionX = this.motionZ = this.motionY = 0.0D; + if(!this.worldObj.singleplayerWorld) { + this.worldObj.updateAllPlayersSleepingFlag(); + } + + return EnumStatus.OK; + } + + private void func_22059_e(int var1) { + this.field_22066_z = 0.0F; + this.field_22067_A = 0.0F; + switch(var1) { + case 0: + this.field_22067_A = -1.8F; + break; + case 1: + this.field_22066_z = 1.8F; + break; + case 2: + this.field_22067_A = 1.8F; + break; + case 3: + this.field_22066_z = -1.8F; + } + + } + + public void wakeUpPlayer(boolean var1, boolean var2, boolean var3) { + this.setSize(0.6F, 1.8F); + this.resetHeight(); + ChunkCoordinates var4 = this.playerLocation; + ChunkCoordinates var5 = this.playerLocation; + if(var4 != null && this.worldObj.getBlockId(var4.posX, var4.posY, var4.posZ) == Block.bed.blockID) { + BlockBed.func_22022_a(this.worldObj, var4.posX, var4.posY, var4.posZ, false); + var5 = BlockBed.func_22021_g(this.worldObj, var4.posX, var4.posY, var4.posZ, 0); + if(var5 == null) { + var5 = new ChunkCoordinates(var4.posX, var4.posY + 1, var4.posZ); + } + + this.setPosition((double)((float)var5.posX + 0.5F), (double)((float)var5.posY + this.yOffset + 0.1F), (double)((float)var5.posZ + 0.5F)); + } + + this.sleeping = false; + if(!this.worldObj.singleplayerWorld && var2) { + this.worldObj.updateAllPlayersSleepingFlag(); + } + + if(var1) { + this.sleepTimer = 0; + } else { + this.sleepTimer = 100; + } + + if(var3) { + this.setSpawnChunk(this.playerLocation); + } + + } + + private boolean isInBed() { + return this.worldObj.getBlockId(this.playerLocation.posX, this.playerLocation.posY, this.playerLocation.posZ) == Block.bed.blockID; + } + + public static ChunkCoordinates func_25051_a(World var0, ChunkCoordinates var1) { + IChunkProvider var2 = var0.o(); + var2.loadChunk(var1.posX - 3 >> 4, var1.posZ - 3 >> 4); + var2.loadChunk(var1.posX + 3 >> 4, var1.posZ - 3 >> 4); + var2.loadChunk(var1.posX - 3 >> 4, var1.posZ + 3 >> 4); + var2.loadChunk(var1.posX + 3 >> 4, var1.posZ + 3 >> 4); + if(var0.getBlockId(var1.posX, var1.posY, var1.posZ) != Block.bed.blockID) { + return null; + } else { + ChunkCoordinates var3 = BlockBed.func_22021_g(var0, var1.posX, var1.posY, var1.posZ, 0); + return var3; + } + } + + public boolean func_22057_E() { + return this.sleeping; + } + + public boolean isPlayerFullyAsleep() { + return this.sleeping && this.sleepTimer >= 100; + } + + public void func_22061_a(String var1) { + } + + public ChunkCoordinates getSpawnChunk() { + return this.spawnChunk; + } + + public void setSpawnChunk(ChunkCoordinates var1) { + if(var1 != null) { + this.spawnChunk = new ChunkCoordinates(var1); + } else { + this.spawnChunk = null; + } + + } + + public void func_27017_a(StatBase var1) { + this.addStat(var1, 1); + } + + public void addStat(StatBase var1, int var2) { + } + + protected void jump() { + super.jump(); + this.addStat(StatList.field_25106_q, 1); + } + + public void moveEntityWithHeading(float var1, float var2) { + double var3 = this.posX; + double var5 = this.posY; + double var7 = this.posZ; + super.moveEntityWithHeading(var1, var2); + this.func_25045_g(this.posX - var3, this.posY - var5, this.posZ - var7); + } + + private void func_25045_g(double var1, double var3, double var5) { + if(this.ridingEntity == null) { + int var7; + if(this.isInsideOfMaterial(Material.water)) { + var7 = Math.round(MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5) * 100.0F); + if(var7 > 0) { + this.addStat(StatList.field_25108_p, var7); + } + } else if(this.isInWater()) { + var7 = Math.round(MathHelper.sqrt_double(var1 * var1 + var5 * var5) * 100.0F); + if(var7 > 0) { + this.addStat(StatList.field_25112_l, var7); + } + } else if(this.isOnLadder()) { + if(var3 > 0.0D) { + this.addStat(StatList.field_25110_n, (int)Math.round(var3 * 100.0D)); + } + } else if(this.onGround) { + var7 = Math.round(MathHelper.sqrt_double(var1 * var1 + var5 * var5) * 100.0F); + if(var7 > 0) { + this.addStat(StatList.field_25113_k, var7); + } + } else { + var7 = Math.round(MathHelper.sqrt_double(var1 * var1 + var5 * var5) * 100.0F); + if(var7 > 25) { + this.addStat(StatList.field_25109_o, var7); + } + } + + } + } + + private void func_27015_h(double var1, double var3, double var5) { + if(this.ridingEntity != null) { + int var7 = Math.round(MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5) * 100.0F); + if(var7 > 0) { + if(this.ridingEntity instanceof EntityMinecart) { + this.addStat(StatList.field_27095_r, var7); + if(this.field_27995_d == null) { + this.field_27995_d = new ChunkCoordinates(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)); + } else if(this.field_27995_d.getSqDistanceTo(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) >= 1000.0D) { + this.addStat(AchievementList.field_27102_q, 1); + } + } else if(this.ridingEntity instanceof EntityBoat) { + this.addStat(StatList.field_27094_s, var7); + } else if(this.ridingEntity instanceof EntityPig) { + this.addStat(StatList.field_27093_t, var7); + } + } + } + + } + + protected void fall(float var1) { + if(var1 >= 2.0F) { + this.addStat(StatList.field_25111_m, (int)Math.round((double)var1 * 100.0D)); + } + + super.fall(var1); + } + + public void func_27010_a(EntityLiving var1) { + if(var1 instanceof EntityMob) { + this.func_27017_a(AchievementList.field_27100_s); + } + + } + + public void setInPortal() { + if(this.timeUntilPortal > 0) { + this.timeUntilPortal = 10; + } else { + this.inPortal = true; + } + } +} diff --git a/src/net/minecraft/src/EntityPlayerMP.java b/src/net/minecraft/src/EntityPlayerMP.java new file mode 100644 index 0000000..8c3cd7f --- /dev/null +++ b/src/net/minecraft/src/EntityPlayerMP.java @@ -0,0 +1,397 @@ +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 implements ICrafting { + public NetServerHandler playerNetServerHandler; + public MinecraftServer mcServer; + public ItemInWorldManager itemInWorldManager; + public double field_9155_d; + public double field_9154_e; + public List loadedChunks = new LinkedList(); + public Set field_420_ah = new HashSet(); + private int lastHealth = -99999999; + private int ticksOfInvuln = 60; + private ItemStack[] playerInventory = new ItemStack[]{null, null, null, null, null}; + private int currentWindowId = 0; + public boolean isChangingQuantityOnly; + + public EntityPlayerMP(MinecraftServer var1, World var2, String var3, ItemInWorldManager var4) { + super(var2); + var4.thisPlayer = this; + this.itemInWorldManager = var4; + ChunkCoordinates var5 = var2.getSpawnPoint(); + int var6 = var5.posX; + int var7 = var5.posZ; + int var8 = var5.posY; + if(!var2.worldProvider.field_4306_c) { + var6 += this.rand.nextInt(20) - 10; + var8 = var2.findTopSolidBlock(var6, var7); + var7 += this.rand.nextInt(20) - 10; + } + + this.setLocationAndAngles((double)var6 + 0.5D, (double)var8, (double)var7 + 0.5D, 0.0F, 0.0F); + this.mcServer = var1; + this.stepHeight = 0.0F; + this.username = var3; + this.yOffset = 0.0F; + } + + public void setWorldHandler(World var1) { + super.setWorldHandler(var1); + this.itemInWorldManager = new ItemInWorldManager((WorldServer)var1); + this.itemInWorldManager.thisPlayer = this; + } + + public void func_20057_k() { + this.currentCraftingInventory.onCraftGuiOpened(this); + } + + public ItemStack[] getInventory() { + return this.playerInventory; + } + + protected void resetHeight() { + this.yOffset = 0.0F; + } + + public float getEyeHeight() { + return 1.62F; + } + + public void onUpdate() { + this.itemInWorldManager.func_328_a(); + --this.ticksOfInvuln; + this.currentCraftingInventory.updateCraftingMatrix(); + + for(int var1 = 0; var1 < 5; ++var1) { + ItemStack var2 = this.getEquipmentInSlot(var1); + if(var2 != this.playerInventory[var1]) { + this.mcServer.getEntityTracker(this.dimension).sendPacketToTrackedPlayers(this, new Packet5PlayerInventory(this.entityId, var1, var2)); + this.playerInventory[var1] = var2; + } + } + + } + + public ItemStack getEquipmentInSlot(int var1) { + return var1 == 0 ? this.inventory.getCurrentItem() : this.inventory.armorInventory[var1 - 1]; + } + + public void onDeath(Entity var1) { + this.inventory.dropAllItems(); + } + + public boolean attackEntityFrom(Entity var1, int var2) { + if(this.ticksOfInvuln > 0) { + return false; + } else { + if(!this.mcServer.pvpOn) { + if(var1 instanceof EntityPlayer) { + return false; + } + + if(var1 instanceof EntityArrow) { + EntityArrow var3 = (EntityArrow)var1; + if(var3.owner instanceof EntityPlayer) { + return false; + } + } + } + + return super.attackEntityFrom(var1, var2); + } + } + + protected boolean isPVPEnabled() { + return this.mcServer.pvpOn; + } + + public void heal(int var1) { + super.heal(var1); + } + + public void onUpdateEntity(boolean var1) { + super.onUpdate(); + + for(int var2 = 0; var2 < this.inventory.getSizeInventory(); ++var2) { + ItemStack var3 = this.inventory.getStackInSlot(var2); + if(var3 != null && Item.itemsList[var3.itemID].func_28019_b() && this.playerNetServerHandler.getNumChunkDataPackets() <= 2) { + Packet var4 = ((ItemMapBase)Item.itemsList[var3.itemID]).func_28022_b(var3, this.worldObj, this); + if(var4 != null) { + this.playerNetServerHandler.sendPacket(var4); + } + } + } + + if(var1 && !this.loadedChunks.isEmpty()) { + ChunkCoordIntPair var7 = (ChunkCoordIntPair)this.loadedChunks.get(0); + if(var7 != null) { + boolean var8 = false; + if(this.playerNetServerHandler.getNumChunkDataPackets() < 4) { + var8 = true; + } + + if(var8) { + WorldServer var9 = this.mcServer.getWorldManager(this.dimension); + this.loadedChunks.remove(var7); + this.playerNetServerHandler.sendPacket(new Packet51MapChunk(var7.chunkXPos * 16, 0, var7.chunkZPos * 16, 16, 128, 16, var9)); + List var5 = var9.getTileEntityList(var7.chunkXPos * 16, 0, var7.chunkZPos * 16, var7.chunkXPos * 16 + 16, 128, var7.chunkZPos * 16 + 16); + + for(int var6 = 0; var6 < var5.size(); ++var6) { + this.getTileEntityInfo((TileEntity)var5.get(var6)); + } + } + } + } + + if(this.inPortal) { + if(this.mcServer.propertyManagerObj.getBooleanProperty("allow-nether", true)) { + if(this.currentCraftingInventory != this.personalCraftingInventory) { + this.usePersonalCraftingInventory(); + } + + if(this.ridingEntity != null) { + this.mountEntity(this.ridingEntity); + } else { + this.timeInPortal += 0.0125F; + if(this.timeInPortal >= 1.0F) { + this.timeInPortal = 1.0F; + this.timeUntilPortal = 10; + this.mcServer.configManager.sendPlayerToOtherDimension(this); + } + } + + this.inPortal = false; + } + } else { + if(this.timeInPortal > 0.0F) { + this.timeInPortal -= 0.05F; + } + + if(this.timeInPortal < 0.0F) { + this.timeInPortal = 0.0F; + } + } + + if(this.timeUntilPortal > 0) { + --this.timeUntilPortal; + } + + if(this.health != this.lastHealth) { + this.playerNetServerHandler.sendPacket(new Packet8UpdateHealth(this.health)); + this.lastHealth = this.health; + } + + } + + private void getTileEntityInfo(TileEntity var1) { + if(var1 != null) { + Packet var2 = var1.getDescriptionPacket(); + if(var2 != null) { + this.playerNetServerHandler.sendPacket(var2); + } + } + + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + } + + public void onItemPickup(Entity var1, int var2) { + if(!var1.isDead) { + EntityTracker var3 = this.mcServer.getEntityTracker(this.dimension); + if(var1 instanceof EntityItem) { + var3.sendPacketToTrackedPlayers(var1, new Packet22Collect(var1.entityId, this.entityId)); + } + + if(var1 instanceof EntityArrow) { + var3.sendPacketToTrackedPlayers(var1, new Packet22Collect(var1.entityId, this.entityId)); + } + } + + super.onItemPickup(var1, var2); + this.currentCraftingInventory.updateCraftingMatrix(); + } + + public void swingItem() { + if(!this.isSwinging) { + this.swingProgressInt = -1; + this.isSwinging = true; + EntityTracker var1 = this.mcServer.getEntityTracker(this.dimension); + var1.sendPacketToTrackedPlayers(this, new Packet18Animation(this, 1)); + } + + } + + public void func_22068_s() { + } + + public EnumStatus goToSleep(int var1, int var2, int var3) { + EnumStatus var4 = super.goToSleep(var1, var2, var3); + if(var4 == EnumStatus.OK) { + EntityTracker var5 = this.mcServer.getEntityTracker(this.dimension); + Packet17Sleep var6 = new Packet17Sleep(this, 0, var1, var2, var3); + var5.sendPacketToTrackedPlayers(this, var6); + this.playerNetServerHandler.teleportTo(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + this.playerNetServerHandler.sendPacket(var6); + } + + return var4; + } + + public void wakeUpPlayer(boolean var1, boolean var2, boolean var3) { + if(this.func_22057_E()) { + EntityTracker var4 = this.mcServer.getEntityTracker(this.dimension); + var4.sendPacketToTrackedPlayersAndTrackedEntity(this, new Packet18Animation(this, 3)); + } + + super.wakeUpPlayer(var1, var2, var3); + if(this.playerNetServerHandler != null) { + this.playerNetServerHandler.teleportTo(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + } + + } + + public void mountEntity(Entity var1) { + super.mountEntity(var1); + this.playerNetServerHandler.sendPacket(new Packet39AttachEntity(this, this.ridingEntity)); + this.playerNetServerHandler.teleportTo(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + } + + protected void updateFallState(double var1, boolean var3) { + } + + public void handleFalling(double var1, boolean var3) { + super.updateFallState(var1, var3); + } + + private void getNextWidowId() { + this.currentWindowId = this.currentWindowId % 100 + 1; + } + + public void displayWorkbenchGUI(int var1, int var2, int var3) { + this.getNextWidowId(); + this.playerNetServerHandler.sendPacket(new Packet100OpenWindow(this.currentWindowId, 1, "Crafting", 9)); + this.currentCraftingInventory = new ContainerWorkbench(this.inventory, this.worldObj, var1, var2, var3); + this.currentCraftingInventory.windowId = this.currentWindowId; + this.currentCraftingInventory.onCraftGuiOpened(this); + } + + public void displayGUIChest(IInventory var1) { + this.getNextWidowId(); + this.playerNetServerHandler.sendPacket(new Packet100OpenWindow(this.currentWindowId, 0, var1.getInvName(), var1.getSizeInventory())); + this.currentCraftingInventory = new ContainerChest(this.inventory, var1); + this.currentCraftingInventory.windowId = this.currentWindowId; + this.currentCraftingInventory.onCraftGuiOpened(this); + } + + public void displayGUIFurnace(TileEntityFurnace var1) { + this.getNextWidowId(); + this.playerNetServerHandler.sendPacket(new Packet100OpenWindow(this.currentWindowId, 2, var1.getInvName(), var1.getSizeInventory())); + this.currentCraftingInventory = new ContainerFurnace(this.inventory, var1); + this.currentCraftingInventory.windowId = this.currentWindowId; + this.currentCraftingInventory.onCraftGuiOpened(this); + } + + public void displayGUIDispenser(TileEntityDispenser var1) { + this.getNextWidowId(); + this.playerNetServerHandler.sendPacket(new Packet100OpenWindow(this.currentWindowId, 3, var1.getInvName(), var1.getSizeInventory())); + this.currentCraftingInventory = new ContainerDispenser(this.inventory, var1); + this.currentCraftingInventory.windowId = this.currentWindowId; + this.currentCraftingInventory.onCraftGuiOpened(this); + } + + public void updateCraftingInventorySlot(Container var1, int var2, ItemStack var3) { + if(!(var1.getSlot(var2) instanceof SlotCrafting)) { + if(!this.isChangingQuantityOnly) { + this.playerNetServerHandler.sendPacket(new Packet103SetSlot(var1.windowId, var2, var3)); + } + } + } + + public void func_28017_a(Container var1) { + this.updateCraftingInventory(var1, var1.func_28127_b()); + } + + public void updateCraftingInventory(Container var1, List var2) { + this.playerNetServerHandler.sendPacket(new Packet104WindowItems(var1.windowId, var2)); + this.playerNetServerHandler.sendPacket(new Packet103SetSlot(-1, -1, this.inventory.getItemStack())); + } + + public void updateCraftingInventoryInfo(Container var1, int var2, int var3) { + this.playerNetServerHandler.sendPacket(new Packet105UpdateProgressbar(var1.windowId, var2, var3)); + } + + public void onItemStackChanged(ItemStack var1) { + } + + public void usePersonalCraftingInventory() { + this.playerNetServerHandler.sendPacket(new Packet101CloseWindow(this.currentCraftingInventory.windowId)); + this.closeCraftingGui(); + } + + public void updateHeldItem() { + if(!this.isChangingQuantityOnly) { + this.playerNetServerHandler.sendPacket(new Packet103SetSlot(-1, -1, this.inventory.getItemStack())); + } + } + + public void closeCraftingGui() { + this.currentCraftingInventory.onCraftGuiClosed(this); + this.currentCraftingInventory = this.personalCraftingInventory; + } + + public void setMovementType(float var1, float var2, boolean var3, boolean var4, float var5, float var6) { + this.moveStrafing = var1; + this.moveForward = var2; + this.isJumping = var3; + this.setSneaking(var4); + this.rotationPitch = var5; + this.rotationYaw = var6; + } + + public void addStat(StatBase var1, int var2) { + if(var1 != null) { + if(!var1.field_27058_g) { + while(var2 > 100) { + this.playerNetServerHandler.sendPacket(new Packet200Statistic(var1.statId, 100)); + var2 -= 100; + } + + this.playerNetServerHandler.sendPacket(new Packet200Statistic(var1.statId, var2)); + } + + } + } + + public void func_30002_A() { + if(this.ridingEntity != null) { + this.mountEntity(this.ridingEntity); + } + + if(this.riddenByEntity != null) { + this.riddenByEntity.mountEntity(this); + } + + if(this.sleeping) { + this.wakeUpPlayer(true, false, false); + } + + } + + public void func_30001_B() { + this.lastHealth = -99999999; + } + + public void func_22061_a(String var1) { + StringTranslate var2 = StringTranslate.getInstance(); + String var3 = var2.translateKey(var1); + this.playerNetServerHandler.sendPacket(new Packet3Chat(var3)); + } +} diff --git a/src/net/minecraft/src/EntitySheep.java b/src/net/minecraft/src/EntitySheep.java new file mode 100644 index 0000000..a4fe7c3 --- /dev/null +++ b/src/net/minecraft/src/EntitySheep.java @@ -0,0 +1,106 @@ +package net.minecraft.src; + +import java.util.Random; + +public class EntitySheep extends EntityAnimal { + public static final float[][] field_21071_a = new float[][]{{1.0F, 1.0F, 1.0F}, {0.95F, 0.7F, 0.2F}, {0.9F, 0.5F, 0.85F}, {0.6F, 0.7F, 0.95F}, {0.9F, 0.9F, 0.2F}, {0.5F, 0.8F, 0.1F}, {0.95F, 0.7F, 0.8F}, {0.3F, 0.3F, 0.3F}, {0.6F, 0.6F, 0.6F}, {0.3F, 0.6F, 0.7F}, {0.7F, 0.4F, 0.9F}, {0.2F, 0.4F, 0.8F}, {0.5F, 0.4F, 0.3F}, {0.4F, 0.5F, 0.2F}, {0.8F, 0.3F, 0.3F}, {0.1F, 0.1F, 0.1F}}; + + public EntitySheep(World var1) { + super(var1); + this.texture = "/mob/sheep.png"; + this.setSize(0.9F, 1.3F); + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, new Byte((byte)0)); + } + + public boolean attackEntityFrom(Entity var1, int var2) { + return super.attackEntityFrom(var1, var2); + } + + protected void dropFewItems() { + if(!this.func_21069_f_()) { + this.entityDropItem(new ItemStack(Block.cloth.blockID, 1, this.getFleeceColor()), 0.0F); + } + + } + + protected int getDropItemId() { + return Block.cloth.blockID; + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(var2 != null && var2.itemID == Item.field_31022_bc.shiftedIndex && !this.func_21069_f_()) { + if(!this.worldObj.singleplayerWorld) { + this.setSheared(true); + int var3 = 2 + this.rand.nextInt(3); + + for(int var4 = 0; var4 < var3; ++var4) { + EntityItem var5 = this.entityDropItem(new ItemStack(Block.cloth.blockID, 1, this.getFleeceColor()), 1.0F); + var5.motionY += (double)(this.rand.nextFloat() * 0.05F); + var5.motionX += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F); + var5.motionZ += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F); + } + } + + var2.damageItem(1, var1); + } + + return false; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("Sheared", this.func_21069_f_()); + var1.setByte("Color", (byte)this.getFleeceColor()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setSheared(var1.getBoolean("Sheared")); + this.setFleeceColor(var1.getByte("Color")); + } + + protected String getLivingSound() { + return "mob.sheep"; + } + + protected String getHurtSound() { + return "mob.sheep"; + } + + protected String getDeathSound() { + return "mob.sheep"; + } + + public int getFleeceColor() { + return this.dataWatcher.getWatchableObjectByte(16) & 15; + } + + public void setFleeceColor(int var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & 240 | var1 & 15))); + } + + public boolean func_21069_f_() { + return (this.dataWatcher.getWatchableObjectByte(16) & 16) != 0; + } + + public void setSheared(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 16))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -17))); + } + + } + + public static int func_21066_a(Random var0) { + int var1 = var0.nextInt(100); + return var1 < 5 ? 15 : (var1 < 10 ? 7 : (var1 < 15 ? 8 : (var1 < 18 ? 12 : (var0.nextInt(500) == 0 ? 6 : 0)))); + } +} diff --git a/src/net/minecraft/src/EntitySkeleton.java b/src/net/minecraft/src/EntitySkeleton.java new file mode 100644 index 0000000..38df440 --- /dev/null +++ b/src/net/minecraft/src/EntitySkeleton.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +public class EntitySkeleton extends EntityMob { + private static final ItemStack defaultHeldItem = new ItemStack(Item.bow, 1); + + public EntitySkeleton(World var1) { + super(var1); + this.texture = "/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.rand.nextFloat() * 30.0F < (var1 - 0.4F) * 2.0F) { + this.fire = 300; + } + } + + super.onLivingUpdate(); + } + + protected void attackEntity(Entity var1, float var2) { + if(var2 < 10.0F) { + double var3 = var1.posX - this.posX; + double var5 = var1.posZ - this.posZ; + if(this.attackTime == 0) { + EntityArrow var7 = new EntityArrow(this.worldObj, this); + var7.posY += (double)1.4F; + double var8 = var1.posY + (double)var1.getEyeHeight() - (double)0.2F - var7.posY; + float var10 = MathHelper.sqrt_double(var3 * var3 + var5 * var5) * 0.2F; + this.worldObj.playSoundAtEntity(this, "random.bow", 1.0F, 1.0F / (this.rand.nextFloat() * 0.4F + 0.8F)); + this.worldObj.entityJoinedWorld(var7); + var7.setArrowHeading(var3, var8 + (double)var10, var5, 0.6F, 12.0F); + this.attackTime = 30; + } + + this.rotationYaw = (float)(Math.atan2(var5, var3) * 180.0D / (double)((float)Math.PI)) - 90.0F; + this.hasAttacked = true; + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected int getDropItemId() { + return Item.arrow.shiftedIndex; + } + + protected void dropFewItems() { + int var1 = this.rand.nextInt(3); + + int var2; + for(var2 = 0; var2 < var1; ++var2) { + this.dropItem(Item.arrow.shiftedIndex, 1); + } + + var1 = this.rand.nextInt(3); + + for(var2 = 0; var2 < var1; ++var2) { + this.dropItem(Item.bone.shiftedIndex, 1); + } + + } +} diff --git a/src/net/minecraft/src/EntitySlime.java b/src/net/minecraft/src/EntitySlime.java new file mode 100644 index 0000000..1b5d7fa --- /dev/null +++ b/src/net/minecraft/src/EntitySlime.java @@ -0,0 +1,142 @@ +package net.minecraft.src; + +public class EntitySlime extends EntityLiving implements IMob { + public float field_401_a; + public float field_400_b; + private int ticksTillJump = 0; + + public EntitySlime(World var1) { + super(var1); + this.texture = "/mob/slime.png"; + int var2 = 1 << this.rand.nextInt(3); + this.yOffset = 0.0F; + this.ticksTillJump = this.rand.nextInt(20) + 10; + this.setSlimeSize(var2); + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, new Byte((byte)1)); + } + + public void setSlimeSize(int var1) { + this.dataWatcher.updateObject(16, new Byte((byte)var1)); + this.setSize(0.6F * (float)var1, 0.6F * (float)var1); + this.health = var1 * var1; + this.setPosition(this.posX, this.posY, this.posZ); + } + + public int func_25027_m() { + return this.dataWatcher.getWatchableObjectByte(16); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("Size", this.func_25027_m() - 1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setSlimeSize(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) { + int var2 = this.func_25027_m(); + + for(int var3 = 0; var3 < var2 * 8; ++var3) { + float var4 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + float var5 = this.rand.nextFloat() * 0.5F + 0.5F; + float var6 = MathHelper.sin(var4) * (float)var2 * 0.5F * var5; + float var7 = MathHelper.cos(var4) * (float)var2 * 0.5F * var5; + this.worldObj.spawnParticle("slime", this.posX + (double)var6, this.boundingBox.minY, this.posZ + (double)var7, 0.0D, 0.0D, 0.0D); + } + + if(var2 > 2) { + this.worldObj.playSoundAtEntity(this, "mob.slime", this.getSoundVolume(), ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) / 0.8F); + } + + this.field_401_a = -0.5F; + } + + this.field_401_a *= 0.6F; + } + + protected void updatePlayerActionState() { + this.func_27013_Q(); + EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, 16.0D); + if(var1 != null) { + this.faceEntity(var1, 10.0F, 20.0F); + } + + if(this.onGround && this.ticksTillJump-- <= 0) { + this.ticksTillJump = this.rand.nextInt(20) + 10; + if(var1 != null) { + this.ticksTillJump /= 3; + } + + this.isJumping = true; + if(this.func_25027_m() > 1) { + this.worldObj.playSoundAtEntity(this, "mob.slime", this.getSoundVolume(), ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 0.8F); + } + + this.field_401_a = 1.0F; + this.moveStrafing = 1.0F - this.rand.nextFloat() * 2.0F; + this.moveForward = (float)(1 * this.func_25027_m()); + } else { + this.isJumping = false; + if(this.onGround) { + this.moveStrafing = this.moveForward = 0.0F; + } + } + + } + + public void setEntityDead() { + int var1 = this.func_25027_m(); + if(!this.worldObj.singleplayerWorld && var1 > 1 && this.health == 0) { + for(int var2 = 0; var2 < 4; ++var2) { + float var3 = ((float)(var2 % 2) - 0.5F) * (float)var1 / 4.0F; + float var4 = ((float)(var2 / 2) - 0.5F) * (float)var1 / 4.0F; + EntitySlime var5 = new EntitySlime(this.worldObj); + var5.setSlimeSize(var1 / 2); + var5.setLocationAndAngles(this.posX + (double)var3, this.posY + 0.5D, this.posZ + (double)var4, this.rand.nextFloat() * 360.0F, 0.0F); + this.worldObj.entityJoinedWorld(var5); + } + } + + super.setEntityDead(); + } + + public void onCollideWithPlayer(EntityPlayer var1) { + int var2 = this.func_25027_m(); + if(var2 > 1 && this.canEntityBeSeen(var1) && (double)this.getDistanceToEntity(var1) < 0.6D * (double)var2 && var1.attackEntityFrom(this, var2)) { + this.worldObj.playSoundAtEntity(this, "mob.slimeattack", 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + } + + protected String getHurtSound() { + return "mob.slime"; + } + + protected String getDeathSound() { + return "mob.slime"; + } + + protected int getDropItemId() { + return this.func_25027_m() == 1 ? Item.slimeBall.shiftedIndex : 0; + } + + public boolean getCanSpawnHere() { + Chunk var1 = this.worldObj.getChunkFromBlockCoords(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posZ)); + return (this.func_25027_m() == 1 || this.worldObj.difficultySetting > 0) && this.rand.nextInt(10) == 0 && var1.func_334_a(987234911L).nextInt(10) == 0 && this.posY < 16.0D; + } + + protected float getSoundVolume() { + return 0.6F; + } +} diff --git a/src/net/minecraft/src/EntitySnowball.java b/src/net/minecraft/src/EntitySnowball.java new file mode 100644 index 0000000..34f1b9f --- /dev/null +++ b/src/net/minecraft/src/EntitySnowball.java @@ -0,0 +1,212 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntitySnowball extends Entity { + private int xTileSnowball = -1; + private int yTileSnowball = -1; + private int zTileSnowball = -1; + private int inTileSnowball = 0; + private boolean inGroundSnowball = false; + public int shakeSnowball = 0; + private EntityLiving owner; + private int ticksOnGround; + private int ticksInAir = 0; + + public EntitySnowball(World var1) { + super(var1); + this.setSize(0.25F, 0.25F); + } + + protected void entityInit() { + } + + public EntitySnowball(World var1, EntityLiving var2) { + super(var1); + this.owner = var2; + this.setSize(0.25F, 0.25F); + this.setLocationAndAngles(var2.posX, var2.posY + (double)var2.getEyeHeight(), var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.posY -= (double)0.1F; + this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + float var3 = 0.4F; + this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.func_6141_a(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); + } + + public EntitySnowball(World var1, double var2, double var4, double var6) { + super(var1); + this.ticksOnGround = 0; + this.setSize(0.25F, 0.25F); + this.setPosition(var2, var4, var6); + this.yOffset = 0.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.rand.nextGaussian() * (double)0.0075F * (double)var8; + var3 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var5 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var1 *= (double)var7; + var3 *= (double)var7; + var5 *= (double)var7; + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var10) * 180.0D / (double)((float)Math.PI)); + this.ticksOnGround = 0; + } + + public void onUpdate() { + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + super.onUpdate(); + if(this.shakeSnowball > 0) { + --this.shakeSnowball; + } + + if(this.inGroundSnowball) { + int var1 = this.worldObj.getBlockId(this.xTileSnowball, this.yTileSnowball, this.zTileSnowball); + if(var1 == this.inTileSnowball) { + ++this.ticksOnGround; + if(this.ticksOnGround == 1200) { + this.setEntityDead(); + } + + return; + } + + this.inGroundSnowball = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.ticksOnGround = 0; + this.ticksInAir = 0; + } else { + ++this.ticksInAir; + } + + Vec3D var15 = Vec3D.createVector(this.posX, this.posY, this.posZ); + Vec3D var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition var3 = this.worldObj.rayTraceBlocks(var15, var2); + var15 = Vec3D.createVector(this.posX, this.posY, this.posZ); + var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if(var3 != null) { + var2 = Vec3D.createVector(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord); + } + + if(!this.worldObj.singleplayerWorld) { + Entity var4 = null; + List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double var6 = 0.0D; + + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.canBeCollidedWith() && (var9 != this.owner || this.ticksInAir >= 5)) { + float var10 = 0.3F; + AxisAlignedBB var11 = var9.boundingBox.expand((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.attackEntityFrom(this.owner, 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.isInWater()) { + for(int var7 = 0; var7 < 4; ++var7) { + float var20 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var20, this.posY - this.motionY * (double)var20, this.posZ - this.motionZ * (double)var20, this.motionX, this.motionY, this.motionZ); + } + + var18 = 0.8F; + } + + this.motionX *= (double)var18; + this.motionY *= (double)var18; + this.motionZ *= (double)var18; + this.motionY -= (double)var19; + this.setPosition(this.posX, this.posY, this.posZ); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.xTileSnowball); + var1.setShort("yTile", (short)this.yTileSnowball); + var1.setShort("zTile", (short)this.zTileSnowball); + var1.setByte("inTile", (byte)this.inTileSnowball); + var1.setByte("shake", (byte)this.shakeSnowball); + var1.setByte("inGround", (byte)(this.inGroundSnowball ? 1 : 0)); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.xTileSnowball = var1.getShort("xTile"); + this.yTileSnowball = var1.getShort("yTile"); + this.zTileSnowball = var1.getShort("zTile"); + this.inTileSnowball = var1.getByte("inTile") & 255; + this.shakeSnowball = var1.getByte("shake") & 255; + this.inGroundSnowball = var1.getByte("inGround") == 1; + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(this.inGroundSnowball && this.owner == var1 && this.shakeSnowball <= 0 && var1.inventory.addItemStackToInventory(new ItemStack(Item.arrow, 1))) { + this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.onItemPickup(this, 1); + this.setEntityDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntitySpider.java b/src/net/minecraft/src/EntitySpider.java new file mode 100644 index 0000000..d80967b --- /dev/null +++ b/src/net/minecraft/src/EntitySpider.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +public class EntitySpider extends EntityMob { + public EntitySpider(World var1) { + super(var1); + this.texture = "/mob/spider.png"; + this.setSize(1.4F, 0.9F); + this.moveSpeed = 0.8F; + } + + public double getMountedYOffset() { + return (double)this.height * 0.75D - 0.5D; + } + + protected boolean func_25017_l() { + return false; + } + + protected Entity findPlayerToAttack() { + 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 attackEntity(Entity var1, float var2) { + float var3 = this.getEntityBrightness(1.0F); + if(var3 > 0.5F && this.rand.nextInt(100) == 0) { + this.playerToAttack = null; + } else { + if(var2 > 2.0F && var2 < 6.0F && this.rand.nextInt(10) == 0) { + if(this.onGround) { + double var4 = var1.posX - this.posX; + double var6 = var1.posZ - this.posZ; + float var8 = MathHelper.sqrt_double(var4 * var4 + var6 * var6); + this.motionX = var4 / (double)var8 * 0.5D * (double)0.8F + this.motionX * (double)0.2F; + this.motionZ = var6 / (double)var8 * 0.5D * (double)0.8F + this.motionZ * (double)0.2F; + this.motionY = (double)0.4F; + } + } else { + super.attackEntity(var1, var2); + } + + } + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected int getDropItemId() { + return Item.silk.shiftedIndex; + } + + public boolean isOnLadder() { + return this.isCollidedHorizontally; + } +} diff --git a/src/net/minecraft/src/EntitySquid.java b/src/net/minecraft/src/EntitySquid.java new file mode 100644 index 0000000..8eb712e --- /dev/null +++ b/src/net/minecraft/src/EntitySquid.java @@ -0,0 +1,141 @@ +package net.minecraft.src; + +public class EntitySquid extends EntityWaterMob { + public float field_21063_a = 0.0F; + public float field_21062_b = 0.0F; + public float field_21061_c = 0.0F; + public float field_21059_f = 0.0F; + public float field_21060_ak = 0.0F; + public float field_21058_al = 0.0F; + public float field_21057_am = 0.0F; + public float field_21056_an = 0.0F; + private float field_21055_ao = 0.0F; + private float field_21054_ap = 0.0F; + private float field_21053_aq = 0.0F; + private float field_21052_ar = 0.0F; + private float field_21051_as = 0.0F; + private float field_21050_at = 0.0F; + + public EntitySquid(World var1) { + super(var1); + this.texture = "/mob/squid.png"; + this.setSize(0.95F, 0.95F); + this.field_21054_ap = 1.0F / (this.rand.nextFloat() + 1.0F) * 0.2F; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected String getLivingSound() { + return null; + } + + protected String getHurtSound() { + return null; + } + + protected String getDeathSound() { + return null; + } + + protected float getSoundVolume() { + return 0.4F; + } + + protected int getDropItemId() { + return 0; + } + + protected void dropFewItems() { + int var1 = this.rand.nextInt(3) + 1; + + for(int var2 = 0; var2 < var1; ++var2) { + this.entityDropItem(new ItemStack(Item.dyePowder, 1, 0), 0.0F); + } + + } + + public boolean interact(EntityPlayer var1) { + return false; + } + + public boolean isInWater() { + return this.worldObj.handleMaterialAcceleration(this.boundingBox.expand(0.0D, (double)-0.6F, 0.0D), Material.water, this); + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + this.field_21062_b = this.field_21063_a; + this.field_21059_f = this.field_21061_c; + this.field_21058_al = this.field_21060_ak; + this.field_21056_an = this.field_21057_am; + this.field_21060_ak += this.field_21054_ap; + if(this.field_21060_ak > (float)Math.PI * 2.0F) { + this.field_21060_ak -= (float)Math.PI * 2.0F; + if(this.rand.nextInt(10) == 0) { + this.field_21054_ap = 1.0F / (this.rand.nextFloat() + 1.0F) * 0.2F; + } + } + + if(this.isInWater()) { + float var1; + if(this.field_21060_ak < (float)Math.PI) { + var1 = this.field_21060_ak / (float)Math.PI; + this.field_21057_am = MathHelper.sin(var1 * var1 * (float)Math.PI) * (float)Math.PI * 0.25F; + if((double)var1 > 0.75D) { + this.field_21055_ao = 1.0F; + this.field_21053_aq = 1.0F; + } else { + this.field_21053_aq *= 0.8F; + } + } else { + this.field_21057_am = 0.0F; + this.field_21055_ao *= 0.9F; + this.field_21053_aq *= 0.99F; + } + + if(!this.isMultiplayerEntity) { + this.motionX = (double)(this.field_21052_ar * this.field_21055_ao); + this.motionY = (double)(this.field_21051_as * this.field_21055_ao); + this.motionZ = (double)(this.field_21050_at * this.field_21055_ao); + } + + var1 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.renderYawOffset += (-((float)Math.atan2(this.motionX, this.motionZ)) * 180.0F / (float)Math.PI - this.renderYawOffset) * 0.1F; + this.rotationYaw = this.renderYawOffset; + this.field_21061_c += (float)Math.PI * this.field_21053_aq * 1.5F; + this.field_21063_a += (-((float)Math.atan2((double)var1, this.motionY)) * 180.0F / (float)Math.PI - this.field_21063_a) * 0.1F; + } else { + this.field_21057_am = MathHelper.abs(MathHelper.sin(this.field_21060_ak)) * (float)Math.PI * 0.25F; + if(!this.isMultiplayerEntity) { + this.motionX = 0.0D; + this.motionY -= 0.08D; + this.motionY *= (double)0.98F; + this.motionZ = 0.0D; + } + + this.field_21063_a = (float)((double)this.field_21063_a + (double)(-90.0F - this.field_21063_a) * 0.02D); + } + + } + + public void moveEntityWithHeading(float var1, float var2) { + this.moveEntity(this.motionX, this.motionY, this.motionZ); + } + + protected void updatePlayerActionState() { + if(this.rand.nextInt(50) == 0 || !this.inWater || this.field_21052_ar == 0.0F && this.field_21051_as == 0.0F && this.field_21050_at == 0.0F) { + float var1 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + this.field_21052_ar = MathHelper.cos(var1) * 0.2F; + this.field_21051_as = -0.1F + this.rand.nextFloat() * 0.2F; + this.field_21050_at = MathHelper.sin(var1) * 0.2F; + } + + this.func_27013_Q(); + } +} diff --git a/src/net/minecraft/src/EntityTNTPrimed.java b/src/net/minecraft/src/EntityTNTPrimed.java new file mode 100644 index 0000000..4d31838 --- /dev/null +++ b/src/net/minecraft/src/EntityTNTPrimed.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +public class EntityTNTPrimed extends Entity { + public int fuse; + + public EntityTNTPrimed(World var1) { + super(var1); + this.fuse = 0; + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.98F); + this.yOffset = this.height / 2.0F; + } + + public EntityTNTPrimed(World var1, 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.fuse = 80; + this.prevPosX = var2; + this.prevPosY = var4; + this.prevPosZ = var6; + } + + protected void entityInit() { + } + + protected boolean func_25017_l() { + return false; + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= (double)0.04F; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.98F; + this.motionY *= (double)0.98F; + this.motionZ *= (double)0.98F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + this.motionY *= -0.5D; + } + + if(this.fuse-- <= 0) { + if(!this.worldObj.singleplayerWorld) { + this.setEntityDead(); + this.explode(); + } else { + this.setEntityDead(); + } + } else { + this.worldObj.spawnParticle("smoke", this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D); + } + + } + + private void explode() { + float var1 = 4.0F; + this.worldObj.createExplosion((Entity)null, this.posX, this.posY, this.posZ, var1); + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Fuse", (byte)this.fuse); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + this.fuse = var1.getByte("Fuse"); + } +} diff --git a/src/net/minecraft/src/EntityTracker.java b/src/net/minecraft/src/EntityTracker.java new file mode 100644 index 0000000..d29d3e2 --- /dev/null +++ b/src/net/minecraft/src/EntityTracker.java @@ -0,0 +1,153 @@ +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 trackedEntitySet = new HashSet(); + private MCHash trackedEntityHashTable = new MCHash(); + private MinecraftServer mcServer; + private int maxTrackingDistanceThreshold; + private int field_28113_e; + + public EntityTracker(MinecraftServer var1, int var2) { + this.mcServer = var1; + this.field_28113_e = var2; + this.maxTrackingDistanceThreshold = var1.configManager.getMaxTrackingDistance(); + } + + public void trackEntity(Entity var1) { + if(var1 instanceof EntityPlayerMP) { + this.trackEntity(var1, 512, 2); + EntityPlayerMP var2 = (EntityPlayerMP)var1; + Iterator var3 = this.trackedEntitySet.iterator(); + + while(var3.hasNext()) { + EntityTrackerEntry var4 = (EntityTrackerEntry)var3.next(); + if(var4.trackedEntity != var2) { + var4.updatePlayerEntity(var2); + } + } + } else if(var1 instanceof EntityFish) { + this.trackEntity(var1, 64, 5, true); + } else if(var1 instanceof EntityArrow) { + this.trackEntity(var1, 64, 20, false); + } else if(var1 instanceof EntityFireball) { + this.trackEntity(var1, 64, 10, false); + } else if(var1 instanceof EntitySnowball) { + this.trackEntity(var1, 64, 10, true); + } else if(var1 instanceof EntityEgg) { + this.trackEntity(var1, 64, 10, true); + } else if(var1 instanceof EntityItem) { + this.trackEntity(var1, 64, 20, true); + } else if(var1 instanceof EntityMinecart) { + this.trackEntity(var1, 160, 5, true); + } else if(var1 instanceof EntityBoat) { + this.trackEntity(var1, 160, 5, true); + } else if(var1 instanceof EntitySquid) { + this.trackEntity(var1, 160, 3, true); + } else if(var1 instanceof IAnimals) { + this.trackEntity(var1, 160, 3); + } else if(var1 instanceof EntityTNTPrimed) { + this.trackEntity(var1, 160, 10, true); + } else if(var1 instanceof EntityFallingSand) { + this.trackEntity(var1, 160, 20, true); + } else if(var1 instanceof EntityPainting) { + this.trackEntity(var1, 160, Integer.MAX_VALUE, false); + } + + } + + public void trackEntity(Entity var1, int var2, int var3) { + this.trackEntity(var1, var2, var3, false); + } + + public void trackEntity(Entity var1, int var2, int var3, boolean var4) { + if(var2 > this.maxTrackingDistanceThreshold) { + var2 = this.maxTrackingDistanceThreshold; + } + + if(this.trackedEntityHashTable.containsItem(var1.entityId)) { + throw new IllegalStateException("Entity is already tracked!"); + } else { + EntityTrackerEntry var5 = new EntityTrackerEntry(var1, var2, var3, var4); + this.trackedEntitySet.add(var5); + this.trackedEntityHashTable.addKey(var1.entityId, var5); + var5.updatePlayerEntities(this.mcServer.getWorldManager(this.field_28113_e).playerEntities); + } + } + + public void untrackEntity(Entity var1) { + if(var1 instanceof EntityPlayerMP) { + EntityPlayerMP var2 = (EntityPlayerMP)var1; + Iterator var3 = this.trackedEntitySet.iterator(); + + while(var3.hasNext()) { + EntityTrackerEntry var4 = (EntityTrackerEntry)var3.next(); + var4.removeFromTrackedPlayers(var2); + } + } + + EntityTrackerEntry var5 = (EntityTrackerEntry)this.trackedEntityHashTable.removeObject(var1.entityId); + if(var5 != null) { + this.trackedEntitySet.remove(var5); + var5.sendDestroyEntityPacketToTrackedPlayers(); + } + + } + + public void updateTrackedEntities() { + ArrayList var1 = new ArrayList(); + Iterator var2 = this.trackedEntitySet.iterator(); + + while(var2.hasNext()) { + EntityTrackerEntry var3 = (EntityTrackerEntry)var2.next(); + var3.updatePlayerList(this.mcServer.getWorldManager(this.field_28113_e).playerEntities); + if(var3.playerEntitiesUpdated && var3.trackedEntity instanceof EntityPlayerMP) { + var1.add((EntityPlayerMP)var3.trackedEntity); + } + } + + for(int var6 = 0; var6 < var1.size(); ++var6) { + EntityPlayerMP var7 = (EntityPlayerMP)var1.get(var6); + Iterator var4 = this.trackedEntitySet.iterator(); + + while(var4.hasNext()) { + EntityTrackerEntry var5 = (EntityTrackerEntry)var4.next(); + if(var5.trackedEntity != var7) { + var5.updatePlayerEntity(var7); + } + } + } + + } + + public void sendPacketToTrackedPlayers(Entity var1, Packet var2) { + EntityTrackerEntry var3 = (EntityTrackerEntry)this.trackedEntityHashTable.lookup(var1.entityId); + if(var3 != null) { + var3.sendPacketToTrackedPlayers(var2); + } + + } + + public void sendPacketToTrackedPlayersAndTrackedEntity(Entity var1, Packet var2) { + EntityTrackerEntry var3 = (EntityTrackerEntry)this.trackedEntityHashTable.lookup(var1.entityId); + if(var3 != null) { + var3.sendPacketToTrackedPlayersAndTrackedEntity(var2); + } + + } + + public void removeTrackedPlayerSymmetric(EntityPlayerMP var1) { + Iterator var2 = this.trackedEntitySet.iterator(); + + while(var2.hasNext()) { + EntityTrackerEntry var3 = (EntityTrackerEntry)var2.next(); + var3.removeTrackedPlayerSymmetric(var1); + } + + } +} diff --git a/src/net/minecraft/src/EntityTrackerEntry.java b/src/net/minecraft/src/EntityTrackerEntry.java new file mode 100644 index 0000000..a6e1aaa --- /dev/null +++ b/src/net/minecraft/src/EntityTrackerEntry.java @@ -0,0 +1,278 @@ +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 trackedEntity; + public int trackingDistanceThreshold; + public int field_9234_e; + public int encodedPosX; + public int encodedPosY; + public int encodedPosZ; + public int encodedRotationYaw; + public int encodedRotationPitch; + public double lastTrackedEntityMotionX; + public double lastTrackedEntityMotionY; + public double lastTrackedEntityMotionZ; + public int updateCounter = 0; + private double lastTrackedEntityPosX; + private double lastTrackedEntityPosY; + private double lastTrackedEntityPosZ; + private boolean firstUpdateDone = false; + private boolean shouldSendMotionUpdates; + private int field_28165_t = 0; + public boolean playerEntitiesUpdated = false; + public Set trackedPlayers = new HashSet(); + + public EntityTrackerEntry(Entity var1, int var2, int var3, boolean var4) { + this.trackedEntity = var1; + this.trackingDistanceThreshold = var2; + this.field_9234_e = var3; + this.shouldSendMotionUpdates = var4; + this.encodedPosX = MathHelper.floor_double(var1.posX * 32.0D); + this.encodedPosY = MathHelper.floor_double(var1.posY * 32.0D); + this.encodedPosZ = MathHelper.floor_double(var1.posZ * 32.0D); + this.encodedRotationYaw = MathHelper.floor_float(var1.rotationYaw * 256.0F / 360.0F); + this.encodedRotationPitch = MathHelper.floor_float(var1.rotationPitch * 256.0F / 360.0F); + } + + public boolean equals(Object var1) { + return var1 instanceof EntityTrackerEntry ? ((EntityTrackerEntry)var1).trackedEntity.entityId == this.trackedEntity.entityId : false; + } + + public int hashCode() { + return this.trackedEntity.entityId; + } + + public void updatePlayerList(List var1) { + this.playerEntitiesUpdated = false; + if(!this.firstUpdateDone || this.trackedEntity.getDistanceSq(this.lastTrackedEntityPosX, this.lastTrackedEntityPosY, this.lastTrackedEntityPosZ) > 16.0D) { + this.lastTrackedEntityPosX = this.trackedEntity.posX; + this.lastTrackedEntityPosY = this.trackedEntity.posY; + this.lastTrackedEntityPosZ = this.trackedEntity.posZ; + this.firstUpdateDone = true; + this.playerEntitiesUpdated = true; + this.updatePlayerEntities(var1); + } + + ++this.field_28165_t; + if(++this.updateCounter % this.field_9234_e == 0) { + int var2 = MathHelper.floor_double(this.trackedEntity.posX * 32.0D); + int var3 = MathHelper.floor_double(this.trackedEntity.posY * 32.0D); + int var4 = MathHelper.floor_double(this.trackedEntity.posZ * 32.0D); + int var5 = MathHelper.floor_float(this.trackedEntity.rotationYaw * 256.0F / 360.0F); + int var6 = MathHelper.floor_float(this.trackedEntity.rotationPitch * 256.0F / 360.0F); + int var7 = var2 - this.encodedPosX; + int var8 = var3 - this.encodedPosY; + int var9 = var4 - this.encodedPosZ; + Object var10 = null; + boolean var11 = Math.abs(var2) >= 8 || Math.abs(var3) >= 8 || Math.abs(var4) >= 8; + boolean var12 = Math.abs(var5 - this.encodedRotationYaw) >= 8 || Math.abs(var6 - this.encodedRotationPitch) >= 8; + if(var7 >= -128 && var7 < 128 && var8 >= -128 && var8 < 128 && var9 >= -128 && var9 < 128 && this.field_28165_t <= 400) { + if(var11 && var12) { + var10 = new Packet33RelEntityMoveLook(this.trackedEntity.entityId, (byte)var7, (byte)var8, (byte)var9, (byte)var5, (byte)var6); + } else if(var11) { + var10 = new Packet31RelEntityMove(this.trackedEntity.entityId, (byte)var7, (byte)var8, (byte)var9); + } else if(var12) { + var10 = new Packet32EntityLook(this.trackedEntity.entityId, (byte)var5, (byte)var6); + } + } else { + this.field_28165_t = 0; + this.trackedEntity.posX = (double)var2 / 32.0D; + this.trackedEntity.posY = (double)var3 / 32.0D; + this.trackedEntity.posZ = (double)var4 / 32.0D; + var10 = new Packet34EntityTeleport(this.trackedEntity.entityId, var2, var3, var4, (byte)var5, (byte)var6); + } + + if(this.shouldSendMotionUpdates) { + double var13 = this.trackedEntity.motionX - this.lastTrackedEntityMotionX; + double var15 = this.trackedEntity.motionY - this.lastTrackedEntityMotionY; + double var17 = this.trackedEntity.motionZ - this.lastTrackedEntityMotionZ; + double var19 = 0.02D; + double var21 = var13 * var13 + var15 * var15 + var17 * var17; + if(var21 > var19 * var19 || var21 > 0.0D && this.trackedEntity.motionX == 0.0D && this.trackedEntity.motionY == 0.0D && this.trackedEntity.motionZ == 0.0D) { + this.lastTrackedEntityMotionX = this.trackedEntity.motionX; + this.lastTrackedEntityMotionY = this.trackedEntity.motionY; + this.lastTrackedEntityMotionZ = this.trackedEntity.motionZ; + this.sendPacketToTrackedPlayers(new Packet28EntityVelocity(this.trackedEntity.entityId, this.lastTrackedEntityMotionX, this.lastTrackedEntityMotionY, this.lastTrackedEntityMotionZ)); + } + } + + if(var10 != null) { + this.sendPacketToTrackedPlayers((Packet)var10); + } + + DataWatcher var23 = this.trackedEntity.getDataWatcher(); + if(var23.hasObjectChanged()) { + this.sendPacketToTrackedPlayersAndTrackedEntity(new Packet40EntityMetadata(this.trackedEntity.entityId, var23)); + } + + if(var11) { + this.encodedPosX = var2; + this.encodedPosY = var3; + this.encodedPosZ = var4; + } + + if(var12) { + this.encodedRotationYaw = var5; + this.encodedRotationPitch = var6; + } + } + + if(this.trackedEntity.beenAttacked) { + this.sendPacketToTrackedPlayersAndTrackedEntity(new Packet28EntityVelocity(this.trackedEntity)); + this.trackedEntity.beenAttacked = false; + } + + } + + public void sendPacketToTrackedPlayers(Packet var1) { + Iterator var2 = this.trackedPlayers.iterator(); + + while(var2.hasNext()) { + EntityPlayerMP var3 = (EntityPlayerMP)var2.next(); + var3.playerNetServerHandler.sendPacket(var1); + } + + } + + public void sendPacketToTrackedPlayersAndTrackedEntity(Packet var1) { + this.sendPacketToTrackedPlayers(var1); + if(this.trackedEntity instanceof EntityPlayerMP) { + ((EntityPlayerMP)this.trackedEntity).playerNetServerHandler.sendPacket(var1); + } + + } + + public void sendDestroyEntityPacketToTrackedPlayers() { + this.sendPacketToTrackedPlayers(new Packet29DestroyEntity(this.trackedEntity.entityId)); + } + + public void removeFromTrackedPlayers(EntityPlayerMP var1) { + if(this.trackedPlayers.contains(var1)) { + this.trackedPlayers.remove(var1); + } + + } + + public void updatePlayerEntity(EntityPlayerMP var1) { + if(var1 != this.trackedEntity) { + double var2 = var1.posX - (double)(this.encodedPosX / 32); + double var4 = var1.posZ - (double)(this.encodedPosZ / 32); + if(var2 >= (double)(-this.trackingDistanceThreshold) && var2 <= (double)this.trackingDistanceThreshold && var4 >= (double)(-this.trackingDistanceThreshold) && var4 <= (double)this.trackingDistanceThreshold) { + if(!this.trackedPlayers.contains(var1)) { + this.trackedPlayers.add(var1); + var1.playerNetServerHandler.sendPacket(this.getSpawnPacket()); + if(this.shouldSendMotionUpdates) { + var1.playerNetServerHandler.sendPacket(new Packet28EntityVelocity(this.trackedEntity.entityId, this.trackedEntity.motionX, this.trackedEntity.motionY, this.trackedEntity.motionZ)); + } + + ItemStack[] var6 = this.trackedEntity.getInventory(); + if(var6 != null) { + for(int var7 = 0; var7 < var6.length; ++var7) { + var1.playerNetServerHandler.sendPacket(new Packet5PlayerInventory(this.trackedEntity.entityId, var7, var6[var7])); + } + } + + if(this.trackedEntity instanceof EntityPlayer) { + EntityPlayer var8 = (EntityPlayer)this.trackedEntity; + if(var8.func_22057_E()) { + var1.playerNetServerHandler.sendPacket(new Packet17Sleep(this.trackedEntity, 0, MathHelper.floor_double(this.trackedEntity.posX), MathHelper.floor_double(this.trackedEntity.posY), MathHelper.floor_double(this.trackedEntity.posZ))); + } + } + } + } else if(this.trackedPlayers.contains(var1)) { + this.trackedPlayers.remove(var1); + var1.playerNetServerHandler.sendPacket(new Packet29DestroyEntity(this.trackedEntity.entityId)); + } + + } + } + + public void updatePlayerEntities(List var1) { + for(int var2 = 0; var2 < var1.size(); ++var2) { + this.updatePlayerEntity((EntityPlayerMP)var1.get(var2)); + } + + } + + private Packet getSpawnPacket() { + if(this.trackedEntity instanceof EntityItem) { + EntityItem var6 = (EntityItem)this.trackedEntity; + Packet21PickupSpawn var7 = new Packet21PickupSpawn(var6); + var6.posX = (double)var7.xPosition / 32.0D; + var6.posY = (double)var7.yPosition / 32.0D; + var6.posZ = (double)var7.zPosition / 32.0D; + return var7; + } else if(this.trackedEntity instanceof EntityPlayerMP) { + return new Packet20NamedEntitySpawn((EntityPlayer)this.trackedEntity); + } else { + if(this.trackedEntity instanceof EntityMinecart) { + EntityMinecart var1 = (EntityMinecart)this.trackedEntity; + if(var1.minecartType == 0) { + return new Packet23VehicleSpawn(this.trackedEntity, 10); + } + + if(var1.minecartType == 1) { + return new Packet23VehicleSpawn(this.trackedEntity, 11); + } + + if(var1.minecartType == 2) { + return new Packet23VehicleSpawn(this.trackedEntity, 12); + } + } + + if(this.trackedEntity instanceof EntityBoat) { + return new Packet23VehicleSpawn(this.trackedEntity, 1); + } else if(this.trackedEntity instanceof IAnimals) { + return new Packet24MobSpawn((EntityLiving)this.trackedEntity); + } else if(this.trackedEntity instanceof EntityFish) { + return new Packet23VehicleSpawn(this.trackedEntity, 90); + } else if(this.trackedEntity instanceof EntityArrow) { + EntityLiving var5 = ((EntityArrow)this.trackedEntity).owner; + return new Packet23VehicleSpawn(this.trackedEntity, 60, var5 != null ? var5.entityId : this.trackedEntity.entityId); + } else if(this.trackedEntity instanceof EntitySnowball) { + return new Packet23VehicleSpawn(this.trackedEntity, 61); + } else if(this.trackedEntity instanceof EntityFireball) { + EntityFireball var4 = (EntityFireball)this.trackedEntity; + Packet23VehicleSpawn var2 = new Packet23VehicleSpawn(this.trackedEntity, 63, ((EntityFireball)this.trackedEntity).owner.entityId); + var2.field_28044_e = (int)(var4.field_9199_b * 8000.0D); + var2.field_28043_f = (int)(var4.field_9198_c * 8000.0D); + var2.field_28042_g = (int)(var4.field_9196_d * 8000.0D); + return var2; + } else if(this.trackedEntity instanceof EntityEgg) { + return new Packet23VehicleSpawn(this.trackedEntity, 62); + } else if(this.trackedEntity instanceof EntityTNTPrimed) { + return new Packet23VehicleSpawn(this.trackedEntity, 50); + } else { + if(this.trackedEntity instanceof EntityFallingSand) { + EntityFallingSand var3 = (EntityFallingSand)this.trackedEntity; + if(var3.blockID == Block.sand.blockID) { + return new Packet23VehicleSpawn(this.trackedEntity, 70); + } + + if(var3.blockID == Block.gravel.blockID) { + return new Packet23VehicleSpawn(this.trackedEntity, 71); + } + } + + if(this.trackedEntity instanceof EntityPainting) { + return new Packet25EntityPainting((EntityPainting)this.trackedEntity); + } else { + throw new IllegalArgumentException("Don\'t know how to add " + this.trackedEntity.getClass() + "!"); + } + } + } + } + + public void removeTrackedPlayerSymmetric(EntityPlayerMP var1) { + if(this.trackedPlayers.contains(var1)) { + this.trackedPlayers.remove(var1); + var1.playerNetServerHandler.sendPacket(new Packet29DestroyEntity(this.trackedEntity.entityId)); + } + + } +} diff --git a/src/net/minecraft/src/EntityWaterMob.java b/src/net/minecraft/src/EntityWaterMob.java new file mode 100644 index 0000000..29fac4b --- /dev/null +++ b/src/net/minecraft/src/EntityWaterMob.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class EntityWaterMob extends EntityCreature implements IAnimals { + public EntityWaterMob(World var1) { + super(var1); + } + + public boolean canBreatheUnderwater() { + return true; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + public boolean getCanSpawnHere() { + return this.worldObj.checkIfAABBIsClear(this.boundingBox); + } + + public int getTalkInterval() { + return 120; + } +} diff --git a/src/net/minecraft/src/EntityWeatherEffect.java b/src/net/minecraft/src/EntityWeatherEffect.java new file mode 100644 index 0000000..cef0f6b --- /dev/null +++ b/src/net/minecraft/src/EntityWeatherEffect.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public abstract class EntityWeatherEffect extends Entity { + public EntityWeatherEffect(World var1) { + super(var1); + } +} diff --git a/src/net/minecraft/src/EntityWolf.java b/src/net/minecraft/src/EntityWolf.java new file mode 100644 index 0000000..da5fe76 --- /dev/null +++ b/src/net/minecraft/src/EntityWolf.java @@ -0,0 +1,411 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class EntityWolf extends EntityAnimal { + private boolean field_25039_a = false; + private float field_25038_b; + private float field_25044_c; + private boolean isWet; + private boolean field_25042_g; + private float field_25041_h; + private float field_25040_i; + + public EntityWolf(World var1) { + super(var1); + this.texture = "/mob/wolf.png"; + this.setSize(0.8F, 0.8F); + this.moveSpeed = 1.1F; + this.health = 8; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); + this.dataWatcher.addObject(17, ""); + this.dataWatcher.addObject(18, new Integer(this.health)); + } + + protected boolean func_25017_l() { + return false; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("Angry", this.getIsAngry()); + var1.setBoolean("Sitting", this.getIsSitting()); + if(this.getOwner() == null) { + var1.setString("Owner", ""); + } else { + var1.setString("Owner", this.getOwner()); + } + + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setIsAngry(var1.getBoolean("Angry")); + this.setIsSitting(var1.getBoolean("Sitting")); + String var2 = var1.getString("Owner"); + if(var2.length() > 0) { + this.setOwner(var2); + this.setIsTamed(true); + } + + } + + protected boolean func_25020_s() { + return !this.func_25030_y(); + } + + protected String getLivingSound() { + return this.getIsAngry() ? "mob.wolf.growl" : (this.rand.nextInt(3) == 0 ? (this.func_25030_y() && this.dataWatcher.getWatchableObjectInteger(18) < 10 ? "mob.wolf.whine" : "mob.wolf.panting") : "mob.wolf.bark"); + } + + protected String getHurtSound() { + return "mob.wolf.hurt"; + } + + protected String getDeathSound() { + return "mob.wolf.death"; + } + + protected float getSoundVolume() { + return 0.4F; + } + + protected int getDropItemId() { + return -1; + } + + protected void updatePlayerActionState() { + super.updatePlayerActionState(); + if(!this.hasAttacked && !this.getGotPath() && this.func_25030_y() && this.ridingEntity == null) { + EntityPlayer var3 = this.worldObj.getPlayerEntityByName(this.getOwner()); + if(var3 != null) { + float var2 = var3.getDistanceToEntity(this); + if(var2 > 5.0F) { + this.setPathEntity(var3, var2); + } + } else if(!this.isInWater()) { + this.setIsSitting(true); + } + } else if(this.playerToAttack == null && !this.getGotPath() && !this.func_25030_y() && this.worldObj.rand.nextInt(100) == 0) { + List var1 = this.worldObj.getEntitiesWithinAABB(EntitySheep.class, AxisAlignedBB.getBoundingBoxFromPool(this.posX, this.posY, this.posZ, this.posX + 1.0D, this.posY + 1.0D, this.posZ + 1.0D).expand(16.0D, 4.0D, 16.0D)); + if(!var1.isEmpty()) { + this.setEntityToAttack((Entity)var1.get(this.worldObj.rand.nextInt(var1.size()))); + } + } + + if(this.isInWater()) { + this.setIsSitting(false); + } + + if(!this.worldObj.singleplayerWorld) { + this.dataWatcher.updateObject(18, Integer.valueOf(this.health)); + } + + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + this.field_25039_a = false; + if(this.func_25021_O() && !this.getGotPath() && !this.getIsAngry()) { + Entity var1 = this.getCurrentTarget(); + if(var1 instanceof EntityPlayer) { + EntityPlayer var2 = (EntityPlayer)var1; + ItemStack var3 = var2.inventory.getCurrentItem(); + if(var3 != null) { + if(!this.func_25030_y() && var3.itemID == Item.bone.shiftedIndex) { + this.field_25039_a = true; + } else if(this.func_25030_y() && Item.itemsList[var3.itemID] instanceof ItemFood) { + this.field_25039_a = ((ItemFood)Item.itemsList[var3.itemID]).func_25010_k(); + } + } + } + } + + if(!this.isMultiplayerEntity && this.isWet && !this.field_25042_g && !this.getGotPath() && this.onGround) { + this.field_25042_g = true; + this.field_25041_h = 0.0F; + this.field_25040_i = 0.0F; + this.worldObj.sendTrackedEntityStatusUpdatePacket(this, (byte)8); + } + + } + + public void onUpdate() { + super.onUpdate(); + this.field_25044_c = this.field_25038_b; + if(this.field_25039_a) { + this.field_25038_b += (1.0F - this.field_25038_b) * 0.4F; + } else { + this.field_25038_b += (0.0F - this.field_25038_b) * 0.4F; + } + + if(this.field_25039_a) { + this.numTicksToChaseTarget = 10; + } + + if(this.func_27008_Y()) { + this.isWet = true; + this.field_25042_g = false; + this.field_25041_h = 0.0F; + this.field_25040_i = 0.0F; + } else if((this.isWet || this.field_25042_g) && this.field_25042_g) { + if(this.field_25041_h == 0.0F) { + this.worldObj.playSoundAtEntity(this, "mob.wolf.shake", this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + this.field_25040_i = this.field_25041_h; + this.field_25041_h += 0.05F; + if(this.field_25040_i >= 2.0F) { + this.isWet = false; + this.field_25042_g = false; + this.field_25040_i = 0.0F; + this.field_25041_h = 0.0F; + } + + if(this.field_25041_h > 0.4F) { + float var1 = (float)this.boundingBox.minY; + int var2 = (int)(MathHelper.sin((this.field_25041_h - 0.4F) * (float)Math.PI) * 7.0F); + + for(int var3 = 0; var3 < var2; ++var3) { + float var4 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F; + float var5 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F; + this.worldObj.spawnParticle("splash", this.posX + (double)var4, (double)(var1 + 0.8F), this.posZ + (double)var5, this.motionX, this.motionY, this.motionZ); + } + } + } + + } + + public float getEyeHeight() { + return this.height * 0.8F; + } + + protected int func_25018_n_() { + return this.getIsSitting() ? 20 : super.func_25018_n_(); + } + + private void setPathEntity(Entity var1, float var2) { + PathEntity var3 = this.worldObj.getPathToEntity(this, var1, 16.0F); + if(var3 == null && var2 > 12.0F) { + int var4 = MathHelper.floor_double(var1.posX) - 2; + int var5 = MathHelper.floor_double(var1.posZ) - 2; + int var6 = MathHelper.floor_double(var1.boundingBox.minY); + + for(int var7 = 0; var7 <= 4; ++var7) { + for(int var8 = 0; var8 <= 4; ++var8) { + if((var7 < 1 || var8 < 1 || var7 > 3 || var8 > 3) && this.worldObj.isBlockNormalCube(var4 + var7, var6 - 1, var5 + var8) && !this.worldObj.isBlockNormalCube(var4 + var7, var6, var5 + var8) && !this.worldObj.isBlockNormalCube(var4 + var7, var6 + 1, var5 + var8)) { + this.setLocationAndAngles((double)((float)(var4 + var7) + 0.5F), (double)var6, (double)((float)(var5 + var8) + 0.5F), this.rotationYaw, this.rotationPitch); + return; + } + } + } + } else { + this.setPathToEntity(var3); + } + + } + + protected boolean func_25026_u() { + return this.getIsSitting() || this.field_25042_g; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.setIsSitting(false); + if(var1 != null && !(var1 instanceof EntityPlayer) && !(var1 instanceof EntityArrow)) { + var2 = (var2 + 1) / 2; + } + + if(!super.attackEntityFrom((Entity)var1, var2)) { + return false; + } else { + if(!this.func_25030_y() && !this.getIsAngry()) { + if(var1 instanceof EntityPlayer) { + this.setIsAngry(true); + this.playerToAttack = (Entity)var1; + } + + if(var1 instanceof EntityArrow && ((EntityArrow)var1).owner != null) { + var1 = ((EntityArrow)var1).owner; + } + + if(var1 instanceof EntityLiving) { + List var3 = this.worldObj.getEntitiesWithinAABB(EntityWolf.class, AxisAlignedBB.getBoundingBoxFromPool(this.posX, this.posY, this.posZ, this.posX + 1.0D, this.posY + 1.0D, this.posZ + 1.0D).expand(16.0D, 4.0D, 16.0D)); + Iterator var4 = var3.iterator(); + + while(var4.hasNext()) { + Entity var5 = (Entity)var4.next(); + EntityWolf var6 = (EntityWolf)var5; + if(!var6.func_25030_y() && var6.playerToAttack == null) { + var6.playerToAttack = (Entity)var1; + if(var1 instanceof EntityPlayer) { + var6.setIsAngry(true); + } + } + } + } + } else if(var1 != this && var1 != null) { + if(this.func_25030_y() && var1 instanceof EntityPlayer && ((EntityPlayer)var1).username.equalsIgnoreCase(this.getOwner())) { + return true; + } + + this.playerToAttack = (Entity)var1; + } + + return true; + } + } + + protected Entity findPlayerToAttack() { + return this.getIsAngry() ? this.worldObj.getClosestPlayerToEntity(this, 16.0D) : null; + } + + protected void attackEntity(Entity var1, float var2) { + if(var2 > 2.0F && var2 < 6.0F && this.rand.nextInt(10) == 0) { + if(this.onGround) { + double var8 = var1.posX - this.posX; + double var5 = var1.posZ - this.posZ; + float var7 = MathHelper.sqrt_double(var8 * var8 + var5 * var5); + this.motionX = var8 / (double)var7 * 0.5D * (double)0.8F + this.motionX * (double)0.2F; + this.motionZ = var5 / (double)var7 * 0.5D * (double)0.8F + this.motionZ * (double)0.2F; + this.motionY = (double)0.4F; + } + } else if((double)var2 < 1.5D && var1.boundingBox.maxY > this.boundingBox.minY && var1.boundingBox.minY < this.boundingBox.maxY) { + this.attackTime = 20; + byte var3 = 2; + if(this.func_25030_y()) { + var3 = 4; + } + + var1.attackEntityFrom(this, var3); + } + + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(!this.func_25030_y()) { + if(var2 != null && var2.itemID == Item.bone.shiftedIndex && !this.getIsAngry()) { + --var2.stackSize; + if(var2.stackSize <= 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + + if(!this.worldObj.singleplayerWorld) { + if(this.rand.nextInt(3) == 0) { + this.setIsTamed(true); + this.setPathToEntity((PathEntity)null); + this.setIsSitting(true); + this.health = 20; + this.setOwner(var1.username); + this.isNowTamed(true); + this.worldObj.sendTrackedEntityStatusUpdatePacket(this, (byte)7); + } else { + this.isNowTamed(false); + this.worldObj.sendTrackedEntityStatusUpdatePacket(this, (byte)6); + } + } + + return true; + } + } else { + if(var2 != null && Item.itemsList[var2.itemID] instanceof ItemFood) { + ItemFood var3 = (ItemFood)Item.itemsList[var2.itemID]; + if(var3.func_25010_k() && this.dataWatcher.getWatchableObjectInteger(18) < 20) { + --var2.stackSize; + if(var2.stackSize <= 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + + this.heal(((ItemFood)Item.porkRaw).getHealAmount()); + return true; + } + } + + if(var1.username.equalsIgnoreCase(this.getOwner())) { + if(!this.worldObj.singleplayerWorld) { + this.setIsSitting(!this.getIsSitting()); + this.isJumping = false; + this.setPathToEntity((PathEntity)null); + } + + return true; + } + } + + return false; + } + + void isNowTamed(boolean var1) { + String var2 = "heart"; + if(!var1) { + var2 = "smoke"; + } + + for(int var3 = 0; var3 < 7; ++var3) { + double var4 = this.rand.nextGaussian() * 0.02D; + double var6 = this.rand.nextGaussian() * 0.02D; + double var8 = this.rand.nextGaussian() * 0.02D; + this.worldObj.spawnParticle(var2, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, var4, var6, var8); + } + + } + + public int getMaxSpawnedInChunk() { + return 8; + } + + public String getOwner() { + return this.dataWatcher.getWatchableObjectString(17); + } + + public void setOwner(String var1) { + this.dataWatcher.updateObject(17, var1); + } + + public boolean getIsSitting() { + return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0; + } + + public void setIsSitting(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 1))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -2))); + } + + } + + public boolean getIsAngry() { + return (this.dataWatcher.getWatchableObjectByte(16) & 2) != 0; + } + + public void setIsAngry(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 2))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -3))); + } + + } + + public boolean func_25030_y() { + return (this.dataWatcher.getWatchableObjectByte(16) & 4) != 0; + } + + public void setIsTamed(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 4))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -5))); + } + + } +} diff --git a/src/net/minecraft/src/EntityZombie.java b/src/net/minecraft/src/EntityZombie.java new file mode 100644 index 0000000..4282d65 --- /dev/null +++ b/src/net/minecraft/src/EntityZombie.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class EntityZombie extends EntityMob { + public EntityZombie(World var1) { + super(var1); + this.texture = "/mob/zombie.png"; + this.moveSpeed = 0.5F; + this.attackStrength = 5; + } + + public void onLivingUpdate() { + if(this.worldObj.isDaytime()) { + float var1 = this.getEntityBrightness(1.0F); + if(var1 > 0.5F && this.worldObj.canBlockSeeTheSky(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) && this.rand.nextFloat() * 30.0F < (var1 - 0.4F) * 2.0F) { + this.fire = 300; + } + } + + super.onLivingUpdate(); + } + + protected String getLivingSound() { + return "mob.zombie"; + } + + protected String getHurtSound() { + return "mob.zombiehurt"; + } + + protected String getDeathSound() { + return "mob.zombiedeath"; + } + + protected int getDropItemId() { + return Item.feather.shiftedIndex; + } +} diff --git a/src/net/minecraft/src/EnumArt.java b/src/net/minecraft/src/EnumArt.java new file mode 100644 index 0000000..8d8a4dd --- /dev/null +++ b/src/net/minecraft/src/EnumArt.java @@ -0,0 +1,44 @@ +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), + BurningSkull("BurningSkull", 64, 64, 128, 192), + Skeleton("Skeleton", 64, 48, 192, 64), + DonkeyKong("DonkeyKong", 64, 48, 192, 112); + + public static final int field_27096_z = "SkullAndRoses".length(); + public final String title; + public final int sizeX; + public final int sizeY; + public final int offsetX; + public final int offsetY; + + private EnumArt(String var3, int var4, int var5, int var6, int var7) { + this.title = var3; + this.sizeX = var4; + this.sizeY = var5; + this.offsetX = var6; + this.offsetY = var7; + } +} diff --git a/src/net/minecraft/src/EnumCreatureType.java b/src/net/minecraft/src/EnumCreatureType.java new file mode 100644 index 0000000..431a93c --- /dev/null +++ b/src/net/minecraft/src/EnumCreatureType.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public enum EnumCreatureType { + monster(IMob.class, 70, Material.air, false), + creature(EntityAnimal.class, 15, Material.air, true), + waterCreature(EntityWaterMob.class, 5, Material.water, true); + + private final Class creatureClass; + private final int maxNumberOfCreature; + private final Material creatureMaterial; + private final boolean field_21106_g; + + private EnumCreatureType(Class var3, int var4, Material var5, boolean var6) { + this.creatureClass = var3; + this.maxNumberOfCreature = var4; + this.creatureMaterial = var5; + this.field_21106_g = var6; + } + + public Class getCreatureClass() { + return this.creatureClass; + } + + public int getMaxNumberOfCreature() { + return this.maxNumberOfCreature; + } + + public Material getCreatureMaterial() { + return this.creatureMaterial; + } + + public boolean func_21103_d() { + return this.field_21106_g; + } +} diff --git a/src/net/minecraft/src/EnumMobType.java b/src/net/minecraft/src/EnumMobType.java new file mode 100644 index 0000000..a4a69b6 --- /dev/null +++ b/src/net/minecraft/src/EnumMobType.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public enum EnumMobType { + everything, + mobs, + players; +} diff --git a/src/net/minecraft/src/EnumMovingObjectType.java b/src/net/minecraft/src/EnumMovingObjectType.java new file mode 100644 index 0000000..ace74a2 --- /dev/null +++ b/src/net/minecraft/src/EnumMovingObjectType.java @@ -0,0 +1,6 @@ +package net.minecraft.src; + +public enum EnumMovingObjectType { + TILE, + ENTITY; +} diff --git a/src/net/minecraft/src/EnumSkyBlock.java b/src/net/minecraft/src/EnumSkyBlock.java new file mode 100644 index 0000000..dd07a83 --- /dev/null +++ b/src/net/minecraft/src/EnumSkyBlock.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public enum EnumSkyBlock { + Sky(15), + Block(0); + + public final int field_984_c; + + private EnumSkyBlock(int var3) { + this.field_984_c = var3; + } +} diff --git a/src/net/minecraft/src/EnumStatus.java b/src/net/minecraft/src/EnumStatus.java new file mode 100644 index 0000000..5776724 --- /dev/null +++ b/src/net/minecraft/src/EnumStatus.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public enum EnumStatus { + OK, + NOT_POSSIBLE_HERE, + NOT_POSSIBLE_NOW, + TOO_FAR_AWAY, + OTHER_PROBLEM; +} diff --git a/src/net/minecraft/src/EnumToolMaterial.java b/src/net/minecraft/src/EnumToolMaterial.java new file mode 100644 index 0000000..3d9e277 --- /dev/null +++ b/src/net/minecraft/src/EnumToolMaterial.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public enum EnumToolMaterial { + WOOD(0, 59, 2.0F, 0), + STONE(1, 131, 4.0F, 1), + IRON(2, 250, 6.0F, 2), + EMERALD(3, 1561, 8.0F, 3), + GOLD(0, 32, 12.0F, 0); + + private final int harvestLevel; + private final int maxUses; + private final float efficiencyOnProperMaterial; + private final int damageVsEntity; + + private EnumToolMaterial(int var3, int var4, float var5, int var6) { + this.harvestLevel = var3; + this.maxUses = var4; + this.efficiencyOnProperMaterial = var5; + this.damageVsEntity = var6; + } + + public int getMaxUses() { + return this.maxUses; + } + + public float getEfficiencyOnProperMaterial() { + return this.efficiencyOnProperMaterial; + } + + public int getDamageVsEntity() { + return this.damageVsEntity; + } + + public int getHarvestLevel() { + return this.harvestLevel; + } +} diff --git a/src/net/minecraft/src/Explosion.java b/src/net/minecraft/src/Explosion.java new file mode 100644 index 0000000..43bab8a --- /dev/null +++ b/src/net/minecraft/src/Explosion.java @@ -0,0 +1,165 @@ +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 isFlaming = false; + private Random ExplosionRNG = new Random(); + private World worldObj; + public double explosionX; + public double explosionY; + public double explosionZ; + public Entity exploder; + public float explosionSize; + public Set destroyedBlockPositions = new HashSet(); + + public Explosion(World var1, Entity var2, double var3, double var5, double var7, float var9) { + this.worldObj = var1; + this.exploder = var2; + this.explosionSize = var9; + this.explosionX = var3; + this.explosionY = var5; + this.explosionZ = var7; + } + + public void doExplosion() { + float var1 = this.explosionSize; + 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.explosionSize * (0.7F + this.worldObj.rand.nextFloat() * 0.6F); + var15 = this.explosionX; + var17 = this.explosionY; + var19 = this.explosionZ; + + for(float var21 = 0.3F; var14 > 0.0F; var14 -= var21 * (12.0F / 16.0F)) { + int var22 = MathHelper.floor_double(var15); + int var23 = MathHelper.floor_double(var17); + int var24 = MathHelper.floor_double(var19); + int var25 = this.worldObj.getBlockId(var22, var23, var24); + if(var25 > 0) { + var14 -= (Block.blocksList[var25].getExplosionResistance(this.exploder) + 0.3F) * var21; + } + + if(var14 > 0.0F) { + this.destroyedBlockPositions.add(new ChunkPosition(var22, var23, var24)); + } + + var15 += var6 * (double)var21; + var17 += var8 * (double)var21; + var19 += var10 * (double)var21; + } + } + } + } + } + + this.explosionSize *= 2.0F; + var3 = MathHelper.floor_double(this.explosionX - (double)this.explosionSize - 1.0D); + var4 = MathHelper.floor_double(this.explosionX + (double)this.explosionSize + 1.0D); + var5 = MathHelper.floor_double(this.explosionY - (double)this.explosionSize - 1.0D); + int var29 = MathHelper.floor_double(this.explosionY + (double)this.explosionSize + 1.0D); + int var7 = MathHelper.floor_double(this.explosionZ - (double)this.explosionSize - 1.0D); + int var30 = MathHelper.floor_double(this.explosionZ + (double)this.explosionSize + 1.0D); + List var9 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this.exploder, AxisAlignedBB.getBoundingBoxFromPool((double)var3, (double)var5, (double)var7, (double)var4, (double)var29, (double)var30)); + Vec3D var31 = Vec3D.createVector(this.explosionX, this.explosionY, this.explosionZ); + + for(int var11 = 0; var11 < var9.size(); ++var11) { + Entity var33 = (Entity)var9.get(var11); + double var13 = var33.getDistance(this.explosionX, this.explosionY, this.explosionZ) / (double)this.explosionSize; + if(var13 <= 1.0D) { + var15 = var33.posX - this.explosionX; + var17 = var33.posY - this.explosionY; + var19 = var33.posZ - this.explosionZ; + double var39 = (double)MathHelper.sqrt_double(var15 * var15 + var17 * var17 + var19 * var19); + var15 /= var39; + var17 /= var39; + var19 /= var39; + double var40 = (double)this.worldObj.func_494_a(var31, var33.boundingBox); + double var41 = (1.0D - var13) * var40; + var33.attackEntityFrom(this.exploder, (int)((var41 * var41 + var41) / 2.0D * 8.0D * (double)this.explosionSize + 1.0D)); + var33.motionX += var15 * var41; + var33.motionY += var17 * var41; + var33.motionZ += var19 * var41; + } + } + + this.explosionSize = var1; + ArrayList var32 = new ArrayList(); + var32.addAll(this.destroyedBlockPositions); + if(this.isFlaming) { + for(int var34 = var32.size() - 1; var34 >= 0; --var34) { + ChunkPosition var35 = (ChunkPosition)var32.get(var34); + int var36 = var35.x; + int var37 = var35.y; + int var16 = var35.z; + int var38 = this.worldObj.getBlockId(var36, var37, var16); + int var18 = this.worldObj.getBlockId(var36, var37 - 1, var16); + if(var38 == 0 && Block.opaqueCubeLookup[var18] && this.ExplosionRNG.nextInt(3) == 0) { + this.worldObj.setBlockWithNotify(var36, var37, var16, Block.fire.blockID); + } + } + } + + } + + public void doEffects(boolean var1) { + this.worldObj.playSoundEffect(this.explosionX, this.explosionY, this.explosionZ, "random.explode", 4.0F, (1.0F + (this.worldObj.rand.nextFloat() - this.worldObj.rand.nextFloat()) * 0.2F) * 0.7F); + ArrayList var2 = new ArrayList(); + var2.addAll(this.destroyedBlockPositions); + + for(int var3 = var2.size() - 1; var3 >= 0; --var3) { + ChunkPosition var4 = (ChunkPosition)var2.get(var3); + int var5 = var4.x; + int var6 = var4.y; + int var7 = var4.z; + int var8 = this.worldObj.getBlockId(var5, var6, var7); + if(var1) { + double var9 = (double)((float)var5 + this.worldObj.rand.nextFloat()); + double var11 = (double)((float)var6 + this.worldObj.rand.nextFloat()); + double var13 = (double)((float)var7 + this.worldObj.rand.nextFloat()); + double var15 = var9 - this.explosionX; + double var17 = var11 - this.explosionY; + double var19 = var13 - this.explosionZ; + 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.explosionSize + 0.1D); + var23 *= (double)(this.worldObj.rand.nextFloat() * this.worldObj.rand.nextFloat() + 0.3F); + var15 *= var23; + var17 *= var23; + var19 *= var23; + this.worldObj.spawnParticle("explode", (var9 + this.explosionX * 1.0D) / 2.0D, (var11 + this.explosionY * 1.0D) / 2.0D, (var13 + this.explosionZ * 1.0D) / 2.0D, var15, var17, var19); + this.worldObj.spawnParticle("smoke", var9, var11, var13, var15, var17, var19); + } + + if(var8 > 0) { + Block.blocksList[var8].dropBlockAsItemWithChance(this.worldObj, var5, var6, var7, this.worldObj.getBlockMetadata(var5, var6, var7), 0.3F); + this.worldObj.setBlockWithNotify(var5, var6, var7, 0); + Block.blocksList[var8].onBlockDestroyedByExplosion(this.worldObj, var5, var6, var7); + } + } + + } +} diff --git a/src/net/minecraft/src/FurnaceRecipes.java b/src/net/minecraft/src/FurnaceRecipes.java new file mode 100644 index 0000000..f658086 --- /dev/null +++ b/src/net/minecraft/src/FurnaceRecipes.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class FurnaceRecipes { + private static final FurnaceRecipes smeltingBase = new FurnaceRecipes(); + private Map smeltingList = new HashMap(); + + public static final FurnaceRecipes smelting() { + return smeltingBase; + } + + private FurnaceRecipes() { + this.addSmelting(Block.oreIron.blockID, new ItemStack(Item.ingotIron)); + this.addSmelting(Block.oreGold.blockID, new ItemStack(Item.ingotGold)); + this.addSmelting(Block.oreDiamond.blockID, new ItemStack(Item.diamond)); + this.addSmelting(Block.sand.blockID, new ItemStack(Block.glass)); + this.addSmelting(Item.porkRaw.shiftedIndex, new ItemStack(Item.porkCooked)); + this.addSmelting(Item.fishRaw.shiftedIndex, new ItemStack(Item.fishCooked)); + this.addSmelting(Block.cobblestone.blockID, new ItemStack(Block.stone)); + this.addSmelting(Item.clay.shiftedIndex, new ItemStack(Item.brick)); + this.addSmelting(Block.cactus.blockID, new ItemStack(Item.dyePowder, 1, 2)); + this.addSmelting(Block.wood.blockID, new ItemStack(Item.coal, 1, 1)); + } + + public void addSmelting(int var1, ItemStack var2) { + this.smeltingList.put(Integer.valueOf(var1), var2); + } + + public ItemStack getSmeltingResult(int var1) { + return (ItemStack)this.smeltingList.get(Integer.valueOf(var1)); + } + + public Map getSmeltingList() { + return this.smeltingList; + } +} diff --git a/src/net/minecraft/src/GuiLogFormatter.java b/src/net/minecraft/src/GuiLogFormatter.java new file mode 100644 index 0000000..3836c8f --- /dev/null +++ b/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/src/net/minecraft/src/GuiLogOutputHandler.java b/src/net/minecraft/src/GuiLogOutputHandler.java new file mode 100644 index 0000000..d701a07 --- /dev/null +++ b/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/src/net/minecraft/src/GuiStatsComponent.java b/src/net/minecraft/src/GuiStatsComponent.java new file mode 100644 index 0000000..279b291 --- /dev/null +++ b/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/src/net/minecraft/src/GuiStatsListener.java b/src/net/minecraft/src/GuiStatsListener.java new file mode 100644 index 0000000..2dbef7d --- /dev/null +++ b/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/src/net/minecraft/src/IAnimals.java b/src/net/minecraft/src/IAnimals.java new file mode 100644 index 0000000..61de5b0 --- /dev/null +++ b/src/net/minecraft/src/IAnimals.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public interface IAnimals { +} diff --git a/src/net/minecraft/src/IBlockAccess.java b/src/net/minecraft/src/IBlockAccess.java new file mode 100644 index 0000000..27a6ec0 --- /dev/null +++ b/src/net/minecraft/src/IBlockAccess.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public interface IBlockAccess { + int getBlockId(int var1, int var2, int var3); + + TileEntity getBlockTileEntity(int var1, int var2, int var3); + + int getBlockMetadata(int var1, int var2, int var3); + + Material getBlockMaterial(int var1, int var2, int var3); + + boolean isBlockNormalCube(int var1, int var2, int var3); +} diff --git a/src/net/minecraft/src/IChunkLoader.java b/src/net/minecraft/src/IChunkLoader.java new file mode 100644 index 0000000..7382b45 --- /dev/null +++ b/src/net/minecraft/src/IChunkLoader.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +import java.io.IOException; + +public interface IChunkLoader { + Chunk loadChunk(World var1, int var2, int var3) throws IOException; + + void saveChunk(World var1, Chunk var2) throws IOException; + + void saveExtraChunkData(World var1, Chunk var2) throws IOException; + + void func_661_a(); + + void saveExtraData(); +} diff --git a/src/net/minecraft/src/IChunkProvider.java b/src/net/minecraft/src/IChunkProvider.java new file mode 100644 index 0000000..8ce762f --- /dev/null +++ b/src/net/minecraft/src/IChunkProvider.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public interface IChunkProvider { + boolean chunkExists(int var1, int var2); + + Chunk provideChunk(int var1, int var2); + + Chunk loadChunk(int var1, int var2); + + void populate(IChunkProvider var1, int var2, int var3); + + boolean saveChunks(boolean var1, IProgressUpdate var2); + + boolean func_361_a(); + + boolean func_364_b(); +} diff --git a/src/net/minecraft/src/ICommandListener.java b/src/net/minecraft/src/ICommandListener.java new file mode 100644 index 0000000..9fedc62 --- /dev/null +++ b/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/src/net/minecraft/src/ICrafting.java b/src/net/minecraft/src/ICrafting.java new file mode 100644 index 0000000..f5ee394 --- /dev/null +++ b/src/net/minecraft/src/ICrafting.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +import java.util.List; + +public interface ICrafting { + void updateCraftingInventory(Container var1, List var2); + + void updateCraftingInventorySlot(Container var1, int var2, ItemStack var3); + + void updateCraftingInventoryInfo(Container var1, int var2, int var3); +} diff --git a/src/net/minecraft/src/IInventory.java b/src/net/minecraft/src/IInventory.java new file mode 100644 index 0000000..a276d79 --- /dev/null +++ b/src/net/minecraft/src/IInventory.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public interface IInventory { + int getSizeInventory(); + + ItemStack getStackInSlot(int var1); + + ItemStack decrStackSize(int var1, int var2); + + void setInventorySlotContents(int var1, ItemStack var2); + + String getInvName(); + + int getInventoryStackLimit(); + + void onInventoryChanged(); + + boolean canInteractWith(EntityPlayer var1); +} diff --git a/src/net/minecraft/src/IMob.java b/src/net/minecraft/src/IMob.java new file mode 100644 index 0000000..0767da6 --- /dev/null +++ b/src/net/minecraft/src/IMob.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public interface IMob extends IAnimals { +} diff --git a/src/net/minecraft/src/IPlayerFileData.java b/src/net/minecraft/src/IPlayerFileData.java new file mode 100644 index 0000000..db5f1cc --- /dev/null +++ b/src/net/minecraft/src/IPlayerFileData.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public interface IPlayerFileData { + void writePlayerData(EntityPlayer var1); + + void readPlayerData(EntityPlayer var1); +} diff --git a/src/net/minecraft/src/IProgressUpdate.java b/src/net/minecraft/src/IProgressUpdate.java new file mode 100644 index 0000000..e3f8213 --- /dev/null +++ b/src/net/minecraft/src/IProgressUpdate.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public interface IProgressUpdate { + void func_438_a(String var1); + + void displayLoadingString(String var1); + + void setLoadingProgress(int var1); +} diff --git a/src/net/minecraft/src/IRecipe.java b/src/net/minecraft/src/IRecipe.java new file mode 100644 index 0000000..6b7c7f8 --- /dev/null +++ b/src/net/minecraft/src/IRecipe.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public interface IRecipe { + boolean func_21134_a(InventoryCrafting var1); + + ItemStack func_21136_b(InventoryCrafting var1); + + int getRecipeSize(); + + ItemStack func_25077_b(); +} diff --git a/src/net/minecraft/src/ISaveFormat.java b/src/net/minecraft/src/ISaveFormat.java new file mode 100644 index 0000000..e119c48 --- /dev/null +++ b/src/net/minecraft/src/ISaveFormat.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public interface ISaveFormat { + boolean isOldSaveType(String var1); + + boolean converMapToMCRegion(String var1, IProgressUpdate var2); +} diff --git a/src/net/minecraft/src/ISaveHandler.java b/src/net/minecraft/src/ISaveHandler.java new file mode 100644 index 0000000..f6ab8f6 --- /dev/null +++ b/src/net/minecraft/src/ISaveHandler.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import java.io.File; +import java.util.List; + +public interface ISaveHandler { + WorldInfo func_22096_c(); + + void func_22091_b(); + + IChunkLoader func_22092_a(WorldProvider var1); + + void func_22095_a(WorldInfo var1, List var2); + + void func_22094_a(WorldInfo var1); + + IPlayerFileData func_22090_d(); + + void func_22093_e(); + + File func_28111_b(String var1); +} diff --git a/src/net/minecraft/src/IStatType.java b/src/net/minecraft/src/IStatType.java new file mode 100644 index 0000000..c2c292f --- /dev/null +++ b/src/net/minecraft/src/IStatType.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public interface IStatType { +} diff --git a/src/net/minecraft/src/IUpdatePlayerListBox.java b/src/net/minecraft/src/IUpdatePlayerListBox.java new file mode 100644 index 0000000..af1e278 --- /dev/null +++ b/src/net/minecraft/src/IUpdatePlayerListBox.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IUpdatePlayerListBox { + void update(); +} diff --git a/src/net/minecraft/src/IWorldAccess.java b/src/net/minecraft/src/IWorldAccess.java new file mode 100644 index 0000000..a0b59c9 --- /dev/null +++ b/src/net/minecraft/src/IWorldAccess.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public interface IWorldAccess { + void markBlockNeedsUpdate(int var1, int var2, int var3); + + void markBlockRangeNeedsUpdate(int var1, int var2, int var3, int var4, int var5, int var6); + + void playSound(String var1, double var2, double var4, double var6, float var8, float var9); + + void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12); + + void obtainEntitySkin(Entity var1); + + void releaseEntitySkin(Entity var1); + + void updateAllRenderers(); + + void playRecord(String var1, int var2, int var3, int var4); + + void doNothingWithTileEntity(int var1, int var2, int var3, TileEntity var4); + + void func_28133_a(EntityPlayer var1, int var2, int var3, int var4, int var5, int var6); +} diff --git a/src/net/minecraft/src/InventoryCraftResult.java b/src/net/minecraft/src/InventoryCraftResult.java new file mode 100644 index 0000000..92b6aeb --- /dev/null +++ b/src/net/minecraft/src/InventoryCraftResult.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +public class InventoryCraftResult implements IInventory { + private ItemStack[] stackResult = new ItemStack[1]; + + public int getSizeInventory() { + return 1; + } + + public ItemStack getStackInSlot(int var1) { + return this.stackResult[var1]; + } + + public String getInvName() { + return "Result"; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.stackResult[var1] != null) { + ItemStack var3 = this.stackResult[var1]; + this.stackResult[var1] = null; + return var3; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.stackResult[var1] = var2; + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + } + + public boolean canInteractWith(EntityPlayer var1) { + return true; + } +} diff --git a/src/net/minecraft/src/InventoryCrafting.java b/src/net/minecraft/src/InventoryCrafting.java new file mode 100644 index 0000000..bbb52e0 --- /dev/null +++ b/src/net/minecraft/src/InventoryCrafting.java @@ -0,0 +1,73 @@ +package net.minecraft.src; + +public class InventoryCrafting implements IInventory { + private ItemStack[] stackList; + private int field_21085_b; + private Container eventHandler; + + public InventoryCrafting(Container var1, int var2, int var3) { + int var4 = var2 * var3; + this.stackList = new ItemStack[var4]; + this.eventHandler = var1; + this.field_21085_b = var2; + } + + public int getSizeInventory() { + return this.stackList.length; + } + + public ItemStack getStackInSlot(int var1) { + return var1 >= this.getSizeInventory() ? null : this.stackList[var1]; + } + + public ItemStack func_21084_a(int var1, int var2) { + if(var1 >= 0 && var1 < this.field_21085_b) { + int var3 = var1 + var2 * this.field_21085_b; + return this.getStackInSlot(var3); + } else { + return null; + } + } + + public String getInvName() { + return "Crafting"; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.stackList[var1] != null) { + ItemStack var3; + if(this.stackList[var1].stackSize <= var2) { + var3 = this.stackList[var1]; + this.stackList[var1] = null; + this.eventHandler.onCraftMatrixChanged(this); + return var3; + } else { + var3 = this.stackList[var1].splitStack(var2); + if(this.stackList[var1].stackSize == 0) { + this.stackList[var1] = null; + } + + this.eventHandler.onCraftMatrixChanged(this); + return var3; + } + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.stackList[var1] = var2; + this.eventHandler.onCraftMatrixChanged(this); + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + } + + public boolean canInteractWith(EntityPlayer var1) { + return true; + } +} diff --git a/src/net/minecraft/src/InventoryLargeChest.java b/src/net/minecraft/src/InventoryLargeChest.java new file mode 100644 index 0000000..96e4698 --- /dev/null +++ b/src/net/minecraft/src/InventoryLargeChest.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +public class InventoryLargeChest implements IInventory { + private String name; + private IInventory upperChest; + private IInventory lowerChest; + + public InventoryLargeChest(String var1, IInventory var2, IInventory var3) { + this.name = var1; + this.upperChest = var2; + this.lowerChest = var3; + } + + public int getSizeInventory() { + return this.upperChest.getSizeInventory() + this.lowerChest.getSizeInventory(); + } + + public String getInvName() { + return this.name; + } + + public ItemStack getStackInSlot(int var1) { + return var1 >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlot(var1 - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlot(var1); + } + + public ItemStack decrStackSize(int var1, int var2) { + return var1 >= this.upperChest.getSizeInventory() ? this.lowerChest.decrStackSize(var1 - this.upperChest.getSizeInventory(), var2) : this.upperChest.decrStackSize(var1, var2); + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + if(var1 >= this.upperChest.getSizeInventory()) { + this.lowerChest.setInventorySlotContents(var1 - this.upperChest.getSizeInventory(), var2); + } else { + this.upperChest.setInventorySlotContents(var1, var2); + } + + } + + public int getInventoryStackLimit() { + return this.upperChest.getInventoryStackLimit(); + } + + public void onInventoryChanged() { + this.upperChest.onInventoryChanged(); + this.lowerChest.onInventoryChanged(); + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.upperChest.canInteractWith(var1) && this.lowerChest.canInteractWith(var1); + } +} diff --git a/src/net/minecraft/src/InventoryPlayer.java b/src/net/minecraft/src/InventoryPlayer.java new file mode 100644 index 0000000..234594a --- /dev/null +++ b/src/net/minecraft/src/InventoryPlayer.java @@ -0,0 +1,346 @@ +package net.minecraft.src; + +public class InventoryPlayer implements IInventory { + public ItemStack[] mainInventory = new ItemStack[36]; + public ItemStack[] armorInventory = new ItemStack[4]; + public int currentItem = 0; + public EntityPlayer player; + private ItemStack itemStack; + public boolean inventoryChanged = false; + + public InventoryPlayer(EntityPlayer var1) { + this.player = var1; + } + + public ItemStack getCurrentItem() { + return this.currentItem < 9 && this.currentItem >= 0 ? this.mainInventory[this.currentItem] : null; + } + + public static int func_25054_e() { + return 9; + } + + private int getInventorySlotContainItem(int var1) { + for(int var2 = 0; var2 < this.mainInventory.length; ++var2) { + if(this.mainInventory[var2] != null && this.mainInventory[var2].itemID == var1) { + return var2; + } + } + + return -1; + } + + private int func_21082_c(ItemStack var1) { + for(int var2 = 0; var2 < this.mainInventory.length; ++var2) { + if(this.mainInventory[var2] != null && this.mainInventory[var2].itemID == var1.itemID && this.mainInventory[var2].func_21132_c() && this.mainInventory[var2].stackSize < this.mainInventory[var2].getMaxStackSize() && this.mainInventory[var2].stackSize < this.getInventoryStackLimit() && (!this.mainInventory[var2].getHasSubtypes() || this.mainInventory[var2].getItemDamage() == var1.getItemDamage())) { + 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 func_21083_d(ItemStack var1) { + int var2 = var1.itemID; + int var3 = var1.stackSize; + int var4 = this.func_21082_c(var1); + if(var4 < 0) { + var4 = this.getFirstEmptyStack(); + } + + if(var4 < 0) { + return var3; + } else { + if(this.mainInventory[var4] == null) { + this.mainInventory[var4] = new ItemStack(var2, 0, var1.getItemDamage()); + } + + int var5 = var3; + if(var3 > this.mainInventory[var4].getMaxStackSize() - this.mainInventory[var4].stackSize) { + var5 = this.mainInventory[var4].getMaxStackSize() - this.mainInventory[var4].stackSize; + } + + if(var5 > this.getInventoryStackLimit() - this.mainInventory[var4].stackSize) { + var5 = this.getInventoryStackLimit() - this.mainInventory[var4].stackSize; + } + + if(var5 == 0) { + return var3; + } else { + var3 -= var5; + this.mainInventory[var4].stackSize += var5; + this.mainInventory[var4].animationsToGo = 5; + return var3; + } + } + } + + public void decrementAnimations() { + for(int var1 = 0; var1 < this.mainInventory.length; ++var1) { + if(this.mainInventory[var1] != null) { + this.mainInventory[var1].func_28143_a(this.player.worldObj, this.player, var1, this.currentItem == var1); + } + } + + } + + public boolean consumeInventoryItem(int var1) { + int var2 = this.getInventorySlotContainItem(var1); + if(var2 < 0) { + return false; + } else { + if(--this.mainInventory[var2].stackSize <= 0) { + this.mainInventory[var2] = null; + } + + return true; + } + } + + public boolean addItemStackToInventory(ItemStack var1) { + int var2; + if(var1.isItemDamaged()) { + var2 = this.getFirstEmptyStack(); + if(var2 >= 0) { + this.mainInventory[var2] = ItemStack.func_20117_a(var1); + this.mainInventory[var2].animationsToGo = 5; + var1.stackSize = 0; + return true; + } else { + return false; + } + } else { + do { + var2 = var1.stackSize; + var1.stackSize = this.func_21083_d(var1); + } while(var1.stackSize > 0 && var1.stackSize < var2); + + return var1.stackSize < var2; + } + } + + public ItemStack decrStackSize(int var1, int var2) { + ItemStack[] var3 = this.mainInventory; + if(var1 >= this.mainInventory.length) { + var3 = this.armorInventory; + var1 -= this.mainInventory.length; + } + + if(var3[var1] != null) { + ItemStack var4; + if(var3[var1].stackSize <= var2) { + var4 = var3[var1]; + var3[var1] = null; + return var4; + } else { + var4 = var3[var1].splitStack(var2); + if(var3[var1].stackSize == 0) { + var3[var1] = null; + } + + return var4; + } + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + ItemStack[] var3 = this.mainInventory; + if(var1 >= var3.length) { + var1 -= var3.length; + var3 = this.armorInventory; + } + + var3[var1] = var2; + } + + public float getStrVsBlock(Block var1) { + float var2 = 1.0F; + if(this.mainInventory[this.currentItem] != null) { + var2 *= this.mainInventory[this.currentItem].getStrVsBlock(var1); + } + + return var2; + } + + public NBTTagList writeToNBT(NBTTagList var1) { + int var2; + NBTTagCompound var3; + for(var2 = 0; var2 < this.mainInventory.length; ++var2) { + if(this.mainInventory[var2] != null) { + var3 = new NBTTagCompound(); + var3.setByte("Slot", (byte)var2); + this.mainInventory[var2].writeToNBT(var3); + var1.setTag(var3); + } + } + + for(var2 = 0; var2 < this.armorInventory.length; ++var2) { + if(this.armorInventory[var2] != null) { + var3 = new NBTTagCompound(); + var3.setByte("Slot", (byte)(var2 + 100)); + this.armorInventory[var2].writeToNBT(var3); + var1.setTag(var3); + } + } + + return var1; + } + + public void readFromNBT(NBTTagList var1) { + this.mainInventory = new ItemStack[36]; + this.armorInventory = new ItemStack[4]; + + for(int var2 = 0; var2 < var1.tagCount(); ++var2) { + NBTTagCompound var3 = (NBTTagCompound)var1.tagAt(var2); + int var4 = var3.getByte("Slot") & 255; + ItemStack var5 = new ItemStack(var3); + if(var5.getItem() != null) { + if(var4 >= 0 && var4 < this.mainInventory.length) { + this.mainInventory[var4] = var5; + } + + if(var4 >= 100 && var4 < this.armorInventory.length + 100) { + this.armorInventory[var4 - 100] = var5; + } + } + } + + } + + public int getSizeInventory() { + return this.mainInventory.length + 4; + } + + public ItemStack getStackInSlot(int var1) { + ItemStack[] var2 = this.mainInventory; + if(var1 >= var2.length) { + var1 -= var2.length; + var2 = this.armorInventory; + } + + return var2[var1]; + } + + public String getInvName() { + return "Inventory"; + } + + public int getInventoryStackLimit() { + return 64; + } + + public int getDamageVsEntity(Entity var1) { + ItemStack var2 = this.getStackInSlot(this.currentItem); + return var2 != null ? var2.getDamageVsEntity(var1) : 1; + } + + public boolean canHarvestBlock(Block var1) { + if(var1.blockMaterial.func_31055_i()) { + return true; + } else { + ItemStack var2 = this.getStackInSlot(this.currentItem); + return var2 != null ? var2.canHarvestBlock(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].getItemDamageForDisplay(); + int var7 = var5 - var6; + var2 += var7; + var3 += var5; + int var8 = ((ItemArmor)this.armorInventory[var4].getItem()).damageReduceAmount; + var1 += var8; + } + } + + if(var3 == 0) { + return 0; + } else { + return (var1 - 1) * var2 / var3 + 1; + } + } + + public void damageArmor(int var1) { + for(int var2 = 0; var2 < this.armorInventory.length; ++var2) { + if(this.armorInventory[var2] != null && this.armorInventory[var2].getItem() instanceof ItemArmor) { + this.armorInventory[var2].damageItem(var1, this.player); + 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.dropPlayerItemWithRandomChoice(this.mainInventory[var1], true); + this.mainInventory[var1] = null; + } + } + + for(var1 = 0; var1 < this.armorInventory.length; ++var1) { + if(this.armorInventory[var1] != null) { + this.player.dropPlayerItemWithRandomChoice(this.armorInventory[var1], true); + this.armorInventory[var1] = null; + } + } + + } + + public void onInventoryChanged() { + this.inventoryChanged = true; + } + + public void setItemStack(ItemStack var1) { + this.itemStack = var1; + this.player.onItemStackChanged(var1); + } + + public ItemStack getItemStack() { + return this.itemStack; + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.player.isDead ? false : var1.getDistanceSqToEntity(this.player) <= 64.0D; + } + + public boolean func_28010_c(ItemStack var1) { + int var2; + for(var2 = 0; var2 < this.armorInventory.length; ++var2) { + if(this.armorInventory[var2] != null && this.armorInventory[var2].func_28144_c(var1)) { + return true; + } + } + + for(var2 = 0; var2 < this.mainInventory.length; ++var2) { + if(this.mainInventory[var2] != null && this.mainInventory[var2].func_28144_c(var1)) { + return true; + } + } + + return false; + } +} diff --git a/src/net/minecraft/src/Item.java b/src/net/minecraft/src/Item.java new file mode 100644 index 0000000..3ad049b --- /dev/null +++ b/src/net/minecraft/src/Item.java @@ -0,0 +1,256 @@ +package net.minecraft.src; + +import java.util.Random; + +public class Item { + protected static Random itemRand = new Random(); + public static Item[] itemsList = new Item[32000]; + public static Item shovelSteel = (new ItemSpade(0, EnumToolMaterial.IRON)).setIconCoord(2, 5).setItemName("shovelIron"); + public static Item pickaxeSteel = (new ItemPickaxe(1, EnumToolMaterial.IRON)).setIconCoord(2, 6).setItemName("pickaxeIron"); + public static Item axeSteel = (new ItemAxe(2, EnumToolMaterial.IRON)).setIconCoord(2, 7).setItemName("hatchetIron"); + public static Item flintAndSteel = (new ItemFlintAndSteel(3)).setIconCoord(5, 0).setItemName("flintAndSteel"); + public static Item appleRed = (new ItemFood(4, 4, false)).setIconCoord(10, 0).setItemName("apple"); + public static Item bow = (new ItemBow(5)).setIconCoord(5, 1).setItemName("bow"); + public static Item arrow = (new Item(6)).setIconCoord(5, 2).setItemName("arrow"); + public static Item coal = (new ItemCoal(7)).setIconCoord(7, 0).setItemName("coal"); + public static Item diamond = (new Item(8)).setIconCoord(7, 3).setItemName("emerald"); + public static Item ingotIron = (new Item(9)).setIconCoord(7, 1).setItemName("ingotIron"); + public static Item ingotGold = (new Item(10)).setIconCoord(7, 2).setItemName("ingotGold"); + public static Item swordSteel = (new ItemSword(11, EnumToolMaterial.IRON)).setIconCoord(2, 4).setItemName("swordIron"); + public static Item swordWood = (new ItemSword(12, EnumToolMaterial.WOOD)).setIconCoord(0, 4).setItemName("swordWood"); + public static Item shovelWood = (new ItemSpade(13, EnumToolMaterial.WOOD)).setIconCoord(0, 5).setItemName("shovelWood"); + public static Item pickaxeWood = (new ItemPickaxe(14, EnumToolMaterial.WOOD)).setIconCoord(0, 6).setItemName("pickaxeWood"); + public static Item axeWood = (new ItemAxe(15, EnumToolMaterial.WOOD)).setIconCoord(0, 7).setItemName("hatchetWood"); + public static Item swordStone = (new ItemSword(16, EnumToolMaterial.STONE)).setIconCoord(1, 4).setItemName("swordStone"); + public static Item shovelStone = (new ItemSpade(17, EnumToolMaterial.STONE)).setIconCoord(1, 5).setItemName("shovelStone"); + public static Item pickaxeStone = (new ItemPickaxe(18, EnumToolMaterial.STONE)).setIconCoord(1, 6).setItemName("pickaxeStone"); + public static Item axeStone = (new ItemAxe(19, EnumToolMaterial.STONE)).setIconCoord(1, 7).setItemName("hatchetStone"); + public static Item swordDiamond = (new ItemSword(20, EnumToolMaterial.EMERALD)).setIconCoord(3, 4).setItemName("swordDiamond"); + public static Item shovelDiamond = (new ItemSpade(21, EnumToolMaterial.EMERALD)).setIconCoord(3, 5).setItemName("shovelDiamond"); + public static Item pickaxeDiamond = (new ItemPickaxe(22, EnumToolMaterial.EMERALD)).setIconCoord(3, 6).setItemName("pickaxeDiamond"); + public static Item axeDiamond = (new ItemAxe(23, EnumToolMaterial.EMERALD)).setIconCoord(3, 7).setItemName("hatchetDiamond"); + public static Item stick = (new Item(24)).setIconCoord(5, 3).setFull3D().setItemName("stick"); + public static Item bowlEmpty = (new Item(25)).setIconCoord(7, 4).setItemName("bowl"); + public static Item bowlSoup = (new ItemSoup(26, 10)).setIconCoord(8, 4).setItemName("mushroomStew"); + public static Item swordGold = (new ItemSword(27, EnumToolMaterial.GOLD)).setIconCoord(4, 4).setItemName("swordGold"); + public static Item shovelGold = (new ItemSpade(28, EnumToolMaterial.GOLD)).setIconCoord(4, 5).setItemName("shovelGold"); + public static Item pickaxeGold = (new ItemPickaxe(29, EnumToolMaterial.GOLD)).setIconCoord(4, 6).setItemName("pickaxeGold"); + public static Item axeGold = (new ItemAxe(30, EnumToolMaterial.GOLD)).setIconCoord(4, 7).setItemName("hatchetGold"); + public static Item silk = (new Item(31)).setIconCoord(8, 0).setItemName("string"); + public static Item feather = (new Item(32)).setIconCoord(8, 1).setItemName("feather"); + public static Item gunpowder = (new Item(33)).setIconCoord(8, 2).setItemName("sulphur"); + public static Item hoeWood = (new ItemHoe(34, EnumToolMaterial.WOOD)).setIconCoord(0, 8).setItemName("hoeWood"); + public static Item hoeStone = (new ItemHoe(35, EnumToolMaterial.STONE)).setIconCoord(1, 8).setItemName("hoeStone"); + public static Item hoeSteel = (new ItemHoe(36, EnumToolMaterial.IRON)).setIconCoord(2, 8).setItemName("hoeIron"); + public static Item hoeDiamond = (new ItemHoe(37, EnumToolMaterial.EMERALD)).setIconCoord(3, 8).setItemName("hoeDiamond"); + public static Item hoeGold = (new ItemHoe(38, EnumToolMaterial.GOLD)).setIconCoord(4, 8).setItemName("hoeGold"); + public static Item seeds = (new ItemSeeds(39, Block.crops.blockID)).setIconCoord(9, 0).setItemName("seeds"); + public static Item wheat = (new Item(40)).setIconCoord(9, 1).setItemName("wheat"); + public static Item bread = (new ItemFood(41, 5, false)).setIconCoord(9, 2).setItemName("bread"); + public static Item helmetLeather = (new ItemArmor(42, 0, 0, 0)).setIconCoord(0, 0).setItemName("helmetCloth"); + public static Item plateLeather = (new ItemArmor(43, 0, 0, 1)).setIconCoord(0, 1).setItemName("chestplateCloth"); + public static Item legsLeather = (new ItemArmor(44, 0, 0, 2)).setIconCoord(0, 2).setItemName("leggingsCloth"); + public static Item bootsLeather = (new ItemArmor(45, 0, 0, 3)).setIconCoord(0, 3).setItemName("bootsCloth"); + public static Item helmetChain = (new ItemArmor(46, 1, 1, 0)).setIconCoord(1, 0).setItemName("helmetChain"); + public static Item plateChain = (new ItemArmor(47, 1, 1, 1)).setIconCoord(1, 1).setItemName("chestplateChain"); + public static Item legsChain = (new ItemArmor(48, 1, 1, 2)).setIconCoord(1, 2).setItemName("leggingsChain"); + public static Item bootsChain = (new ItemArmor(49, 1, 1, 3)).setIconCoord(1, 3).setItemName("bootsChain"); + public static Item helmetSteel = (new ItemArmor(50, 2, 2, 0)).setIconCoord(2, 0).setItemName("helmetIron"); + public static Item plateSteel = (new ItemArmor(51, 2, 2, 1)).setIconCoord(2, 1).setItemName("chestplateIron"); + public static Item legsSteel = (new ItemArmor(52, 2, 2, 2)).setIconCoord(2, 2).setItemName("leggingsIron"); + public static Item bootsSteel = (new ItemArmor(53, 2, 2, 3)).setIconCoord(2, 3).setItemName("bootsIron"); + public static Item helmetDiamond = (new ItemArmor(54, 3, 3, 0)).setIconCoord(3, 0).setItemName("helmetDiamond"); + public static Item plateDiamond = (new ItemArmor(55, 3, 3, 1)).setIconCoord(3, 1).setItemName("chestplateDiamond"); + public static Item legsDiamond = (new ItemArmor(56, 3, 3, 2)).setIconCoord(3, 2).setItemName("leggingsDiamond"); + public static Item bootsDiamond = (new ItemArmor(57, 3, 3, 3)).setIconCoord(3, 3).setItemName("bootsDiamond"); + public static Item helmetGold = (new ItemArmor(58, 1, 4, 0)).setIconCoord(4, 0).setItemName("helmetGold"); + public static Item plateGold = (new ItemArmor(59, 1, 4, 1)).setIconCoord(4, 1).setItemName("chestplateGold"); + public static Item legsGold = (new ItemArmor(60, 1, 4, 2)).setIconCoord(4, 2).setItemName("leggingsGold"); + public static Item bootsGold = (new ItemArmor(61, 1, 4, 3)).setIconCoord(4, 3).setItemName("bootsGold"); + public static Item flint = (new Item(62)).setIconCoord(6, 0).setItemName("flint"); + public static Item porkRaw = (new ItemFood(63, 3, true)).setIconCoord(7, 5).setItemName("porkchopRaw"); + public static Item porkCooked = (new ItemFood(64, 8, true)).setIconCoord(8, 5).setItemName("porkchopCooked"); + public static Item painting = (new ItemPainting(65)).setIconCoord(10, 1).setItemName("painting"); + public static Item appleGold = (new ItemFood(66, 42, false)).setIconCoord(11, 0).setItemName("appleGold"); + public static Item sign = (new ItemSign(67)).setIconCoord(10, 2).setItemName("sign"); + public static Item doorWood = (new ItemDoor(68, Material.wood)).setIconCoord(11, 2).setItemName("doorWood"); + public static Item bucketEmpty = (new ItemBucket(69, 0)).setIconCoord(10, 4).setItemName("bucket"); + public static Item bucketWater = (new ItemBucket(70, Block.waterMoving.blockID)).setIconCoord(11, 4).setItemName("bucketWater").setContainerItem(bucketEmpty); + public static Item bucketLava = (new ItemBucket(71, Block.lavaMoving.blockID)).setIconCoord(12, 4).setItemName("bucketLava").setContainerItem(bucketEmpty); + public static Item minecartEmpty = (new ItemMinecart(72, 0)).setIconCoord(7, 8).setItemName("minecart"); + public static Item saddle = (new ItemSaddle(73)).setIconCoord(8, 6).setItemName("saddle"); + public static Item doorSteel = (new ItemDoor(74, Material.iron)).setIconCoord(12, 2).setItemName("doorIron"); + public static Item redstone = (new ItemRedstone(75)).setIconCoord(8, 3).setItemName("redstone"); + public static Item snowball = (new ItemSnowball(76)).setIconCoord(14, 0).setItemName("snowball"); + public static Item boat = (new ItemBoat(77)).setIconCoord(8, 8).setItemName("boat"); + public static Item leather = (new Item(78)).setIconCoord(7, 6).setItemName("leather"); + public static Item bucketMilk = (new ItemBucket(79, -1)).setIconCoord(13, 4).setItemName("milk").setContainerItem(bucketEmpty); + public static Item brick = (new Item(80)).setIconCoord(6, 1).setItemName("brick"); + public static Item clay = (new Item(81)).setIconCoord(9, 3).setItemName("clay"); + public static Item reed = (new ItemReed(82, Block.reed)).setIconCoord(11, 1).setItemName("reeds"); + public static Item paper = (new Item(83)).setIconCoord(10, 3).setItemName("paper"); + public static Item book = (new Item(84)).setIconCoord(11, 3).setItemName("book"); + public static Item slimeBall = (new Item(85)).setIconCoord(14, 1).setItemName("slimeball"); + public static Item minecartCrate = (new ItemMinecart(86, 1)).setIconCoord(7, 9).setItemName("minecartChest"); + public static Item minecartPowered = (new ItemMinecart(87, 2)).setIconCoord(7, 10).setItemName("minecartFurnace"); + public static Item egg = (new ItemEgg(88)).setIconCoord(12, 0).setItemName("egg"); + public static Item compass = (new Item(89)).setIconCoord(6, 3).setItemName("compass"); + public static Item fishingRod = (new ItemFishingRod(90)).setIconCoord(5, 4).setItemName("fishingRod"); + public static Item pocketSundial = (new Item(91)).setIconCoord(6, 4).setItemName("clock"); + public static Item lightStoneDust = (new Item(92)).setIconCoord(9, 4).setItemName("yellowDust"); + public static Item fishRaw = (new ItemFood(93, 2, false)).setIconCoord(9, 5).setItemName("fishRaw"); + public static Item fishCooked = (new ItemFood(94, 5, false)).setIconCoord(10, 5).setItemName("fishCooked"); + public static Item dyePowder = (new ItemDye(95)).setIconCoord(14, 4).setItemName("dyePowder"); + public static Item bone = (new Item(96)).setIconCoord(12, 1).setItemName("bone").setFull3D(); + public static Item sugar = (new Item(97)).setIconCoord(13, 0).setItemName("sugar").setFull3D(); + public static Item cake = (new ItemReed(98, Block.cake)).setMaxStackSize(1).setIconCoord(13, 1).setItemName("cake"); + public static Item bed = (new ItemBed(99)).setMaxStackSize(1).setIconCoord(13, 2).setItemName("bed"); + public static Item redstoneRepeater = (new ItemReed(100, Block.redstoneRepeaterIdle)).setIconCoord(6, 5).setItemName("diode"); + public static Item cookie = (new ItemCookie(101, 1, false, 8)).setIconCoord(12, 5).setItemName("cookie"); + public static ItemMap field_28021_bb = (ItemMap)(new ItemMap(102)).setIconCoord(12, 3).setItemName("map"); + public static ItemShears field_31022_bc = (ItemShears)(new ItemShears(103)).setIconCoord(13, 5).setItemName("shears"); + public static Item record13 = (new ItemRecord(2000, "13")).setIconCoord(0, 15).setItemName("record"); + public static Item recordCat = (new ItemRecord(2001, "cat")).setIconCoord(1, 15).setItemName("record"); + public final int shiftedIndex; + protected int maxStackSize = 64; + private int maxDamage = 0; + protected int iconIndex; + protected boolean bFull3D = false; + protected boolean hasSubtypes = false; + private Item containerItem = null; + private String itemName; + + protected Item(int var1) { + this.shiftedIndex = 256 + var1; + if(itemsList[256 + var1] != null) { + System.out.println("CONFLICT @ " + var1); + } + + itemsList[256 + var1] = this; + } + + public Item setIconIndex(int var1) { + this.iconIndex = var1; + return this; + } + + public Item setMaxStackSize(int var1) { + this.maxStackSize = var1; + return this; + } + + public Item setIconCoord(int var1, int var2) { + this.iconIndex = var1 + var2 * 16; + 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 getMetadata(int var1) { + return 0; + } + + public boolean getHasSubtypes() { + return this.hasSubtypes; + } + + protected Item setHasSubtypes(boolean var1) { + this.hasSubtypes = var1; + return this; + } + + public int getMaxDamage() { + return this.maxDamage; + } + + protected Item setMaxDamage(int var1) { + this.maxDamage = var1; + return this; + } + + public boolean func_25005_e() { + return this.maxDamage > 0 && !this.hasSubtypes; + } + + public boolean hitEntity(ItemStack var1, EntityLiving var2, EntityLiving var3) { + return false; + } + + public boolean func_25007_a(ItemStack var1, int var2, int var3, int var4, int var5, EntityLiving var6) { + return false; + } + + public int getDamageVsEntity(Entity var1) { + return 1; + } + + public boolean canHarvestBlock(Block var1) { + return false; + } + + public void saddleEntity(ItemStack var1, EntityLiving var2) { + } + + public Item setFull3D() { + this.bFull3D = true; + return this; + } + + public Item setItemName(String var1) { + this.itemName = "item." + var1; + return this; + } + + public String getItemName() { + return this.itemName; + } + + public Item setContainerItem(Item var1) { + if(this.maxStackSize > 1) { + throw new IllegalArgumentException("Max stack size must be 1 for items with crafting results"); + } else { + this.containerItem = var1; + return this; + } + } + + public Item getContainerItem() { + return this.containerItem; + } + + public boolean hasContainerItem() { + return this.containerItem != null; + } + + public String func_25006_i() { + return StatCollector.translateToLocal(this.getItemName() + ".name"); + } + + public void func_28018_a(ItemStack var1, World var2, Entity var3, int var4, boolean var5) { + } + + public void func_28020_c(ItemStack var1, World var2, EntityPlayer var3) { + } + + public boolean func_28019_b() { + return false; + } + + static { + StatList.func_25086_b(); + } +} diff --git a/src/net/minecraft/src/ItemArmor.java b/src/net/minecraft/src/ItemArmor.java new file mode 100644 index 0000000..5462393 --- /dev/null +++ b/src/net/minecraft/src/ItemArmor.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class ItemArmor extends Item { + private static final int[] damageReduceAmountArray = new int[]{3, 8, 6, 3}; + private static final int[] maxDamageArray = new int[]{11, 16, 15, 13}; + public final int armorLevel; + public final int armorType; + public final int damageReduceAmount; + public final int renderIndex; + + public ItemArmor(int var1, int var2, int var3, int var4) { + super(var1); + this.armorLevel = var2; + this.armorType = var4; + this.renderIndex = var3; + this.damageReduceAmount = damageReduceAmountArray[var4]; + this.setMaxDamage(maxDamageArray[var4] * 3 << var2); + this.maxStackSize = 1; + } +} diff --git a/src/net/minecraft/src/ItemAxe.java b/src/net/minecraft/src/ItemAxe.java new file mode 100644 index 0000000..361ebc0 --- /dev/null +++ b/src/net/minecraft/src/ItemAxe.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public class ItemAxe extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.planks, Block.bookShelf, Block.wood, Block.chest}; + + protected ItemAxe(int var1, EnumToolMaterial var2) { + super(var1, 3, var2, blocksEffectiveAgainst); + } +} diff --git a/src/net/minecraft/src/ItemBed.java b/src/net/minecraft/src/ItemBed.java new file mode 100644 index 0000000..fa0e652 --- /dev/null +++ b/src/net/minecraft/src/ItemBed.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +public class ItemBed extends Item { + public ItemBed(int var1) { + super(var1); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 != 1) { + return false; + } else { + ++var5; + BlockBed var8 = (BlockBed)Block.bed; + int var9 = MathHelper.floor_double((double)(var2.rotationYaw * 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; + } + + if(var3.isAirBlock(var4, var5, var6) && var3.isAirBlock(var4 + var10, var5, var6 + var11) && var3.isBlockNormalCube(var4, var5 - 1, var6) && var3.isBlockNormalCube(var4 + var10, var5 - 1, var6 + var11)) { + var3.setBlockAndMetadataWithNotify(var4, var5, var6, var8.blockID, var9); + var3.setBlockAndMetadataWithNotify(var4 + var10, var5, var6 + var11, var8.blockID, var9 + 8); + --var1.stackSize; + return true; + } else { + return false; + } + } + } +} diff --git a/src/net/minecraft/src/ItemBlock.java b/src/net/minecraft/src/ItemBlock.java new file mode 100644 index 0000000..dfcefd6 --- /dev/null +++ b/src/net/minecraft/src/ItemBlock.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +public class ItemBlock extends Item { + private int blockID; + + public ItemBlock(int var1) { + super(var1); + this.blockID = var1 + 256; + this.setIconIndex(Block.blocksList[var1 + 256].getBlockTextureFromSide(2)); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(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(var5 == 127 && Block.blocksList[this.blockID].blockMaterial.isSolid()) { + return false; + } else if(var3.canBlockBePlacedAt(this.blockID, var4, var5, var6, false, var7)) { + Block var8 = Block.blocksList[this.blockID]; + if(var3.setBlockAndMetadataWithNotify(var4, var5, var6, this.blockID, this.getMetadata(var1.getItemDamage()))) { + Block.blocksList[this.blockID].onBlockPlaced(var3, var4, var5, var6, var7); + Block.blocksList[this.blockID].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.getVolume() + 1.0F) / 2.0F, var8.stepSound.getPitch() * 0.8F); + --var1.stackSize; + } + + return true; + } else { + return false; + } + } + + public String getItemName() { + return Block.blocksList[this.blockID].getBlockName(); + } +} diff --git a/src/net/minecraft/src/ItemBoat.java b/src/net/minecraft/src/ItemBoat.java new file mode 100644 index 0000000..480d357 --- /dev/null +++ b/src/net/minecraft/src/ItemBoat.java @@ -0,0 +1,47 @@ +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.rayTraceBlocks_do(var13, var23, true); + if(var24 == null) { + return var1; + } else { + if(var24.typeOfHit == EnumMovingObjectType.TILE) { + int var25 = var24.blockX; + int var26 = var24.blockY; + int var27 = var24.blockZ; + if(!var2.singleplayerWorld) { + if(var2.getBlockId(var25, var26, var27) == Block.snow.blockID) { + --var26; + } + + var2.entityJoinedWorld(new EntityBoat(var2, (double)((float)var25 + 0.5F), (double)((float)var26 + 1.0F), (double)((float)var27 + 0.5F))); + } + + --var1.stackSize; + } + + return var1; + } + } +} diff --git a/src/net/minecraft/src/ItemBow.java b/src/net/minecraft/src/ItemBow.java new file mode 100644 index 0000000..d6d9418 --- /dev/null +++ b/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.consumeInventoryItem(Item.arrow.shiftedIndex)) { + var2.playSoundAtEntity(var3, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 0.8F)); + if(!var2.singleplayerWorld) { + var2.entityJoinedWorld(new EntityArrow(var2, var3)); + } + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ItemBucket.java b/src/net/minecraft/src/ItemBucket.java new file mode 100644 index 0000000..7a48ec4 --- /dev/null +++ b/src/net/minecraft/src/ItemBucket.java @@ -0,0 +1,100 @@ +package net.minecraft.src; + +public class ItemBucket extends Item { + private int isFull; + + public ItemBucket(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.isFull = var2; + } + + 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.rayTraceBlocks_do(var13, var23, this.isFull == 0); + if(var24 == null) { + return var1; + } else { + if(var24.typeOfHit == EnumMovingObjectType.TILE) { + int var25 = var24.blockX; + int var26 = var24.blockY; + int var27 = var24.blockZ; + if(!var2.canMineBlock(var3, var25, var26, var27)) { + return var1; + } + + if(this.isFull == 0) { + if(var2.getBlockMaterial(var25, var26, var27) == Material.water && var2.getBlockMetadata(var25, var26, var27) == 0) { + var2.setBlockWithNotify(var25, var26, var27, 0); + return new ItemStack(Item.bucketWater); + } + + if(var2.getBlockMaterial(var25, var26, var27) == Material.lava && var2.getBlockMetadata(var25, var26, var27) == 0) { + var2.setBlockWithNotify(var25, var26, var27, 0); + return new ItemStack(Item.bucketLava); + } + } else { + if(this.isFull < 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.isAirBlock(var25, var26, var27) || !var2.getBlockMaterial(var25, var26, var27).isSolid()) { + if(var2.worldProvider.isHellWorld && this.isFull == Block.waterMoving.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.setBlockAndMetadataWithNotify(var25, var26, var27, this.isFull, 0); + } + + return new ItemStack(Item.bucketEmpty); + } + } + } else if(this.isFull == 0 && var24.entityHit instanceof EntityCow) { + return new ItemStack(Item.bucketMilk); + } + + return var1; + } + } +} diff --git a/src/net/minecraft/src/ItemCloth.java b/src/net/minecraft/src/ItemCloth.java new file mode 100644 index 0000000..9e19797 --- /dev/null +++ b/src/net/minecraft/src/ItemCloth.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ItemCloth extends ItemBlock { + public ItemCloth(int var1) { + super(var1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public int getMetadata(int var1) { + return var1; + } +} diff --git a/src/net/minecraft/src/ItemCoal.java b/src/net/minecraft/src/ItemCoal.java new file mode 100644 index 0000000..509cba1 --- /dev/null +++ b/src/net/minecraft/src/ItemCoal.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public class ItemCoal extends Item { + public ItemCoal(int var1) { + super(var1); + this.setHasSubtypes(true); + this.setMaxDamage(0); + } +} diff --git a/src/net/minecraft/src/ItemCookie.java b/src/net/minecraft/src/ItemCookie.java new file mode 100644 index 0000000..e41d499 --- /dev/null +++ b/src/net/minecraft/src/ItemCookie.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class ItemCookie extends ItemFood { + public ItemCookie(int var1, int var2, boolean var3, int var4) { + super(var1, var2, var3); + this.maxStackSize = var4; + } +} diff --git a/src/net/minecraft/src/ItemDoor.java b/src/net/minecraft/src/ItemDoor.java new file mode 100644 index 0000000..04b59b7 --- /dev/null +++ b/src/net/minecraft/src/ItemDoor.java @@ -0,0 +1,73 @@ +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.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.isBlockNormalCube(var4 - var10, var5, var6 - var11) ? 1 : 0) + (var3.isBlockNormalCube(var4 - var10, var5 + 1, var6 - var11) ? 1 : 0); + int var13 = (var3.isBlockNormalCube(var4 + var10, var5, var6 + var11) ? 1 : 0) + (var3.isBlockNormalCube(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.editingBlocks = true; + var3.setBlockAndMetadataWithNotify(var4, var5, var6, var8.blockID, var9); + var3.setBlockAndMetadataWithNotify(var4, var5 + 1, var6, var8.blockID, var9 + 8); + var3.editingBlocks = false; + var3.notifyBlocksOfNeighborChange(var4, var5, var6, var8.blockID); + var3.notifyBlocksOfNeighborChange(var4, var5 + 1, var6, var8.blockID); + --var1.stackSize; + return true; + } + } + } +} diff --git a/src/net/minecraft/src/ItemDye.java b/src/net/minecraft/src/ItemDye.java new file mode 100644 index 0000000..fe795c1 --- /dev/null +++ b/src/net/minecraft/src/ItemDye.java @@ -0,0 +1,83 @@ +package net.minecraft.src; + +public class ItemDye extends Item { + public static final String[] dyeColors = new String[]{"black", "red", "green", "brown", "blue", "purple", "cyan", "silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"}; + public static final int[] field_31023_bk = new int[]{1973019, 11743532, 3887386, 5320730, 2437522, 8073150, 2651799, 2651799, 4408131, 14188952, 4312372, 14602026, 6719955, 12801229, 15435844, 15790320}; + + public ItemDye(int var1) { + super(var1); + this.setHasSubtypes(true); + this.setMaxDamage(0); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var1.getItemDamage() == 15) { + int var8 = var3.getBlockId(var4, var5, var6); + if(var8 == Block.sapling.blockID) { + if(!var3.singleplayerWorld) { + ((BlockSapling)Block.sapling).growTree(var3, var4, var5, var6, var3.rand); + --var1.stackSize; + } + + return true; + } + + if(var8 == Block.crops.blockID) { + if(!var3.singleplayerWorld) { + ((BlockCrops)Block.crops).fertilize(var3, var4, var5, var6); + --var1.stackSize; + } + + return true; + } + + if(var8 == Block.grass.blockID) { + if(!var3.singleplayerWorld) { + --var1.stackSize; + + label53: + for(int var9 = 0; var9 < 128; ++var9) { + int var10 = var4; + int var11 = var5 + 1; + int var12 = var6; + + for(int var13 = 0; var13 < var9 / 16; ++var13) { + var10 += itemRand.nextInt(3) - 1; + var11 += (itemRand.nextInt(3) - 1) * itemRand.nextInt(3) / 2; + var12 += itemRand.nextInt(3) - 1; + if(var3.getBlockId(var10, var11 - 1, var12) != Block.grass.blockID || var3.isBlockNormalCube(var10, var11, var12)) { + continue label53; + } + } + + if(var3.getBlockId(var10, var11, var12) == 0) { + if(itemRand.nextInt(10) != 0) { + var3.setBlockAndMetadataWithNotify(var10, var11, var12, Block.tallGrass.blockID, 1); + } else if(itemRand.nextInt(3) != 0) { + var3.setBlockWithNotify(var10, var11, var12, Block.plantYellow.blockID); + } else { + var3.setBlockWithNotify(var10, var11, var12, Block.plantRed.blockID); + } + } + } + } + + return true; + } + } + + return false; + } + + public void saddleEntity(ItemStack var1, EntityLiving var2) { + if(var2 instanceof EntitySheep) { + EntitySheep var3 = (EntitySheep)var2; + int var4 = BlockCloth.func_21033_c(var1.getItemDamage()); + if(!var3.func_21069_f_() && var3.getFleeceColor() != var4) { + var3.setFleeceColor(var4); + --var1.stackSize; + } + } + + } +} diff --git a/src/net/minecraft/src/ItemEgg.java b/src/net/minecraft/src/ItemEgg.java new file mode 100644 index 0000000..b6e2743 --- /dev/null +++ b/src/net/minecraft/src/ItemEgg.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +public class ItemEgg extends Item { + public ItemEgg(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 / (itemRand.nextFloat() * 0.4F + 0.8F)); + if(!var2.singleplayerWorld) { + var2.entityJoinedWorld(new EntityEgg(var2, var3)); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ItemFishingRod.java b/src/net/minecraft/src/ItemFishingRod.java new file mode 100644 index 0000000..e80e36d --- /dev/null +++ b/src/net/minecraft/src/ItemFishingRod.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class ItemFishingRod extends Item { + public ItemFishingRod(int var1) { + super(var1); + this.setMaxDamage(64); + this.setMaxStackSize(1); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(var3.fishEntity != null) { + int var4 = var3.fishEntity.catchFish(); + var1.damageItem(var4, var3); + var3.swingItem(); + } else { + var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + if(!var2.singleplayerWorld) { + var2.entityJoinedWorld(new EntityFish(var2, var3)); + } + + var3.swingItem(); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ItemFlintAndSteel.java b/src/net/minecraft/src/ItemFlintAndSteel.java new file mode 100644 index 0000000..44d601e --- /dev/null +++ b/src/net/minecraft/src/ItemFlintAndSteel.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class ItemFlintAndSteel extends Item { + public ItemFlintAndSteel(int var1) { + super(var1); + this.maxStackSize = 1; + this.setMaxDamage(64); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 == 0) { + --var5; + } + + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + + int var8 = var3.getBlockId(var4, var5, var6); + if(var8 == 0) { + var3.playSoundEffect((double)var4 + 0.5D, (double)var5 + 0.5D, (double)var6 + 0.5D, "fire.ignite", 1.0F, itemRand.nextFloat() * 0.4F + 0.8F); + var3.setBlockWithNotify(var4, var5, var6, Block.fire.blockID); + } + + var1.damageItem(1, var2); + return true; + } +} diff --git a/src/net/minecraft/src/ItemFood.java b/src/net/minecraft/src/ItemFood.java new file mode 100644 index 0000000..78b2fde --- /dev/null +++ b/src/net/minecraft/src/ItemFood.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class ItemFood extends Item { + private int healAmount; + private boolean field_25011_bi; + + public ItemFood(int var1, int var2, boolean var3) { + super(var1); + this.healAmount = var2; + this.field_25011_bi = var3; + this.maxStackSize = 1; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + --var1.stackSize; + var3.heal(this.healAmount); + return var1; + } + + public int getHealAmount() { + return this.healAmount; + } + + public boolean func_25010_k() { + return this.field_25011_bi; + } +} diff --git a/src/net/minecraft/src/ItemHoe.java b/src/net/minecraft/src/ItemHoe.java new file mode 100644 index 0000000..ae636c6 --- /dev/null +++ b/src/net/minecraft/src/ItemHoe.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class ItemHoe extends Item { + public ItemHoe(int var1, EnumToolMaterial var2) { + super(var1); + this.maxStackSize = 1; + this.setMaxDamage(var2.getMaxUses()); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + int var8 = var3.getBlockId(var4, var5, var6); + int var9 = var3.getBlockId(var4, var5 + 1, var6); + if((var7 == 0 || var9 != 0 || 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.getVolume() + 1.0F) / 2.0F, var10.stepSound.getPitch() * 0.8F); + if(var3.singleplayerWorld) { + return true; + } else { + var3.setBlockWithNotify(var4, var5, var6, var10.blockID); + var1.damageItem(1, var2); + return true; + } + } + } +} diff --git a/src/net/minecraft/src/ItemInWorldManager.java b/src/net/minecraft/src/ItemInWorldManager.java new file mode 100644 index 0000000..305ad0a --- /dev/null +++ b/src/net/minecraft/src/ItemInWorldManager.java @@ -0,0 +1,133 @@ +package net.minecraft.src; + +public class ItemInWorldManager { + private WorldServer thisWorld; + public EntityPlayer thisPlayer; + private float field_672_d = 0.0F; + private int field_22055_d; + private int field_22054_g; + private int field_22053_h; + private int field_22052_i; + private int field_22051_j; + private boolean field_22050_k; + private int field_22049_l; + private int field_22048_m; + private int field_22047_n; + private int field_22046_o; + + public ItemInWorldManager(WorldServer var1) { + this.thisWorld = var1; + } + + public void func_328_a() { + ++this.field_22051_j; + if(this.field_22050_k) { + int var1 = this.field_22051_j - this.field_22046_o; + int var2 = this.thisWorld.getBlockId(this.field_22049_l, this.field_22048_m, this.field_22047_n); + if(var2 != 0) { + Block var3 = Block.blocksList[var2]; + float var4 = var3.blockStrength(this.thisPlayer) * (float)(var1 + 1); + if(var4 >= 1.0F) { + this.field_22050_k = false; + this.func_325_c(this.field_22049_l, this.field_22048_m, this.field_22047_n); + } + } else { + this.field_22050_k = false; + } + } + + } + + public void func_324_a(int var1, int var2, int var3, int var4) { + this.thisWorld.func_28096_a((EntityPlayer)null, var1, var2, var3, var4); + this.field_22055_d = this.field_22051_j; + int var5 = this.thisWorld.getBlockId(var1, var2, var3); + if(var5 > 0) { + Block.blocksList[var5].onBlockClicked(this.thisWorld, var1, var2, var3, this.thisPlayer); + } + + if(var5 > 0 && Block.blocksList[var5].blockStrength(this.thisPlayer) >= 1.0F) { + this.func_325_c(var1, var2, var3); + } else { + this.field_22054_g = var1; + this.field_22053_h = var2; + this.field_22052_i = var3; + } + + } + + public void func_22045_b(int var1, int var2, int var3) { + if(var1 == this.field_22054_g && var2 == this.field_22053_h && var3 == this.field_22052_i) { + int var4 = this.field_22051_j - this.field_22055_d; + int var5 = this.thisWorld.getBlockId(var1, var2, var3); + if(var5 != 0) { + Block var6 = Block.blocksList[var5]; + float var7 = var6.blockStrength(this.thisPlayer) * (float)(var4 + 1); + if(var7 >= 0.7F) { + this.func_325_c(var1, var2, var3); + } else if(!this.field_22050_k) { + this.field_22050_k = true; + this.field_22049_l = var1; + this.field_22048_m = var2; + this.field_22047_n = var3; + this.field_22046_o = this.field_22055_d; + } + } + } + + this.field_672_d = 0.0F; + } + + public boolean removeBlock(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.thisWorld.getBlockId(var1, var2, var3)]; + int var5 = this.thisWorld.getBlockMetadata(var1, var2, var3); + boolean var6 = this.thisWorld.setBlockWithNotify(var1, var2, var3, 0); + if(var4 != null && var6) { + var4.onBlockDestroyedByPlayer(this.thisWorld, var1, var2, var3, var5); + } + + return var6; + } + + public boolean func_325_c(int var1, int var2, int var3) { + int var4 = this.thisWorld.getBlockId(var1, var2, var3); + int var5 = this.thisWorld.getBlockMetadata(var1, var2, var3); + this.thisWorld.func_28101_a(this.thisPlayer, 2001, var1, var2, var3, var4 + this.thisWorld.getBlockMetadata(var1, var2, var3) * 256); + boolean var6 = this.removeBlock(var1, var2, var3); + ItemStack var7 = this.thisPlayer.getCurrentEquippedItem(); + if(var7 != null) { + var7.func_25124_a(var4, var1, var2, var3, this.thisPlayer); + if(var7.stackSize == 0) { + var7.func_577_a(this.thisPlayer); + this.thisPlayer.destroyCurrentEquippedItem(); + } + } + + if(var6 && this.thisPlayer.canHarvestBlock(Block.blocksList[var4])) { + Block.blocksList[var4].harvestBlock(this.thisWorld, this.thisPlayer, var1, var2, var3, var5); + ((EntityPlayerMP)this.thisPlayer).playerNetServerHandler.sendPacket(new Packet53BlockChange(var1, var2, var3, this.thisWorld)); + } + + 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 activeBlockOrUseItem(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/src/net/minecraft/src/ItemLeaves.java b/src/net/minecraft/src/ItemLeaves.java new file mode 100644 index 0000000..9b08c79 --- /dev/null +++ b/src/net/minecraft/src/ItemLeaves.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ItemLeaves extends ItemBlock { + public ItemLeaves(int var1) { + super(var1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public int getMetadata(int var1) { + return var1 | 8; + } +} diff --git a/src/net/minecraft/src/ItemLog.java b/src/net/minecraft/src/ItemLog.java new file mode 100644 index 0000000..6df1c50 --- /dev/null +++ b/src/net/minecraft/src/ItemLog.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ItemLog extends ItemBlock { + public ItemLog(int var1) { + super(var1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public int getMetadata(int var1) { + return var1; + } +} diff --git a/src/net/minecraft/src/ItemMap.java b/src/net/minecraft/src/ItemMap.java new file mode 100644 index 0000000..9a01213 --- /dev/null +++ b/src/net/minecraft/src/ItemMap.java @@ -0,0 +1,228 @@ +package net.minecraft.src; + +public class ItemMap extends ItemMapBase { + protected ItemMap(int var1) { + super(var1); + this.setMaxStackSize(1); + } + + public MapData func_28023_a(ItemStack var1, World var2) { + (new StringBuilder()).append("map_").append(var1.getItemDamage()).toString(); + MapData var4 = (MapData)var2.func_28103_a(MapData.class, "map_" + var1.getItemDamage()); + if(var4 == null) { + var1.setItemDamage(var2.func_28104_b("map")); + String var3 = "map_" + var1.getItemDamage(); + var4 = new MapData(var3); + var4.field_28164_b = var2.getWorldInfo().getSpawnX(); + var4.field_28163_c = var2.getWorldInfo().getSpawnZ(); + var4.field_28161_e = 3; + var4.field_28162_d = (byte)var2.worldProvider.worldType; + var4.func_28146_a(); + var2.func_28102_a(var3, var4); + } + + return var4; + } + + public void func_28024_a(World var1, Entity var2, MapData var3) { + if(var1.worldProvider.worldType == var3.field_28162_d) { + short var4 = 128; + short var5 = 128; + int var6 = 1 << var3.field_28161_e; + int var7 = var3.field_28164_b; + int var8 = var3.field_28163_c; + int var9 = MathHelper.floor_double(var2.posX - (double)var7) / var6 + var4 / 2; + int var10 = MathHelper.floor_double(var2.posZ - (double)var8) / var6 + var5 / 2; + int var11 = 128 / var6; + if(var1.worldProvider.field_4306_c) { + var11 /= 2; + } + + ++var3.field_28159_g; + + for(int var12 = var9 - var11 + 1; var12 < var9 + var11; ++var12) { + if((var12 & 15) == (var3.field_28159_g & 15)) { + int var13 = 255; + int var14 = 0; + double var15 = 0.0D; + + for(int var17 = var10 - var11 - 1; var17 < var10 + var11; ++var17) { + if(var12 >= 0 && var17 >= -1 && var12 < var4 && var17 < var5) { + int var18 = var12 - var9; + int var19 = var17 - var10; + boolean var20 = var18 * var18 + var19 * var19 > (var11 - 2) * (var11 - 2); + int var21 = (var7 / var6 + var12 - var4 / 2) * var6; + int var22 = (var8 / var6 + var17 - var5 / 2) * var6; + byte var23 = 0; + byte var24 = 0; + byte var25 = 0; + int[] var26 = new int[256]; + Chunk var27 = var1.getChunkFromBlockCoords(var21, var22); + int var28 = var21 & 15; + int var29 = var22 & 15; + int var30 = 0; + double var31 = 0.0D; + int var33; + int var34; + int var35; + int var38; + if(var1.worldProvider.field_4306_c) { + var33 = var21 + var22 * 231871; + var33 = var33 * var33 * 31287121 + var33 * 11; + if((var33 >> 20 & 1) == 0) { + var26[Block.dirt.blockID] += 10; + } else { + var26[Block.stone.blockID] += 10; + } + + var31 = 100.0D; + } else { + for(var33 = 0; var33 < var6; ++var33) { + for(var34 = 0; var34 < var6; ++var34) { + var35 = var27.getHeightValue(var33 + var28, var34 + var29) + 1; + int var36 = 0; + if(var35 > 1) { + boolean var37 = false; + + label164: + while(true) { + var37 = true; + var36 = var27.getBlockID(var33 + var28, var35 - 1, var34 + var29); + if(var36 == 0) { + var37 = false; + } else if(var35 > 0 && var36 > 0 && Block.blocksList[var36].blockMaterial.field_28131_A == MapColor.field_28199_b) { + var37 = false; + } + + if(!var37) { + --var35; + var36 = var27.getBlockID(var33 + var28, var35 - 1, var34 + var29); + } + + if(var37) { + if(var36 == 0 || !Block.blocksList[var36].blockMaterial.getIsLiquid()) { + break; + } + + var38 = var35 - 1; + boolean var39 = false; + + while(true) { + int var43 = var27.getBlockID(var33 + var28, var38--, var34 + var29); + ++var30; + if(var38 <= 0 || var43 == 0 || !Block.blocksList[var43].blockMaterial.getIsLiquid()) { + break label164; + } + } + } + } + } + + var31 += (double)var35 / (double)(var6 * var6); + ++var26[var36]; + } + } + } + + var30 /= var6 * var6; + int var10000 = var23 / (var6 * var6); + var10000 = var24 / (var6 * var6); + var10000 = var25 / (var6 * var6); + var33 = 0; + var34 = 0; + + for(var35 = 0; var35 < 256; ++var35) { + if(var26[var35] > var33) { + var34 = var35; + var33 = var26[var35]; + } + } + + double var41 = (var31 - var15) * 4.0D / (double)(var6 + 4) + ((double)(var12 + var17 & 1) - 0.5D) * 0.4D; + byte var42 = 1; + if(var41 > 0.6D) { + var42 = 2; + } + + if(var41 < -0.6D) { + var42 = 0; + } + + var38 = 0; + if(var34 > 0) { + MapColor var44 = Block.blocksList[var34].blockMaterial.field_28131_A; + if(var44 == MapColor.field_28187_n) { + var41 = (double)var30 * 0.1D + (double)(var12 + var17 & 1) * 0.2D; + var42 = 1; + if(var41 < 0.5D) { + var42 = 2; + } + + if(var41 > 0.9D) { + var42 = 0; + } + } + + var38 = var44.field_28184_q; + } + + var15 = var31; + if(var17 >= 0 && var18 * var18 + var19 * var19 < var11 * var11 && (!var20 || (var12 + var17 & 1) != 0)) { + byte var45 = var3.field_28160_f[var12 + var17 * var4]; + byte var40 = (byte)(var38 * 4 + var42); + if(var45 != var40) { + if(var13 > var17) { + var13 = var17; + } + + if(var14 < var17) { + var14 = var17; + } + + var3.field_28160_f[var12 + var17 * var4] = var40; + } + } + } + } + + if(var13 <= var14) { + var3.func_28153_a(var12, var13, var14); + } + } + } + + } + } + + public void func_28018_a(ItemStack var1, World var2, Entity var3, int var4, boolean var5) { + if(!var2.singleplayerWorld) { + MapData var6 = this.func_28023_a(var1, var2); + if(var3 instanceof EntityPlayer) { + EntityPlayer var7 = (EntityPlayer)var3; + var6.func_28155_a(var7, var1); + } + + if(var5) { + this.func_28024_a(var2, var3, var6); + } + + } + } + + public void func_28020_c(ItemStack var1, World var2, EntityPlayer var3) { + var1.setItemDamage(var2.func_28104_b("map")); + String var4 = "map_" + var1.getItemDamage(); + MapData var5 = new MapData(var4); + var2.func_28102_a(var4, var5); + var5.field_28164_b = MathHelper.floor_double(var3.posX); + var5.field_28163_c = MathHelper.floor_double(var3.posZ); + var5.field_28161_e = 3; + var5.field_28162_d = (byte)var2.worldProvider.worldType; + var5.func_28146_a(); + } + + public Packet func_28022_b(ItemStack var1, World var2, EntityPlayer var3) { + byte[] var4 = this.func_28023_a(var1, var2).func_28154_a(var1, var2, var3); + return var4 == null ? null : new Packet131MapData((short)Item.field_28021_bb.shiftedIndex, (short)var1.getItemDamage(), var4); + } +} diff --git a/src/net/minecraft/src/ItemMapBase.java b/src/net/minecraft/src/ItemMapBase.java new file mode 100644 index 0000000..168e916 --- /dev/null +++ b/src/net/minecraft/src/ItemMapBase.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class ItemMapBase extends Item { + protected ItemMapBase(int var1) { + super(var1); + } + + public boolean func_28019_b() { + return true; + } + + public Packet func_28022_b(ItemStack var1, World var2, EntityPlayer var3) { + return null; + } +} diff --git a/src/net/minecraft/src/ItemMinecart.java b/src/net/minecraft/src/ItemMinecart.java new file mode 100644 index 0000000..9f5f32c --- /dev/null +++ b/src/net/minecraft/src/ItemMinecart.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class ItemMinecart extends Item { + public int minecartType; + + public ItemMinecart(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.minecartType = 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(BlockRail.func_27030_c(var8)) { + if(!var3.singleplayerWorld) { + var3.entityJoinedWorld(new EntityMinecart(var3, (double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), this.minecartType)); + } + + --var1.stackSize; + return true; + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/ItemPainting.java b/src/net/minecraft/src/ItemPainting.java new file mode 100644 index 0000000..07efdb5 --- /dev/null +++ b/src/net/minecraft/src/ItemPainting.java @@ -0,0 +1,39 @@ +package net.minecraft.src; + +public class ItemPainting extends Item { + public ItemPainting(int var1) { + super(var1); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 == 0) { + return false; + } else if(var7 == 1) { + return false; + } else { + byte var8 = 0; + if(var7 == 4) { + var8 = 1; + } + + if(var7 == 3) { + var8 = 2; + } + + if(var7 == 5) { + var8 = 3; + } + + EntityPainting var9 = new EntityPainting(var3, var4, var5, var6, var8); + if(var9.onValidSurface()) { + if(!var3.singleplayerWorld) { + var3.entityJoinedWorld(var9); + } + + --var1.stackSize; + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ItemPickaxe.java b/src/net/minecraft/src/ItemPickaxe.java new file mode 100644 index 0000000..f1a5192 --- /dev/null +++ b/src/net/minecraft/src/ItemPickaxe.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ItemPickaxe extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.cobblestone, Block.stairDouble, Block.stairSingle, Block.stone, Block.sandStone, Block.cobblestoneMossy, Block.oreIron, Block.blockSteel, Block.oreCoal, Block.blockGold, Block.oreGold, Block.oreDiamond, Block.blockDiamond, Block.ice, Block.bloodStone, Block.oreLapis, Block.blockLapis}; + + protected ItemPickaxe(int var1, EnumToolMaterial var2) { + super(var1, 2, var2, blocksEffectiveAgainst); + } + + public boolean canHarvestBlock(Block var1) { + return var1 == Block.obsidian ? this.toolMaterial.getHarvestLevel() == 3 : (var1 != Block.blockDiamond && var1 != Block.oreDiamond ? (var1 != Block.blockGold && var1 != Block.oreGold ? (var1 != Block.blockSteel && var1 != Block.oreIron ? (var1 != Block.blockLapis && var1 != Block.oreLapis ? (var1 != Block.oreRedstone && var1 != Block.oreRedstoneGlowing ? (var1.blockMaterial == Material.rock ? true : var1.blockMaterial == Material.iron) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2); + } +} diff --git a/src/net/minecraft/src/ItemPiston.java b/src/net/minecraft/src/ItemPiston.java new file mode 100644 index 0000000..c092e62 --- /dev/null +++ b/src/net/minecraft/src/ItemPiston.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class ItemPiston extends ItemBlock { + public ItemPiston(int var1) { + super(var1); + } + + public int getMetadata(int var1) { + return 7; + } +} diff --git a/src/net/minecraft/src/ItemRecord.java b/src/net/minecraft/src/ItemRecord.java new file mode 100644 index 0000000..b64a589 --- /dev/null +++ b/src/net/minecraft/src/ItemRecord.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class ItemRecord extends Item { + public final 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) { + if(var3.singleplayerWorld) { + return true; + } else { + ((BlockJukeBox)Block.jukebox).ejectRecord(var3, var4, var5, var6, this.shiftedIndex); + var3.func_28101_a((EntityPlayer)null, 1005, var4, var5, var6, this.shiftedIndex); + --var1.stackSize; + return true; + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/ItemRedstone.java b/src/net/minecraft/src/ItemRedstone.java new file mode 100644 index 0000000..0cb0e19 --- /dev/null +++ b/src/net/minecraft/src/ItemRedstone.java @@ -0,0 +1,46 @@ +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(var3.getBlockId(var4, var5, var6) != Block.snow.blockID) { + if(var7 == 0) { + --var5; + } + + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + + if(!var3.isAirBlock(var4, var5, var6)) { + return false; + } + } + + if(Block.redstoneWire.canPlaceBlockAt(var3, var4, var5, var6)) { + --var1.stackSize; + var3.setBlockWithNotify(var4, var5, var6, Block.redstoneWire.blockID); + } + + return true; + } +} diff --git a/src/net/minecraft/src/ItemReed.java b/src/net/minecraft/src/ItemReed.java new file mode 100644 index 0000000..4c21aae --- /dev/null +++ b/src/net/minecraft/src/ItemReed.java @@ -0,0 +1,56 @@ +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.canBlockBePlacedAt(this.field_253_a, var4, var5, var6, false, var7)) { + 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); + Block.blocksList[this.field_253_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.getVolume() + 1.0F) / 2.0F, var8.stepSound.getPitch() * 0.8F); + --var1.stackSize; + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ItemSaddle.java b/src/net/minecraft/src/ItemSaddle.java new file mode 100644 index 0000000..a023d05 --- /dev/null +++ b/src/net/minecraft/src/ItemSaddle.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +public class ItemSaddle extends Item { + public ItemSaddle(int var1) { + super(var1); + this.maxStackSize = 1; + } + + public void saddleEntity(ItemStack var1, EntityLiving var2) { + if(var2 instanceof EntityPig) { + EntityPig var3 = (EntityPig)var2; + if(!var3.getSaddled()) { + var3.setSaddled(true); + --var1.stackSize; + } + } + + } + + public boolean hitEntity(ItemStack var1, EntityLiving var2, EntityLiving var3) { + this.saddleEntity(var1, var2); + return true; + } +} diff --git a/src/net/minecraft/src/ItemSapling.java b/src/net/minecraft/src/ItemSapling.java new file mode 100644 index 0000000..de04e48 --- /dev/null +++ b/src/net/minecraft/src/ItemSapling.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ItemSapling extends ItemBlock { + public ItemSapling(int var1) { + super(var1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public int getMetadata(int var1) { + return var1; + } +} diff --git a/src/net/minecraft/src/ItemSeeds.java b/src/net/minecraft/src/ItemSeeds.java new file mode 100644 index 0000000..613c01c --- /dev/null +++ b/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.isAirBlock(var4, var5 + 1, var6)) { + var3.setBlockWithNotify(var4, var5 + 1, var6, this.field_271_a); + --var1.stackSize; + return true; + } else { + return false; + } + } + } +} diff --git a/src/net/minecraft/src/ItemShears.java b/src/net/minecraft/src/ItemShears.java new file mode 100644 index 0000000..2b83598 --- /dev/null +++ b/src/net/minecraft/src/ItemShears.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class ItemShears extends Item { + public ItemShears(int var1) { + super(var1); + this.setMaxStackSize(1); + this.setMaxDamage(238); + } + + public boolean func_25007_a(ItemStack var1, int var2, int var3, int var4, int var5, EntityLiving var6) { + if(var2 == Block.leaves.blockID || var2 == Block.web.blockID) { + var1.damageItem(1, var6); + } + + return super.func_25007_a(var1, var2, var3, var4, var5, var6); + } + + public boolean canHarvestBlock(Block var1) { + return var1.blockID == Block.web.blockID; + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + return var2.blockID != Block.web.blockID && var2.blockID != Block.leaves.blockID ? (var2.blockID == Block.cloth.blockID ? 5.0F : super.getStrVsBlock(var1, var2)) : 15.0F; + } +} diff --git a/src/net/minecraft/src/ItemSign.java b/src/net/minecraft/src/ItemSign.java new file mode 100644 index 0000000..e5cd1bf --- /dev/null +++ b/src/net/minecraft/src/ItemSign.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +public class ItemSign extends Item { + public ItemSign(int var1) { + super(var1); + 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).isSolid()) { + return false; + } else { + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + + if(!Block.signPost.canPlaceBlockAt(var3, var4, var5, var6)) { + return false; + } else { + if(var7 == 1) { + var3.setBlockAndMetadataWithNotify(var4, var5, var6, Block.signPost.blockID, MathHelper.floor_double((double)((var2.rotationYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15); + } else { + var3.setBlockAndMetadataWithNotify(var4, var5, var6, Block.signWall.blockID, var7); + } + + --var1.stackSize; + TileEntitySign var8 = (TileEntitySign)var3.getBlockTileEntity(var4, var5, var6); + if(var8 != null) { + var2.displayGUIEditSign(var8); + } + + return true; + } + } + } +} diff --git a/src/net/minecraft/src/ItemSlab.java b/src/net/minecraft/src/ItemSlab.java new file mode 100644 index 0000000..4badfc5 --- /dev/null +++ b/src/net/minecraft/src/ItemSlab.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ItemSlab extends ItemBlock { + public ItemSlab(int var1) { + super(var1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public int getMetadata(int var1) { + return var1; + } +} diff --git a/src/net/minecraft/src/ItemSnowball.java b/src/net/minecraft/src/ItemSnowball.java new file mode 100644 index 0000000..5651b69 --- /dev/null +++ b/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 / (itemRand.nextFloat() * 0.4F + 0.8F)); + if(!var2.singleplayerWorld) { + var2.entityJoinedWorld(new EntitySnowball(var2, var3)); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ItemSoup.java b/src/net/minecraft/src/ItemSoup.java new file mode 100644 index 0000000..22bf8b8 --- /dev/null +++ b/src/net/minecraft/src/ItemSoup.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public class ItemSoup extends ItemFood { + public ItemSoup(int var1, int var2) { + super(var1, var2, false); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + super.onItemRightClick(var1, var2, var3); + return new ItemStack(Item.bowlEmpty); + } +} diff --git a/src/net/minecraft/src/ItemSpade.java b/src/net/minecraft/src/ItemSpade.java new file mode 100644 index 0000000..0595096 --- /dev/null +++ b/src/net/minecraft/src/ItemSpade.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ItemSpade extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.grass, Block.dirt, Block.sand, Block.gravel, Block.snow, Block.blockSnow, Block.blockClay, Block.tilledField}; + + public ItemSpade(int var1, EnumToolMaterial var2) { + super(var1, 1, var2, blocksEffectiveAgainst); + } + + public boolean canHarvestBlock(Block var1) { + return var1 == Block.snow ? true : var1 == Block.blockSnow; + } +} diff --git a/src/net/minecraft/src/ItemStack.java b/src/net/minecraft/src/ItemStack.java new file mode 100644 index 0000000..9a94f7c --- /dev/null +++ b/src/net/minecraft/src/ItemStack.java @@ -0,0 +1,210 @@ +package net.minecraft.src; + +public final class ItemStack { + public int stackSize; + public int animationsToGo; + public int itemID; + private int itemDamage; + + public ItemStack(Block var1) { + this((Block)var1, 1); + } + + public ItemStack(Block var1, int var2) { + this(var1.blockID, var2, 0); + } + + public ItemStack(Block var1, int var2, int var3) { + this(var1.blockID, var2, var3); + } + + public ItemStack(Item var1) { + this(var1.shiftedIndex, 1, 0); + } + + public ItemStack(Item var1, int var2) { + this(var1.shiftedIndex, var2, 0); + } + + public ItemStack(Item var1, int var2, int var3) { + this(var1.shiftedIndex, var2, var3); + } + + 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 ItemStack splitStack(int var1) { + this.stackSize -= var1; + return new ItemStack(this.itemID, var1, this.itemDamage); + } + + public Item getItem() { + return Item.itemsList[this.itemID]; + } + + public boolean useItem(EntityPlayer var1, World var2, int var3, int var4, int var5, int var6) { + boolean var7 = this.getItem().onItemUse(this, var1, var2, var3, var4, var5, var6); + if(var7) { + var1.addStat(StatList.field_25107_A[this.itemID], 1); + } + + return var7; + } + + 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 boolean func_21132_c() { + return this.getMaxStackSize() > 1 && (!this.isItemStackDamageable() || !this.isItemDamaged()); + } + + public boolean isItemStackDamageable() { + return Item.itemsList[this.itemID].getMaxDamage() > 0; + } + + public boolean getHasSubtypes() { + return Item.itemsList[this.itemID].getHasSubtypes(); + } + + public boolean isItemDamaged() { + return this.isItemStackDamageable() && this.itemDamage > 0; + } + + public int getItemDamageForDisplay() { + return this.itemDamage; + } + + public int getItemDamage() { + return this.itemDamage; + } + + public void setItemDamage(int var1) { + this.itemDamage = var1; + } + + public int getMaxDamage() { + return Item.itemsList[this.itemID].getMaxDamage(); + } + + public void damageItem(int var1, Entity var2) { + if(this.isItemStackDamageable()) { + this.itemDamage += var1; + if(this.itemDamage > this.getMaxDamage()) { + if(var2 instanceof EntityPlayer) { + ((EntityPlayer)var2).addStat(StatList.field_25105_B[this.itemID], 1); + } + + --this.stackSize; + if(this.stackSize < 0) { + this.stackSize = 0; + } + + this.itemDamage = 0; + } + + } + } + + public void hitEntity(EntityLiving var1, EntityPlayer var2) { + boolean var3 = Item.itemsList[this.itemID].hitEntity(this, var1, var2); + if(var3) { + var2.addStat(StatList.field_25107_A[this.itemID], 1); + } + + } + + public void func_25124_a(int var1, int var2, int var3, int var4, EntityPlayer var5) { + boolean var6 = Item.itemsList[this.itemID].func_25007_a(this, var1, var2, var3, var4, var5); + if(var6) { + var5.addStat(StatList.field_25107_A[this.itemID], 1); + } + + } + + public int getDamageVsEntity(Entity var1) { + return Item.itemsList[this.itemID].getDamageVsEntity(var1); + } + + public boolean canHarvestBlock(Block var1) { + return Item.itemsList[this.itemID].canHarvestBlock(var1); + } + + public void func_577_a(EntityPlayer var1) { + } + + public void useItemOnEntity(EntityLiving var1) { + Item.itemsList[this.itemID].saddleEntity(this, var1); + } + + public ItemStack copy() { + return new ItemStack(this.itemID, this.stackSize, this.itemDamage); + } + + public static boolean areItemStacksEqual(ItemStack var0, ItemStack var1) { + return var0 == null && var1 == null ? true : (var0 != null && var1 != null ? var0.isItemStackEqual(var1) : false); + } + + private boolean isItemStackEqual(ItemStack var1) { + return this.stackSize != var1.stackSize ? false : (this.itemID != var1.itemID ? false : this.itemDamage == var1.itemDamage); + } + + public boolean isItemEqual(ItemStack var1) { + return this.itemID == var1.itemID && this.itemDamage == var1.itemDamage; + } + + public static ItemStack func_20117_a(ItemStack var0) { + return var0 == null ? null : var0.copy(); + } + + public String toString() { + return this.stackSize + "x" + Item.itemsList[this.itemID].getItemName() + "@" + this.itemDamage; + } + + public void func_28143_a(World var1, Entity var2, int var3, boolean var4) { + if(this.animationsToGo > 0) { + --this.animationsToGo; + } + + Item.itemsList[this.itemID].func_28018_a(this, var1, var2, var3, var4); + } + + public void func_28142_b(World var1, EntityPlayer var2) { + var2.addStat(StatList.field_25093_z[this.itemID], this.stackSize); + Item.itemsList[this.itemID].func_28020_c(this, var1, var2); + } + + public boolean func_28144_c(ItemStack var1) { + return this.itemID == var1.itemID && this.stackSize == var1.stackSize && this.itemDamage == var1.itemDamage; + } +} diff --git a/src/net/minecraft/src/ItemSword.java b/src/net/minecraft/src/ItemSword.java new file mode 100644 index 0000000..7b165fe --- /dev/null +++ b/src/net/minecraft/src/ItemSword.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +public class ItemSword extends Item { + private int weaponDamage; + + public ItemSword(int var1, EnumToolMaterial var2) { + super(var1); + this.maxStackSize = 1; + this.setMaxDamage(var2.getMaxUses()); + this.weaponDamage = 4 + var2.getDamageVsEntity() * 2; + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + return var2.blockID == Block.web.blockID ? 15.0F : 1.5F; + } + + public boolean hitEntity(ItemStack var1, EntityLiving var2, EntityLiving var3) { + var1.damageItem(1, var3); + return true; + } + + public boolean func_25007_a(ItemStack var1, int var2, int var3, int var4, int var5, EntityLiving var6) { + var1.damageItem(2, var6); + return true; + } + + public int getDamageVsEntity(Entity var1) { + return this.weaponDamage; + } + + public boolean canHarvestBlock(Block var1) { + return var1.blockID == Block.web.blockID; + } +} diff --git a/src/net/minecraft/src/ItemTool.java b/src/net/minecraft/src/ItemTool.java new file mode 100644 index 0000000..a725892 --- /dev/null +++ b/src/net/minecraft/src/ItemTool.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +public class ItemTool extends Item { + private Block[] blocksEffectiveAgainst; + private float efficiencyOnProperMaterial = 4.0F; + private int damageVsEntity; + protected EnumToolMaterial toolMaterial; + + protected ItemTool(int var1, int var2, EnumToolMaterial var3, Block[] var4) { + super(var1); + this.toolMaterial = var3; + this.blocksEffectiveAgainst = var4; + this.maxStackSize = 1; + this.setMaxDamage(var3.getMaxUses()); + this.efficiencyOnProperMaterial = var3.getEfficiencyOnProperMaterial(); + this.damageVsEntity = var2 + var3.getDamageVsEntity(); + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + for(int var3 = 0; var3 < this.blocksEffectiveAgainst.length; ++var3) { + if(this.blocksEffectiveAgainst[var3] == var2) { + return this.efficiencyOnProperMaterial; + } + } + + return 1.0F; + } + + public boolean hitEntity(ItemStack var1, EntityLiving var2, EntityLiving var3) { + var1.damageItem(2, var3); + return true; + } + + public boolean func_25007_a(ItemStack var1, int var2, int var3, int var4, int var5, EntityLiving var6) { + var1.damageItem(1, var6); + return true; + } + + public int getDamageVsEntity(Entity var1) { + return this.damageVsEntity; + } +} diff --git a/src/net/minecraft/src/MCHash.java b/src/net/minecraft/src/MCHash.java new file mode 100644 index 0000000..907936a --- /dev/null +++ b/src/net/minecraft/src/MCHash.java @@ -0,0 +1,151 @@ +package net.minecraft.src; + +public class MCHash { + private transient MCHashEntry[] slots = new MCHashEntry[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(MCHashEntry var3 = this.slots[getSlotIndex(var2, this.slots.length)]; var3 != null; var3 = var3.nextEntry) { + if(var3.hashEntry == var1) { + return var3.valueEntry; + } + } + + return null; + } + + public boolean containsItem(int var1) { + return this.lookupEntry(var1) != null; + } + + final MCHashEntry lookupEntry(int var1) { + int var2 = computeHash(var1); + + for(MCHashEntry var3 = this.slots[getSlotIndex(var2, this.slots.length)]; var3 != null; var3 = var3.nextEntry) { + if(var3.hashEntry == var1) { + return var3; + } + } + + return null; + } + + public void addKey(int var1, Object var2) { + int var3 = computeHash(var1); + int var4 = getSlotIndex(var3, this.slots.length); + + for(MCHashEntry var5 = this.slots[var4]; var5 != null; var5 = var5.nextEntry) { + if(var5.hashEntry == var1) { + var5.valueEntry = var2; + } + } + + ++this.versionStamp; + this.insert(var3, var1, var2, var4); + } + + private void grow(int var1) { + MCHashEntry[] var2 = this.slots; + int var3 = var2.length; + if(var3 == 1073741824) { + this.threshold = Integer.MAX_VALUE; + } else { + MCHashEntry[] var4 = new MCHashEntry[var1]; + this.copyTo(var4); + this.slots = var4; + this.threshold = (int)((float)var1 * this.growFactor); + } + } + + private void copyTo(MCHashEntry[] var1) { + MCHashEntry[] var2 = this.slots; + int var3 = var1.length; + + for(int var4 = 0; var4 < var2.length; ++var4) { + MCHashEntry var5 = var2[var4]; + if(var5 != null) { + var2[var4] = null; + + MCHashEntry var6; + do { + var6 = var5.nextEntry; + int var7 = getSlotIndex(var5.slotHash, var3); + var5.nextEntry = var1[var7]; + var1[var7] = var5; + var5 = var6; + } while(var6 != null); + } + } + + } + + public Object removeObject(int var1) { + MCHashEntry var2 = this.removeEntry(var1); + return var2 == null ? null : var2.valueEntry; + } + + final MCHashEntry removeEntry(int var1) { + int var2 = computeHash(var1); + int var3 = getSlotIndex(var2, this.slots.length); + MCHashEntry var4 = this.slots[var3]; + + MCHashEntry var5; + MCHashEntry var6; + for(var5 = var4; var5 != null; var5 = var6) { + var6 = var5.nextEntry; + if(var5.hashEntry == var1) { + ++this.versionStamp; + --this.count; + if(var4 == var5) { + this.slots[var3] = var6; + } else { + var4.nextEntry = var6; + } + + return var5; + } + + var4 = var5; + } + + return var5; + } + + public void clearMap() { + ++this.versionStamp; + MCHashEntry[] 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) { + MCHashEntry var5 = this.slots[var4]; + this.slots[var4] = new MCHashEntry(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/src/net/minecraft/src/MCHashEntry.java b/src/net/minecraft/src/MCHashEntry.java new file mode 100644 index 0000000..9eef61f --- /dev/null +++ b/src/net/minecraft/src/MCHashEntry.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +class MCHashEntry { + final int hashEntry; + Object valueEntry; + MCHashEntry nextEntry; + final int slotHash; + + MCHashEntry(int var1, int var2, Object var3, MCHashEntry var4) { + this.valueEntry = var3; + this.nextEntry = var4; + this.hashEntry = var2; + this.slotHash = var1; + } + + public final int getHash() { + return this.hashEntry; + } + + public final Object getValue() { + return this.valueEntry; + } + + public final boolean equals(Object var1) { + if(!(var1 instanceof MCHashEntry)) { + return false; + } else { + MCHashEntry var2 = (MCHashEntry)var1; + Integer var3 = Integer.valueOf(this.getHash()); + Integer var4 = Integer.valueOf(var2.getHash()); + if(var3 == var4 || var3 != null && var3.equals(var4)) { + Object var5 = this.getValue(); + Object var6 = var2.getValue(); + if(var5 == var6 || var5 != null && var5.equals(var6)) { + return true; + } + } + + return false; + } + } + + public final int hashCode() { + return MCHash.getHash(this.hashEntry); + } + + public final String toString() { + return this.getHash() + "=" + this.getValue(); + } +} diff --git a/src/net/minecraft/src/MapColor.java b/src/net/minecraft/src/MapColor.java new file mode 100644 index 0000000..44abfdd --- /dev/null +++ b/src/net/minecraft/src/MapColor.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class MapColor { + public static final MapColor[] field_28200_a = new MapColor[16]; + public static final MapColor field_28199_b = new MapColor(0, 0); + public static final MapColor field_28198_c = new MapColor(1, 8368696); + public static final MapColor field_28197_d = new MapColor(2, 16247203); + public static final MapColor field_28196_e = new MapColor(3, 10987431); + public static final MapColor field_28195_f = new MapColor(4, 16711680); + public static final MapColor field_28194_g = new MapColor(5, 10526975); + public static final MapColor field_28193_h = new MapColor(6, 10987431); + public static final MapColor field_28192_i = new MapColor(7, 31744); + public static final MapColor field_28191_j = new MapColor(8, 16777215); + public static final MapColor field_28190_k = new MapColor(9, 10791096); + public static final MapColor field_28189_l = new MapColor(10, 12020271); + public static final MapColor field_28188_m = new MapColor(11, 7368816); + public static final MapColor field_28187_n = new MapColor(12, 4210943); + public static final MapColor field_28186_o = new MapColor(13, 6837042); + public final int field_28185_p; + public final int field_28184_q; + + private MapColor(int var1, int var2) { + this.field_28184_q = var1; + this.field_28185_p = var2; + field_28200_a[var1] = this; + } +} diff --git a/src/net/minecraft/src/MapCoord.java b/src/net/minecraft/src/MapCoord.java new file mode 100644 index 0000000..c8149bd --- /dev/null +++ b/src/net/minecraft/src/MapCoord.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class MapCoord { + public byte field_28202_a; + public byte field_28201_b; + public byte field_28205_c; + public byte field_28204_d; + final MapData field_28203_e; + + public MapCoord(MapData var1, byte var2, byte var3, byte var4, byte var5) { + this.field_28203_e = var1; + this.field_28202_a = var2; + this.field_28201_b = var3; + this.field_28205_c = var4; + this.field_28204_d = var5; + } +} diff --git a/src/net/minecraft/src/MapData.java b/src/net/minecraft/src/MapData.java new file mode 100644 index 0000000..b260b1d --- /dev/null +++ b/src/net/minecraft/src/MapData.java @@ -0,0 +1,134 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class MapData extends MapDataBase { + public int field_28164_b; + public int field_28163_c; + public byte field_28162_d; + public byte field_28161_e; + public byte[] field_28160_f = new byte[16384]; + public int field_28159_g; + public List field_28158_h = new ArrayList(); + private Map field_28156_j = new HashMap(); + public List field_28157_i = new ArrayList(); + + public MapData(String var1) { + super(var1); + } + + public void func_28148_a(NBTTagCompound var1) { + this.field_28162_d = var1.getByte("dimension"); + this.field_28164_b = var1.getInteger("xCenter"); + this.field_28163_c = var1.getInteger("zCenter"); + this.field_28161_e = var1.getByte("scale"); + if(this.field_28161_e < 0) { + this.field_28161_e = 0; + } + + if(this.field_28161_e > 4) { + this.field_28161_e = 4; + } + + short var2 = var1.getShort("width"); + short var3 = var1.getShort("height"); + if(var2 == 128 && var3 == 128) { + this.field_28160_f = var1.getByteArray("colors"); + } else { + byte[] var4 = var1.getByteArray("colors"); + this.field_28160_f = new byte[16384]; + int var5 = (128 - var2) / 2; + int var6 = (128 - var3) / 2; + + for(int var7 = 0; var7 < var3; ++var7) { + int var8 = var7 + var6; + if(var8 >= 0 || var8 < 128) { + for(int var9 = 0; var9 < var2; ++var9) { + int var10 = var9 + var5; + if(var10 >= 0 || var10 < 128) { + this.field_28160_f[var10 + var8 * 128] = var4[var9 + var7 * var2]; + } + } + } + } + } + + } + + public void func_28147_b(NBTTagCompound var1) { + var1.setByte("dimension", this.field_28162_d); + var1.setInteger("xCenter", this.field_28164_b); + var1.setInteger("zCenter", this.field_28163_c); + var1.setByte("scale", this.field_28161_e); + var1.setShort("width", (short)128); + var1.setShort("height", (short)128); + var1.setByteArray("colors", this.field_28160_f); + } + + public void func_28155_a(EntityPlayer var1, ItemStack var2) { + if(!this.field_28156_j.containsKey(var1)) { + MapInfo var3 = new MapInfo(this, var1); + this.field_28156_j.put(var1, var3); + this.field_28158_h.add(var3); + } + + this.field_28157_i.clear(); + + for(int var14 = 0; var14 < this.field_28158_h.size(); ++var14) { + MapInfo var4 = (MapInfo)this.field_28158_h.get(var14); + if(!var4.field_28120_a.isDead && var4.field_28120_a.inventory.func_28010_c(var2)) { + float var5 = (float)(var4.field_28120_a.posX - (double)this.field_28164_b) / (float)(1 << this.field_28161_e); + float var6 = (float)(var4.field_28120_a.posZ - (double)this.field_28163_c) / (float)(1 << this.field_28161_e); + byte var7 = 64; + byte var8 = 64; + if(var5 >= (float)(-var7) && var6 >= (float)(-var8) && var5 <= (float)var7 && var6 <= (float)var8) { + byte var9 = 0; + byte var10 = (byte)((int)((double)(var5 * 2.0F) + 0.5D)); + byte var11 = (byte)((int)((double)(var6 * 2.0F) + 0.5D)); + byte var12 = (byte)((int)((double)(var1.rotationYaw * 16.0F / 360.0F) + 0.5D)); + if(this.field_28162_d < 0) { + int var13 = this.field_28159_g / 10; + var12 = (byte)(var13 * var13 * 34187121 + var13 * 121 >> 15 & 15); + } + + if(var4.field_28120_a.dimension == this.field_28162_d) { + this.field_28157_i.add(new MapCoord(this, var9, var10, var11, var12)); + } + } + } else { + this.field_28156_j.remove(var4.field_28120_a); + this.field_28158_h.remove(var4); + } + } + + } + + public byte[] func_28154_a(ItemStack var1, World var2, EntityPlayer var3) { + MapInfo var4 = (MapInfo)this.field_28156_j.get(var3); + if(var4 == null) { + return null; + } else { + byte[] var5 = var4.func_28118_a(var1); + return var5; + } + } + + public void func_28153_a(int var1, int var2, int var3) { + super.func_28146_a(); + + for(int var4 = 0; var4 < this.field_28158_h.size(); ++var4) { + MapInfo var5 = (MapInfo)this.field_28158_h.get(var4); + if(var5.field_28119_b[var1] < 0 || var5.field_28119_b[var1] > var2) { + var5.field_28119_b[var1] = var2; + } + + if(var5.field_28125_c[var1] < 0 || var5.field_28125_c[var1] < var3) { + var5.field_28125_c[var1] = var3; + } + } + + } +} diff --git a/src/net/minecraft/src/MapDataBase.java b/src/net/minecraft/src/MapDataBase.java new file mode 100644 index 0000000..e1489f3 --- /dev/null +++ b/src/net/minecraft/src/MapDataBase.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public abstract class MapDataBase { + public final String field_28152_a; + private boolean field_28151_b; + + public MapDataBase(String var1) { + this.field_28152_a = var1; + } + + public abstract void func_28148_a(NBTTagCompound var1); + + public abstract void func_28147_b(NBTTagCompound var1); + + public void func_28146_a() { + this.func_28149_a(true); + } + + public void func_28149_a(boolean var1) { + this.field_28151_b = var1; + } + + public boolean func_28150_b() { + return this.field_28151_b; + } +} diff --git a/src/net/minecraft/src/MapGenBase.java b/src/net/minecraft/src/MapGenBase.java new file mode 100644 index 0000000..2de6bfa --- /dev/null +++ b/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 rand = new Random(); + + public void func_667_a(IChunkProvider var1, World var2, int var3, int var4, byte[] var5) { + int var6 = this.field_947_a; + this.rand.setSeed(var2.getRandomSeed()); + long var7 = this.rand.nextLong() / 2L * 2L + 1L; + long var9 = this.rand.nextLong() / 2L * 2L + 1L; + + for(int var11 = var3 - var6; var11 <= var3 + var6; ++var11) { + for(int var12 = var4 - var6; var12 <= var4 + var6; ++var12) { + this.rand.setSeed((long)var11 * var7 + (long)var12 * var9 ^ var2.getRandomSeed()); + 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/src/net/minecraft/src/MapGenCaves.java b/src/net/minecraft/src/MapGenCaves.java new file mode 100644 index 0000000..92cc4a0 --- /dev/null +++ b/src/net/minecraft/src/MapGenCaves.java @@ -0,0 +1,186 @@ +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.releaseEntitySkin(var1, var2, var3, var4, var6, var8, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void releaseEntitySkin(int var1, int var2, byte[] var3, double var4, double var6, double var8, float var10, float var11, float var12, int var13, int var14, double var15) { + double var17 = (double)(var1 * 16 + 8); + double var19 = (double)(var2 * 16 + 8); + float var21 = 0.0F; + float var22 = 0.0F; + Random var23 = new Random(this.rand.nextLong()); + if(var14 <= 0) { + 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.releaseEntitySkin(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.releaseEntitySkin(var1, var2, var3, var4, var6, var8, var23.nextFloat() * 0.5F + 0.5F, var11 + (float)Math.PI * 0.5F, var12 / 3.0F, var13, var14, 1.0D); + return; + } + + if(var52 || var23.nextInt(4) != 0) { + double var33 = var4 - var17; + double var35 = var8 - var19; + double var37 = (double)(var14 - var13); + double var39 = (double)(var10 + 2.0F + 16.0F); + if(var33 * var33 + var35 * var35 - var37 * var37 > var39 * var39) { + return; + } + + if(var4 >= var17 - 16.0D - var27 * 2.0D && var8 >= var19 - 16.0D - var27 * 2.0D && var4 <= var17 + 16.0D + var27 * 2.0D && var8 <= var19 + 16.0D + var27 * 2.0D) { + int var53 = MathHelper.floor_double(var4 - var27) - var1 * 16 - 1; + int var34 = MathHelper.floor_double(var4 + var27) - var1 * 16 + 1; + int var54 = MathHelper.floor_double(var6 - var29) - 1; + int var36 = MathHelper.floor_double(var6 + var29) + 1; + int var55 = MathHelper.floor_double(var8 - var27) - var2 * 16 - 1; + int var38 = MathHelper.floor_double(var8 + var27) - var2 * 16 + 1; + if(var53 < 0) { + var53 = 0; + } + + if(var34 > 16) { + var34 = 16; + } + + if(var54 < 1) { + var54 = 1; + } + + if(var36 > 120) { + var36 = 120; + } + + if(var55 < 0) { + var55 = 0; + } + + if(var38 > 16) { + var38 = 16; + } + + boolean var56 = false; + + int var40; + int var43; + for(var40 = var53; !var56 && var40 < var34; ++var40) { + for(int var41 = var55; !var56 && var41 < var38; ++var41) { + for(int var42 = var36 + 1; !var56 && var42 >= var54 - 1; --var42) { + var43 = (var40 * 16 + var41) * 128 + var42; + if(var42 >= 0 && var42 < 128) { + if(var3[var43] == Block.waterMoving.blockID || var3[var43] == Block.waterStill.blockID) { + var56 = true; + } + + if(var42 != var54 - 1 && var40 != var53 && var40 != var34 - 1 && var41 != var55 && var41 != var38 - 1) { + var42 = var54; + } + } + } + } + } + + if(!var56) { + for(var40 = var53; var40 < var34; ++var40) { + double var57 = ((double)(var40 + var1 * 16) + 0.5D - var4) / var27; + + for(var43 = var55; var43 < var38; ++var43) { + double var44 = ((double)(var43 + var2 * 16) + 0.5D - var8) / var27; + int var46 = (var40 * 16 + var43) * 128 + var36; + boolean var47 = false; + if(var57 * var57 + var44 * var44 < 1.0D) { + for(int var48 = var36 - 1; var48 >= var54; --var48) { + double var49 = ((double)var48 + 0.5D - var6) / var29; + if(var49 > -0.7D && var57 * var57 + var49 * var49 + var44 * var44 < 1.0D) { + byte var51 = var3[var46]; + if(var51 == Block.grass.blockID) { + var47 = true; + } + + if(var51 == Block.stone.blockID || var51 == Block.dirt.blockID || var51 == Block.grass.blockID) { + if(var48 < 10) { + var3[var46] = (byte)Block.lavaMoving.blockID; + } else { + var3[var46] = 0; + if(var47 && var3[var46 - 1] == Block.dirt.blockID) { + var3[var46 - 1] = (byte)Block.grass.blockID; + } + } + } + } + + --var46; + } + } + } + } + + if(var52) { + break; + } + } + } + } + } + + } + + protected void func_666_a(World var1, int var2, int var3, int var4, int var5, byte[] var6) { + int var7 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + if(this.rand.nextInt(15) != 0) { + var7 = 0; + } + + for(int var8 = 0; var8 < var7; ++var8) { + double var9 = (double)(var2 * 16 + this.rand.nextInt(16)); + double var11 = (double)this.rand.nextInt(this.rand.nextInt(120) + 8); + double var13 = (double)(var3 * 16 + this.rand.nextInt(16)); + int var15 = 1; + if(this.rand.nextInt(4) == 0) { + this.func_669_a(var4, var5, var6, var9, var11, var13); + var15 += this.rand.nextInt(4); + } + + for(int var16 = 0; var16 < var15; ++var16) { + float var17 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + this.releaseEntitySkin(var4, var5, var6, var9, var11, var13, var19, var17, var18, 0, 0, 1.0D); + } + } + + } +} diff --git a/src/net/minecraft/src/MapGenCavesHell.java b/src/net/minecraft/src/MapGenCavesHell.java new file mode 100644 index 0000000..d59920c --- /dev/null +++ b/src/net/minecraft/src/MapGenCavesHell.java @@ -0,0 +1,173 @@ +package net.minecraft.src; + +import java.util.Random; + +public class MapGenCavesHell extends MapGenBase { + protected void 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.rand.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.rand.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.lavaMoving.blockID || var3[var43] == Block.lavaStill.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.rand.nextInt(this.rand.nextInt(this.rand.nextInt(10) + 1) + 1); + if(this.rand.nextInt(5) != 0) { + var7 = 0; + } + + for(int var8 = 0; var8 < var7; ++var8) { + double var9 = (double)(var2 * 16 + this.rand.nextInt(16)); + double var11 = (double)this.rand.nextInt(128); + double var13 = (double)(var3 * 16 + this.rand.nextInt(16)); + int var15 = 1; + if(this.rand.nextInt(4) == 0) { + this.func_4106_a(var4, var5, var6, var9, var11, var13); + var15 += this.rand.nextInt(4); + } + + for(int var16 = 0; var16 < var15; ++var16) { + float var17 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + this.func_4105_a(var4, var5, var6, var9, var11, var13, var19 * 2.0F, var17, var18, 0, 0, 0.5D); + } + } + + } +} diff --git a/src/net/minecraft/src/MapInfo.java b/src/net/minecraft/src/MapInfo.java new file mode 100644 index 0000000..8a389e6 --- /dev/null +++ b/src/net/minecraft/src/MapInfo.java @@ -0,0 +1,83 @@ +package net.minecraft.src; + +public class MapInfo { + public final EntityPlayer field_28120_a; + public int[] field_28119_b; + public int[] field_28125_c; + private int field_28123_e; + private int field_28122_f; + private byte[] field_28121_g; + final MapData field_28124_d; + + public MapInfo(MapData var1, EntityPlayer var2) { + this.field_28124_d = var1; + this.field_28119_b = new int[128]; + this.field_28125_c = new int[128]; + this.field_28123_e = 0; + this.field_28122_f = 0; + this.field_28120_a = var2; + + for(int var3 = 0; var3 < this.field_28119_b.length; ++var3) { + this.field_28119_b[var3] = 0; + this.field_28125_c[var3] = 127; + } + + } + + public byte[] func_28118_a(ItemStack var1) { + int var3; + int var10; + if(--this.field_28122_f < 0) { + this.field_28122_f = 4; + byte[] var2 = new byte[this.field_28124_d.field_28157_i.size() * 3 + 1]; + var2[0] = 1; + + for(var3 = 0; var3 < this.field_28124_d.field_28157_i.size(); ++var3) { + MapCoord var4 = (MapCoord)this.field_28124_d.field_28157_i.get(var3); + var2[var3 * 3 + 1] = (byte)(var4.field_28202_a + (var4.field_28204_d & 15) * 16); + var2[var3 * 3 + 2] = var4.field_28201_b; + var2[var3 * 3 + 3] = var4.field_28205_c; + } + + boolean var9 = true; + if(this.field_28121_g != null && this.field_28121_g.length == var2.length) { + for(var10 = 0; var10 < var2.length; ++var10) { + if(var2[var10] != this.field_28121_g[var10]) { + var9 = false; + break; + } + } + } else { + var9 = false; + } + + if(!var9) { + this.field_28121_g = var2; + return var2; + } + } + + for(int var8 = 0; var8 < 10; ++var8) { + var3 = this.field_28123_e * 11 % 128; + ++this.field_28123_e; + if(this.field_28119_b[var3] >= 0) { + var10 = this.field_28125_c[var3] - this.field_28119_b[var3] + 1; + int var5 = this.field_28119_b[var3]; + byte[] var6 = new byte[var10 + 3]; + var6[0] = 0; + var6[1] = (byte)var3; + var6[2] = (byte)var5; + + for(int var7 = 0; var7 < var6.length - 3; ++var7) { + var6[var7 + 3] = this.field_28124_d.field_28160_f[(var7 + var5) * 128 + var3]; + } + + this.field_28125_c[var3] = -1; + this.field_28119_b[var3] = -1; + return var6; + } + } + + return null; + } +} diff --git a/src/net/minecraft/src/MapStorage.java b/src/net/minecraft/src/MapStorage.java new file mode 100644 index 0000000..68ae7a9 --- /dev/null +++ b/src/net/minecraft/src/MapStorage.java @@ -0,0 +1,168 @@ +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.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class MapStorage { + private ISaveHandler field_28180_a; + private Map field_28179_b = new HashMap(); + private List field_28182_c = new ArrayList(); + private Map field_28181_d = new HashMap(); + + public MapStorage(ISaveHandler var1) { + this.field_28180_a = var1; + this.func_28174_b(); + } + + public MapDataBase func_28178_a(Class var1, String var2) { + MapDataBase var3 = (MapDataBase)this.field_28179_b.get(var2); + if(var3 != null) { + return var3; + } else { + if(this.field_28180_a != null) { + try { + File var4 = this.field_28180_a.func_28111_b(var2); + if(var4 != null && var4.exists()) { + try { + var3 = (MapDataBase)var1.getConstructor(new Class[]{String.class}).newInstance(new Object[]{var2}); + } catch (Exception var7) { + throw new RuntimeException("Failed to instantiate " + var1.toString(), var7); + } + + FileInputStream var5 = new FileInputStream(var4); + NBTTagCompound var6 = CompressedStreamTools.func_770_a(var5); + var5.close(); + var3.func_28148_a(var6.getCompoundTag("data")); + } + } catch (Exception var8) { + var8.printStackTrace(); + } + } + + if(var3 != null) { + this.field_28179_b.put(var2, var3); + this.field_28182_c.add(var3); + } + + return var3; + } + } + + public void func_28177_a(String var1, MapDataBase var2) { + if(var2 == null) { + throw new RuntimeException("Can\'t set null data"); + } else { + if(this.field_28179_b.containsKey(var1)) { + this.field_28182_c.remove(this.field_28179_b.remove(var1)); + } + + this.field_28179_b.put(var1, var2); + this.field_28182_c.add(var2); + } + } + + public void func_28176_a() { + for(int var1 = 0; var1 < this.field_28182_c.size(); ++var1) { + MapDataBase var2 = (MapDataBase)this.field_28182_c.get(var1); + if(var2.func_28150_b()) { + this.func_28175_a(var2); + var2.func_28149_a(false); + } + } + + } + + private void func_28175_a(MapDataBase var1) { + if(this.field_28180_a != null) { + try { + File var2 = this.field_28180_a.func_28111_b(var1.field_28152_a); + if(var2 != null) { + NBTTagCompound var3 = new NBTTagCompound(); + var1.func_28147_b(var3); + NBTTagCompound var4 = new NBTTagCompound(); + var4.setCompoundTag("data", var3); + FileOutputStream var5 = new FileOutputStream(var2); + CompressedStreamTools.writeGzippedCompoundToOutputStream(var4, var5); + var5.close(); + } + } catch (Exception var6) { + var6.printStackTrace(); + } + + } + } + + private void func_28174_b() { + try { + this.field_28181_d.clear(); + if(this.field_28180_a == null) { + return; + } + + File var1 = this.field_28180_a.func_28111_b("idcounts"); + if(var1 != null && var1.exists()) { + DataInputStream var2 = new DataInputStream(new FileInputStream(var1)); + NBTTagCompound var3 = CompressedStreamTools.func_774_a(var2); + var2.close(); + Iterator var4 = var3.func_28107_c().iterator(); + + while(var4.hasNext()) { + NBTBase var5 = (NBTBase)var4.next(); + if(var5 instanceof NBTTagShort) { + NBTTagShort var6 = (NBTTagShort)var5; + String var7 = var6.getKey(); + short var8 = var6.shortValue; + this.field_28181_d.put(var7, Short.valueOf(var8)); + } + } + } + } catch (Exception var9) { + var9.printStackTrace(); + } + + } + + public int func_28173_a(String var1) { + Short var2 = (Short)this.field_28181_d.get(var1); + if(var2 == null) { + var2 = Short.valueOf((short)0); + } else { + var2 = Short.valueOf((short)(var2.shortValue() + 1)); + } + + this.field_28181_d.put(var1, var2); + if(this.field_28180_a == null) { + return var2.shortValue(); + } else { + try { + File var3 = this.field_28180_a.func_28111_b("idcounts"); + if(var3 != null) { + NBTTagCompound var4 = new NBTTagCompound(); + Iterator var5 = this.field_28181_d.keySet().iterator(); + + while(var5.hasNext()) { + String var6 = (String)var5.next(); + short var7 = ((Short)this.field_28181_d.get(var6)).shortValue(); + var4.setShort(var6, var7); + } + + DataOutputStream var9 = new DataOutputStream(new FileOutputStream(var3)); + CompressedStreamTools.func_771_a(var4, var9); + var9.close(); + } + } catch (Exception var8) { + var8.printStackTrace(); + } + + return var2.shortValue(); + } + } +} diff --git a/src/net/minecraft/src/Material.java b/src/net/minecraft/src/Material.java new file mode 100644 index 0000000..fbd6d5c --- /dev/null +++ b/src/net/minecraft/src/Material.java @@ -0,0 +1,108 @@ +package net.minecraft.src; + +public class Material { + public static final Material air = new MaterialTransparent(MapColor.field_28199_b); + public static final Material grass = new Material(MapColor.field_28198_c); + public static final Material ground = new Material(MapColor.field_28189_l); + public static final Material wood = (new Material(MapColor.field_28186_o)).setBurning(); + public static final Material rock = (new Material(MapColor.field_28188_m)).func_31058_n(); + public static final Material iron = (new Material(MapColor.field_28193_h)).func_31058_n(); + public static final Material water = (new MaterialLiquid(MapColor.field_28187_n)).setNoPushMobility(); + public static final Material lava = (new MaterialLiquid(MapColor.field_28195_f)).setNoPushMobility(); + public static final Material leaves = (new Material(MapColor.field_28192_i)).setBurning().func_28129_i().setNoPushMobility(); + public static final Material plants = (new MaterialLogic(MapColor.field_28192_i)).setNoPushMobility(); + public static final Material sponge = new Material(MapColor.field_28196_e); + public static final Material cloth = (new Material(MapColor.field_28196_e)).setBurning(); + public static final Material fire = (new MaterialTransparent(MapColor.field_28199_b)).setNoPushMobility(); + public static final Material sand = new Material(MapColor.field_28197_d); + public static final Material circuits = (new MaterialLogic(MapColor.field_28199_b)).setNoPushMobility(); + public static final Material glass = (new Material(MapColor.field_28199_b)).func_28129_i(); + public static final Material tnt = (new Material(MapColor.field_28195_f)).setBurning().func_28129_i(); + public static final Material wug = (new Material(MapColor.field_28192_i)).setNoPushMobility(); + public static final Material ice = (new Material(MapColor.field_28194_g)).func_28129_i(); + public static final Material snow = (new MaterialLogic(MapColor.field_28191_j)).func_27089_f().func_28129_i().func_31058_n().setNoPushMobility(); + public static final Material builtSnow = (new Material(MapColor.field_28191_j)).func_31058_n(); + public static final Material cactus = (new Material(MapColor.field_28192_i)).func_28129_i().setNoPushMobility(); + public static final Material clay = new Material(MapColor.field_28190_k); + public static final Material pumpkin = (new Material(MapColor.field_28192_i)).setNoPushMobility(); + public static final Material portal = (new MaterialPortal(MapColor.field_28199_b)).setImmovableMobility(); + public static final Material cakeMaterial = (new Material(MapColor.field_28199_b)).setNoPushMobility(); + public static final Material web = (new Material(MapColor.field_28196_e)).func_31058_n().setNoPushMobility(); + public static final Material piston = (new Material(MapColor.field_28188_m)).setImmovableMobility(); + private boolean canBurn; + private boolean field_27091_A; + private boolean isTranslucent; + public final MapColor field_28131_A; + private boolean field_31061_G = true; + private int mobilityFlag; + + public Material(MapColor var1) { + this.field_28131_A = var1; + } + + public boolean getIsLiquid() { + return false; + } + + public boolean isSolid() { + return true; + } + + public boolean getCanBlockGrass() { + return true; + } + + public boolean getIsSolid() { + return true; + } + + private Material func_28129_i() { + this.isTranslucent = true; + return this; + } + + private Material func_31058_n() { + this.field_31061_G = false; + return this; + } + + private Material setBurning() { + this.canBurn = true; + return this; + } + + public boolean getBurning() { + return this.canBurn; + } + + public Material func_27089_f() { + this.field_27091_A = true; + return this; + } + + public boolean func_27090_g() { + return this.field_27091_A; + } + + public boolean getIsOpaque() { + return this.isTranslucent ? false : this.getIsSolid(); + } + + public boolean func_31055_i() { + return this.field_31061_G; + } + + public int getMaterialMobility() { + return this.mobilityFlag; + } + + protected Material setNoPushMobility() { + this.mobilityFlag = 1; + return this; + } + + protected Material setImmovableMobility() { + this.mobilityFlag = 2; + return this; + } +} diff --git a/src/net/minecraft/src/MaterialLiquid.java b/src/net/minecraft/src/MaterialLiquid.java new file mode 100644 index 0000000..aaf0fa9 --- /dev/null +++ b/src/net/minecraft/src/MaterialLiquid.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public class MaterialLiquid extends Material { + public MaterialLiquid(MapColor var1) { + super(var1); + this.func_27089_f(); + this.setNoPushMobility(); + } + + public boolean getIsLiquid() { + return true; + } + + public boolean getIsSolid() { + return false; + } + + public boolean isSolid() { + return false; + } +} diff --git a/src/net/minecraft/src/MaterialLogic.java b/src/net/minecraft/src/MaterialLogic.java new file mode 100644 index 0000000..b30bb35 --- /dev/null +++ b/src/net/minecraft/src/MaterialLogic.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class MaterialLogic extends Material { + public MaterialLogic(MapColor var1) { + super(var1); + } + + public boolean isSolid() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean getIsSolid() { + return false; + } +} diff --git a/src/net/minecraft/src/MaterialPortal.java b/src/net/minecraft/src/MaterialPortal.java new file mode 100644 index 0000000..8d18633 --- /dev/null +++ b/src/net/minecraft/src/MaterialPortal.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class MaterialPortal extends Material { + public MaterialPortal(MapColor var1) { + super(var1); + } + + public boolean isSolid() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean getIsSolid() { + return false; + } +} diff --git a/src/net/minecraft/src/MaterialTransparent.java b/src/net/minecraft/src/MaterialTransparent.java new file mode 100644 index 0000000..fb60b5d --- /dev/null +++ b/src/net/minecraft/src/MaterialTransparent.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class MaterialTransparent extends Material { + public MaterialTransparent(MapColor var1) { + super(var1); + this.func_27089_f(); + } + + public boolean isSolid() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean getIsSolid() { + return false; + } +} diff --git a/src/net/minecraft/src/MathHelper.java b/src/net/minecraft/src/MathHelper.java new file mode 100644 index 0000000..5678d0c --- /dev/null +++ b/src/net/minecraft/src/MathHelper.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +public class MathHelper { + private static float[] SIN_TABLE = new float[65536]; + + public static final float sin(float var0) { + return SIN_TABLE[(int)(var0 * 10430.378F) & '\uffff']; + } + + public static final float cos(float var0) { + return SIN_TABLE[(int)(var0 * 10430.378F + 16384.0F) & '\uffff']; + } + + public static final float sqrt_float(float var0) { + return (float)Math.sqrt((double)var0); + } + + public static final float sqrt_double(double var0) { + return (float)Math.sqrt(var0); + } + + public static int floor_float(float var0) { + int var1 = (int)var0; + return var0 < (float)var1 ? var1 - 1 : var1; + } + + public static int floor_double(double var0) { + int var2 = (int)var0; + return var0 < (double)var2 ? var2 - 1 : var2; + } + + public static float abs(float var0) { + return var0 >= 0.0F ? var0 : -var0; + } + + public static double abs_max(double var0, double var2) { + if(var0 < 0.0D) { + var0 = -var0; + } + + if(var2 < 0.0D) { + var2 = -var2; + } + + return var0 > var2 ? var0 : var2; + } + + static { + for(int var0 = 0; var0 < 65536; ++var0) { + SIN_TABLE[var0] = (float)Math.sin((double)var0 * Math.PI * 2.0D / 65536.0D); + } + + } +} diff --git a/src/net/minecraft/src/McRegionChunkLoader.java b/src/net/minecraft/src/McRegionChunkLoader.java new file mode 100644 index 0000000..76758e1 --- /dev/null +++ b/src/net/minecraft/src/McRegionChunkLoader.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; + +public class McRegionChunkLoader implements IChunkLoader { + private final File worldFolder; + + public McRegionChunkLoader(File var1) { + this.worldFolder = var1; + } + + public Chunk loadChunk(World var1, int var2, int var3) throws IOException { + DataInputStream var4 = RegionFileCache.func_22124_c(this.worldFolder, var2, var3); + if(var4 != null) { + NBTTagCompound var5 = CompressedStreamTools.func_774_a(var4); + if(!var5.hasKey("Level")) { + System.out.println("Chunk file at " + var2 + "," + var3 + " is missing level data, skipping"); + return null; + } else if(!var5.getCompoundTag("Level").hasKey("Blocks")) { + System.out.println("Chunk file at " + var2 + "," + var3 + " is missing block data, skipping"); + return null; + } else { + Chunk var6 = ChunkLoader.loadChunkIntoWorldFromCompound(var1, var5.getCompoundTag("Level")); + if(!var6.isAtLocation(var2, var3)) { + System.out.println("Chunk file at " + var2 + "," + var3 + " is in the wrong location; relocating. (Expected " + var2 + ", " + var3 + ", got " + var6.xPosition + ", " + var6.zPosition + ")"); + var5.setInteger("xPos", var2); + var5.setInteger("zPos", var3); + var6 = ChunkLoader.loadChunkIntoWorldFromCompound(var1, var5.getCompoundTag("Level")); + } + + var6.func_25083_h(); + return var6; + } + } else { + return null; + } + } + + public void saveChunk(World var1, Chunk var2) throws IOException { + var1.checkSessionLock(); + + try { + DataOutputStream var3 = RegionFileCache.func_22120_d(this.worldFolder, var2.xPosition, var2.zPosition); + NBTTagCompound var4 = new NBTTagCompound(); + NBTTagCompound var5 = new NBTTagCompound(); + var4.setTag("Level", var5); + ChunkLoader.storeChunkInCompound(var2, var1, var5); + CompressedStreamTools.func_771_a(var4, var3); + var3.close(); + WorldInfo var6 = var1.getWorldInfo(); + var6.setSizeOnDisk(var6.getSizeOnDisk() + (long)RegionFileCache.func_22121_b(this.worldFolder, var2.xPosition, var2.zPosition)); + } catch (Exception var7) { + var7.printStackTrace(); + } + + } + + public void saveExtraChunkData(World var1, Chunk var2) throws IOException { + } + + public void func_661_a() { + } + + public void saveExtraData() { + } +} diff --git a/src/net/minecraft/src/MetadataChunkBlock.java b/src/net/minecraft/src/MetadataChunkBlock.java new file mode 100644 index 0000000..42789c2 --- /dev/null +++ b/src/net/minecraft/src/MetadataChunkBlock.java @@ -0,0 +1,207 @@ +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) { + System.out.println("Light too large, skipping!"); + } else { + int var6 = 0; + int var7 = 0; + boolean var8 = false; + boolean var9 = false; + + for(int var10 = this.field_956_b; var10 <= this.field_960_e; ++var10) { + for(int var11 = this.field_961_d; var11 <= this.field_958_g; ++var11) { + int var12 = var10 >> 4; + int var13 = var11 >> 4; + boolean var14 = false; + if(var8 && var12 == var6 && var13 == var7) { + var14 = var9; + } else { + var14 = var1.doChunksNearChunkExist(var10, 0, var11, 1); + if(var14) { + Chunk var15 = var1.getChunkFromChunkCoords(var10 >> 4, var11 >> 4); + if(var15.func_21101_g()) { + var14 = false; + } + } + + var9 = var14; + var6 = var12; + var7 = var13; + } + + if(var14) { + if(this.field_962_c < 0) { + this.field_962_c = 0; + } + + if(this.field_959_f >= 128) { + this.field_959_f = 127; + } + + for(int var27 = this.field_962_c; var27 <= this.field_959_f; ++var27) { + int var16 = var1.getSavedLightValue(this.field_957_a, var10, var27, var11); + boolean var17 = false; + int var18 = var1.getBlockId(var10, var27, var11); + int var19 = Block.lightOpacity[var18]; + if(var19 == 0) { + var19 = 1; + } + + int var20 = 0; + if(this.field_957_a == EnumSkyBlock.Sky) { + if(var1.canExistingBlockSeeTheSky(var10, var27, var11)) { + var20 = 15; + } + } else if(this.field_957_a == EnumSkyBlock.Block) { + var20 = Block.lightValue[var18]; + } + + int var21; + int var28; + if(var19 >= 15 && var20 == 0) { + var28 = 0; + } else { + var21 = var1.getSavedLightValue(this.field_957_a, var10 - 1, var27, var11); + int var22 = var1.getSavedLightValue(this.field_957_a, var10 + 1, var27, var11); + int var23 = var1.getSavedLightValue(this.field_957_a, var10, var27 - 1, var11); + int var24 = var1.getSavedLightValue(this.field_957_a, var10, var27 + 1, var11); + int var25 = var1.getSavedLightValue(this.field_957_a, var10, var27, var11 - 1); + int var26 = var1.getSavedLightValue(this.field_957_a, var10, var27, var11 + 1); + var28 = var21; + if(var22 > var21) { + var28 = var22; + } + + if(var23 > var28) { + var28 = var23; + } + + if(var24 > var28) { + var28 = var24; + } + + if(var25 > var28) { + var28 = var25; + } + + if(var26 > var28) { + var28 = var26; + } + + var28 -= var19; + if(var28 < 0) { + var28 = 0; + } + + if(var20 > var28) { + var28 = var20; + } + } + + if(var16 != var28) { + var1.setLightValue(this.field_957_a, var10, var27, var11, var28); + var21 = var28 - 1; + if(var21 < 0) { + var21 = 0; + } + + var1.neighborLightPropagationChanged(this.field_957_a, var10 - 1, var27, var11, var21); + var1.neighborLightPropagationChanged(this.field_957_a, var10, var27 - 1, var11, var21); + var1.neighborLightPropagationChanged(this.field_957_a, var10, var27, var11 - 1, var21); + if(var10 + 1 >= this.field_960_e) { + var1.neighborLightPropagationChanged(this.field_957_a, var10 + 1, var27, var11, var21); + } + + if(var27 + 1 >= this.field_959_f) { + var1.neighborLightPropagationChanged(this.field_957_a, var10, var27 + 1, var11, var21); + } + + if(var11 + 1 >= this.field_958_g) { + var1.neighborLightPropagationChanged(this.field_957_a, var10, var27, var11 + 1, var21); + } + } + } + } + } + } + + } + } + + 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/src/net/minecraft/src/MinecraftException.java b/src/net/minecraft/src/MinecraftException.java new file mode 100644 index 0000000..07cfee7 --- /dev/null +++ b/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/src/net/minecraft/src/ModelBed.java b/src/net/minecraft/src/ModelBed.java new file mode 100644 index 0000000..1e5bf51 --- /dev/null +++ b/src/net/minecraft/src/ModelBed.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class ModelBed { + public static final int[] field_22154_a = new int[]{3, 4, 2, 5}; + public static final int[] field_22153_b = new int[]{2, 3, 0, 1}; + public static final int[][] field_22155_c = new int[][]{{1, 0, 3, 2, 5, 4}, {1, 0, 5, 4, 2, 3}, {1, 0, 2, 3, 4, 5}, {1, 0, 4, 5, 3, 2}}; +} diff --git a/src/net/minecraft/src/MovingObjectPosition.java b/src/net/minecraft/src/MovingObjectPosition.java new file mode 100644 index 0000000..1cc1149 --- /dev/null +++ b/src/net/minecraft/src/MovingObjectPosition.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class MovingObjectPosition { + public EnumMovingObjectType typeOfHit; + public int blockX; + public int blockY; + public int blockZ; + public int sideHit; + public Vec3D hitVec; + public Entity entityHit; + + public MovingObjectPosition(int var1, int var2, int var3, int var4, Vec3D var5) { + this.typeOfHit = EnumMovingObjectType.TILE; + 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 = EnumMovingObjectType.ENTITY; + this.entityHit = var1; + this.hitVec = Vec3D.createVector(var1.posX, var1.posY, var1.posZ); + } +} diff --git a/src/net/minecraft/src/NBTBase.java b/src/net/minecraft/src/NBTBase.java new file mode 100644 index 0000000..454b4e7 --- /dev/null +++ b/src/net/minecraft/src/NBTBase.java @@ -0,0 +1,102 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public abstract class NBTBase { + private String key = null; + + abstract void writeTagContents(DataOutput var1) throws IOException; + + abstract void readTagContents(DataInput var1) throws IOException; + + public abstract byte getType(); + + public String getKey() { + return this.key == null ? "" : this.key; + } + + public NBTBase setKey(String var1) { + this.key = var1; + return this; + } + + public static NBTBase 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/src/net/minecraft/src/NBTTagByte.java b/src/net/minecraft/src/NBTTagByte.java new file mode 100644 index 0000000..3260724 --- /dev/null +++ b/src/net/minecraft/src/NBTTagByte.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagByte extends NBTBase { + public byte byteValue; + + public NBTTagByte() { + } + + public NBTTagByte(byte var1) { + this.byteValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeByte(this.byteValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.byteValue = var1.readByte(); + } + + public byte getType() { + return (byte)1; + } + + public String toString() { + return "" + this.byteValue; + } +} diff --git a/src/net/minecraft/src/NBTTagByteArray.java b/src/net/minecraft/src/NBTTagByteArray.java new file mode 100644 index 0000000..0f58fe1 --- /dev/null +++ b/src/net/minecraft/src/NBTTagByteArray.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagByteArray extends NBTBase { + public byte[] byteArray; + + public NBTTagByteArray() { + } + + public NBTTagByteArray(byte[] var1) { + this.byteArray = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeInt(this.byteArray.length); + var1.write(this.byteArray); + } + + void readTagContents(DataInput var1) throws IOException { + int var2 = var1.readInt(); + this.byteArray = new byte[var2]; + var1.readFully(this.byteArray); + } + + public byte getType() { + return (byte)7; + } + + public String toString() { + return "[" + this.byteArray.length + " bytes]"; + } +} diff --git a/src/net/minecraft/src/NBTTagCompound.java b/src/net/minecraft/src/NBTTagCompound.java new file mode 100644 index 0000000..c955ef5 --- /dev/null +++ b/src/net/minecraft/src/NBTTagCompound.java @@ -0,0 +1,141 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class NBTTagCompound extends NBTBase { + private Map tagMap = new HashMap(); + + 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 Collection func_28107_c() { + return this.tagMap.values(); + } + + 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/src/net/minecraft/src/NBTTagDouble.java b/src/net/minecraft/src/NBTTagDouble.java new file mode 100644 index 0000000..cd00968 --- /dev/null +++ b/src/net/minecraft/src/NBTTagDouble.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagDouble extends NBTBase { + public double doubleValue; + + public NBTTagDouble() { + } + + public NBTTagDouble(double var1) { + this.doubleValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeDouble(this.doubleValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.doubleValue = var1.readDouble(); + } + + public byte getType() { + return (byte)6; + } + + public String toString() { + return "" + this.doubleValue; + } +} diff --git a/src/net/minecraft/src/NBTTagEnd.java b/src/net/minecraft/src/NBTTagEnd.java new file mode 100644 index 0000000..a04e7d6 --- /dev/null +++ b/src/net/minecraft/src/NBTTagEnd.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagEnd extends NBTBase { + void readTagContents(DataInput var1) throws IOException { + } + + void writeTagContents(DataOutput var1) throws IOException { + } + + public byte getType() { + return (byte)0; + } + + public String toString() { + return "END"; + } +} diff --git a/src/net/minecraft/src/NBTTagFloat.java b/src/net/minecraft/src/NBTTagFloat.java new file mode 100644 index 0000000..cf59c93 --- /dev/null +++ b/src/net/minecraft/src/NBTTagFloat.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagFloat extends NBTBase { + public float floatValue; + + public NBTTagFloat() { + } + + public NBTTagFloat(float var1) { + this.floatValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeFloat(this.floatValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.floatValue = var1.readFloat(); + } + + public byte getType() { + return (byte)5; + } + + public String toString() { + return "" + this.floatValue; + } +} diff --git a/src/net/minecraft/src/NBTTagInt.java b/src/net/minecraft/src/NBTTagInt.java new file mode 100644 index 0000000..6dfdfe6 --- /dev/null +++ b/src/net/minecraft/src/NBTTagInt.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagInt extends NBTBase { + public int intValue; + + public NBTTagInt() { + } + + public NBTTagInt(int var1) { + this.intValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeInt(this.intValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.intValue = var1.readInt(); + } + + public byte getType() { + return (byte)3; + } + + public String toString() { + return "" + this.intValue; + } +} diff --git a/src/net/minecraft/src/NBTTagList.java b/src/net/minecraft/src/NBTTagList.java new file mode 100644 index 0000000..3ee8caf --- /dev/null +++ b/src/net/minecraft/src/NBTTagList.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class NBTTagList extends NBTBase { + private List tagList = new ArrayList(); + private byte tagType; + + void writeTagContents(DataOutput var1) throws IOException { + if(this.tagList.size() > 0) { + this.tagType = ((NBTBase)this.tagList.get(0)).getType(); + } else { + this.tagType = 1; + } + + var1.writeByte(this.tagType); + var1.writeInt(this.tagList.size()); + + for(int var2 = 0; var2 < this.tagList.size(); ++var2) { + ((NBTBase)this.tagList.get(var2)).writeTagContents(var1); + } + + } + + void readTagContents(DataInput var1) throws IOException { + this.tagType = var1.readByte(); + int var2 = var1.readInt(); + this.tagList = new ArrayList(); + + for(int var3 = 0; var3 < var2; ++var3) { + NBTBase var4 = NBTBase.createTagOfType(this.tagType); + var4.readTagContents(var1); + this.tagList.add(var4); + } + + } + + public byte getType() { + return (byte)9; + } + + public String toString() { + return "" + this.tagList.size() + " entries of type " + NBTBase.getTagName(this.tagType); + } + + public void setTag(NBTBase var1) { + this.tagType = var1.getType(); + this.tagList.add(var1); + } + + public NBTBase tagAt(int var1) { + return (NBTBase)this.tagList.get(var1); + } + + public int tagCount() { + return this.tagList.size(); + } +} diff --git a/src/net/minecraft/src/NBTTagLong.java b/src/net/minecraft/src/NBTTagLong.java new file mode 100644 index 0000000..646f80d --- /dev/null +++ b/src/net/minecraft/src/NBTTagLong.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagLong extends NBTBase { + public long longValue; + + public NBTTagLong() { + } + + public NBTTagLong(long var1) { + this.longValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeLong(this.longValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.longValue = var1.readLong(); + } + + public byte getType() { + return (byte)4; + } + + public String toString() { + return "" + this.longValue; + } +} diff --git a/src/net/minecraft/src/NBTTagShort.java b/src/net/minecraft/src/NBTTagShort.java new file mode 100644 index 0000000..3345229 --- /dev/null +++ b/src/net/minecraft/src/NBTTagShort.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagShort extends NBTBase { + public short shortValue; + + public NBTTagShort() { + } + + public NBTTagShort(short var1) { + this.shortValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeShort(this.shortValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.shortValue = var1.readShort(); + } + + public byte getType() { + return (byte)2; + } + + public String toString() { + return "" + this.shortValue; + } +} diff --git a/src/net/minecraft/src/NBTTagString.java b/src/net/minecraft/src/NBTTagString.java new file mode 100644 index 0000000..93fca6e --- /dev/null +++ b/src/net/minecraft/src/NBTTagString.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagString extends NBTBase { + public String stringValue; + + public NBTTagString() { + } + + public NBTTagString(String var1) { + this.stringValue = var1; + if(var1 == null) { + throw new IllegalArgumentException("Empty string not allowed"); + } + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeUTF(this.stringValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.stringValue = var1.readUTF(); + } + + public byte getType() { + return (byte)8; + } + + public String toString() { + return "" + this.stringValue; + } +} diff --git a/src/net/minecraft/src/NetHandler.java b/src/net/minecraft/src/NetHandler.java new file mode 100644 index 0000000..5c5c3de --- /dev/null +++ b/src/net/minecraft/src/NetHandler.java @@ -0,0 +1,210 @@ +package net.minecraft.src; + +public abstract class NetHandler { + public abstract boolean isServerHandler(); + + public void handleMapChunk(Packet51MapChunk var1) { + } + + public void registerPacket(Packet var1) { + } + + public void handleErrorMessage(String var1, Object[] var2) { + } + + public void handleKickDisconnect(Packet255KickDisconnect var1) { + this.registerPacket(var1); + } + + public void handleLogin(Packet1Login var1) { + this.registerPacket(var1); + } + + public void handleFlying(Packet10Flying var1) { + this.registerPacket(var1); + } + + public void handleMultiBlockChange(Packet52MultiBlockChange var1) { + this.registerPacket(var1); + } + + public void handleBlockDig(Packet14BlockDig var1) { + this.registerPacket(var1); + } + + public void handleBlockChange(Packet53BlockChange var1) { + this.registerPacket(var1); + } + + public void handlePreChunk(Packet50PreChunk var1) { + this.registerPacket(var1); + } + + public void handleNamedEntitySpawn(Packet20NamedEntitySpawn var1) { + this.registerPacket(var1); + } + + public void handleEntity(Packet30Entity var1) { + this.registerPacket(var1); + } + + public void handleEntityTeleport(Packet34EntityTeleport var1) { + this.registerPacket(var1); + } + + public void handlePlace(Packet15Place var1) { + this.registerPacket(var1); + } + + public void handleBlockItemSwitch(Packet16BlockItemSwitch var1) { + this.registerPacket(var1); + } + + public void handleDestroyEntity(Packet29DestroyEntity var1) { + this.registerPacket(var1); + } + + public void handlePickupSpawn(Packet21PickupSpawn var1) { + this.registerPacket(var1); + } + + public void handleCollect(Packet22Collect var1) { + this.registerPacket(var1); + } + + public void handleChat(Packet3Chat var1) { + this.registerPacket(var1); + } + + public void handleVehicleSpawn(Packet23VehicleSpawn var1) { + this.registerPacket(var1); + } + + public void handleArmAnimation(Packet18Animation var1) { + this.registerPacket(var1); + } + + public void func_21001_a(Packet19EntityAction var1) { + this.registerPacket(var1); + } + + public void handleHandshake(Packet2Handshake var1) { + this.registerPacket(var1); + } + + public void handleMobSpawn(Packet24MobSpawn var1) { + this.registerPacket(var1); + } + + public void handleUpdateTime(Packet4UpdateTime var1) { + this.registerPacket(var1); + } + + public void handleSpawnPosition(Packet6SpawnPosition var1) { + this.registerPacket(var1); + } + + public void func_6002_a(Packet28EntityVelocity var1) { + this.registerPacket(var1); + } + + public void func_21002_a(Packet40EntityMetadata var1) { + this.registerPacket(var1); + } + + public void func_6003_a(Packet39AttachEntity var1) { + this.registerPacket(var1); + } + + public void func_6006_a(Packet7UseEntity var1) { + this.registerPacket(var1); + } + + public void func_9001_a(Packet38EntityStatus var1) { + this.registerPacket(var1); + } + + public void handleHealth(Packet8UpdateHealth var1) { + this.registerPacket(var1); + } + + public void handleRespawnPacket(Packet9Respawn var1) { + this.registerPacket(var1); + } + + public void func_12001_a(Packet60Explosion var1) { + this.registerPacket(var1); + } + + public void func_20004_a(Packet100OpenWindow var1) { + this.registerPacket(var1); + } + + public void handleCraftingGuiClosedPacked(Packet101CloseWindow var1) { + this.registerPacket(var1); + } + + public void func_20007_a(Packet102WindowClick var1) { + this.registerPacket(var1); + } + + public void func_20003_a(Packet103SetSlot var1) { + this.registerPacket(var1); + } + + public void func_20001_a(Packet104WindowItems var1) { + this.registerPacket(var1); + } + + public void handleUpdateSign(Packet130UpdateSign var1) { + this.registerPacket(var1); + } + + public void func_20002_a(Packet105UpdateProgressbar var1) { + this.registerPacket(var1); + } + + public void handlePlayerInventory(Packet5PlayerInventory var1) { + this.registerPacket(var1); + } + + public void func_20008_a(Packet106Transaction var1) { + this.registerPacket(var1); + } + + public void func_21003_a(Packet25EntityPainting var1) { + this.registerPacket(var1); + } + + public void func_21004_a(Packet54PlayNoteBlock var1) { + this.registerPacket(var1); + } + + public void func_27001_a(Packet200Statistic var1) { + this.registerPacket(var1); + } + + public void func_22002_a(Packet17Sleep var1) { + this.registerPacket(var1); + } + + public void handleMovementTypePacket(Packet27Position var1) { + this.registerPacket(var1); + } + + public void func_25001_a(Packet70Bed var1) { + this.registerPacket(var1); + } + + public void func_27002_a(Packet71Weather var1) { + this.registerPacket(var1); + } + + public void func_28001_a(Packet131MapData var1) { + this.registerPacket(var1); + } + + public void func_28002_a(Packet61DoorChange var1) { + this.registerPacket(var1); + } +} diff --git a/src/net/minecraft/src/NetLoginHandler.java b/src/net/minecraft/src/NetLoginHandler.java new file mode 100644 index 0000000..ab51536 --- /dev/null +++ b/src/net/minecraft/src/NetLoginHandler.java @@ -0,0 +1,128 @@ +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 loginTimer = 0; + private String username = null; + private Packet1Login packet1login = null; + private String serverId = ""; + + public NetLoginHandler(MinecraftServer var1, Socket var2, String var3) throws IOException { + this.mcServer = var1; + this.netManager = new NetworkManager(var2, var3, this); + this.netManager.chunkDataSendCounter = 0; + } + + public void tryLogin() { + if(this.packet1login != null) { + this.doLogin(this.packet1login); + this.packet1login = null; + } + + if(this.loginTimer++ == 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 != 14) { + if(var1.protocolVersion > 14) { + 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); + if(var2 != null) { + this.mcServer.configManager.readPlayerDataFromFile(var2); + var2.setWorldHandler(this.mcServer.getWorldManager(var2.dimension)); + logger.info(this.getUserAndIPString() + " logged in with entity id " + var2.entityId + " at (" + var2.posX + ", " + var2.posY + ", " + var2.posZ + ")"); + WorldServer var3 = this.mcServer.getWorldManager(var2.dimension); + ChunkCoordinates var4 = var3.getSpawnPoint(); + NetServerHandler var5 = new NetServerHandler(this.mcServer, this.netManager, var2); + var5.sendPacket(new Packet1Login("", var2.entityId, var3.getRandomSeed(), (byte)var3.worldProvider.worldType)); + var5.sendPacket(new Packet6SpawnPosition(var4.posX, var4.posY, var4.posZ)); + this.mcServer.configManager.func_28170_a(var2, var3); + this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat("\u00a7e" + var2.username + " joined the game.")); + this.mcServer.configManager.playerLoggedIn(var2); + var5.teleportTo(var2.posX, var2.posY, var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.mcServer.networkServer.addPlayer(var5); + var5.sendPacket(new Packet4UpdateTime(var3.getWorldTime())); + var2.func_20057_k(); + } + + this.finishedProcessing = true; + } + + public void handleErrorMessage(String var1, Object[] var2) { + logger.info(this.getUserAndIPString() + " lost connection"); + this.finishedProcessing = true; + } + + public void registerPacket(Packet var1) { + this.kickUser("Protocol error"); + } + + public String getUserAndIPString() { + return this.username != null ? this.username + " [" + this.netManager.getRemoteAddress().toString() + "]" : this.netManager.getRemoteAddress().toString(); + } + + public boolean isServerHandler() { + return true; + } + + static String getServerId(NetLoginHandler var0) { + return var0.serverId; + } + + static Packet1Login setLoginPacket(NetLoginHandler var0, Packet1Login var1) { + return var0.packet1login = var1; + } +} diff --git a/src/net/minecraft/src/NetServerHandler.java b/src/net/minecraft/src/NetServerHandler.java new file mode 100644 index 0000000..6b67097 --- /dev/null +++ b/src/net/minecraft/src/NetServerHandler.java @@ -0,0 +1,583 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +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 connectionClosed = false; + private MinecraftServer mcServer; + private EntityPlayerMP playerEntity; + private int field_15_f; + private int field_22004_g; + private int playerInAirTime; + private boolean field_22003_h; + private double lastPosX; + private double lastPosY; + private double lastPosZ; + private boolean hasMoved = true; + private Map field_10_k = new HashMap(); + + public NetServerHandler(MinecraftServer var1, NetworkManager var2, EntityPlayerMP var3) { + this.mcServer = var1; + this.netManager = var2; + var2.setNetHandler(this); + this.playerEntity = var3; + var3.playerNetServerHandler = this; + } + + public void handlePackets() { + this.field_22003_h = false; + this.netManager.processReadPackets(); + if(this.field_15_f - this.field_22004_g > 20) { + this.sendPacket(new Packet0KeepAlive()); + } + + } + + public void kickPlayer(String var1) { + this.playerEntity.func_30002_A(); + this.sendPacket(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.connectionClosed = true; + } + + public void handleMovementTypePacket(Packet27Position var1) { + this.playerEntity.setMovementType(var1.func_22031_c(), var1.func_22028_e(), var1.func_22032_g(), var1.func_22030_h(), var1.func_22029_d(), var1.func_22033_f()); + } + + public void handleFlying(Packet10Flying var1) { + WorldServer var2 = this.mcServer.getWorldManager(this.playerEntity.dimension); + this.field_22003_h = true; + double var3; + if(!this.hasMoved) { + var3 = var1.yPosition - this.lastPosY; + if(var1.xPosition == this.lastPosX && var3 * var3 < 0.01D && var1.zPosition == this.lastPosZ) { + this.hasMoved = true; + } + } + + if(this.hasMoved) { + double var5; + double var7; + double var9; + double var13; + if(this.playerEntity.ridingEntity != null) { + float var26 = this.playerEntity.rotationYaw; + float var4 = this.playerEntity.rotationPitch; + this.playerEntity.ridingEntity.updateRiderPosition(); + var5 = this.playerEntity.posX; + var7 = this.playerEntity.posY; + var9 = this.playerEntity.posZ; + double var27 = 0.0D; + var13 = 0.0D; + if(var1.rotating) { + var26 = var1.yaw; + var4 = var1.pitch; + } + + if(var1.moving && var1.yPosition == -999.0D && var1.stance == -999.0D) { + var27 = var1.xPosition; + var13 = var1.zPosition; + } + + this.playerEntity.onGround = var1.onGround; + this.playerEntity.onUpdateEntity(true); + this.playerEntity.moveEntity(var27, 0.0D, var13); + this.playerEntity.setPositionAndRotation(var5, var7, var9, var26, var4); + this.playerEntity.motionX = var27; + this.playerEntity.motionZ = var13; + if(this.playerEntity.ridingEntity != null) { + var2.func_12017_b(this.playerEntity.ridingEntity, true); + } + + if(this.playerEntity.ridingEntity != null) { + this.playerEntity.ridingEntity.updateRiderPosition(); + } + + this.mcServer.configManager.func_613_b(this.playerEntity); + this.lastPosX = this.playerEntity.posX; + this.lastPosY = this.playerEntity.posY; + this.lastPosZ = this.playerEntity.posZ; + var2.updateEntity(this.playerEntity); + return; + } + + if(this.playerEntity.func_22057_E()) { + this.playerEntity.onUpdateEntity(true); + this.playerEntity.setPositionAndRotation(this.lastPosX, this.lastPosY, this.lastPosZ, this.playerEntity.rotationYaw, this.playerEntity.rotationPitch); + var2.updateEntity(this.playerEntity); + return; + } + + var3 = this.playerEntity.posY; + this.lastPosX = this.playerEntity.posX; + this.lastPosY = this.playerEntity.posY; + this.lastPosZ = this.playerEntity.posZ; + var5 = this.playerEntity.posX; + var7 = this.playerEntity.posY; + var9 = this.playerEntity.posZ; + float var11 = this.playerEntity.rotationYaw; + float var12 = this.playerEntity.rotationPitch; + if(var1.moving && var1.yPosition == -999.0D && var1.stance == -999.0D) { + var1.moving = false; + } + + if(var1.moving) { + var5 = var1.xPosition; + var7 = var1.yPosition; + var9 = var1.zPosition; + var13 = var1.stance - var1.yPosition; + if(!this.playerEntity.func_22057_E() && (var13 > 1.65D || var13 < 0.1D)) { + this.kickPlayer("Illegal stance"); + logger.warning(this.playerEntity.username + " had an illegal stance: " + var13); + return; + } + + if(Math.abs(var1.xPosition) > 3.2E7D || Math.abs(var1.zPosition) > 3.2E7D) { + this.kickPlayer("Illegal position"); + return; + } + } + + if(var1.rotating) { + var11 = var1.yaw; + var12 = var1.pitch; + } + + this.playerEntity.onUpdateEntity(true); + this.playerEntity.ySize = 0.0F; + this.playerEntity.setPositionAndRotation(this.lastPosX, this.lastPosY, this.lastPosZ, var11, var12); + if(!this.hasMoved) { + return; + } + + var13 = var5 - this.playerEntity.posX; + double var15 = var7 - this.playerEntity.posY; + double var17 = var9 - this.playerEntity.posZ; + double var19 = var13 * var13 + var15 * var15 + var17 * var17; + if(var19 > 100.0D) { + logger.warning(this.playerEntity.username + " moved too quickly!"); + this.kickPlayer("You moved too quickly :( (Hacking?)"); + return; + } + + float var21 = 1.0F / 16.0F; + boolean var22 = var2.getCollidingBoundingBoxes(this.playerEntity, this.playerEntity.boundingBox.copy().getInsetBoundingBox((double)var21, (double)var21, (double)var21)).size() == 0; + this.playerEntity.moveEntity(var13, var15, var17); + var13 = var5 - this.playerEntity.posX; + var15 = var7 - this.playerEntity.posY; + if(var15 > -0.5D || var15 < 0.5D) { + var15 = 0.0D; + } + + var17 = var9 - this.playerEntity.posZ; + var19 = var13 * var13 + var15 * var15 + var17 * var17; + boolean var23 = false; + if(var19 > 1.0D / 16.0D && !this.playerEntity.func_22057_E()) { + var23 = true; + logger.warning(this.playerEntity.username + " moved wrongly!"); + System.out.println("Got position " + var5 + ", " + var7 + ", " + var9); + System.out.println("Expected " + this.playerEntity.posX + ", " + this.playerEntity.posY + ", " + this.playerEntity.posZ); + } + + this.playerEntity.setPositionAndRotation(var5, var7, var9, var11, var12); + boolean var24 = var2.getCollidingBoundingBoxes(this.playerEntity, this.playerEntity.boundingBox.copy().getInsetBoundingBox((double)var21, (double)var21, (double)var21)).size() == 0; + if(var22 && (var23 || !var24) && !this.playerEntity.func_22057_E()) { + this.teleportTo(this.lastPosX, this.lastPosY, this.lastPosZ, var11, var12); + return; + } + + AxisAlignedBB var25 = this.playerEntity.boundingBox.copy().expand((double)var21, (double)var21, (double)var21).addCoord(0.0D, -0.55D, 0.0D); + if(!this.mcServer.allowFlight && !var2.func_27069_b(var25)) { + if(var15 >= -0.03125D) { + ++this.playerInAirTime; + if(this.playerInAirTime > 80) { + logger.warning(this.playerEntity.username + " was kicked for floating too long!"); + this.kickPlayer("Flying is not enabled on this server"); + return; + } + } + } else { + this.playerInAirTime = 0; + } + + this.playerEntity.onGround = var1.onGround; + this.mcServer.configManager.func_613_b(this.playerEntity); + this.playerEntity.handleFalling(this.playerEntity.posY - var3, var1.onGround); + } + + } + + public void teleportTo(double var1, double var3, double var5, float var7, float var8) { + this.hasMoved = false; + this.lastPosX = var1; + this.lastPosY = var3; + this.lastPosZ = var5; + this.playerEntity.setPositionAndRotation(var1, var3, var5, var7, var8); + this.playerEntity.playerNetServerHandler.sendPacket(new Packet13PlayerLookMove(var1, var3 + (double)1.62F, var3, var5, var7, var8, false)); + } + + public void handleBlockDig(Packet14BlockDig var1) { + WorldServer var2 = this.mcServer.getWorldManager(this.playerEntity.dimension); + if(var1.status == 4) { + this.playerEntity.dropCurrentItem(); + } else { + boolean var3 = var2.field_819_z = var2.worldProvider.worldType != 0 || this.mcServer.configManager.isOp(this.playerEntity.username); + boolean var4 = false; + if(var1.status == 0) { + var4 = true; + } + + if(var1.status == 2) { + var4 = true; + } + + int var5 = var1.xPosition; + int var6 = var1.yPosition; + int var7 = var1.zPosition; + if(var4) { + double var8 = this.playerEntity.posX - ((double)var5 + 0.5D); + double var10 = this.playerEntity.posY - ((double)var6 + 0.5D); + double var12 = this.playerEntity.posZ - ((double)var7 + 0.5D); + double var14 = var8 * var8 + var10 * var10 + var12 * var12; + if(var14 > 36.0D) { + return; + } + } + + ChunkCoordinates var19 = var2.getSpawnPoint(); + int var9 = (int)MathHelper.abs((float)(var5 - var19.posX)); + int var20 = (int)MathHelper.abs((float)(var7 - var19.posZ)); + if(var9 > var20) { + var20 = var9; + } + + if(var1.status == 0) { + if(var20 <= 16 && !var3) { + this.playerEntity.playerNetServerHandler.sendPacket(new Packet53BlockChange(var5, var6, var7, var2)); + } else { + this.playerEntity.itemInWorldManager.func_324_a(var5, var6, var7, var1.face); + } + } else if(var1.status == 2) { + this.playerEntity.itemInWorldManager.func_22045_b(var5, var6, var7); + if(var2.getBlockId(var5, var6, var7) != 0) { + this.playerEntity.playerNetServerHandler.sendPacket(new Packet53BlockChange(var5, var6, var7, var2)); + } + } else if(var1.status == 3) { + double var11 = this.playerEntity.posX - ((double)var5 + 0.5D); + double var13 = this.playerEntity.posY - ((double)var6 + 0.5D); + double var15 = this.playerEntity.posZ - ((double)var7 + 0.5D); + double var17 = var11 * var11 + var13 * var13 + var15 * var15; + if(var17 < 256.0D) { + this.playerEntity.playerNetServerHandler.sendPacket(new Packet53BlockChange(var5, var6, var7, var2)); + } + } + + var2.field_819_z = false; + } + } + + public void handlePlace(Packet15Place var1) { + WorldServer var2 = this.mcServer.getWorldManager(this.playerEntity.dimension); + ItemStack var3 = this.playerEntity.inventory.getCurrentItem(); + boolean var4 = var2.field_819_z = var2.worldProvider.worldType != 0 || this.mcServer.configManager.isOp(this.playerEntity.username); + if(var1.direction == 255) { + if(var3 == null) { + return; + } + + this.playerEntity.itemInWorldManager.func_6154_a(this.playerEntity, var2, var3); + } else { + int var5 = var1.xPosition; + int var6 = var1.yPosition; + int var7 = var1.zPosition; + int var8 = var1.direction; + ChunkCoordinates var9 = var2.getSpawnPoint(); + int var10 = (int)MathHelper.abs((float)(var5 - var9.posX)); + int var11 = (int)MathHelper.abs((float)(var7 - var9.posZ)); + if(var10 > var11) { + var11 = var10; + } + + if(this.hasMoved && this.playerEntity.getDistanceSq((double)var5 + 0.5D, (double)var6 + 0.5D, (double)var7 + 0.5D) < 64.0D && (var11 > 16 || var4)) { + this.playerEntity.itemInWorldManager.activeBlockOrUseItem(this.playerEntity, var2, var3, var5, var6, var7, var8); + } + + this.playerEntity.playerNetServerHandler.sendPacket(new Packet53BlockChange(var5, var6, var7, var2)); + if(var8 == 0) { + --var6; + } + + if(var8 == 1) { + ++var6; + } + + if(var8 == 2) { + --var7; + } + + if(var8 == 3) { + ++var7; + } + + if(var8 == 4) { + --var5; + } + + if(var8 == 5) { + ++var5; + } + + this.playerEntity.playerNetServerHandler.sendPacket(new Packet53BlockChange(var5, var6, var7, var2)); + } + + var3 = this.playerEntity.inventory.getCurrentItem(); + if(var3 != null && var3.stackSize == 0) { + this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = null; + } + + this.playerEntity.isChangingQuantityOnly = true; + this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = ItemStack.func_20117_a(this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem]); + Slot var12 = this.playerEntity.currentCraftingInventory.func_20127_a(this.playerEntity.inventory, this.playerEntity.inventory.currentItem); + this.playerEntity.currentCraftingInventory.updateCraftingMatrix(); + this.playerEntity.isChangingQuantityOnly = false; + if(!ItemStack.areItemStacksEqual(this.playerEntity.inventory.getCurrentItem(), var1.itemStack)) { + this.sendPacket(new Packet103SetSlot(this.playerEntity.currentCraftingInventory.windowId, var12.id, this.playerEntity.inventory.getCurrentItem())); + } + + var2.field_819_z = false; + } + + public void handleErrorMessage(String var1, Object[] var2) { + 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.connectionClosed = true; + } + + public void registerPacket(Packet var1) { + logger.warning(this.getClass() + " wasn\'t prepared to deal with a " + var1.getClass()); + this.kickPlayer("Protocol error, unexpected packet"); + } + + public void sendPacket(Packet var1) { + this.netManager.addToSendQueue(var1); + this.field_22004_g = this.field_15_f; + } + + public void handleBlockItemSwitch(Packet16BlockItemSwitch var1) { + if(var1.id >= 0 && var1.id <= InventoryPlayer.func_25054_e()) { + this.playerEntity.inventory.currentItem = var1.id; + } else { + logger.warning(this.playerEntity.username + " tried to set an invalid carried item"); + } + } + + public void handleChat(Packet3Chat var1) { + String var2 = var1.message; + if(var2.length() > 100) { + this.kickPlayer("Chat message too long"); + } else { + var2 = var2.trim(); + + for(int var3 = 0; var3 < var2.length(); ++var3) { + if(ChatAllowedCharacters.allowedCharacters.indexOf(var2.charAt(var3)) < 0) { + this.kickPlayer("Illegal characters in chat"); + return; + } + } + + if(var2.startsWith("/")) { + this.handleSlashCommand(var2); + } else { + var2 = "<" + this.playerEntity.username + "> " + var2; + logger.info(var2); + this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat(var2)); + } + + } + } + + private void handleSlashCommand(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.attackEntityFrom((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(Packet18Animation var1) { + if(var1.animate == 1) { + this.playerEntity.swingItem(); + } + + } + + public void func_21001_a(Packet19EntityAction var1) { + if(var1.state == 1) { + this.playerEntity.setSneaking(true); + } else if(var1.state == 2) { + this.playerEntity.setSneaking(false); + } else if(var1.state == 3) { + this.playerEntity.wakeUpPlayer(false, true, true); + this.hasMoved = false; + } + + } + + public void handleKickDisconnect(Packet255KickDisconnect var1) { + this.netManager.networkShutdown("disconnect.quitting", new Object[0]); + } + + public int getNumChunkDataPackets() { + return this.netManager.getNumChunkDataPackets(); + } + + public void log(String var1) { + this.sendPacket(new Packet3Chat("\u00a77" + var1)); + } + + public String getUsername() { + return this.playerEntity.username; + } + + public void func_6006_a(Packet7UseEntity var1) { + WorldServer var2 = this.mcServer.getWorldManager(this.playerEntity.dimension); + Entity var3 = var2.func_6158_a(var1.targetEntity); + if(var3 != null && this.playerEntity.canEntityBeSeen(var3) && this.playerEntity.getDistanceSqToEntity(var3) < 36.0D) { + if(var1.isLeftClick == 0) { + this.playerEntity.useCurrentItemOnEntity(var3); + } else if(var1.isLeftClick == 1) { + this.playerEntity.attackTargetEntityWithCurrentItem(var3); + } + } + + } + + public void handleRespawnPacket(Packet9Respawn var1) { + if(this.playerEntity.health <= 0) { + this.playerEntity = this.mcServer.configManager.recreatePlayerEntity(this.playerEntity, 0); + } + } + + public void handleCraftingGuiClosedPacked(Packet101CloseWindow var1) { + this.playerEntity.closeCraftingGui(); + } + + public void func_20007_a(Packet102WindowClick var1) { + if(this.playerEntity.currentCraftingInventory.windowId == var1.window_Id && this.playerEntity.currentCraftingInventory.getCanCraft(this.playerEntity)) { + ItemStack var2 = this.playerEntity.currentCraftingInventory.func_27085_a(var1.inventorySlot, var1.mouseClick, var1.field_27039_f, this.playerEntity); + if(ItemStack.areItemStacksEqual(var1.itemStack, var2)) { + this.playerEntity.playerNetServerHandler.sendPacket(new Packet106Transaction(var1.window_Id, var1.action, true)); + this.playerEntity.isChangingQuantityOnly = true; + this.playerEntity.currentCraftingInventory.updateCraftingMatrix(); + this.playerEntity.updateHeldItem(); + this.playerEntity.isChangingQuantityOnly = false; + } else { + this.field_10_k.put(Integer.valueOf(this.playerEntity.currentCraftingInventory.windowId), Short.valueOf(var1.action)); + this.playerEntity.playerNetServerHandler.sendPacket(new Packet106Transaction(var1.window_Id, var1.action, false)); + this.playerEntity.currentCraftingInventory.setCanCraft(this.playerEntity, false); + ArrayList var3 = new ArrayList(); + + for(int var4 = 0; var4 < this.playerEntity.currentCraftingInventory.inventorySlots.size(); ++var4) { + var3.add(((Slot)this.playerEntity.currentCraftingInventory.inventorySlots.get(var4)).getStack()); + } + + this.playerEntity.updateCraftingInventory(this.playerEntity.currentCraftingInventory, var3); + } + } + + } + + public void func_20008_a(Packet106Transaction var1) { + Short var2 = (Short)this.field_10_k.get(Integer.valueOf(this.playerEntity.currentCraftingInventory.windowId)); + if(var2 != null && var1.shortWindowId == var2.shortValue() && this.playerEntity.currentCraftingInventory.windowId == var1.windowId && !this.playerEntity.currentCraftingInventory.getCanCraft(this.playerEntity)) { + this.playerEntity.currentCraftingInventory.setCanCraft(this.playerEntity, true); + } + + } + + public void handleUpdateSign(Packet130UpdateSign var1) { + WorldServer var2 = this.mcServer.getWorldManager(this.playerEntity.dimension); + if(var2.blockExists(var1.xPosition, var1.yPosition, var1.zPosition)) { + TileEntity var3 = var2.getBlockTileEntity(var1.xPosition, var1.yPosition, var1.zPosition); + if(var3 instanceof TileEntitySign) { + TileEntitySign var4 = (TileEntitySign)var3; + if(!var4.getIsEditAble()) { + this.mcServer.logWarning("Player " + this.playerEntity.username + " just tried to change non-editable sign"); + return; + } + } + + int var6; + int var9; + for(var9 = 0; var9 < 4; ++var9) { + boolean var5 = true; + if(var1.signLines[var9].length() > 15) { + var5 = false; + } else { + for(var6 = 0; var6 < var1.signLines[var9].length(); ++var6) { + if(ChatAllowedCharacters.allowedCharacters.indexOf(var1.signLines[var9].charAt(var6)) < 0) { + var5 = false; + } + } + } + + if(!var5) { + var1.signLines[var9] = "!?"; + } + } + + if(var3 instanceof TileEntitySign) { + var9 = var1.xPosition; + int var10 = var1.yPosition; + var6 = var1.zPosition; + TileEntitySign var7 = (TileEntitySign)var3; + + for(int var8 = 0; var8 < 4; ++var8) { + var7.signText[var8] = var1.signLines[var8]; + } + + var7.func_32001_a(false); + var7.onInventoryChanged(); + var2.markBlockNeedsUpdate(var9, var10, var6); + } + } + + } + + public boolean isServerHandler() { + return true; + } +} diff --git a/src/net/minecraft/src/NetworkAcceptThread.java b/src/net/minecraft/src/NetworkAcceptThread.java new file mode 100644 index 0000000..ae5748c --- /dev/null +++ b/src/net/minecraft/src/NetworkAcceptThread.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.Socket; +import java.util.HashMap; +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() { + HashMap var1 = new HashMap(); + + while(this.field_985_b.field_973_b) { + try { + Socket var2 = NetworkListenThread.func_713_a(this.field_985_b).accept(); + if(var2 != null) { + InetAddress var3 = var2.getInetAddress(); + if(var1.containsKey(var3) && !"127.0.0.1".equals(var3.getHostAddress()) && System.currentTimeMillis() - ((Long)var1.get(var3)).longValue() < 5000L) { + var1.put(var3, Long.valueOf(System.currentTimeMillis())); + var2.close(); + } else { + var1.put(var3, Long.valueOf(System.currentTimeMillis())); + NetLoginHandler var4 = new NetLoginHandler(this.mcServer, var2, "Connection #" + NetworkListenThread.func_712_b(this.field_985_b)); + NetworkListenThread.func_716_a(this.field_985_b, var4); + } + } + } catch (IOException var5) { + var5.printStackTrace(); + } + } + + } +} diff --git a/src/net/minecraft/src/NetworkListenThread.java b/src/net/minecraft/src/NetworkListenThread.java new file mode 100644 index 0000000..7b05f39 --- /dev/null +++ b/src/net/minecraft/src/NetworkListenThread.java @@ -0,0 +1,91 @@ +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 serverSocket; + private Thread networkAcceptThread; + public volatile boolean field_973_b = false; + private int field_977_f = 0; + private ArrayList pendingConnections = new ArrayList(); + private ArrayList playerList = new ArrayList(); + public MinecraftServer mcServer; + + public NetworkListenThread(MinecraftServer var1, InetAddress var2, int var3) throws IOException { + this.mcServer = var1; + this.serverSocket = new ServerSocket(var3, 0, var2); + this.serverSocket.setPerformancePreferences(0, 2, 1); + this.field_973_b = true; + this.networkAcceptThread = new NetworkAcceptThread(this, "Listen thread", var1); + this.networkAcceptThread.start(); + } + + public void addPlayer(NetServerHandler var1) { + this.playerList.add(var1); + } + + private void addPendingConnection(NetLoginHandler var1) { + if(var1 == null) { + throw new IllegalArgumentException("Got null pendingconnection!"); + } else { + this.pendingConnections.add(var1); + } + } + + public void handleNetworkListenThread() { + int var1; + for(var1 = 0; var1 < this.pendingConnections.size(); ++var1) { + NetLoginHandler var2 = (NetLoginHandler)this.pendingConnections.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.pendingConnections.remove(var1--); + } + + var2.netManager.func_28138_a(); + } + + for(var1 = 0; var1 < this.playerList.size(); ++var1) { + NetServerHandler var6 = (NetServerHandler)this.playerList.get(var1); + + try { + var6.handlePackets(); + } catch (Exception var4) { + logger.log(Level.WARNING, "Failed to handle packet: " + var4, var4); + var6.kickPlayer("Internal server error"); + } + + if(var6.connectionClosed) { + this.playerList.remove(var1--); + } + + var6.netManager.func_28138_a(); + } + + } + + static ServerSocket func_713_a(NetworkListenThread var0) { + return var0.serverSocket; + } + + static int func_712_b(NetworkListenThread var0) { + return var0.field_977_f++; + } + + static void func_716_a(NetworkListenThread var0, NetLoginHandler var1) { + var0.addPendingConnection(var1); + } +} diff --git a/src/net/minecraft/src/NetworkManager.java b/src/net/minecraft/src/NetworkManager.java new file mode 100644 index 0000000..f01a40e --- /dev/null +++ b/src/net/minecraft/src/NetworkManager.java @@ -0,0 +1,268 @@ +package net.minecraft.src; + +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.net.SocketAddress; +import java.net.SocketException; +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 remoteSocketAddress; + 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 Object[] field_20176_t; + private int timeSinceLastRead = 0; + private int sendQueueByteLength = 0; + public static int[] field_28141_d = new int[256]; + public static int[] field_28140_e = new int[256]; + public int chunkDataSendCounter = 0; + private int field_20175_w = 50; + + public NetworkManager(Socket var1, String var2, NetHandler var3) throws IOException { + this.networkSocket = var1; + this.remoteSocketAddress = var1.getRemoteSocketAddress(); + this.netHandler = var3; + + try { + var1.setSoTimeout(30000); + var1.setTrafficClass(24); + } catch (SocketException var5) { + System.err.println(var5.getMessage()); + } + + this.socketInputStream = new DataInputStream(var1.getInputStream()); + this.socketOutputStream = new DataOutputStream(new BufferedOutputStream(var1.getOutputStream(), 5120)); + 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 boolean sendPacket() { + boolean var1 = false; + + try { + int[] var10000; + int var10001; + Packet var2; + Object var3; + if(!this.dataPackets.isEmpty() && (this.chunkDataSendCounter == 0 || System.currentTimeMillis() - ((Packet)this.dataPackets.get(0)).creationTimeMillis >= (long)this.chunkDataSendCounter)) { + var3 = this.sendQueueLock; + synchronized(var3) { + var2 = (Packet)this.dataPackets.remove(0); + this.sendQueueByteLength -= var2.getPacketSize() + 1; + } + + Packet.writePacket(var2, this.socketOutputStream); + var10000 = field_28140_e; + var10001 = var2.getPacketId(); + var10000[var10001] += var2.getPacketSize() + 1; + var1 = true; + } + + if(this.field_20175_w-- <= 0 && !this.chunkDataPackets.isEmpty() && (this.chunkDataSendCounter == 0 || System.currentTimeMillis() - ((Packet)this.chunkDataPackets.get(0)).creationTimeMillis >= (long)this.chunkDataSendCounter)) { + var3 = this.sendQueueLock; + synchronized(var3) { + var2 = (Packet)this.chunkDataPackets.remove(0); + this.sendQueueByteLength -= var2.getPacketSize() + 1; + } + + Packet.writePacket(var2, this.socketOutputStream); + var10000 = field_28140_e; + var10001 = var2.getPacketId(); + var10000[var10001] += var2.getPacketSize() + 1; + this.field_20175_w = 0; + var1 = true; + } + + return var1; + } catch (Exception var8) { + if(!this.isTerminating) { + this.onNetworkError(var8); + } + + return false; + } + } + + public void func_28138_a() { + this.readThread.interrupt(); + this.writeThread.interrupt(); + } + + private boolean readPacket() { + boolean var1 = false; + + try { + Packet var2 = Packet.readPacket(this.socketInputStream, this.netHandler.isServerHandler()); + if(var2 != null) { + int[] var10000 = field_28141_d; + int var10001 = var2.getPacketId(); + var10000[var10001] += var2.getPacketSize() + 1; + this.readPackets.add(var2); + var1 = true; + } else { + this.networkShutdown("disconnect.endOfStream", new Object[0]); + } + + return var1; + } catch (Exception var3) { + if(!this.isTerminating) { + this.onNetworkError(var3); + } + + return false; + } + } + + private void onNetworkError(Exception var1) { + var1.printStackTrace(); + this.networkShutdown("disconnect.genericReason", new Object[]{"Internal exception: " + var1.toString()}); + } + + public void networkShutdown(String var1, Object... var2) { + if(this.isRunning) { + this.isTerminating = true; + this.terminationReason = var1; + this.field_20176_t = var2; + (new NetworkMasterThread(this)).start(); + this.isRunning = false; + + try { + this.socketInputStream.close(); + this.socketInputStream = null; + } catch (Throwable var6) { + } + + try { + this.socketOutputStream.close(); + this.socketOutputStream = null; + } catch (Throwable var5) { + } + + try { + this.networkSocket.close(); + this.networkSocket = null; + } catch (Throwable var4) { + } + + } + } + + public void processReadPackets() { + if(this.sendQueueByteLength > 1048576) { + this.networkShutdown("disconnect.overflow", new Object[0]); + } + + if(this.readPackets.isEmpty()) { + if(this.timeSinceLastRead++ == 1200) { + this.networkShutdown("disconnect.timeout", new Object[0]); + } + } else { + this.timeSinceLastRead = 0; + } + + int var1 = 100; + + while(!this.readPackets.isEmpty() && var1-- >= 0) { + Packet var2 = (Packet)this.readPackets.remove(0); + var2.processPacket(this.netHandler); + } + + this.func_28138_a(); + if(this.isTerminating && this.readPackets.isEmpty()) { + this.netHandler.handleErrorMessage(this.terminationReason, this.field_20176_t); + } + + } + + public SocketAddress getRemoteAddress() { + return this.remoteSocketAddress; + } + + public void serverShutdown() { + this.func_28138_a(); + 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 boolean readNetworkPacket(NetworkManager var0) { + return var0.readPacket(); + } + + static boolean sendNetworkPacket(NetworkManager var0) { + return var0.sendPacket(); + } + + static DataOutputStream func_28136_f(NetworkManager var0) { + return var0.socketOutputStream; + } + + static boolean func_28135_e(NetworkManager var0) { + return var0.isTerminating; + } + + static void func_30007_a(NetworkManager var0, Exception var1) { + var0.onNetworkError(var1); + } + + static Thread getReadThread(NetworkManager var0) { + return var0.readThread; + } + + static Thread getWriteThread(NetworkManager var0) { + return var0.writeThread; + } +} diff --git a/src/net/minecraft/src/NetworkMasterThread.java b/src/net/minecraft/src/NetworkMasterThread.java new file mode 100644 index 0000000..1ffb183 --- /dev/null +++ b/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/src/net/minecraft/src/NetworkReaderThread.java b/src/net/minecraft/src/NetworkReaderThread.java new file mode 100644 index 0000000..b2ee8ee --- /dev/null +++ b/src/net/minecraft/src/NetworkReaderThread.java @@ -0,0 +1,54 @@ +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 var12 = false; + + try { + var12 = true; + if(!NetworkManager.isRunning(this.netManager)) { + var12 = false; + break; + } + + if(NetworkManager.isServerTerminating(this.netManager)) { + var12 = false; + break; + } + + while(NetworkManager.readNetworkPacket(this.netManager)) { + } + + try { + sleep(100L); + } catch (InterruptedException var15) { + } + } finally { + if(var12) { + Object var5 = NetworkManager.threadSyncObject; + synchronized(var5) { + --NetworkManager.numReadThreads; + } + } + } + } + + var1 = NetworkManager.threadSyncObject; + synchronized(var1) { + --NetworkManager.numReadThreads; + } + } +} diff --git a/src/net/minecraft/src/NetworkWriterThread.java b/src/net/minecraft/src/NetworkWriterThread.java new file mode 100644 index 0000000..23b02b7 --- /dev/null +++ b/src/net/minecraft/src/NetworkWriterThread.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +import java.io.IOException; + +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 var13 = false; + + try { + var13 = true; + if(!NetworkManager.isRunning(this.netManager)) { + var13 = false; + break; + } + + while(NetworkManager.sendNetworkPacket(this.netManager)) { + } + + try { + sleep(100L); + } catch (InterruptedException var16) { + } + + try { + if(NetworkManager.func_28136_f(this.netManager) != null) { + NetworkManager.func_28136_f(this.netManager).flush(); + } + } catch (IOException var18) { + if(!NetworkManager.func_28135_e(this.netManager)) { + NetworkManager.func_30007_a(this.netManager, var18); + } + + var18.printStackTrace(); + } + } finally { + if(var13) { + Object var5 = NetworkManager.threadSyncObject; + synchronized(var5) { + --NetworkManager.numWriteThreads; + } + } + } + } + + var1 = NetworkManager.threadSyncObject; + synchronized(var1) { + --NetworkManager.numWriteThreads; + } + } +} diff --git a/src/net/minecraft/src/NextTickListEntry.java b/src/net/minecraft/src/NextTickListEntry.java new file mode 100644 index 0000000..c7638e9 --- /dev/null +++ b/src/net/minecraft/src/NextTickListEntry.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class NextTickListEntry implements Comparable { + private static long nextTickEntryID = 0L; + public int xCoord; + public int yCoord; + public int zCoord; + public int blockID; + public long scheduledTime; + private long tickEntryID = nextTickEntryID++; + + public NextTickListEntry(int var1, int var2, int var3, int var4) { + this.xCoord = var1; + this.yCoord = var2; + this.zCoord = var3; + this.blockID = var4; + } + + public boolean equals(Object var1) { + if(!(var1 instanceof NextTickListEntry)) { + return false; + } else { + NextTickListEntry var2 = (NextTickListEntry)var1; + return this.xCoord == var2.xCoord && this.yCoord == var2.yCoord && this.zCoord == var2.zCoord && this.blockID == var2.blockID; + } + } + + public int hashCode() { + return (this.xCoord * 128 * 1024 + this.zCoord * 128 + this.yCoord) * 256 + this.blockID; + } + + public NextTickListEntry setScheduledTime(long var1) { + this.scheduledTime = var1; + return this; + } + + public int comparer(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.comparer((NextTickListEntry)var1); + } +} diff --git a/src/net/minecraft/src/NibbleArray.java b/src/net/minecraft/src/NibbleArray.java new file mode 100644 index 0000000..28a1f67 --- /dev/null +++ b/src/net/minecraft/src/NibbleArray.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +public class NibbleArray { + public final byte[] data; + + public NibbleArray(int var1) { + this.data = new byte[var1 >> 1]; + } + + public NibbleArray(byte[] var1) { + this.data = var1; + } + + public int 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/src/net/minecraft/src/NoiseGenerator.java b/src/net/minecraft/src/NoiseGenerator.java new file mode 100644 index 0000000..53e6d05 --- /dev/null +++ b/src/net/minecraft/src/NoiseGenerator.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public abstract class NoiseGenerator { +} diff --git a/src/net/minecraft/src/NoiseGenerator2.java b/src/net/minecraft/src/NoiseGenerator2.java new file mode 100644 index 0000000..d4a35c5 --- /dev/null +++ b/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 wrap(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 = wrap(var16 + var27); + int var30 = wrap(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/src/net/minecraft/src/NoiseGeneratorOctaves.java b/src/net/minecraft/src/NoiseGeneratorOctaves.java new file mode 100644 index 0000000..6aa9c06 --- /dev/null +++ b/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[] generatorCollection; + private int field_938_b; + + public NoiseGeneratorOctaves(Random var1, int var2) { + this.field_938_b = var2; + this.generatorCollection = new NoiseGeneratorPerlin[var2]; + + for(int var3 = 0; var3 < var2; ++var3) { + this.generatorCollection[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.generatorCollection[var9].func_642_a(var1 * var7, var3 * var7) / var7; + var7 /= 2.0D; + } + + return var5; + } + + public double[] generateNoiseOctaves(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.generatorCollection[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.generateNoiseOctaves(var1, (double)var2, 10.0D, (double)var3, var4, 1, var5, var6, 1.0D, var8); + } +} diff --git a/src/net/minecraft/src/NoiseGeneratorOctaves2.java b/src/net/minecraft/src/NoiseGeneratorOctaves2.java new file mode 100644 index 0000000..445671e --- /dev/null +++ b/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/src/net/minecraft/src/NoiseGeneratorPerlin.java b/src/net/minecraft/src/NoiseGeneratorPerlin.java new file mode 100644 index 0000000..855e3bf --- /dev/null +++ b/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/src/net/minecraft/src/Packet.java b/src/net/minecraft/src/Packet.java new file mode 100644 index 0000000..6034919 --- /dev/null +++ b/src/net/minecraft/src/Packet.java @@ -0,0 +1,196 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.EOFException; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public abstract class Packet { + private static Map packetIdToClassMap = new HashMap(); + private static Map packetClassToIdMap = new HashMap(); + private static Set clientPacketIdList = new HashSet(); + private static Set serverPacketIdList = new HashSet(); + public final long creationTimeMillis = System.currentTimeMillis(); + public boolean isChunkDataPacket = false; + private static HashMap packetStats; + private static int totalPacketsCount; + + static void addIdClassMapping(int var0, boolean var1, boolean var2, Class var3) { + if(packetIdToClassMap.containsKey(Integer.valueOf(var0))) { + throw new IllegalArgumentException("Duplicate packet id:" + var0); + } else if(packetClassToIdMap.containsKey(var3)) { + throw new IllegalArgumentException("Duplicate packet class:" + var3); + } else { + packetIdToClassMap.put(Integer.valueOf(var0), var3); + packetClassToIdMap.put(var3, Integer.valueOf(var0)); + if(var1) { + clientPacketIdList.add(Integer.valueOf(var0)); + } + + if(var2) { + serverPacketIdList.add(Integer.valueOf(var0)); + } + + } + } + + public static Packet getNewPacket(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, boolean var1) throws IOException { + boolean var2 = false; + Packet var3 = null; + + int var6; + try { + var6 = var0.read(); + if(var6 == -1) { + return null; + } + + if(var1 && !serverPacketIdList.contains(Integer.valueOf(var6)) || !var1 && !clientPacketIdList.contains(Integer.valueOf(var6))) { + throw new IOException("Bad packet id " + var6); + } + + var3 = getNewPacket(var6); + if(var3 == null) { + throw new IOException("Bad packet id " + var6); + } + + var3.readPacketData(var0); + } catch (EOFException var5) { + System.out.println("Reached end of stream"); + return null; + } + + PacketCounter var4 = (PacketCounter)packetStats.get(Integer.valueOf(var6)); + if(var4 == null) { + var4 = new PacketCounter((Empty1)null); + packetStats.put(Integer.valueOf(var6), var4); + } + + var4.addPacket(var3.getPacketSize()); + ++totalPacketsCount; + if(totalPacketsCount % 1000 == 0) { + } + + return var3; + } + + public static void writePacket(Packet var0, DataOutputStream var1) throws IOException { + var1.write(var0.getPacketId()); + var0.writePacketData(var1); + } + + public static void writeString(String var0, DataOutputStream var1) throws IOException { + if(var0.length() > Short.MAX_VALUE) { + throw new IOException("String too big"); + } else { + var1.writeShort(var0.length()); + var1.writeChars(var0); + } + } + + public static String readString(DataInputStream var0, int var1) throws IOException { + short var2 = var0.readShort(); + if(var2 > var1) { + throw new IOException("Received string length longer than maximum allowed (" + var2 + " > " + var1 + ")"); + } else if(var2 < 0) { + throw new IOException("Received string length is less than zero! Weird string!"); + } else { + StringBuilder var3 = new StringBuilder(); + + for(int var4 = 0; var4 < var2; ++var4) { + var3.append(var0.readChar()); + } + + return var3.toString(); + } + } + + public abstract void readPacketData(DataInputStream var1) throws IOException; + + public abstract void writePacketData(DataOutputStream var1) throws IOException; + + public abstract void processPacket(NetHandler var1); + + public abstract int getPacketSize(); + + static { + addIdClassMapping(0, true, true, Packet0KeepAlive.class); + addIdClassMapping(1, true, true, Packet1Login.class); + addIdClassMapping(2, true, true, Packet2Handshake.class); + addIdClassMapping(3, true, true, Packet3Chat.class); + addIdClassMapping(4, true, false, Packet4UpdateTime.class); + addIdClassMapping(5, true, false, Packet5PlayerInventory.class); + addIdClassMapping(6, true, false, Packet6SpawnPosition.class); + addIdClassMapping(7, false, true, Packet7UseEntity.class); + addIdClassMapping(8, true, false, Packet8UpdateHealth.class); + addIdClassMapping(9, true, true, Packet9Respawn.class); + addIdClassMapping(10, true, true, Packet10Flying.class); + addIdClassMapping(11, true, true, Packet11PlayerPosition.class); + addIdClassMapping(12, true, true, Packet12PlayerLook.class); + addIdClassMapping(13, true, true, Packet13PlayerLookMove.class); + addIdClassMapping(14, false, true, Packet14BlockDig.class); + addIdClassMapping(15, false, true, Packet15Place.class); + addIdClassMapping(16, false, true, Packet16BlockItemSwitch.class); + addIdClassMapping(17, true, false, Packet17Sleep.class); + addIdClassMapping(18, true, true, Packet18Animation.class); + addIdClassMapping(19, false, true, Packet19EntityAction.class); + addIdClassMapping(20, true, false, Packet20NamedEntitySpawn.class); + addIdClassMapping(21, true, false, Packet21PickupSpawn.class); + addIdClassMapping(22, true, false, Packet22Collect.class); + addIdClassMapping(23, true, false, Packet23VehicleSpawn.class); + addIdClassMapping(24, true, false, Packet24MobSpawn.class); + addIdClassMapping(25, true, false, Packet25EntityPainting.class); + addIdClassMapping(27, false, true, Packet27Position.class); + addIdClassMapping(28, true, false, Packet28EntityVelocity.class); + addIdClassMapping(29, true, false, Packet29DestroyEntity.class); + addIdClassMapping(30, true, false, Packet30Entity.class); + addIdClassMapping(31, true, false, Packet31RelEntityMove.class); + addIdClassMapping(32, true, false, Packet32EntityLook.class); + addIdClassMapping(33, true, false, Packet33RelEntityMoveLook.class); + addIdClassMapping(34, true, false, Packet34EntityTeleport.class); + addIdClassMapping(38, true, false, Packet38EntityStatus.class); + addIdClassMapping(39, true, false, Packet39AttachEntity.class); + addIdClassMapping(40, true, false, Packet40EntityMetadata.class); + addIdClassMapping(50, true, false, Packet50PreChunk.class); + addIdClassMapping(51, true, false, Packet51MapChunk.class); + addIdClassMapping(52, true, false, Packet52MultiBlockChange.class); + addIdClassMapping(53, true, false, Packet53BlockChange.class); + addIdClassMapping(54, true, false, Packet54PlayNoteBlock.class); + addIdClassMapping(60, true, false, Packet60Explosion.class); + addIdClassMapping(61, true, false, Packet61DoorChange.class); + addIdClassMapping(70, true, false, Packet70Bed.class); + addIdClassMapping(71, true, false, Packet71Weather.class); + addIdClassMapping(100, true, false, Packet100OpenWindow.class); + addIdClassMapping(101, true, true, Packet101CloseWindow.class); + addIdClassMapping(102, false, true, Packet102WindowClick.class); + addIdClassMapping(103, true, false, Packet103SetSlot.class); + addIdClassMapping(104, true, false, Packet104WindowItems.class); + addIdClassMapping(105, true, false, Packet105UpdateProgressbar.class); + addIdClassMapping(106, true, true, Packet106Transaction.class); + addIdClassMapping(130, true, true, Packet130UpdateSign.class); + addIdClassMapping(131, true, false, Packet131MapData.class); + addIdClassMapping(200, true, false, Packet200Statistic.class); + addIdClassMapping(255, true, true, Packet255KickDisconnect.class); + packetStats = new HashMap(); + totalPacketsCount = 0; + } +} diff --git a/src/net/minecraft/src/Packet0KeepAlive.java b/src/net/minecraft/src/Packet0KeepAlive.java new file mode 100644 index 0000000..e6f804d --- /dev/null +++ b/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/src/net/minecraft/src/Packet100OpenWindow.java b/src/net/minecraft/src/Packet100OpenWindow.java new file mode 100644 index 0000000..8fe2dc1 --- /dev/null +++ b/src/net/minecraft/src/Packet100OpenWindow.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet100OpenWindow extends Packet { + public int windowId; + public int inventoryType; + public String windowTitle; + public int slotsCount; + + public Packet100OpenWindow() { + } + + public Packet100OpenWindow(int var1, int var2, String var3, int var4) { + this.windowId = var1; + this.inventoryType = var2; + this.windowTitle = var3; + this.slotsCount = var4; + } + + public void processPacket(NetHandler var1) { + var1.func_20004_a(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + this.inventoryType = var1.readByte(); + this.windowTitle = var1.readUTF(); + this.slotsCount = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + var1.writeByte(this.inventoryType); + var1.writeUTF(this.windowTitle); + var1.writeByte(this.slotsCount); + } + + public int getPacketSize() { + return 3 + this.windowTitle.length(); + } +} diff --git a/src/net/minecraft/src/Packet101CloseWindow.java b/src/net/minecraft/src/Packet101CloseWindow.java new file mode 100644 index 0000000..d0e1cae --- /dev/null +++ b/src/net/minecraft/src/Packet101CloseWindow.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet101CloseWindow extends Packet { + public int windowId; + + public Packet101CloseWindow() { + } + + public Packet101CloseWindow(int var1) { + this.windowId = var1; + } + + public void processPacket(NetHandler var1) { + var1.handleCraftingGuiClosedPacked(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + } + + public int getPacketSize() { + return 1; + } +} diff --git a/src/net/minecraft/src/Packet102WindowClick.java b/src/net/minecraft/src/Packet102WindowClick.java new file mode 100644 index 0000000..3e605de --- /dev/null +++ b/src/net/minecraft/src/Packet102WindowClick.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet102WindowClick extends Packet { + public int window_Id; + public int inventorySlot; + public int mouseClick; + public short action; + public ItemStack itemStack; + public boolean field_27039_f; + + public void processPacket(NetHandler var1) { + var1.func_20007_a(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.window_Id = var1.readByte(); + this.inventorySlot = var1.readShort(); + this.mouseClick = var1.readByte(); + this.action = var1.readShort(); + this.field_27039_f = var1.readBoolean(); + short var2 = var1.readShort(); + if(var2 >= 0) { + byte var3 = var1.readByte(); + short var4 = var1.readShort(); + this.itemStack = new ItemStack(var2, var3, var4); + } else { + this.itemStack = null; + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.window_Id); + var1.writeShort(this.inventorySlot); + var1.writeByte(this.mouseClick); + var1.writeShort(this.action); + var1.writeBoolean(this.field_27039_f); + if(this.itemStack == null) { + var1.writeShort(-1); + } else { + var1.writeShort(this.itemStack.itemID); + var1.writeByte(this.itemStack.stackSize); + var1.writeShort(this.itemStack.getItemDamage()); + } + + } + + public int getPacketSize() { + return 11; + } +} diff --git a/src/net/minecraft/src/Packet103SetSlot.java b/src/net/minecraft/src/Packet103SetSlot.java new file mode 100644 index 0000000..001075d --- /dev/null +++ b/src/net/minecraft/src/Packet103SetSlot.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet103SetSlot extends Packet { + public int windowId; + public int itemSlot; + public ItemStack myItemStack; + + public Packet103SetSlot() { + } + + public Packet103SetSlot(int var1, int var2, ItemStack var3) { + this.windowId = var1; + this.itemSlot = var2; + this.myItemStack = var3 == null ? var3 : var3.copy(); + } + + public void processPacket(NetHandler var1) { + var1.func_20003_a(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + this.itemSlot = var1.readShort(); + short var2 = var1.readShort(); + if(var2 >= 0) { + byte var3 = var1.readByte(); + short var4 = var1.readShort(); + this.myItemStack = new ItemStack(var2, var3, var4); + } else { + this.myItemStack = null; + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + var1.writeShort(this.itemSlot); + if(this.myItemStack == null) { + var1.writeShort(-1); + } else { + var1.writeShort(this.myItemStack.itemID); + var1.writeByte(this.myItemStack.stackSize); + var1.writeShort(this.myItemStack.getItemDamage()); + } + + } + + public int getPacketSize() { + return 8; + } +} diff --git a/src/net/minecraft/src/Packet104WindowItems.java b/src/net/minecraft/src/Packet104WindowItems.java new file mode 100644 index 0000000..d5004ee --- /dev/null +++ b/src/net/minecraft/src/Packet104WindowItems.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.List; + +public class Packet104WindowItems extends Packet { + public int windowId; + public ItemStack[] itemStack; + + public Packet104WindowItems() { + } + + public Packet104WindowItems(int var1, List var2) { + this.windowId = var1; + this.itemStack = new ItemStack[var2.size()]; + + for(int var3 = 0; var3 < this.itemStack.length; ++var3) { + ItemStack var4 = (ItemStack)var2.get(var3); + this.itemStack[var3] = var4 == null ? null : var4.copy(); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + short var2 = var1.readShort(); + this.itemStack = new ItemStack[var2]; + + for(int var3 = 0; var3 < var2; ++var3) { + short var4 = var1.readShort(); + if(var4 >= 0) { + byte var5 = var1.readByte(); + short var6 = var1.readShort(); + this.itemStack[var3] = new ItemStack(var4, var5, var6); + } + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + var1.writeShort(this.itemStack.length); + + for(int var2 = 0; var2 < this.itemStack.length; ++var2) { + if(this.itemStack[var2] == null) { + var1.writeShort(-1); + } else { + var1.writeShort((short)this.itemStack[var2].itemID); + var1.writeByte((byte)this.itemStack[var2].stackSize); + var1.writeShort((short)this.itemStack[var2].getItemDamage()); + } + } + + } + + public void processPacket(NetHandler var1) { + var1.func_20001_a(this); + } + + public int getPacketSize() { + return 3 + this.itemStack.length * 5; + } +} diff --git a/src/net/minecraft/src/Packet105UpdateProgressbar.java b/src/net/minecraft/src/Packet105UpdateProgressbar.java new file mode 100644 index 0000000..c35e7f5 --- /dev/null +++ b/src/net/minecraft/src/Packet105UpdateProgressbar.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet105UpdateProgressbar extends Packet { + public int windowId; + public int progressBar; + public int progressBarValue; + + public Packet105UpdateProgressbar() { + } + + public Packet105UpdateProgressbar(int var1, int var2, int var3) { + this.windowId = var1; + this.progressBar = var2; + this.progressBarValue = var3; + } + + public void processPacket(NetHandler var1) { + var1.func_20002_a(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + this.progressBar = var1.readShort(); + this.progressBarValue = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + var1.writeShort(this.progressBar); + var1.writeShort(this.progressBarValue); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/src/net/minecraft/src/Packet106Transaction.java b/src/net/minecraft/src/Packet106Transaction.java new file mode 100644 index 0000000..1114b12 --- /dev/null +++ b/src/net/minecraft/src/Packet106Transaction.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet106Transaction extends Packet { + public int windowId; + public short shortWindowId; + public boolean field_20035_c; + + public Packet106Transaction() { + } + + public Packet106Transaction(int var1, short var2, boolean var3) { + this.windowId = var1; + this.shortWindowId = var2; + this.field_20035_c = var3; + } + + public void processPacket(NetHandler var1) { + var1.func_20008_a(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + this.shortWindowId = var1.readShort(); + this.field_20035_c = var1.readByte() != 0; + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + var1.writeShort(this.shortWindowId); + var1.writeByte(this.field_20035_c ? 1 : 0); + } + + public int getPacketSize() { + return 4; + } +} diff --git a/src/net/minecraft/src/Packet10Flying.java b/src/net/minecraft/src/Packet10Flying.java new file mode 100644 index 0000000..cc634da --- /dev/null +++ b/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/src/net/minecraft/src/Packet11PlayerPosition.java b/src/net/minecraft/src/Packet11PlayerPosition.java new file mode 100644 index 0000000..6e995f8 --- /dev/null +++ b/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/src/net/minecraft/src/Packet12PlayerLook.java b/src/net/minecraft/src/Packet12PlayerLook.java new file mode 100644 index 0000000..994a079 --- /dev/null +++ b/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/src/net/minecraft/src/Packet130UpdateSign.java b/src/net/minecraft/src/Packet130UpdateSign.java new file mode 100644 index 0000000..43d9a33 --- /dev/null +++ b/src/net/minecraft/src/Packet130UpdateSign.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet130UpdateSign extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + public String[] signLines; + + public Packet130UpdateSign() { + this.isChunkDataPacket = true; + } + + public Packet130UpdateSign(int var1, int var2, int var3, String[] var4) { + this.isChunkDataPacket = true; + this.xPosition = var1; + this.yPosition = var2; + this.zPosition = var3; + this.signLines = var4; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.readShort(); + this.zPosition = var1.readInt(); + this.signLines = new String[4]; + + for(int var2 = 0; var2 < 4; ++var2) { + this.signLines[var2] = readString(var1, 15); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.writeShort(this.yPosition); + var1.writeInt(this.zPosition); + + for(int var2 = 0; var2 < 4; ++var2) { + writeString(this.signLines[var2], var1); + } + + } + + public void processPacket(NetHandler var1) { + var1.handleUpdateSign(this); + } + + public int getPacketSize() { + int var1 = 0; + + for(int var2 = 0; var2 < 4; ++var2) { + var1 += this.signLines[var2].length(); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/Packet131MapData.java b/src/net/minecraft/src/Packet131MapData.java new file mode 100644 index 0000000..71f82f4 --- /dev/null +++ b/src/net/minecraft/src/Packet131MapData.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet131MapData extends Packet { + public short field_28052_a; + public short field_28051_b; + public byte[] field_28053_c; + + public Packet131MapData() { + this.isChunkDataPacket = true; + } + + public Packet131MapData(short var1, short var2, byte[] var3) { + this.isChunkDataPacket = true; + this.field_28052_a = var1; + this.field_28051_b = var2; + this.field_28053_c = var3; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_28052_a = var1.readShort(); + this.field_28051_b = var1.readShort(); + this.field_28053_c = new byte[var1.readByte() & 255]; + var1.readFully(this.field_28053_c); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeShort(this.field_28052_a); + var1.writeShort(this.field_28051_b); + var1.writeByte(this.field_28053_c.length); + var1.write(this.field_28053_c); + } + + public void processPacket(NetHandler var1) { + var1.func_28001_a(this); + } + + public int getPacketSize() { + return 4 + this.field_28053_c.length; + } +} diff --git a/src/net/minecraft/src/Packet13PlayerLookMove.java b/src/net/minecraft/src/Packet13PlayerLookMove.java new file mode 100644 index 0000000..f4fafeb --- /dev/null +++ b/src/net/minecraft/src/Packet13PlayerLookMove.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet13PlayerLookMove extends Packet10Flying { + public Packet13PlayerLookMove() { + this.rotating = true; + this.moving = true; + } + + public Packet13PlayerLookMove(double var1, double var3, double var5, double var7, float var9, float var10, boolean var11) { + this.xPosition = var1; + this.yPosition = var3; + this.stance = var5; + this.zPosition = var7; + this.yaw = var9; + this.pitch = var10; + this.onGround = var11; + this.rotating = true; + this.moving = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readDouble(); + this.yPosition = var1.readDouble(); + this.stance = var1.readDouble(); + this.zPosition = var1.readDouble(); + this.yaw = var1.readFloat(); + this.pitch = var1.readFloat(); + super.readPacketData(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeDouble(this.xPosition); + var1.writeDouble(this.yPosition); + var1.writeDouble(this.stance); + var1.writeDouble(this.zPosition); + var1.writeFloat(this.yaw); + var1.writeFloat(this.pitch); + super.writePacketData(var1); + } + + public int getPacketSize() { + return 41; + } +} diff --git a/src/net/minecraft/src/Packet14BlockDig.java b/src/net/minecraft/src/Packet14BlockDig.java new file mode 100644 index 0000000..0e8d39c --- /dev/null +++ b/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/src/net/minecraft/src/Packet15Place.java b/src/net/minecraft/src/Packet15Place.java new file mode 100644 index 0000000..6dfb7bd --- /dev/null +++ b/src/net/minecraft/src/Packet15Place.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet15Place extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + public int direction; + public ItemStack itemStack; + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.read(); + this.zPosition = var1.readInt(); + this.direction = var1.read(); + short var2 = var1.readShort(); + if(var2 >= 0) { + byte var3 = var1.readByte(); + short var4 = var1.readShort(); + this.itemStack = new ItemStack(var2, var3, var4); + } else { + this.itemStack = null; + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.write(this.yPosition); + var1.writeInt(this.zPosition); + var1.write(this.direction); + if(this.itemStack == null) { + var1.writeShort(-1); + } else { + var1.writeShort(this.itemStack.itemID); + var1.writeByte(this.itemStack.stackSize); + var1.writeShort(this.itemStack.getItemDamage()); + } + + } + + public void processPacket(NetHandler var1) { + var1.handlePlace(this); + } + + public int getPacketSize() { + return 15; + } +} diff --git a/src/net/minecraft/src/Packet16BlockItemSwitch.java b/src/net/minecraft/src/Packet16BlockItemSwitch.java new file mode 100644 index 0000000..038d6c3 --- /dev/null +++ b/src/net/minecraft/src/Packet16BlockItemSwitch.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet16BlockItemSwitch extends Packet { + public int id; + + public void readPacketData(DataInputStream var1) throws IOException { + this.id = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeShort(this.id); + } + + public void processPacket(NetHandler var1) { + var1.handleBlockItemSwitch(this); + } + + public int getPacketSize() { + return 2; + } +} diff --git a/src/net/minecraft/src/Packet17Sleep.java b/src/net/minecraft/src/Packet17Sleep.java new file mode 100644 index 0000000..ae83e67 --- /dev/null +++ b/src/net/minecraft/src/Packet17Sleep.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet17Sleep extends Packet { + public int field_22041_a; + public int field_22040_b; + public int field_22044_c; + public int field_22043_d; + public int field_22042_e; + + public Packet17Sleep() { + } + + public Packet17Sleep(Entity var1, int var2, int var3, int var4, int var5) { + this.field_22042_e = var2; + this.field_22040_b = var3; + this.field_22044_c = var4; + this.field_22043_d = var5; + this.field_22041_a = var1.entityId; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_22041_a = var1.readInt(); + this.field_22042_e = var1.readByte(); + this.field_22040_b = var1.readInt(); + this.field_22044_c = var1.readByte(); + this.field_22043_d = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.field_22041_a); + var1.writeByte(this.field_22042_e); + var1.writeInt(this.field_22040_b); + var1.writeByte(this.field_22044_c); + var1.writeInt(this.field_22043_d); + } + + public void processPacket(NetHandler var1) { + var1.func_22002_a(this); + } + + public int getPacketSize() { + return 14; + } +} diff --git a/src/net/minecraft/src/Packet18Animation.java b/src/net/minecraft/src/Packet18Animation.java new file mode 100644 index 0000000..f9eec62 --- /dev/null +++ b/src/net/minecraft/src/Packet18Animation.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet18Animation extends Packet { + public int entityId; + public int animate; + + public Packet18Animation() { + } + + public Packet18Animation(Entity var1, int var2) { + this.entityId = var1.entityId; + this.animate = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.animate = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.animate); + } + + public void processPacket(NetHandler var1) { + var1.handleArmAnimation(this); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/src/net/minecraft/src/Packet19EntityAction.java b/src/net/minecraft/src/Packet19EntityAction.java new file mode 100644 index 0000000..5f98a92 --- /dev/null +++ b/src/net/minecraft/src/Packet19EntityAction.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet19EntityAction extends Packet { + public int entityId; + public int state; + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.state = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.state); + } + + public void processPacket(NetHandler var1) { + var1.func_21001_a(this); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/src/net/minecraft/src/Packet1Login.java b/src/net/minecraft/src/Packet1Login.java new file mode 100644 index 0000000..68d41b9 --- /dev/null +++ b/src/net/minecraft/src/Packet1Login.java @@ -0,0 +1,44 @@ +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 long mapSeed; + public byte dimension; + + public Packet1Login() { + } + + public Packet1Login(String var1, int var2, long var3, byte var5) { + this.username = var1; + this.protocolVersion = var2; + this.mapSeed = var3; + this.dimension = var5; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.protocolVersion = var1.readInt(); + this.username = readString(var1, 16); + this.mapSeed = var1.readLong(); + this.dimension = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.protocolVersion); + writeString(this.username, var1); + var1.writeLong(this.mapSeed); + var1.writeByte(this.dimension); + } + + public void processPacket(NetHandler var1) { + var1.handleLogin(this); + } + + public int getPacketSize() { + return 4 + this.username.length() + 4 + 5; + } +} diff --git a/src/net/minecraft/src/Packet200Statistic.java b/src/net/minecraft/src/Packet200Statistic.java new file mode 100644 index 0000000..1b6c3f4 --- /dev/null +++ b/src/net/minecraft/src/Packet200Statistic.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet200Statistic extends Packet { + public int field_27041_a; + public int field_27040_b; + + public Packet200Statistic() { + } + + public Packet200Statistic(int var1, int var2) { + this.field_27041_a = var1; + this.field_27040_b = var2; + } + + public void processPacket(NetHandler var1) { + var1.func_27001_a(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_27041_a = var1.readInt(); + this.field_27040_b = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.field_27041_a); + var1.writeByte(this.field_27040_b); + } + + public int getPacketSize() { + return 6; + } +} diff --git a/src/net/minecraft/src/Packet20NamedEntitySpawn.java b/src/net/minecraft/src/Packet20NamedEntitySpawn.java new file mode 100644 index 0000000..a4f019c --- /dev/null +++ b/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.entityId; + this.name = var1.username; + this.xPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.rotation = (byte)((int)(var1.rotationYaw * 256.0F / 360.0F)); + this.pitch = (byte)((int)(var1.rotationPitch * 256.0F / 360.0F)); + ItemStack var2 = var1.inventory.getCurrentItem(); + this.currentItem = var2 == null ? 0 : var2.itemID; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.name = readString(var1, 16); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.rotation = var1.readByte(); + this.pitch = var1.readByte(); + this.currentItem = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + writeString(this.name, var1); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeByte(this.rotation); + var1.writeByte(this.pitch); + var1.writeShort(this.currentItem); + } + + public void processPacket(NetHandler var1) { + var1.handleNamedEntitySpawn(this); + } + + public int getPacketSize() { + return 28; + } +} diff --git a/src/net/minecraft/src/Packet21PickupSpawn.java b/src/net/minecraft/src/Packet21PickupSpawn.java new file mode 100644 index 0000000..c4092b1 --- /dev/null +++ b/src/net/minecraft/src/Packet21PickupSpawn.java @@ -0,0 +1,68 @@ +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 int itemDamage; + + public Packet21PickupSpawn() { + } + + public Packet21PickupSpawn(EntityItem var1) { + this.entityId = var1.entityId; + this.itemID = var1.item.itemID; + this.count = var1.item.stackSize; + this.itemDamage = var1.item.getItemDamage(); + 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.itemDamage = var1.readShort(); + 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.writeShort(this.itemDamage); + 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 24; + } +} diff --git a/src/net/minecraft/src/Packet22Collect.java b/src/net/minecraft/src/Packet22Collect.java new file mode 100644 index 0000000..b8f1a00 --- /dev/null +++ b/src/net/minecraft/src/Packet22Collect.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet22Collect extends Packet { + public int collectedEntityId; + public int collectorEntityId; + + public Packet22Collect() { + } + + public Packet22Collect(int var1, int var2) { + this.collectedEntityId = var1; + this.collectorEntityId = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.collectedEntityId = var1.readInt(); + this.collectorEntityId = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.collectedEntityId); + var1.writeInt(this.collectorEntityId); + } + + public void processPacket(NetHandler var1) { + var1.handleCollect(this); + } + + public int getPacketSize() { + return 8; + } +} diff --git a/src/net/minecraft/src/Packet23VehicleSpawn.java b/src/net/minecraft/src/Packet23VehicleSpawn.java new file mode 100644 index 0000000..0e82a66 --- /dev/null +++ b/src/net/minecraft/src/Packet23VehicleSpawn.java @@ -0,0 +1,105 @@ +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 field_28044_e; + public int field_28043_f; + public int field_28042_g; + public int type; + public int field_28041_i; + + public Packet23VehicleSpawn() { + } + + public Packet23VehicleSpawn(Entity var1, int var2) { + this(var1, var2, 0); + } + + public Packet23VehicleSpawn(Entity var1, int var2, int var3) { + this.entityId = var1.entityId; + this.xPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.type = var2; + this.field_28041_i = var3; + if(var3 > 0) { + double var4 = var1.motionX; + double var6 = var1.motionY; + double var8 = var1.motionZ; + double var10 = 3.9D; + if(var4 < -var10) { + var4 = -var10; + } + + if(var6 < -var10) { + var6 = -var10; + } + + if(var8 < -var10) { + var8 = -var10; + } + + if(var4 > var10) { + var4 = var10; + } + + if(var6 > var10) { + var6 = var10; + } + + if(var8 > var10) { + var8 = var10; + } + + this.field_28044_e = (int)(var4 * 8000.0D); + this.field_28043_f = (int)(var6 * 8000.0D); + this.field_28042_g = (int)(var8 * 8000.0D); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.type = var1.readByte(); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.field_28041_i = var1.readInt(); + if(this.field_28041_i > 0) { + this.field_28044_e = var1.readShort(); + this.field_28043_f = var1.readShort(); + this.field_28042_g = var1.readShort(); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.type); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeInt(this.field_28041_i); + if(this.field_28041_i > 0) { + var1.writeShort(this.field_28044_e); + var1.writeShort(this.field_28043_f); + var1.writeShort(this.field_28042_g); + } + + } + + public void processPacket(NetHandler var1) { + var1.handleVehicleSpawn(this); + } + + public int getPacketSize() { + return 21 + this.field_28041_i > 0 ? 6 : 0; + } +} diff --git a/src/net/minecraft/src/Packet24MobSpawn.java b/src/net/minecraft/src/Packet24MobSpawn.java new file mode 100644 index 0000000..7b20f7e --- /dev/null +++ b/src/net/minecraft/src/Packet24MobSpawn.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.List; + +public class Packet24MobSpawn extends Packet { + public int entityId; + public byte type; + public int xPosition; + public int yPosition; + public int zPosition; + public byte yaw; + public byte pitch; + private DataWatcher metaData; + private List receivedMetadata; + + public Packet24MobSpawn() { + } + + public Packet24MobSpawn(EntityLiving var1) { + this.entityId = var1.entityId; + this.type = (byte)EntityList.getEntityID(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)); + this.metaData = var1.getDataWatcher(); + } + + 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(); + this.receivedMetadata = DataWatcher.readWatchableObjects(var1); + } + + 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); + this.metaData.writeWatchableObjects(var1); + } + + public void processPacket(NetHandler var1) { + var1.handleMobSpawn(this); + } + + public int getPacketSize() { + return 20; + } +} diff --git a/src/net/minecraft/src/Packet255KickDisconnect.java b/src/net/minecraft/src/Packet255KickDisconnect.java new file mode 100644 index 0000000..eb0d5d6 --- /dev/null +++ b/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 = readString(var1, 100); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.reason, var1); + } + + public void processPacket(NetHandler var1) { + var1.handleKickDisconnect(this); + } + + public int getPacketSize() { + return this.reason.length(); + } +} diff --git a/src/net/minecraft/src/Packet25EntityPainting.java b/src/net/minecraft/src/Packet25EntityPainting.java new file mode 100644 index 0000000..8f59244 --- /dev/null +++ b/src/net/minecraft/src/Packet25EntityPainting.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet25EntityPainting extends Packet { + public int entityId; + public int xPosition; + public int yPosition; + public int zPosition; + public int direction; + public String title; + + public Packet25EntityPainting() { + } + + public Packet25EntityPainting(EntityPainting var1) { + this.entityId = var1.entityId; + this.xPosition = var1.xPosition; + this.yPosition = var1.yPosition; + this.zPosition = var1.zPosition; + this.direction = var1.direction; + this.title = var1.art.title; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.title = readString(var1, EnumArt.field_27096_z); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.direction = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + writeString(this.title, var1); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeInt(this.direction); + } + + public void processPacket(NetHandler var1) { + var1.func_21003_a(this); + } + + public int getPacketSize() { + return 24; + } +} diff --git a/src/net/minecraft/src/Packet27Position.java b/src/net/minecraft/src/Packet27Position.java new file mode 100644 index 0000000..706358e --- /dev/null +++ b/src/net/minecraft/src/Packet27Position.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet27Position extends Packet { + private float strafeMovement; + private float fowardMovement; + private boolean field_22039_c; + private boolean isInJump; + private float pitchRotation; + private float yawRotation; + + public void readPacketData(DataInputStream var1) throws IOException { + this.strafeMovement = var1.readFloat(); + this.fowardMovement = var1.readFloat(); + this.pitchRotation = var1.readFloat(); + this.yawRotation = var1.readFloat(); + this.field_22039_c = var1.readBoolean(); + this.isInJump = var1.readBoolean(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeFloat(this.strafeMovement); + var1.writeFloat(this.fowardMovement); + var1.writeFloat(this.pitchRotation); + var1.writeFloat(this.yawRotation); + var1.writeBoolean(this.field_22039_c); + var1.writeBoolean(this.isInJump); + } + + public void processPacket(NetHandler var1) { + var1.handleMovementTypePacket(this); + } + + public int getPacketSize() { + return 18; + } + + public float func_22031_c() { + return this.strafeMovement; + } + + public float func_22029_d() { + return this.pitchRotation; + } + + public float func_22028_e() { + return this.fowardMovement; + } + + public float func_22033_f() { + return this.yawRotation; + } + + public boolean func_22032_g() { + return this.field_22039_c; + } + + public boolean func_22030_h() { + return this.isInJump; + } +} diff --git a/src/net/minecraft/src/Packet28EntityVelocity.java b/src/net/minecraft/src/Packet28EntityVelocity.java new file mode 100644 index 0000000..ed613fa --- /dev/null +++ b/src/net/minecraft/src/Packet28EntityVelocity.java @@ -0,0 +1,73 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet28EntityVelocity extends Packet { + public int entityId; + public int motionX; + public int motionY; + public int motionZ; + + public Packet28EntityVelocity() { + } + + public Packet28EntityVelocity(Entity var1) { + this(var1.entityId, var1.motionX, var1.motionY, var1.motionZ); + } + + public Packet28EntityVelocity(int var1, double var2, double var4, double var6) { + this.entityId = var1; + double var8 = 3.9D; + if(var2 < -var8) { + var2 = -var8; + } + + if(var4 < -var8) { + var4 = -var8; + } + + if(var6 < -var8) { + var6 = -var8; + } + + if(var2 > var8) { + var2 = var8; + } + + if(var4 > var8) { + var4 = var8; + } + + if(var6 > var8) { + var6 = var8; + } + + this.motionX = (int)(var2 * 8000.0D); + this.motionY = (int)(var4 * 8000.0D); + this.motionZ = (int)(var6 * 8000.0D); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.motionX = var1.readShort(); + this.motionY = var1.readShort(); + this.motionZ = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeShort(this.motionX); + var1.writeShort(this.motionY); + var1.writeShort(this.motionZ); + } + + public void processPacket(NetHandler var1) { + var1.func_6002_a(this); + } + + public int getPacketSize() { + return 10; + } +} diff --git a/src/net/minecraft/src/Packet29DestroyEntity.java b/src/net/minecraft/src/Packet29DestroyEntity.java new file mode 100644 index 0000000..ea806fa --- /dev/null +++ b/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/src/net/minecraft/src/Packet2Handshake.java b/src/net/minecraft/src/Packet2Handshake.java new file mode 100644 index 0000000..d4a28cc --- /dev/null +++ b/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 = readString(var1, 32); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.username, var1); + } + + public void processPacket(NetHandler var1) { + var1.handleHandshake(this); + } + + public int getPacketSize() { + return 4 + this.username.length() + 4; + } +} diff --git a/src/net/minecraft/src/Packet30Entity.java b/src/net/minecraft/src/Packet30Entity.java new file mode 100644 index 0000000..72c78dc --- /dev/null +++ b/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/src/net/minecraft/src/Packet31RelEntityMove.java b/src/net/minecraft/src/Packet31RelEntityMove.java new file mode 100644 index 0000000..87e1eef --- /dev/null +++ b/src/net/minecraft/src/Packet31RelEntityMove.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet31RelEntityMove extends Packet30Entity { + public Packet31RelEntityMove() { + } + + public Packet31RelEntityMove(int var1, byte var2, byte var3, byte var4) { + super(var1); + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + } + + public void readPacketData(DataInputStream var1) throws IOException { + super.readPacketData(var1); + this.xPosition = var1.readByte(); + this.yPosition = var1.readByte(); + this.zPosition = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + super.writePacketData(var1); + var1.writeByte(this.xPosition); + var1.writeByte(this.yPosition); + var1.writeByte(this.zPosition); + } + + public int getPacketSize() { + return 7; + } +} diff --git a/src/net/minecraft/src/Packet32EntityLook.java b/src/net/minecraft/src/Packet32EntityLook.java new file mode 100644 index 0000000..8402123 --- /dev/null +++ b/src/net/minecraft/src/Packet32EntityLook.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet32EntityLook extends Packet30Entity { + public Packet32EntityLook() { + this.rotating = true; + } + + public Packet32EntityLook(int var1, byte var2, byte var3) { + super(var1); + this.yaw = var2; + this.pitch = var3; + this.rotating = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + super.readPacketData(var1); + this.yaw = var1.readByte(); + this.pitch = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + super.writePacketData(var1); + var1.writeByte(this.yaw); + var1.writeByte(this.pitch); + } + + public int getPacketSize() { + return 6; + } +} diff --git a/src/net/minecraft/src/Packet33RelEntityMoveLook.java b/src/net/minecraft/src/Packet33RelEntityMoveLook.java new file mode 100644 index 0000000..012f84b --- /dev/null +++ b/src/net/minecraft/src/Packet33RelEntityMoveLook.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet33RelEntityMoveLook extends Packet30Entity { + public Packet33RelEntityMoveLook() { + this.rotating = true; + } + + public Packet33RelEntityMoveLook(int var1, byte var2, byte var3, byte var4, byte var5, byte var6) { + super(var1); + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + this.yaw = var5; + this.pitch = var6; + this.rotating = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + super.readPacketData(var1); + this.xPosition = var1.readByte(); + this.yPosition = var1.readByte(); + this.zPosition = var1.readByte(); + this.yaw = var1.readByte(); + this.pitch = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + super.writePacketData(var1); + var1.writeByte(this.xPosition); + var1.writeByte(this.yPosition); + var1.writeByte(this.zPosition); + var1.writeByte(this.yaw); + var1.writeByte(this.pitch); + } + + public int getPacketSize() { + return 9; + } +} diff --git a/src/net/minecraft/src/Packet34EntityTeleport.java b/src/net/minecraft/src/Packet34EntityTeleport.java new file mode 100644 index 0000000..4ac3240 --- /dev/null +++ b/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.entityId; + this.xPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.yaw = (byte)((int)(var1.rotationYaw * 256.0F / 360.0F)); + this.pitch = (byte)((int)(var1.rotationPitch * 256.0F / 360.0F)); + } + + public Packet34EntityTeleport(int var1, int var2, int var3, int var4, byte var5, byte var6) { + this.entityId = var1; + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + this.yaw = var5; + this.pitch = var6; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.yaw = (byte)var1.read(); + this.pitch = (byte)var1.read(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.write(this.yaw); + var1.write(this.pitch); + } + + public void processPacket(NetHandler var1) { + var1.handleEntityTeleport(this); + } + + public int getPacketSize() { + return 34; + } +} diff --git a/src/net/minecraft/src/Packet38EntityStatus.java b/src/net/minecraft/src/Packet38EntityStatus.java new file mode 100644 index 0000000..63f44da --- /dev/null +++ b/src/net/minecraft/src/Packet38EntityStatus.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet38EntityStatus extends Packet { + public int entityId; + public byte entityStatus; + + public Packet38EntityStatus() { + } + + public Packet38EntityStatus(int var1, byte var2) { + this.entityId = var1; + this.entityStatus = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.entityStatus = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.entityStatus); + } + + public void processPacket(NetHandler var1) { + var1.func_9001_a(this); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/src/net/minecraft/src/Packet39AttachEntity.java b/src/net/minecraft/src/Packet39AttachEntity.java new file mode 100644 index 0000000..a691593 --- /dev/null +++ b/src/net/minecraft/src/Packet39AttachEntity.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet39AttachEntity extends Packet { + public int entityId; + public int vehicleEntityId; + + public Packet39AttachEntity() { + } + + public Packet39AttachEntity(Entity var1, Entity var2) { + this.entityId = var1.entityId; + this.vehicleEntityId = var2 != null ? var2.entityId : -1; + } + + public int getPacketSize() { + return 8; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.vehicleEntityId = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeInt(this.vehicleEntityId); + } + + public void processPacket(NetHandler var1) { + var1.func_6003_a(this); + } +} diff --git a/src/net/minecraft/src/Packet3Chat.java b/src/net/minecraft/src/Packet3Chat.java new file mode 100644 index 0000000..baa9eb3 --- /dev/null +++ b/src/net/minecraft/src/Packet3Chat.java @@ -0,0 +1,36 @@ +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) { + if(var1.length() > 119) { + var1 = var1.substring(0, 119); + } + + this.message = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.message = readString(var1, 119); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.message, var1); + } + + public void processPacket(NetHandler var1) { + var1.handleChat(this); + } + + public int getPacketSize() { + return this.message.length(); + } +} diff --git a/src/net/minecraft/src/Packet40EntityMetadata.java b/src/net/minecraft/src/Packet40EntityMetadata.java new file mode 100644 index 0000000..ede0937 --- /dev/null +++ b/src/net/minecraft/src/Packet40EntityMetadata.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.List; + +public class Packet40EntityMetadata extends Packet { + public int entityId; + private List field_21018_b; + + public Packet40EntityMetadata() { + } + + public Packet40EntityMetadata(int var1, DataWatcher var2) { + this.entityId = var1; + this.field_21018_b = var2.getChangedObjects(); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.field_21018_b = DataWatcher.readWatchableObjects(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + DataWatcher.writeObjectsInListToStream(this.field_21018_b, var1); + } + + public void processPacket(NetHandler var1) { + var1.func_21002_a(this); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/src/net/minecraft/src/Packet4UpdateTime.java b/src/net/minecraft/src/Packet4UpdateTime.java new file mode 100644 index 0000000..d3331e8 --- /dev/null +++ b/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/src/net/minecraft/src/Packet50PreChunk.java b/src/net/minecraft/src/Packet50PreChunk.java new file mode 100644 index 0000000..d16546d --- /dev/null +++ b/src/net/minecraft/src/Packet50PreChunk.java @@ -0,0 +1,42 @@ +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() { + this.isChunkDataPacket = false; + } + + public Packet50PreChunk(int var1, int var2, boolean var3) { + this.isChunkDataPacket = false; + 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/src/net/minecraft/src/Packet51MapChunk.java b/src/net/minecraft/src/Packet51MapChunk.java new file mode 100644 index 0000000..53d3724 --- /dev/null +++ b/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.getChunkData(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; + this.chunkSize = var1.readInt(); + byte[] var2 = new byte[this.chunkSize]; + var1.readFully(var2); + this.chunk = new byte[this.xSize * this.ySize * this.zSize * 5 / 2]; + Inflater var3 = new Inflater(); + var3.setInput(var2); + + try { + var3.inflate(this.chunk); + } catch (DataFormatException var8) { + throw new IOException("Bad compressed data format"); + } finally { + var3.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/src/net/minecraft/src/Packet52MultiBlockChange.java b/src/net/minecraft/src/Packet52MultiBlockChange.java new file mode 100644 index 0000000..f0fe916 --- /dev/null +++ b/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/src/net/minecraft/src/Packet53BlockChange.java b/src/net/minecraft/src/Packet53BlockChange.java new file mode 100644 index 0000000..132f795 --- /dev/null +++ b/src/net/minecraft/src/Packet53BlockChange.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet53BlockChange extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + public int type; + public int metadata; + + public Packet53BlockChange() { + this.isChunkDataPacket = true; + } + + public Packet53BlockChange(int var1, int var2, int var3, World var4) { + this.isChunkDataPacket = true; + this.xPosition = var1; + this.yPosition = var2; + this.zPosition = var3; + this.type = var4.getBlockId(var1, var2, var3); + this.metadata = var4.getBlockMetadata(var1, var2, var3); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.read(); + this.zPosition = var1.readInt(); + this.type = var1.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/src/net/minecraft/src/Packet54PlayNoteBlock.java b/src/net/minecraft/src/Packet54PlayNoteBlock.java new file mode 100644 index 0000000..9526c9a --- /dev/null +++ b/src/net/minecraft/src/Packet54PlayNoteBlock.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet54PlayNoteBlock extends Packet { + public int xLocation; + public int yLocation; + public int zLocation; + public int instrumentType; + public int pitch; + + public Packet54PlayNoteBlock() { + } + + public Packet54PlayNoteBlock(int var1, int var2, int var3, int var4, int var5) { + this.xLocation = var1; + this.yLocation = var2; + this.zLocation = var3; + this.instrumentType = var4; + this.pitch = var5; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xLocation = var1.readInt(); + this.yLocation = var1.readShort(); + this.zLocation = var1.readInt(); + this.instrumentType = var1.read(); + this.pitch = var1.read(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xLocation); + var1.writeShort(this.yLocation); + var1.writeInt(this.zLocation); + var1.write(this.instrumentType); + var1.write(this.pitch); + } + + public void processPacket(NetHandler var1) { + var1.func_21004_a(this); + } + + public int getPacketSize() { + return 12; + } +} diff --git a/src/net/minecraft/src/Packet5PlayerInventory.java b/src/net/minecraft/src/Packet5PlayerInventory.java new file mode 100644 index 0000000..f94dc18 --- /dev/null +++ b/src/net/minecraft/src/Packet5PlayerInventory.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet5PlayerInventory extends Packet { + public int entityID; + public int slot; + public int itemID; + public int itemDamage; + + public Packet5PlayerInventory() { + } + + public Packet5PlayerInventory(int var1, int var2, ItemStack var3) { + this.entityID = var1; + this.slot = var2; + if(var3 == null) { + this.itemID = -1; + this.itemDamage = 0; + } else { + this.itemID = var3.itemID; + this.itemDamage = var3.getItemDamage(); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityID = var1.readInt(); + this.slot = var1.readShort(); + this.itemID = var1.readShort(); + this.itemDamage = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityID); + var1.writeShort(this.slot); + var1.writeShort(this.itemID); + var1.writeShort(this.itemDamage); + } + + public void processPacket(NetHandler var1) { + var1.handlePlayerInventory(this); + } + + public int getPacketSize() { + return 8; + } +} diff --git a/src/net/minecraft/src/Packet60Explosion.java b/src/net/minecraft/src/Packet60Explosion.java new file mode 100644 index 0000000..4889627 --- /dev/null +++ b/src/net/minecraft/src/Packet60Explosion.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 Packet60Explosion extends Packet { + public double explosionX; + public double explosionY; + public double explosionZ; + public float explosionSize; + public Set destroyedBlockPositions; + + public Packet60Explosion() { + } + + public Packet60Explosion(double var1, double var3, double var5, float var7, Set var8) { + this.explosionX = var1; + this.explosionY = var3; + this.explosionZ = var5; + this.explosionSize = var7; + this.destroyedBlockPositions = new HashSet(var8); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.explosionX = var1.readDouble(); + this.explosionY = var1.readDouble(); + this.explosionZ = var1.readDouble(); + this.explosionSize = var1.readFloat(); + int var2 = var1.readInt(); + this.destroyedBlockPositions = new HashSet(); + int var3 = (int)this.explosionX; + int var4 = (int)this.explosionY; + int var5 = (int)this.explosionZ; + + for(int var6 = 0; var6 < var2; ++var6) { + int var7 = var1.readByte() + var3; + int var8 = var1.readByte() + var4; + int var9 = var1.readByte() + var5; + this.destroyedBlockPositions.add(new ChunkPosition(var7, var8, var9)); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeDouble(this.explosionX); + var1.writeDouble(this.explosionY); + var1.writeDouble(this.explosionZ); + var1.writeFloat(this.explosionSize); + var1.writeInt(this.destroyedBlockPositions.size()); + int var2 = (int)this.explosionX; + int var3 = (int)this.explosionY; + int var4 = (int)this.explosionZ; + Iterator var5 = this.destroyedBlockPositions.iterator(); + + while(var5.hasNext()) { + ChunkPosition var6 = (ChunkPosition)var5.next(); + int var7 = var6.x - var2; + int var8 = var6.y - var3; + int var9 = var6.z - var4; + var1.writeByte(var7); + var1.writeByte(var8); + var1.writeByte(var9); + } + + } + + public void processPacket(NetHandler var1) { + var1.func_12001_a(this); + } + + public int getPacketSize() { + return 32 + this.destroyedBlockPositions.size() * 3; + } +} diff --git a/src/net/minecraft/src/Packet61DoorChange.java b/src/net/minecraft/src/Packet61DoorChange.java new file mode 100644 index 0000000..bd2a59f --- /dev/null +++ b/src/net/minecraft/src/Packet61DoorChange.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet61DoorChange extends Packet { + public int field_28047_a; + public int field_28046_b; + public int field_28050_c; + public int field_28049_d; + public int field_28048_e; + + public Packet61DoorChange() { + } + + public Packet61DoorChange(int var1, int var2, int var3, int var4, int var5) { + this.field_28047_a = var1; + this.field_28050_c = var2; + this.field_28049_d = var3; + this.field_28048_e = var4; + this.field_28046_b = var5; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_28047_a = var1.readInt(); + this.field_28050_c = var1.readInt(); + this.field_28049_d = var1.readByte(); + this.field_28048_e = var1.readInt(); + this.field_28046_b = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.field_28047_a); + var1.writeInt(this.field_28050_c); + var1.writeByte(this.field_28049_d); + var1.writeInt(this.field_28048_e); + var1.writeInt(this.field_28046_b); + } + + public void processPacket(NetHandler var1) { + var1.func_28002_a(this); + } + + public int getPacketSize() { + return 20; + } +} diff --git a/src/net/minecraft/src/Packet6SpawnPosition.java b/src/net/minecraft/src/Packet6SpawnPosition.java new file mode 100644 index 0000000..1cbf443 --- /dev/null +++ b/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/src/net/minecraft/src/Packet70Bed.java b/src/net/minecraft/src/Packet70Bed.java new file mode 100644 index 0000000..2594f41 --- /dev/null +++ b/src/net/minecraft/src/Packet70Bed.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet70Bed extends Packet { + public static final String[] field_25016_a = new String[]{"tile.bed.notValid", null, null}; + public int field_25015_b; + + public Packet70Bed() { + } + + public Packet70Bed(int var1) { + this.field_25015_b = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_25015_b = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.field_25015_b); + } + + public void processPacket(NetHandler var1) { + var1.func_25001_a(this); + } + + public int getPacketSize() { + return 1; + } +} diff --git a/src/net/minecraft/src/Packet71Weather.java b/src/net/minecraft/src/Packet71Weather.java new file mode 100644 index 0000000..8185458 --- /dev/null +++ b/src/net/minecraft/src/Packet71Weather.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet71Weather extends Packet { + public int field_27043_a; + public int field_27042_b; + public int field_27046_c; + public int field_27045_d; + public int field_27044_e; + + public Packet71Weather() { + } + + public Packet71Weather(Entity var1) { + this.field_27043_a = var1.entityId; + this.field_27042_b = MathHelper.floor_double(var1.posX * 32.0D); + this.field_27046_c = MathHelper.floor_double(var1.posY * 32.0D); + this.field_27045_d = MathHelper.floor_double(var1.posZ * 32.0D); + if(var1 instanceof EntityLightningBolt) { + this.field_27044_e = 1; + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_27043_a = var1.readInt(); + this.field_27044_e = var1.readByte(); + this.field_27042_b = var1.readInt(); + this.field_27046_c = var1.readInt(); + this.field_27045_d = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.field_27043_a); + var1.writeByte(this.field_27044_e); + var1.writeInt(this.field_27042_b); + var1.writeInt(this.field_27046_c); + var1.writeInt(this.field_27045_d); + } + + public void processPacket(NetHandler var1) { + var1.func_27002_a(this); + } + + public int getPacketSize() { + return 17; + } +} diff --git a/src/net/minecraft/src/Packet7UseEntity.java b/src/net/minecraft/src/Packet7UseEntity.java new file mode 100644 index 0000000..0c6e489 --- /dev/null +++ b/src/net/minecraft/src/Packet7UseEntity.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet7UseEntity extends Packet { + public int playerEntityId; + public int targetEntity; + public int isLeftClick; + + public void readPacketData(DataInputStream var1) throws IOException { + this.playerEntityId = var1.readInt(); + this.targetEntity = var1.readInt(); + this.isLeftClick = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.playerEntityId); + var1.writeInt(this.targetEntity); + var1.writeByte(this.isLeftClick); + } + + public void processPacket(NetHandler var1) { + var1.func_6006_a(this); + } + + public int getPacketSize() { + return 9; + } +} diff --git a/src/net/minecraft/src/Packet8UpdateHealth.java b/src/net/minecraft/src/Packet8UpdateHealth.java new file mode 100644 index 0000000..7870825 --- /dev/null +++ b/src/net/minecraft/src/Packet8UpdateHealth.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet8UpdateHealth extends Packet { + public int healthMP; + + public Packet8UpdateHealth() { + } + + public Packet8UpdateHealth(int var1) { + this.healthMP = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.healthMP = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeShort(this.healthMP); + } + + public void processPacket(NetHandler var1) { + var1.handleHealth(this); + } + + public int getPacketSize() { + return 2; + } +} diff --git a/src/net/minecraft/src/Packet9Respawn.java b/src/net/minecraft/src/Packet9Respawn.java new file mode 100644 index 0000000..8bcb58b --- /dev/null +++ b/src/net/minecraft/src/Packet9Respawn.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet9Respawn extends Packet { + public byte field_28045_a; + + public Packet9Respawn() { + } + + public Packet9Respawn(byte var1) { + this.field_28045_a = var1; + } + + public void processPacket(NetHandler var1) { + var1.handleRespawnPacket(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_28045_a = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.field_28045_a); + } + + public int getPacketSize() { + return 1; + } +} diff --git a/src/net/minecraft/src/PacketCounter.java b/src/net/minecraft/src/PacketCounter.java new file mode 100644 index 0000000..0b6fb45 --- /dev/null +++ b/src/net/minecraft/src/PacketCounter.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +class PacketCounter { + private int totalPackets; + private long totalBytes; + + private PacketCounter() { + } + + public void addPacket(int var1) { + ++this.totalPackets; + this.totalBytes += (long)var1; + } + + PacketCounter(Empty1 var1) { + this(); + } +} diff --git a/src/net/minecraft/src/Path.java b/src/net/minecraft/src/Path.java new file mode 100644 index 0000000..ce289f0 --- /dev/null +++ b/src/net/minecraft/src/Path.java @@ -0,0 +1,119 @@ +package net.minecraft.src; + +public class Path { + private PathPoint[] pathPoints = new PathPoint[1024]; + private int count = 0; + + public PathPoint addPoint(PathPoint var1) { + if(var1.index >= 0) { + throw new IllegalStateException("OW KNOWS!"); + } else { + if(this.count == this.pathPoints.length) { + PathPoint[] var2 = new PathPoint[this.count << 1]; + System.arraycopy(this.pathPoints, 0, var2, 0, this.count); + this.pathPoints = var2; + } + + this.pathPoints[this.count] = var1; + var1.index = this.count; + this.sortBack(this.count++); + return var1; + } + } + + public void clearPath() { + this.count = 0; + } + + public PathPoint dequeue() { + PathPoint var1 = this.pathPoints[0]; + this.pathPoints[0] = this.pathPoints[--this.count]; + this.pathPoints[this.count] = null; + if(this.count > 0) { + this.sortForward(0); + } + + var1.index = -1; + return var1; + } + + public void changeDistance(PathPoint var1, float var2) { + float var3 = var1.distanceToTarget; + var1.distanceToTarget = var2; + if(var2 < var3) { + this.sortBack(var1.index); + } else { + this.sortForward(var1.index); + } + + } + + private void sortBack(int var1) { + PathPoint var2 = this.pathPoints[var1]; + + int var4; + for(float var3 = var2.distanceToTarget; var1 > 0; var1 = var4) { + var4 = var1 - 1 >> 1; + PathPoint var5 = this.pathPoints[var4]; + if(var3 >= var5.distanceToTarget) { + break; + } + + this.pathPoints[var1] = var5; + var5.index = var1; + } + + this.pathPoints[var1] = var2; + var2.index = var1; + } + + private void sortForward(int var1) { + PathPoint var2 = this.pathPoints[var1]; + float var3 = var2.distanceToTarget; + + while(true) { + int var4 = 1 + (var1 << 1); + int var5 = var4 + 1; + if(var4 >= this.count) { + break; + } + + PathPoint var6 = this.pathPoints[var4]; + float var7 = var6.distanceToTarget; + PathPoint var8; + float var9; + if(var5 >= this.count) { + var8 = null; + var9 = Float.POSITIVE_INFINITY; + } else { + var8 = this.pathPoints[var5]; + var9 = var8.distanceToTarget; + } + + if(var7 < var9) { + if(var7 >= var3) { + break; + } + + this.pathPoints[var1] = var6; + var6.index = var1; + var1 = var4; + } else { + if(var9 >= var3) { + break; + } + + this.pathPoints[var1] = var8; + var8.index = var1; + var1 = var5; + } + } + + this.pathPoints[var1] = var2; + var2.index = var1; + } + + public boolean isPathEmpty() { + return this.count == 0; + } +} diff --git a/src/net/minecraft/src/PathEntity.java b/src/net/minecraft/src/PathEntity.java new file mode 100644 index 0000000..04de79a --- /dev/null +++ b/src/net/minecraft/src/PathEntity.java @@ -0,0 +1,31 @@ +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 PathPoint func_22211_c() { + return this.pathLength > 0 ? this.points[this.pathLength - 1] : null; + } + + 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/src/net/minecraft/src/PathPoint.java b/src/net/minecraft/src/PathPoint.java new file mode 100644 index 0000000..2c933eb --- /dev/null +++ b/src/net/minecraft/src/PathPoint.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +public class PathPoint { + public final int xCoord; + public final int yCoord; + public final int zCoord; + private final int hash; + int index = -1; + float totalPathDistance; + float distanceToNext; + float distanceToTarget; + PathPoint previous; + public boolean isFirst = false; + + public PathPoint(int var1, int var2, int var3) { + this.xCoord = var1; + this.yCoord = var2; + this.zCoord = var3; + this.hash = func_22203_a(var1, var2, var3); + } + + public static int func_22203_a(int var0, int var1, int var2) { + return var1 & 255 | (var0 & Short.MAX_VALUE) << 8 | (var2 & Short.MAX_VALUE) << 24 | (var0 < 0 ? Integer.MIN_VALUE : 0) | (var2 < 0 ? -Short.MIN_VALUE : 0); + } + + public float distanceTo(PathPoint var1) { + float var2 = (float)(var1.xCoord - this.xCoord); + float var3 = (float)(var1.yCoord - this.yCoord); + float var4 = (float)(var1.zCoord - this.zCoord); + return MathHelper.sqrt_float(var2 * var2 + var3 * var3 + var4 * var4); + } + + public boolean equals(Object var1) { + if(!(var1 instanceof PathPoint)) { + return false; + } else { + PathPoint var2 = (PathPoint)var1; + return this.hash == var2.hash && this.xCoord == var2.xCoord && this.yCoord == var2.yCoord && this.zCoord == var2.zCoord; + } + } + + public int hashCode() { + return this.hash; + } + + public boolean isAssigned() { + return this.index >= 0; + } + + public String toString() { + return this.xCoord + ", " + this.yCoord + ", " + this.zCoord; + } +} diff --git a/src/net/minecraft/src/Pathfinder.java b/src/net/minecraft/src/Pathfinder.java new file mode 100644 index 0000000..6fc3678 --- /dev/null +++ b/src/net/minecraft/src/Pathfinder.java @@ -0,0 +1,209 @@ +package net.minecraft.src; + +public class Pathfinder { + private IBlockAccess worldMap; + private Path path = new Path(); + private MCHash pointMap = new MCHash(); + 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.equals(var3)) { + 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) == 1) { + var7 = 1; + } + + PathPoint var8 = this.getSafePoint(var1, var2.xCoord, var2.yCoord, var2.zCoord + 1, var3, var7); + PathPoint var9 = this.getSafePoint(var1, var2.xCoord - 1, var2.yCoord, var2.zCoord, var3, var7); + PathPoint var10 = this.getSafePoint(var1, var2.xCoord + 1, var2.yCoord, var2.zCoord, var3, var7); + PathPoint var11 = this.getSafePoint(var1, var2.xCoord, var2.yCoord, var2.zCoord - 1, var3, var7); + if(var8 != null && !var8.isFirst && var8.distanceTo(var4) < var5) { + this.pathOptions[var6++] = var8; + } + + if(var9 != null && !var9.isFirst && var9.distanceTo(var4) < var5) { + this.pathOptions[var6++] = var9; + } + + if(var10 != null && !var10.isFirst && var10.distanceTo(var4) < var5) { + this.pathOptions[var6++] = var10; + } + + if(var11 != null && !var11.isFirst && var11.distanceTo(var4) < var5) { + this.pathOptions[var6++] = var11; + } + + return var6; + } + + private PathPoint getSafePoint(Entity var1, int var2, int var3, int var4, PathPoint var5, int var6) { + PathPoint var7 = null; + if(this.getVerticalOffset(var1, var2, var3, var4, var5) == 1) { + var7 = this.openPoint(var2, var3, var4); + } + + if(var7 == null && var6 > 0 && this.getVerticalOffset(var1, var2, var3 + var6, var4, var5) == 1) { + var7 = this.openPoint(var2, var3 + var6, var4); + var3 += var6; + } + + if(var7 != null) { + int var8 = 0; + int var9 = 0; + + while(var3 > 0) { + var9 = this.getVerticalOffset(var1, var2, var3 - 1, var4, var5); + if(var9 != 1) { + break; + } + + ++var8; + if(var8 >= 4) { + return null; + } + + --var3; + if(var3 > 0) { + var7 = this.openPoint(var2, var3, var4); + } + } + + if(var9 == -2) { + return null; + } + } + + return var7; + } + + private final PathPoint openPoint(int var1, int var2, int var3) { + int var4 = PathPoint.func_22203_a(var1, var2, var3); + PathPoint var5 = (PathPoint)this.pointMap.lookup(var4); + if(var5 == null) { + var5 = new PathPoint(var1, var2, var3); + this.pointMap.addKey(var4, var5); + } + + return var5; + } + + 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) { + int var9 = this.worldMap.getBlockId(var6, var7, var8); + if(var9 > 0) { + if(var9 != Block.doorSteel.blockID && var9 != Block.doorWood.blockID) { + Material var11 = Block.blocksList[var9].blockMaterial; + if(var11.getIsSolid()) { + return 0; + } + + if(var11 == Material.water) { + return -1; + } + + if(var11 == Material.lava) { + return -2; + } + } else { + int var10 = this.worldMap.getBlockMetadata(var6, var7, var8); + if(!BlockDoor.func_27036_e(var10)) { + return 0; + } + } + } + } + } + } + + return 1; + } + + private PathEntity createEntityPath(PathPoint var1, PathPoint var2) { + int var3 = 1; + + PathPoint var4; + for(var4 = var2; var4.previous != null; var4 = var4.previous) { + ++var3; + } + + PathPoint[] var5 = new PathPoint[var3]; + var4 = var2; + --var3; + + for(var5[var3] = var2; var4.previous != null; var5[var3] = var4) { + var4 = var4.previous; + --var3; + } + + return new PathEntity(var5); + } +} diff --git a/src/net/minecraft/src/PistonBlockTextures.java b/src/net/minecraft/src/PistonBlockTextures.java new file mode 100644 index 0000000..b6d264c --- /dev/null +++ b/src/net/minecraft/src/PistonBlockTextures.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class PistonBlockTextures { + public static final int[] field_31052_a = new int[]{1, 0, 3, 2, 5, 4}; + public static final int[] field_31051_b = new int[]{0, 0, 0, 0, -1, 1}; + public static final int[] field_31054_c = new int[]{-1, 1, 0, 0, 0, 0}; + public static final int[] field_31053_d = new int[]{0, 0, -1, 1, 0, 0}; +} diff --git a/src/net/minecraft/src/PlayerHash.java b/src/net/minecraft/src/PlayerHash.java new file mode 100644 index 0000000..f957c52 --- /dev/null +++ b/src/net/minecraft/src/PlayerHash.java @@ -0,0 +1,128 @@ +package net.minecraft.src; + +public class PlayerHash { + private transient PlayerHashEntry[] hashArray = new PlayerHashEntry[16]; + private transient int numHashElements; + private int capacity = 12; + private final float percentUsable = 12.0F / 16.0F; + private transient volatile int field_950_e; + + private static int getHashedKey(long var0) { + return hash((int)(var0 ^ var0 >>> 32)); + } + + private static int hash(int var0) { + var0 ^= var0 >>> 20 ^ var0 >>> 12; + return var0 ^ var0 >>> 7 ^ var0 >>> 4; + } + + private static int getHashIndex(int var0, int var1) { + return var0 & var1 - 1; + } + + public Object getValueByKey(long var1) { + int var3 = getHashedKey(var1); + + for(PlayerHashEntry var4 = this.hashArray[getHashIndex(var3, this.hashArray.length)]; var4 != null; var4 = var4.nextEntry) { + if(var4.key == var1) { + return var4.value; + } + } + + return null; + } + + public void add(long var1, Object var3) { + int var4 = getHashedKey(var1); + int var5 = getHashIndex(var4, this.hashArray.length); + + for(PlayerHashEntry var6 = this.hashArray[var5]; var6 != null; var6 = var6.nextEntry) { + if(var6.key == var1) { + var6.value = var3; + } + } + + ++this.field_950_e; + this.createKey(var4, var1, var3, var5); + } + + private void resizeTable(int var1) { + PlayerHashEntry[] var2 = this.hashArray; + int var3 = var2.length; + if(var3 == 1073741824) { + this.capacity = Integer.MAX_VALUE; + } else { + PlayerHashEntry[] var4 = new PlayerHashEntry[var1]; + this.copyHashTableTo(var4); + this.hashArray = var4; + this.capacity = (int)((float)var1 * this.percentUsable); + } + } + + private void copyHashTableTo(PlayerHashEntry[] var1) { + PlayerHashEntry[] var2 = this.hashArray; + int var3 = var1.length; + + for(int var4 = 0; var4 < var2.length; ++var4) { + PlayerHashEntry var5 = var2[var4]; + if(var5 != null) { + var2[var4] = null; + + PlayerHashEntry var6; + do { + var6 = var5.nextEntry; + int var7 = getHashIndex(var5.field_1026_d, var3); + var5.nextEntry = var1[var7]; + var1[var7] = var5; + var5 = var6; + } while(var6 != null); + } + } + + } + + public Object remove(long var1) { + PlayerHashEntry var3 = this.removeKey(var1); + return var3 == null ? null : var3.value; + } + + final PlayerHashEntry removeKey(long var1) { + int var3 = getHashedKey(var1); + int var4 = getHashIndex(var3, this.hashArray.length); + PlayerHashEntry var5 = this.hashArray[var4]; + + PlayerHashEntry var6; + PlayerHashEntry var7; + for(var6 = var5; var6 != null; var6 = var7) { + var7 = var6.nextEntry; + if(var6.key == var1) { + ++this.field_950_e; + --this.numHashElements; + if(var5 == var6) { + this.hashArray[var4] = var7; + } else { + var5.nextEntry = var7; + } + + return var6; + } + + var5 = var6; + } + + return var6; + } + + private void createKey(int var1, long var2, Object var4, int var5) { + PlayerHashEntry var6 = this.hashArray[var5]; + this.hashArray[var5] = new PlayerHashEntry(var1, var2, var4, var6); + if(this.numHashElements++ >= this.capacity) { + this.resizeTable(2 * this.hashArray.length); + } + + } + + static int getHashCode(long var0) { + return getHashedKey(var0); + } +} diff --git a/src/net/minecraft/src/PlayerHashEntry.java b/src/net/minecraft/src/PlayerHashEntry.java new file mode 100644 index 0000000..851c7d2 --- /dev/null +++ b/src/net/minecraft/src/PlayerHashEntry.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +class PlayerHashEntry { + final long key; + Object value; + PlayerHashEntry nextEntry; + final int field_1026_d; + + PlayerHashEntry(int var1, long var2, Object var4, PlayerHashEntry var5) { + this.value = var4; + this.nextEntry = var5; + this.key = var2; + this.field_1026_d = var1; + } + + public final long func_736_a() { + return this.key; + } + + public final Object func_735_b() { + return this.value; + } + + public final boolean equals(Object var1) { + if(!(var1 instanceof PlayerHashEntry)) { + return false; + } else { + PlayerHashEntry var2 = (PlayerHashEntry)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 PlayerHash.getHashCode(this.key); + } + + public final String toString() { + return this.func_736_a() + "=" + this.func_735_b(); + } +} diff --git a/src/net/minecraft/src/PlayerInstance.java b/src/net/minecraft/src/PlayerInstance.java new file mode 100644 index 0000000..521762e --- /dev/null +++ b/src/net/minecraft/src/PlayerInstance.java @@ -0,0 +1,179 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +class PlayerInstance { + private List players; + private int chunkX; + private int chunkZ; + private ChunkCoordIntPair currentChunk; + private short[] blocksToUpdate; + private int numBlocksToUpdate; + private int minX; + private int maxX; + private int minY; + private int maxY; + private int minZ; + private int maxZ; + final PlayerManager playerManager; + + public PlayerInstance(PlayerManager var1, int var2, int var3) { + this.playerManager = var1; + this.players = new ArrayList(); + this.blocksToUpdate = new short[10]; + this.numBlocksToUpdate = 0; + this.chunkX = var2; + this.chunkZ = var3; + this.currentChunk = new ChunkCoordIntPair(var2, var3); + var1.getMinecraftServer().chunkProviderServer.loadChunk(var2, var3); + } + + public void addPlayer(EntityPlayerMP var1) { + if(this.players.contains(var1)) { + throw new IllegalStateException("Failed to add player. " + var1 + " already is in chunk " + this.chunkX + ", " + this.chunkZ); + } else { + var1.field_420_ah.add(this.currentChunk); + var1.playerNetServerHandler.sendPacket(new Packet50PreChunk(this.currentChunk.chunkXPos, this.currentChunk.chunkZPos, true)); + this.players.add(var1); + var1.loadedChunks.add(this.currentChunk); + } + } + + public void removePlayer(EntityPlayerMP var1) { + if(this.players.contains(var1)) { + this.players.remove(var1); + if(this.players.size() == 0) { + long var2 = (long)this.chunkX + 2147483647L | (long)this.chunkZ + 2147483647L << 32; + PlayerManager.getPlayerInstances(this.playerManager).remove(var2); + if(this.numBlocksToUpdate > 0) { + PlayerManager.getPlayerInstancesToUpdate(this.playerManager).remove(this); + } + + this.playerManager.getMinecraftServer().chunkProviderServer.func_374_c(this.chunkX, this.chunkZ); + } + + var1.loadedChunks.remove(this.currentChunk); + if(var1.field_420_ah.contains(this.currentChunk)) { + var1.playerNetServerHandler.sendPacket(new Packet50PreChunk(this.chunkX, this.chunkZ, false)); + } + + } + } + + public void markBlockNeedsUpdate(int var1, int var2, int var3) { + if(this.numBlocksToUpdate == 0) { + PlayerManager.getPlayerInstancesToUpdate(this.playerManager).add(this); + this.minX = this.maxX = var1; + this.minY = this.maxY = var2; + this.minZ = this.maxZ = var3; + } + + if(this.minX > var1) { + this.minX = var1; + } + + if(this.maxX < var1) { + this.maxX = var1; + } + + if(this.minY > var2) { + this.minY = var2; + } + + if(this.maxY < var2) { + this.maxY = var2; + } + + if(this.minZ > var3) { + this.minZ = var3; + } + + if(this.maxZ < var3) { + this.maxZ = var3; + } + + if(this.numBlocksToUpdate < 10) { + short var4 = (short)(var1 << 12 | var3 << 8 | var2); + + for(int var5 = 0; var5 < this.numBlocksToUpdate; ++var5) { + if(this.blocksToUpdate[var5] == var4) { + return; + } + } + + this.blocksToUpdate[this.numBlocksToUpdate++] = var4; + } + + } + + public void sendPacketToPlayersInInstance(Packet var1) { + for(int var2 = 0; var2 < this.players.size(); ++var2) { + EntityPlayerMP var3 = (EntityPlayerMP)this.players.get(var2); + if(var3.field_420_ah.contains(this.currentChunk)) { + var3.playerNetServerHandler.sendPacket(var1); + } + } + + } + + public void onUpdate() { + WorldServer var1 = this.playerManager.getMinecraftServer(); + if(this.numBlocksToUpdate != 0) { + int var2; + int var3; + int var4; + if(this.numBlocksToUpdate == 1) { + var2 = this.chunkX * 16 + this.minX; + var3 = this.minY; + var4 = this.chunkZ * 16 + this.minZ; + this.sendPacketToPlayersInInstance(new Packet53BlockChange(var2, var3, var4, var1)); + if(Block.isBlockContainer[var1.getBlockId(var2, var3, var4)]) { + this.updateTileEntity(var1.getBlockTileEntity(var2, var3, var4)); + } + } else { + int var5; + if(this.numBlocksToUpdate == 10) { + this.minY = this.minY / 2 * 2; + this.maxY = (this.maxY / 2 + 1) * 2; + var2 = this.minX + this.chunkX * 16; + var3 = this.minY; + var4 = this.minZ + this.chunkZ * 16; + var5 = this.maxX - this.minX + 1; + int var6 = this.maxY - this.minY + 2; + int var7 = this.maxZ - this.minZ + 1; + this.sendPacketToPlayersInInstance(new Packet51MapChunk(var2, var3, var4, var5, var6, var7, var1)); + List var8 = var1.getTileEntityList(var2, var3, var4, var2 + var5, var3 + var6, var4 + var7); + + for(int var9 = 0; var9 < var8.size(); ++var9) { + this.updateTileEntity((TileEntity)var8.get(var9)); + } + } else { + this.sendPacketToPlayersInInstance(new Packet52MultiBlockChange(this.chunkX, this.chunkZ, this.blocksToUpdate, this.numBlocksToUpdate, var1)); + + for(var2 = 0; var2 < this.numBlocksToUpdate; ++var2) { + var3 = this.chunkX * 16 + (this.numBlocksToUpdate >> 12 & 15); + var4 = this.numBlocksToUpdate & 255; + var5 = this.chunkZ * 16 + (this.numBlocksToUpdate >> 8 & 15); + if(Block.isBlockContainer[var1.getBlockId(var3, var4, var5)]) { + System.out.println("Sending!"); + this.updateTileEntity(var1.getBlockTileEntity(var3, var4, var5)); + } + } + } + } + + this.numBlocksToUpdate = 0; + } + } + + private void updateTileEntity(TileEntity var1) { + if(var1 != null) { + Packet var2 = var1.getDescriptionPacket(); + if(var2 != null) { + this.sendPacketToPlayersInInstance(var2); + } + } + + } +} diff --git a/src/net/minecraft/src/PlayerListBox.java b/src/net/minecraft/src/PlayerListBox.java new file mode 100644 index 0000000..ddd4542 --- /dev/null +++ b/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/src/net/minecraft/src/PlayerManager.java b/src/net/minecraft/src/PlayerManager.java new file mode 100644 index 0000000..af409ef --- /dev/null +++ b/src/net/minecraft/src/PlayerManager.java @@ -0,0 +1,162 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class PlayerManager { + public List players = new ArrayList(); + private PlayerHash playerInstances = new PlayerHash(); + private List playerInstancesToUpdate = new ArrayList(); + private MinecraftServer mcServer; + private int field_28110_e; + private int playerViewRadius; + private final int[][] field_22089_e = new int[][]{{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public PlayerManager(MinecraftServer var1, int var2, int var3) { + if(var3 > 15) { + throw new IllegalArgumentException("Too big view radius!"); + } else if(var3 < 3) { + throw new IllegalArgumentException("Too small view radius!"); + } else { + this.playerViewRadius = var3; + this.mcServer = var1; + this.field_28110_e = var2; + } + } + + public WorldServer getMinecraftServer() { + return this.mcServer.getWorldManager(this.field_28110_e); + } + + public void updatePlayerInstances() { + for(int var1 = 0; var1 < this.playerInstancesToUpdate.size(); ++var1) { + ((PlayerInstance)this.playerInstancesToUpdate.get(var1)).onUpdate(); + } + + this.playerInstancesToUpdate.clear(); + } + + private PlayerInstance getPlayerInstance(int var1, int var2, boolean var3) { + long var4 = (long)var1 + 2147483647L | (long)var2 + 2147483647L << 32; + PlayerInstance var6 = (PlayerInstance)this.playerInstances.getValueByKey(var4); + if(var6 == null && var3) { + var6 = new PlayerInstance(this, var1, var2); + this.playerInstances.add(var4, var6); + } + + return var6; + } + + public void markBlockNeedsUpdate(int var1, int var2, int var3) { + int var4 = var1 >> 4; + int var5 = var3 >> 4; + PlayerInstance var6 = this.getPlayerInstance(var4, var5, false); + if(var6 != null) { + var6.markBlockNeedsUpdate(var1 & 15, var2, var3 & 15); + } + + } + + public void addPlayer(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; + int var4 = 0; + int var5 = this.playerViewRadius; + int var6 = 0; + int var7 = 0; + this.getPlayerInstance(var2, var3, true).addPlayer(var1); + + int var8; + for(var8 = 1; var8 <= var5 * 2; ++var8) { + for(int var9 = 0; var9 < 2; ++var9) { + int[] var10 = this.field_22089_e[var4++ % 4]; + + for(int var11 = 0; var11 < var8; ++var11) { + var6 += var10[0]; + var7 += var10[1]; + this.getPlayerInstance(var2 + var6, var3 + var7, true).addPlayer(var1); + } + } + } + + var4 %= 4; + + for(var8 = 0; var8 < var5 * 2; ++var8) { + var6 += this.field_22089_e[var4][0]; + var7 += this.field_22089_e[var4][1]; + this.getPlayerInstance(var2 + var6, var3 + var7, true).addPlayer(var1); + } + + this.players.add(var1); + } + + public void removePlayer(EntityPlayerMP var1) { + int var2 = (int)var1.field_9155_d >> 4; + int var3 = (int)var1.field_9154_e >> 4; + + for(int var4 = var2 - this.playerViewRadius; var4 <= var2 + this.playerViewRadius; ++var4) { + for(int var5 = var3 - this.playerViewRadius; var5 <= var3 + this.playerViewRadius; ++var5) { + PlayerInstance var6 = this.getPlayerInstance(var4, var5, false); + if(var6 != null) { + var6.removePlayer(var1); + } + } + } + + this.players.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 >= -this.playerViewRadius && var5 <= this.playerViewRadius ? var6 >= -this.playerViewRadius && var6 <= this.playerViewRadius : 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 - this.playerViewRadius; var14 <= var2 + this.playerViewRadius; ++var14) { + for(int var15 = var3 - this.playerViewRadius; var15 <= var3 + this.playerViewRadius; ++var15) { + if(!this.func_544_a(var14, var15, var10, var11)) { + this.getPlayerInstance(var14, var15, true).addPlayer(var1); + } + + if(!this.func_544_a(var14 - var12, var15 - var13, var2, var3)) { + PlayerInstance var16 = this.getPlayerInstance(var14 - var12, var15 - var13, false); + if(var16 != null) { + var16.removePlayer(var1); + } + } + } + } + + var1.field_9155_d = var1.posX; + var1.field_9154_e = var1.posZ; + } + } + } + + public int getMaxTrackingDistance() { + return this.playerViewRadius * 16 - 16; + } + + static PlayerHash getPlayerInstances(PlayerManager var0) { + return var0.playerInstances; + } + + static List getPlayerInstancesToUpdate(PlayerManager var0) { + return var0.playerInstancesToUpdate; + } +} diff --git a/src/net/minecraft/src/PlayerNBTManager.java b/src/net/minecraft/src/PlayerNBTManager.java new file mode 100644 index 0000000..c76c704 --- /dev/null +++ b/src/net/minecraft/src/PlayerNBTManager.java @@ -0,0 +1,216 @@ +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.List; +import java.util.logging.Logger; + +public class PlayerNBTManager implements IPlayerFileData, ISaveHandler { + private static final Logger logger = Logger.getLogger("Minecraft"); + private final File worldDir; + private final File worldFile; + private final File field_28112_d; + private final long field_22100_d = System.currentTimeMillis(); + + public PlayerNBTManager(File var1, String var2, boolean var3) { + this.worldDir = new File(var1, var2); + this.worldDir.mkdirs(); + this.worldFile = new File(this.worldDir, "players"); + this.field_28112_d = new File(this.worldDir, "data"); + this.field_28112_d.mkdirs(); + if(var3) { + this.worldFile.mkdirs(); + } + + this.func_22098_f(); + } + + private void func_22098_f() { + try { + File var1 = new File(this.worldDir, "session.lock"); + DataOutputStream var2 = new DataOutputStream(new FileOutputStream(var1)); + + try { + var2.writeLong(this.field_22100_d); + } finally { + var2.close(); + } + + } catch (IOException var7) { + var7.printStackTrace(); + throw new RuntimeException("Failed to check session lock, aborting"); + } + } + + protected File getWorldDir() { + return this.worldDir; + } + + public void func_22091_b() { + try { + File var1 = new File(this.worldDir, "session.lock"); + DataInputStream var2 = new DataInputStream(new FileInputStream(var1)); + + try { + if(var2.readLong() != this.field_22100_d) { + throw new MinecraftException("The save is being accessed from another location, aborting"); + } + } finally { + var2.close(); + } + + } catch (IOException var7) { + throw new MinecraftException("Failed to check session lock, aborting"); + } + } + + public IChunkLoader func_22092_a(WorldProvider var1) { + if(var1 instanceof WorldProviderHell) { + File var2 = new File(this.worldDir, "DIM-1"); + var2.mkdirs(); + return new ChunkLoader(var2, true); + } else { + return new ChunkLoader(this.worldDir, true); + } + } + + public WorldInfo func_22096_c() { + File var1 = new File(this.worldDir, "level.dat"); + NBTTagCompound var2; + NBTTagCompound var3; + if(var1.exists()) { + try { + var2 = CompressedStreamTools.func_770_a(new FileInputStream(var1)); + var3 = var2.getCompoundTag("Data"); + return new WorldInfo(var3); + } catch (Exception var5) { + var5.printStackTrace(); + } + } + + var1 = new File(this.worldDir, "level.dat_old"); + if(var1.exists()) { + try { + var2 = CompressedStreamTools.func_770_a(new FileInputStream(var1)); + var3 = var2.getCompoundTag("Data"); + return new WorldInfo(var3); + } catch (Exception var4) { + var4.printStackTrace(); + } + } + + return null; + } + + public void func_22095_a(WorldInfo var1, List var2) { + NBTTagCompound var3 = var1.func_22183_a(var2); + NBTTagCompound var4 = new NBTTagCompound(); + var4.setTag("Data", var3); + + try { + File var5 = new File(this.worldDir, "level.dat_new"); + File var6 = new File(this.worldDir, "level.dat_old"); + File var7 = new File(this.worldDir, "level.dat"); + CompressedStreamTools.writeGzippedCompoundToOutputStream(var4, new FileOutputStream(var5)); + if(var6.exists()) { + var6.delete(); + } + + var7.renameTo(var6); + if(var7.exists()) { + var7.delete(); + } + + var5.renameTo(var7); + if(var5.exists()) { + var5.delete(); + } + } catch (Exception var8) { + var8.printStackTrace(); + } + + } + + public void func_22094_a(WorldInfo var1) { + NBTTagCompound var2 = var1.func_22185_a(); + NBTTagCompound var3 = new NBTTagCompound(); + var3.setTag("Data", var2); + + try { + File var4 = new File(this.worldDir, "level.dat_new"); + File var5 = new File(this.worldDir, "level.dat_old"); + File var6 = new File(this.worldDir, "level.dat"); + CompressedStreamTools.writeGzippedCompoundToOutputStream(var3, new FileOutputStream(var4)); + if(var5.exists()) { + var5.delete(); + } + + var6.renameTo(var5); + if(var6.exists()) { + var6.delete(); + } + + var4.renameTo(var6); + if(var4.exists()) { + var4.delete(); + } + } catch (Exception var7) { + var7.printStackTrace(); + } + + } + + public void writePlayerData(EntityPlayer var1) { + try { + NBTTagCompound var2 = new NBTTagCompound(); + var1.writeToNBT(var2); + File var3 = new File(this.worldFile, "_tmp_.dat"); + File var4 = new File(this.worldFile, var1.username + ".dat"); + CompressedStreamTools.writeGzippedCompoundToOutputStream(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(EntityPlayer var1) { + NBTTagCompound var2 = this.getPlayerData(var1.username); + if(var2 != null) { + var1.readFromNBT(var2); + } + + } + + public NBTTagCompound getPlayerData(String var1) { + try { + File var2 = new File(this.worldFile, var1 + ".dat"); + if(var2.exists()) { + return CompressedStreamTools.func_770_a(new FileInputStream(var2)); + } + } catch (Exception var3) { + logger.warning("Failed to load player data for " + var1); + } + + return null; + } + + public IPlayerFileData func_22090_d() { + return this; + } + + public void func_22093_e() { + } + + public File func_28111_b(String var1) { + return new File(this.field_28112_d, var1 + ".dat"); + } +} diff --git a/src/net/minecraft/src/PropertyManager.java b/src/net/minecraft/src/PropertyManager.java new file mode 100644 index 0000000..42ea0ff --- /dev/null +++ b/src/net/minecraft/src/PropertyManager.java @@ -0,0 +1,77 @@ +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; + } + } + + public void setProperty(String var1, boolean var2) { + this.serverProperties.setProperty(var1, "" + var2); + this.saveProperties(); + } +} diff --git a/src/net/minecraft/src/RailLogic.java b/src/net/minecraft/src/RailLogic.java new file mode 100644 index 0000000..261c681 --- /dev/null +++ b/src/net/minecraft/src/RailLogic.java @@ -0,0 +1,348 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +class RailLogic { + private World worldObj; + private int trackX; + private int trackY; + private int trackZ; + private final boolean field_27084_f; + private List connectedTracks; + final BlockRail minecartTrack; + + public RailLogic(BlockRail var1, World var2, int var3, int var4, int var5) { + this.minecartTrack = var1; + this.connectedTracks = new ArrayList(); + this.worldObj = var2; + this.trackX = var3; + this.trackY = var4; + this.trackZ = var5; + int var6 = var2.getBlockId(var3, var4, var5); + int var7 = var2.getBlockMetadata(var3, var4, var5); + if(BlockRail.func_27033_a((BlockRail)Block.blocksList[var6])) { + this.field_27084_f = true; + var7 &= -9; + } else { + this.field_27084_f = false; + } + + this.func_27083_a(var7); + } + + private void func_27083_a(int var1) { + this.connectedTracks.clear(); + if(var1 == 0) { + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(var1 == 1) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + } else if(var1 == 2) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY + 1, this.trackZ)); + } else if(var1 == 3) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY + 1, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + } else if(var1 == 4) { + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY + 1, this.trackZ - 1)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(var1 == 5) { + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY + 1, this.trackZ + 1)); + } else if(var1 == 6) { + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(var1 == 7) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(var1 == 8) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + } else if(var1 == 9) { + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + } + + } + + private void func_591_b() { + for(int var1 = 0; var1 < this.connectedTracks.size(); ++var1) { + RailLogic var2 = this.getMinecartTrackLogic((ChunkPosition)this.connectedTracks.get(var1)); + if(var2 != null && var2.isConnectedTo(this)) { + this.connectedTracks.set(var1, new ChunkPosition(var2.trackX, var2.trackY, var2.trackZ)); + } else { + this.connectedTracks.remove(var1--); + } + } + + } + + private boolean isMinecartTrack(int var1, int var2, int var3) { + return BlockRail.func_27029_g(this.worldObj, var1, var2, var3) ? true : (BlockRail.func_27029_g(this.worldObj, var1, var2 + 1, var3) ? true : BlockRail.func_27029_g(this.worldObj, var1, var2 - 1, var3)); + } + + private RailLogic getMinecartTrackLogic(ChunkPosition var1) { + return BlockRail.func_27029_g(this.worldObj, var1.x, var1.y, var1.z) ? new RailLogic(this.minecartTrack, this.worldObj, var1.x, var1.y, var1.z) : (BlockRail.func_27029_g(this.worldObj, var1.x, var1.y + 1, var1.z) ? new RailLogic(this.minecartTrack, this.worldObj, var1.x, var1.y + 1, var1.z) : (BlockRail.func_27029_g(this.worldObj, var1.x, var1.y - 1, var1.z) ? new RailLogic(this.minecartTrack, this.worldObj, var1.x, var1.y - 1, var1.z) : null)); + } + + private boolean isConnectedTo(RailLogic var1) { + for(int var2 = 0; var2 < this.connectedTracks.size(); ++var2) { + ChunkPosition var3 = (ChunkPosition)this.connectedTracks.get(var2); + if(var3.x == var1.trackX && var3.z == var1.trackZ) { + return true; + } + } + + return false; + } + + private boolean func_599_b(int var1, int var2, int var3) { + for(int var4 = 0; var4 < this.connectedTracks.size(); ++var4) { + ChunkPosition var5 = (ChunkPosition)this.connectedTracks.get(var4); + if(var5.x == var1 && var5.z == var3) { + return true; + } + } + + return false; + } + + private int getAdjacentTracks() { + int var1 = 0; + if(this.isMinecartTrack(this.trackX, this.trackY, this.trackZ - 1)) { + ++var1; + } + + if(this.isMinecartTrack(this.trackX, this.trackY, this.trackZ + 1)) { + ++var1; + } + + if(this.isMinecartTrack(this.trackX - 1, this.trackY, this.trackZ)) { + ++var1; + } + + if(this.isMinecartTrack(this.trackX + 1, this.trackY, this.trackZ)) { + ++var1; + } + + return var1; + } + + private boolean handleKeyPress(RailLogic var1) { + if(this.isConnectedTo(var1)) { + return true; + } else if(this.connectedTracks.size() == 2) { + return false; + } else if(this.connectedTracks.size() == 0) { + return true; + } else { + ChunkPosition var2 = (ChunkPosition)this.connectedTracks.get(0); + return var1.trackY == this.trackY && var2.y == this.trackY ? true : true; + } + } + + private void func_598_d(RailLogic var1) { + this.connectedTracks.add(new ChunkPosition(var1.trackX, var1.trackY, var1.trackZ)); + boolean var2 = this.func_599_b(this.trackX, this.trackY, this.trackZ - 1); + boolean var3 = this.func_599_b(this.trackX, this.trackY, this.trackZ + 1); + boolean var4 = this.func_599_b(this.trackX - 1, this.trackY, this.trackZ); + boolean var5 = this.func_599_b(this.trackX + 1, this.trackY, this.trackZ); + byte var6 = -1; + if(var2 || var3) { + var6 = 0; + } + + if(var4 || var5) { + var6 = 1; + } + + if(!this.field_27084_f) { + 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(BlockRail.func_27029_g(this.worldObj, this.trackX, this.trackY + 1, this.trackZ - 1)) { + var6 = 4; + } + + if(BlockRail.func_27029_g(this.worldObj, this.trackX, this.trackY + 1, this.trackZ + 1)) { + var6 = 5; + } + } + + if(var6 == 1) { + if(BlockRail.func_27029_g(this.worldObj, this.trackX + 1, this.trackY + 1, this.trackZ)) { + var6 = 2; + } + + if(BlockRail.func_27029_g(this.worldObj, this.trackX - 1, this.trackY + 1, this.trackZ)) { + var6 = 3; + } + } + + if(var6 < 0) { + var6 = 0; + } + + int var7 = var6; + if(this.field_27084_f) { + var7 = this.worldObj.getBlockMetadata(this.trackX, this.trackY, this.trackZ) & 8 | var6; + } + + this.worldObj.setBlockMetadataWithNotify(this.trackX, this.trackY, this.trackZ, var7); + } + + private boolean func_592_c(int var1, int var2, int var3) { + RailLogic var4 = this.getMinecartTrackLogic(new ChunkPosition(var1, var2, var3)); + if(var4 == null) { + return false; + } else { + var4.func_591_b(); + return var4.handleKeyPress(this); + } + } + + public void func_596_a(boolean var1, boolean var2) { + boolean var3 = this.func_592_c(this.trackX, this.trackY, this.trackZ - 1); + boolean var4 = this.func_592_c(this.trackX, this.trackY, this.trackZ + 1); + boolean var5 = this.func_592_c(this.trackX - 1, this.trackY, this.trackZ); + boolean var6 = this.func_592_c(this.trackX + 1, this.trackY, this.trackZ); + byte var7 = -1; + if((var3 || var4) && !var5 && !var6) { + var7 = 0; + } + + if((var5 || var6) && !var3 && !var4) { + var7 = 1; + } + + if(!this.field_27084_f) { + if(var4 && var6 && !var3 && !var5) { + var7 = 6; + } + + if(var4 && var5 && !var3 && !var6) { + var7 = 7; + } + + if(var3 && var5 && !var4 && !var6) { + var7 = 8; + } + + if(var3 && var6 && !var4 && !var5) { + var7 = 9; + } + } + + if(var7 == -1) { + if(var3 || var4) { + var7 = 0; + } + + if(var5 || var6) { + var7 = 1; + } + + if(!this.field_27084_f) { + if(var1) { + if(var4 && var6) { + var7 = 6; + } + + if(var5 && var4) { + var7 = 7; + } + + if(var6 && var3) { + var7 = 9; + } + + if(var3 && var5) { + var7 = 8; + } + } else { + if(var3 && var5) { + var7 = 8; + } + + if(var6 && var3) { + var7 = 9; + } + + if(var5 && var4) { + var7 = 7; + } + + if(var4 && var6) { + var7 = 6; + } + } + } + } + + if(var7 == 0) { + if(BlockRail.func_27029_g(this.worldObj, this.trackX, this.trackY + 1, this.trackZ - 1)) { + var7 = 4; + } + + if(BlockRail.func_27029_g(this.worldObj, this.trackX, this.trackY + 1, this.trackZ + 1)) { + var7 = 5; + } + } + + if(var7 == 1) { + if(BlockRail.func_27029_g(this.worldObj, this.trackX + 1, this.trackY + 1, this.trackZ)) { + var7 = 2; + } + + if(BlockRail.func_27029_g(this.worldObj, this.trackX - 1, this.trackY + 1, this.trackZ)) { + var7 = 3; + } + } + + if(var7 < 0) { + var7 = 0; + } + + this.func_27083_a(var7); + int var8 = var7; + if(this.field_27084_f) { + var8 = this.worldObj.getBlockMetadata(this.trackX, this.trackY, this.trackZ) & 8 | var7; + } + + if(var2 || this.worldObj.getBlockMetadata(this.trackX, this.trackY, this.trackZ) != var8) { + this.worldObj.setBlockMetadataWithNotify(this.trackX, this.trackY, this.trackZ, var8); + + for(int var9 = 0; var9 < this.connectedTracks.size(); ++var9) { + RailLogic var10 = this.getMinecartTrackLogic((ChunkPosition)this.connectedTracks.get(var9)); + if(var10 != null) { + var10.func_591_b(); + if(var10.handleKeyPress(this)) { + var10.func_598_d(this); + } + } + } + } + + } + + static int getNAdjacentTracks(RailLogic var0) { + return var0.getAdjacentTracks(); + } +} diff --git a/src/net/minecraft/src/RecipeSorter.java b/src/net/minecraft/src/RecipeSorter.java new file mode 100644 index 0000000..51eaac2 --- /dev/null +++ b/src/net/minecraft/src/RecipeSorter.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.Comparator; + +class RecipeSorter implements Comparator { + final CraftingManager craftingManager; + + RecipeSorter(CraftingManager var1) { + this.craftingManager = var1; + } + + public int compareRecipes(IRecipe var1, IRecipe var2) { + return var1 instanceof ShapelessRecipes && var2 instanceof ShapedRecipes ? 1 : (var2 instanceof ShapelessRecipes && var1 instanceof ShapedRecipes ? -1 : (var2.getRecipeSize() < var1.getRecipeSize() ? -1 : (var2.getRecipeSize() > var1.getRecipeSize() ? 1 : 0))); + } + + public int compare(Object var1, Object var2) { + return this.compareRecipes((IRecipe)var1, (IRecipe)var2); + } +} diff --git a/src/net/minecraft/src/RecipesArmor.java b/src/net/minecraft/src/RecipesArmor.java new file mode 100644 index 0000000..7eef8a1 --- /dev/null +++ b/src/net/minecraft/src/RecipesArmor.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +public class RecipesArmor { + private String[][] recipePatterns = new String[][]{{"XXX", "X X"}, {"X X", "XXX", "XXX"}, {"XXX", "X X", "X X"}, {"X X", "X X"}}; + private Object[][] recipeItems = new Object[][]{{Item.leather, Block.fire, Item.ingotIron, Item.diamond, Item.ingotGold}, {Item.helmetLeather, Item.helmetChain, Item.helmetSteel, Item.helmetDiamond, Item.helmetGold}, {Item.plateLeather, Item.plateChain, Item.plateSteel, Item.plateDiamond, Item.plateGold}, {Item.legsLeather, Item.legsChain, Item.legsSteel, Item.legsDiamond, Item.legsGold}, {Item.bootsLeather, Item.bootsChain, Item.bootsSteel, Item.bootsDiamond, Item.bootsGold}}; + + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < this.recipeItems[0].length; ++var2) { + Object var3 = this.recipeItems[0][var2]; + + for(int var4 = 0; var4 < this.recipeItems.length - 1; ++var4) { + Item var5 = (Item)this.recipeItems[var4 + 1][var2]; + var1.addRecipe(new ItemStack(var5), new Object[]{this.recipePatterns[var4], Character.valueOf('X'), var3}); + } + } + + } +} diff --git a/src/net/minecraft/src/RecipesCrafting.java b/src/net/minecraft/src/RecipesCrafting.java new file mode 100644 index 0000000..6a9098e --- /dev/null +++ b/src/net/minecraft/src/RecipesCrafting.java @@ -0,0 +1,10 @@ +package net.minecraft.src; + +public class RecipesCrafting { + public void addRecipes(CraftingManager var1) { + var1.addRecipe(new ItemStack(Block.chest), new Object[]{"###", "# #", "###", Character.valueOf('#'), Block.planks}); + var1.addRecipe(new ItemStack(Block.stoneOvenIdle), new Object[]{"###", "# #", "###", Character.valueOf('#'), Block.cobblestone}); + var1.addRecipe(new ItemStack(Block.workbench), new Object[]{"##", "##", Character.valueOf('#'), Block.planks}); + var1.addRecipe(new ItemStack(Block.sandStone), new Object[]{"##", "##", Character.valueOf('#'), Block.sand}); + } +} diff --git a/src/net/minecraft/src/RecipesDyes.java b/src/net/minecraft/src/RecipesDyes.java new file mode 100644 index 0000000..0e30cd3 --- /dev/null +++ b/src/net/minecraft/src/RecipesDyes.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class RecipesDyes { + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < 16; ++var2) { + var1.addShapelessRecipe(new ItemStack(Block.cloth, 1, BlockCloth.func_21034_d(var2)), new Object[]{new ItemStack(Item.dyePowder, 1, var2), new ItemStack(Item.itemsList[Block.cloth.blockID], 1, 0)}); + } + + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 11), new Object[]{Block.plantYellow}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 1), new Object[]{Block.plantRed}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 3, 15), new Object[]{Item.bone}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 9), new Object[]{new ItemStack(Item.dyePowder, 1, 1), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 14), new Object[]{new ItemStack(Item.dyePowder, 1, 1), new ItemStack(Item.dyePowder, 1, 11)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 10), new Object[]{new ItemStack(Item.dyePowder, 1, 2), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 8), new Object[]{new ItemStack(Item.dyePowder, 1, 0), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 7), new Object[]{new ItemStack(Item.dyePowder, 1, 8), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 3, 7), new Object[]{new ItemStack(Item.dyePowder, 1, 0), new ItemStack(Item.dyePowder, 1, 15), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 12), new Object[]{new ItemStack(Item.dyePowder, 1, 4), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 6), new Object[]{new ItemStack(Item.dyePowder, 1, 4), new ItemStack(Item.dyePowder, 1, 2)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 5), new Object[]{new ItemStack(Item.dyePowder, 1, 4), new ItemStack(Item.dyePowder, 1, 1)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 13), new Object[]{new ItemStack(Item.dyePowder, 1, 5), new ItemStack(Item.dyePowder, 1, 9)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 3, 13), new Object[]{new ItemStack(Item.dyePowder, 1, 4), new ItemStack(Item.dyePowder, 1, 1), new ItemStack(Item.dyePowder, 1, 9)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 4, 13), new Object[]{new ItemStack(Item.dyePowder, 1, 4), new ItemStack(Item.dyePowder, 1, 1), new ItemStack(Item.dyePowder, 1, 1), new ItemStack(Item.dyePowder, 1, 15)}); + } +} diff --git a/src/net/minecraft/src/RecipesFood.java b/src/net/minecraft/src/RecipesFood.java new file mode 100644 index 0000000..c41a496 --- /dev/null +++ b/src/net/minecraft/src/RecipesFood.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public class RecipesFood { + public void addRecipes(CraftingManager var1) { + var1.addRecipe(new ItemStack(Item.bowlSoup), new Object[]{"Y", "X", "#", Character.valueOf('X'), Block.mushroomBrown, Character.valueOf('Y'), Block.mushroomRed, Character.valueOf('#'), Item.bowlEmpty}); + var1.addRecipe(new ItemStack(Item.bowlSoup), new Object[]{"Y", "X", "#", Character.valueOf('X'), Block.mushroomRed, Character.valueOf('Y'), Block.mushroomBrown, Character.valueOf('#'), Item.bowlEmpty}); + var1.addRecipe(new ItemStack(Item.cookie, 8), new Object[]{"#X#", Character.valueOf('X'), new ItemStack(Item.dyePowder, 1, 3), Character.valueOf('#'), Item.wheat}); + } +} diff --git a/src/net/minecraft/src/RecipesIngots.java b/src/net/minecraft/src/RecipesIngots.java new file mode 100644 index 0000000..8256f58 --- /dev/null +++ b/src/net/minecraft/src/RecipesIngots.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class RecipesIngots { + private Object[][] recipeItems = new Object[][]{{Block.blockGold, new ItemStack(Item.ingotGold, 9)}, {Block.blockSteel, new ItemStack(Item.ingotIron, 9)}, {Block.blockDiamond, new ItemStack(Item.diamond, 9)}, {Block.blockLapis, new ItemStack(Item.dyePowder, 9, 4)}}; + + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < this.recipeItems.length; ++var2) { + Block var3 = (Block)this.recipeItems[var2][0]; + ItemStack var4 = (ItemStack)this.recipeItems[var2][1]; + var1.addRecipe(new ItemStack(var3), new Object[]{"###", "###", "###", Character.valueOf('#'), var4}); + var1.addRecipe(var4, new Object[]{"#", Character.valueOf('#'), var3}); + } + + } +} diff --git a/src/net/minecraft/src/RecipesTools.java b/src/net/minecraft/src/RecipesTools.java new file mode 100644 index 0000000..061dae0 --- /dev/null +++ b/src/net/minecraft/src/RecipesTools.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class RecipesTools { + private String[][] recipePatterns = new String[][]{{"XXX", " # ", " # "}, {"X", "#", "#"}, {"XX", "X#", " #"}, {"XX", " #", " #"}}; + private Object[][] recipeItems = new Object[][]{{Block.planks, Block.cobblestone, Item.ingotIron, Item.diamond, Item.ingotGold}, {Item.pickaxeWood, Item.pickaxeStone, Item.pickaxeSteel, Item.pickaxeDiamond, Item.pickaxeGold}, {Item.shovelWood, Item.shovelStone, Item.shovelSteel, Item.shovelDiamond, Item.shovelGold}, {Item.axeWood, Item.axeStone, Item.axeSteel, Item.axeDiamond, Item.axeGold}, {Item.hoeWood, Item.hoeStone, Item.hoeSteel, Item.hoeDiamond, Item.hoeGold}}; + + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < this.recipeItems[0].length; ++var2) { + Object var3 = this.recipeItems[0][var2]; + + for(int var4 = 0; var4 < this.recipeItems.length - 1; ++var4) { + Item var5 = (Item)this.recipeItems[var4 + 1][var2]; + var1.addRecipe(new ItemStack(var5), new Object[]{this.recipePatterns[var4], Character.valueOf('#'), Item.stick, Character.valueOf('X'), var3}); + } + } + + var1.addRecipe(new ItemStack(Item.field_31022_bc), new Object[]{" #", "# ", Character.valueOf('#'), Item.ingotIron}); + } +} diff --git a/src/net/minecraft/src/RecipesWeapons.java b/src/net/minecraft/src/RecipesWeapons.java new file mode 100644 index 0000000..23b87e1 --- /dev/null +++ b/src/net/minecraft/src/RecipesWeapons.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class RecipesWeapons { + private String[][] recipePatterns = new String[][]{{"X", "X", "#"}}; + private Object[][] recipeItems = new Object[][]{{Block.planks, Block.cobblestone, Item.ingotIron, Item.diamond, Item.ingotGold}, {Item.swordWood, Item.swordStone, Item.swordSteel, Item.swordDiamond, Item.swordGold}}; + + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < this.recipeItems[0].length; ++var2) { + Object var3 = this.recipeItems[0][var2]; + + for(int var4 = 0; var4 < this.recipeItems.length - 1; ++var4) { + Item var5 = (Item)this.recipeItems[var4 + 1][var2]; + var1.addRecipe(new ItemStack(var5), new Object[]{this.recipePatterns[var4], Character.valueOf('#'), Item.stick, Character.valueOf('X'), var3}); + } + } + + var1.addRecipe(new ItemStack(Item.bow, 1), new Object[]{" #X", "# X", " #X", Character.valueOf('X'), Item.silk, Character.valueOf('#'), Item.stick}); + var1.addRecipe(new ItemStack(Item.arrow, 4), new Object[]{"X", "#", "Y", Character.valueOf('Y'), Item.feather, Character.valueOf('X'), Item.flint, Character.valueOf('#'), Item.stick}); + } +} diff --git a/src/net/minecraft/src/RedstoneUpdateInfo.java b/src/net/minecraft/src/RedstoneUpdateInfo.java new file mode 100644 index 0000000..b987ecb --- /dev/null +++ b/src/net/minecraft/src/RedstoneUpdateInfo.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +class RedstoneUpdateInfo { + int x; + int y; + int z; + long updateTime; + + public RedstoneUpdateInfo(int var1, int var2, int var3, long var4) { + this.x = var1; + this.y = var2; + this.z = var3; + this.updateTime = var4; + } +} diff --git a/src/net/minecraft/src/RegionFile.java b/src/net/minecraft/src/RegionFile.java new file mode 100644 index 0000000..945f61e --- /dev/null +++ b/src/net/minecraft/src/RegionFile.java @@ -0,0 +1,274 @@ +package net.minecraft.src; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.util.ArrayList; +import java.util.zip.DeflaterOutputStream; +import java.util.zip.GZIPInputStream; +import java.util.zip.InflaterInputStream; + +public class RegionFile { + private static final byte[] emptySector = new byte[4096]; + private final File fileName; + private RandomAccessFile dataFile; + private final int[] offsets = new int[1024]; + private final int[] chunkTimestamps = new int[1024]; + private ArrayList sectorFree; + private int sizeDelta; + private long lastModified = 0L; + + public RegionFile(File var1) { + this.fileName = var1; + this.debugln("REGION LOAD " + this.fileName); + this.sizeDelta = 0; + + try { + if(var1.exists()) { + this.lastModified = var1.lastModified(); + } + + this.dataFile = new RandomAccessFile(var1, "rw"); + int var2; + if(this.dataFile.length() < 4096L) { + for(var2 = 0; var2 < 1024; ++var2) { + this.dataFile.writeInt(0); + } + + for(var2 = 0; var2 < 1024; ++var2) { + this.dataFile.writeInt(0); + } + + this.sizeDelta += 8192; + } + + if((this.dataFile.length() & 4095L) != 0L) { + for(var2 = 0; (long)var2 < (this.dataFile.length() & 4095L); ++var2) { + this.dataFile.write(0); + } + } + + var2 = (int)this.dataFile.length() / 4096; + this.sectorFree = new ArrayList(var2); + + int var3; + for(var3 = 0; var3 < var2; ++var3) { + this.sectorFree.add(Boolean.valueOf(true)); + } + + this.sectorFree.set(0, Boolean.valueOf(false)); + this.sectorFree.set(1, Boolean.valueOf(false)); + this.dataFile.seek(0L); + + int var4; + for(var3 = 0; var3 < 1024; ++var3) { + var4 = this.dataFile.readInt(); + this.offsets[var3] = var4; + if(var4 != 0 && (var4 >> 8) + (var4 & 255) <= this.sectorFree.size()) { + for(int var5 = 0; var5 < (var4 & 255); ++var5) { + this.sectorFree.set((var4 >> 8) + var5, Boolean.valueOf(false)); + } + } + } + + for(var3 = 0; var3 < 1024; ++var3) { + var4 = this.dataFile.readInt(); + this.chunkTimestamps[var3] = var4; + } + } catch (IOException var6) { + var6.printStackTrace(); + } + + } + + public synchronized int getSizeDelta() { + int var1 = this.sizeDelta; + this.sizeDelta = 0; + return var1; + } + + private void debug(String var1) { + } + + private void debugln(String var1) { + this.debug(var1 + "\n"); + } + + private void debug(String var1, int var2, int var3, String var4) { + this.debug("REGION " + var1 + " " + this.fileName.getName() + "[" + var2 + "," + var3 + "] = " + var4); + } + + private void debug(String var1, int var2, int var3, int var4, String var5) { + this.debug("REGION " + var1 + " " + this.fileName.getName() + "[" + var2 + "," + var3 + "] " + var4 + "B = " + var5); + } + + private void debugln(String var1, int var2, int var3, String var4) { + this.debug(var1, var2, var3, var4 + "\n"); + } + + public synchronized DataInputStream getChunkDataInputStream(int var1, int var2) { + if(this.outOfBounds(var1, var2)) { + this.debugln("READ", var1, var2, "out of bounds"); + return null; + } else { + try { + int var3 = this.getOffset(var1, var2); + if(var3 == 0) { + return null; + } else { + int var4 = var3 >> 8; + int var5 = var3 & 255; + if(var4 + var5 > this.sectorFree.size()) { + this.debugln("READ", var1, var2, "invalid sector"); + return null; + } else { + this.dataFile.seek((long)(var4 * 4096)); + int var6 = this.dataFile.readInt(); + if(var6 > 4096 * var5) { + this.debugln("READ", var1, var2, "invalid length: " + var6 + " > 4096 * " + var5); + return null; + } else { + byte var7 = this.dataFile.readByte(); + byte[] var8; + DataInputStream var9; + if(var7 == 1) { + var8 = new byte[var6 - 1]; + this.dataFile.read(var8); + var9 = new DataInputStream(new GZIPInputStream(new ByteArrayInputStream(var8))); + return var9; + } else if(var7 == 2) { + var8 = new byte[var6 - 1]; + this.dataFile.read(var8); + var9 = new DataInputStream(new InflaterInputStream(new ByteArrayInputStream(var8))); + return var9; + } else { + this.debugln("READ", var1, var2, "unknown version " + var7); + return null; + } + } + } + } + } catch (IOException var10) { + this.debugln("READ", var1, var2, "exception"); + return null; + } + } + } + + public DataOutputStream getChunkDataOutputStream(int var1, int var2) { + return this.outOfBounds(var1, var2) ? null : new DataOutputStream(new DeflaterOutputStream(new RegionFileChunkBuffer(this, var1, var2))); + } + + protected synchronized void write(int var1, int var2, byte[] var3, int var4) { + try { + int var5 = this.getOffset(var1, var2); + int var6 = var5 >> 8; + int var7 = var5 & 255; + int var8 = (var4 + 5) / 4096 + 1; + if(var8 >= 256) { + return; + } + + if(var6 != 0 && var7 == var8) { + this.debug("SAVE", var1, var2, var4, "rewrite"); + this.write(var6, var3, var4); + } else { + int var9; + for(var9 = 0; var9 < var7; ++var9) { + this.sectorFree.set(var6 + var9, Boolean.valueOf(true)); + } + + var9 = this.sectorFree.indexOf(Boolean.valueOf(true)); + int var10 = 0; + int var11; + if(var9 != -1) { + for(var11 = var9; var11 < this.sectorFree.size(); ++var11) { + if(var10 != 0) { + if(((Boolean)this.sectorFree.get(var11)).booleanValue()) { + ++var10; + } else { + var10 = 0; + } + } else if(((Boolean)this.sectorFree.get(var11)).booleanValue()) { + var9 = var11; + var10 = 1; + } + + if(var10 >= var8) { + break; + } + } + } + + if(var10 >= var8) { + this.debug("SAVE", var1, var2, var4, "reuse"); + var6 = var9; + this.setOffset(var1, var2, var9 << 8 | var8); + + for(var11 = 0; var11 < var8; ++var11) { + this.sectorFree.set(var6 + var11, Boolean.valueOf(false)); + } + + this.write(var6, var3, var4); + } else { + this.debug("SAVE", var1, var2, var4, "grow"); + this.dataFile.seek(this.dataFile.length()); + var6 = this.sectorFree.size(); + + for(var11 = 0; var11 < var8; ++var11) { + this.dataFile.write(emptySector); + this.sectorFree.add(Boolean.valueOf(false)); + } + + this.sizeDelta += 4096 * var8; + this.write(var6, var3, var4); + this.setOffset(var1, var2, var6 << 8 | var8); + } + } + + this.setChunkTimestamp(var1, var2, (int)(System.currentTimeMillis() / 1000L)); + } catch (IOException var12) { + var12.printStackTrace(); + } + + } + + private void write(int var1, byte[] var2, int var3) throws IOException { + this.debugln(" " + var1); + this.dataFile.seek((long)(var1 * 4096)); + this.dataFile.writeInt(var3 + 1); + this.dataFile.writeByte(2); + this.dataFile.write(var2, 0, var3); + } + + private boolean outOfBounds(int var1, int var2) { + return var1 < 0 || var1 >= 32 || var2 < 0 || var2 >= 32; + } + + private int getOffset(int var1, int var2) { + return this.offsets[var1 + var2 * 32]; + } + + public boolean isChunkSaved(int var1, int var2) { + return this.getOffset(var1, var2) != 0; + } + + private void setOffset(int var1, int var2, int var3) throws IOException { + this.offsets[var1 + var2 * 32] = var3; + this.dataFile.seek((long)((var1 + var2 * 32) * 4)); + this.dataFile.writeInt(var3); + } + + private void setChunkTimestamp(int var1, int var2, int var3) throws IOException { + this.chunkTimestamps[var1 + var2 * 32] = var3; + this.dataFile.seek((long)(4096 + (var1 + var2 * 32) * 4)); + this.dataFile.writeInt(var3); + } + + public void close() throws IOException { + this.dataFile.close(); + } +} diff --git a/src/net/minecraft/src/RegionFileCache.java b/src/net/minecraft/src/RegionFileCache.java new file mode 100644 index 0000000..b322dcb --- /dev/null +++ b/src/net/minecraft/src/RegionFileCache.java @@ -0,0 +1,74 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.lang.ref.Reference; +import java.lang.ref.SoftReference; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class RegionFileCache { + private static final Map field_22125_a = new HashMap(); + + public static synchronized RegionFile func_22123_a(File var0, int var1, int var2) { + File var3 = new File(var0, "region"); + File var4 = new File(var3, "r." + (var1 >> 5) + "." + (var2 >> 5) + ".mcr"); + Reference var5 = (Reference)field_22125_a.get(var4); + RegionFile var6; + if(var5 != null) { + var6 = (RegionFile)var5.get(); + if(var6 != null) { + return var6; + } + } + + if(!var3.exists()) { + var3.mkdirs(); + } + + if(field_22125_a.size() >= 256) { + func_22122_a(); + } + + var6 = new RegionFile(var4); + field_22125_a.put(var4, new SoftReference(var6)); + return var6; + } + + public static synchronized void func_22122_a() { + Iterator var0 = field_22125_a.values().iterator(); + + while(var0.hasNext()) { + Reference var1 = (Reference)var0.next(); + + try { + RegionFile var2 = (RegionFile)var1.get(); + if(var2 != null) { + var2.close(); + } + } catch (IOException var3) { + var3.printStackTrace(); + } + } + + field_22125_a.clear(); + } + + public static int func_22121_b(File var0, int var1, int var2) { + RegionFile var3 = func_22123_a(var0, var1, var2); + return var3.getSizeDelta(); + } + + public static DataInputStream func_22124_c(File var0, int var1, int var2) { + RegionFile var3 = func_22123_a(var0, var1, var2); + return var3.getChunkDataInputStream(var1 & 31, var2 & 31); + } + + public static DataOutputStream func_22120_d(File var0, int var1, int var2) { + RegionFile var3 = func_22123_a(var0, var1, var2); + return var3.getChunkDataOutputStream(var1 & 31, var2 & 31); + } +} diff --git a/src/net/minecraft/src/RegionFileChunkBuffer.java b/src/net/minecraft/src/RegionFileChunkBuffer.java new file mode 100644 index 0000000..0a95b71 --- /dev/null +++ b/src/net/minecraft/src/RegionFileChunkBuffer.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.io.ByteArrayOutputStream; + +class RegionFileChunkBuffer extends ByteArrayOutputStream { + private int field_22156_b; + private int field_22158_c; + final RegionFile field_22157_a; + + public RegionFileChunkBuffer(RegionFile var1, int var2, int var3) { + super(8096); + this.field_22157_a = var1; + this.field_22156_b = var2; + this.field_22158_c = var3; + } + + public void close() { + this.field_22157_a.write(this.field_22156_b, this.field_22158_c, this.buf, this.count); + } +} diff --git a/src/net/minecraft/src/SaveConverterMcRegion.java b/src/net/minecraft/src/SaveConverterMcRegion.java new file mode 100644 index 0000000..821ea3c --- /dev/null +++ b/src/net/minecraft/src/SaveConverterMcRegion.java @@ -0,0 +1,139 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.zip.GZIPInputStream; + +public class SaveConverterMcRegion extends SaveFormatOld { + public SaveConverterMcRegion(File var1) { + super(var1); + } + + public ISaveHandler func_22105_a(String var1, boolean var2) { + return new SaveOldDir(this.field_22106_a, var1, var2); + } + + public boolean isOldSaveType(String var1) { + WorldInfo var2 = this.getWorldInfo(var1); + return var2 != null && var2.getVersion() == 0; + } + + public boolean converMapToMCRegion(String var1, IProgressUpdate var2) { + var2.setLoadingProgress(0); + ArrayList var3 = new ArrayList(); + ArrayList var4 = new ArrayList(); + ArrayList var5 = new ArrayList(); + ArrayList var6 = new ArrayList(); + File var7 = new File(this.field_22106_a, var1); + File var8 = new File(var7, "DIM-1"); + System.out.println("Scanning folders..."); + this.func_22108_a(var7, var3, var4); + if(var8.exists()) { + this.func_22108_a(var8, var5, var6); + } + + int var9 = var3.size() + var5.size() + var4.size() + var6.size(); + System.out.println("Total conversion count is " + var9); + this.func_22107_a(var7, var3, 0, var9, var2); + this.func_22107_a(var8, var5, var3.size(), var9, var2); + WorldInfo var10 = this.getWorldInfo(var1); + var10.setVersion(19132); + ISaveHandler var11 = this.func_22105_a(var1, false); + var11.func_22094_a(var10); + this.func_22109_a(var4, var3.size() + var5.size(), var9, var2); + if(var8.exists()) { + this.func_22109_a(var6, var3.size() + var5.size() + var4.size(), var9, var2); + } + + return true; + } + + private void func_22108_a(File var1, ArrayList var2, ArrayList var3) { + ChunkFolderPattern var4 = new ChunkFolderPattern((Empty2)null); + ChunkFilePattern var5 = new ChunkFilePattern((Empty2)null); + File[] var6 = var1.listFiles(var4); + File[] var7 = var6; + int var8 = var6.length; + + for(int var9 = 0; var9 < var8; ++var9) { + File var10 = var7[var9]; + var3.add(var10); + File[] var11 = var10.listFiles(var4); + File[] var12 = var11; + int var13 = var11.length; + + for(int var14 = 0; var14 < var13; ++var14) { + File var15 = var12[var14]; + File[] var16 = var15.listFiles(var5); + File[] var17 = var16; + int var18 = var16.length; + + for(int var19 = 0; var19 < var18; ++var19) { + File var20 = var17[var19]; + var2.add(new ChunkFile(var20)); + } + } + } + + } + + private void func_22107_a(File var1, ArrayList var2, int var3, int var4, IProgressUpdate var5) { + Collections.sort(var2); + byte[] var6 = new byte[4096]; + Iterator var7 = var2.iterator(); + + while(var7.hasNext()) { + ChunkFile var8 = (ChunkFile)var7.next(); + int var9 = var8.func_22205_b(); + int var10 = var8.func_22204_c(); + RegionFile var11 = RegionFileCache.func_22123_a(var1, var9, var10); + if(!var11.isChunkSaved(var9 & 31, var10 & 31)) { + try { + DataInputStream var12 = new DataInputStream(new GZIPInputStream(new FileInputStream(var8.func_22207_a()))); + DataOutputStream var13 = var11.getChunkDataOutputStream(var9 & 31, var10 & 31); + boolean var14 = false; + + while(true) { + int var17 = var12.read(var6); + if(var17 == -1) { + var13.close(); + var12.close(); + break; + } + + var13.write(var6, 0, var17); + } + } catch (IOException var15) { + var15.printStackTrace(); + } + } + + ++var3; + int var16 = (int)Math.round(100.0D * (double)var3 / (double)var4); + var5.setLoadingProgress(var16); + } + + RegionFileCache.func_22122_a(); + } + + private void func_22109_a(ArrayList var1, int var2, int var3, IProgressUpdate var4) { + Iterator var5 = var1.iterator(); + + while(var5.hasNext()) { + File var6 = (File)var5.next(); + File[] var7 = var6.listFiles(); + func_22104_a(var7); + var6.delete(); + ++var2; + int var8 = (int)Math.round(100.0D * (double)var2 / (double)var3); + var4.setLoadingProgress(var8); + } + + } +} diff --git a/src/net/minecraft/src/SaveFormatOld.java b/src/net/minecraft/src/SaveFormatOld.java new file mode 100644 index 0000000..a78020c --- /dev/null +++ b/src/net/minecraft/src/SaveFormatOld.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileInputStream; + +public class SaveFormatOld implements ISaveFormat { + protected final File field_22106_a; + + public SaveFormatOld(File var1) { + if(!var1.exists()) { + var1.mkdirs(); + } + + this.field_22106_a = var1; + } + + public WorldInfo getWorldInfo(String var1) { + File var2 = new File(this.field_22106_a, var1); + if(!var2.exists()) { + return null; + } else { + File var3 = new File(var2, "level.dat"); + NBTTagCompound var4; + NBTTagCompound var5; + if(var3.exists()) { + try { + var4 = CompressedStreamTools.func_770_a(new FileInputStream(var3)); + var5 = var4.getCompoundTag("Data"); + return new WorldInfo(var5); + } catch (Exception var7) { + var7.printStackTrace(); + } + } + + var3 = new File(var2, "level.dat_old"); + if(var3.exists()) { + try { + var4 = CompressedStreamTools.func_770_a(new FileInputStream(var3)); + var5 = var4.getCompoundTag("Data"); + return new WorldInfo(var5); + } catch (Exception var6) { + var6.printStackTrace(); + } + } + + return null; + } + } + + protected static void func_22104_a(File[] var0) { + for(int var1 = 0; var1 < var0.length; ++var1) { + if(var0[var1].isDirectory()) { + func_22104_a(var0[var1].listFiles()); + } + + var0[var1].delete(); + } + + } + + public ISaveHandler func_22105_a(String var1, boolean var2) { + return new PlayerNBTManager(this.field_22106_a, var1, var2); + } + + public boolean isOldSaveType(String var1) { + return false; + } + + public boolean converMapToMCRegion(String var1, IProgressUpdate var2) { + return false; + } +} diff --git a/src/net/minecraft/src/SaveOldDir.java b/src/net/minecraft/src/SaveOldDir.java new file mode 100644 index 0000000..11f8e65 --- /dev/null +++ b/src/net/minecraft/src/SaveOldDir.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +import java.io.File; +import java.util.List; + +public class SaveOldDir extends PlayerNBTManager { + public SaveOldDir(File var1, String var2, boolean var3) { + super(var1, var2, var3); + } + + public IChunkLoader func_22092_a(WorldProvider var1) { + File var2 = this.getWorldDir(); + if(var1 instanceof WorldProviderHell) { + File var3 = new File(var2, "DIM-1"); + var3.mkdirs(); + return new McRegionChunkLoader(var3); + } else { + return new McRegionChunkLoader(var2); + } + } + + public void func_22095_a(WorldInfo var1, List var2) { + var1.setVersion(19132); + super.func_22095_a(var1, var2); + } + + public void func_22093_e() { + RegionFileCache.func_22122_a(); + } +} diff --git a/src/net/minecraft/src/ServerCommand.java b/src/net/minecraft/src/ServerCommand.java new file mode 100644 index 0000000..d53335a --- /dev/null +++ b/src/net/minecraft/src/ServerCommand.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class ServerCommand { + public final String command; + public final ICommandListener commandListener; + + public ServerCommand(String var1, ICommandListener var2) { + this.command = var1; + this.commandListener = var2; + } +} diff --git a/src/net/minecraft/src/ServerConfigurationManager.java b/src/net/minecraft/src/ServerConfigurationManager.java new file mode 100644 index 0000000..57136f1 --- /dev/null +++ b/src/net/minecraft/src/ServerConfigurationManager.java @@ -0,0 +1,555 @@ +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 = new PlayerManager[2]; + private int maxPlayers; + private Set bannedPlayers = new HashSet(); + private Set bannedIPs = new HashSet(); + private Set ops = new HashSet(); + private Set whiteListedIPs = new HashSet(); + private File bannedPlayersFile; + private File ipBanFile; + private File opFile; + private File whitelistPlayersFile; + private IPlayerFileData playerNBTManagerObj; + private boolean whiteListEnforced; + + 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.whitelistPlayersFile = var1.getFile("white-list.txt"); + int var2 = var1.propertyManagerObj.getIntProperty("view-distance", 10); + this.playerManagerObj[0] = new PlayerManager(var1, 0, var2); + this.playerManagerObj[1] = new PlayerManager(var1, -1, var2); + this.maxPlayers = var1.propertyManagerObj.getIntProperty("max-players", 20); + this.whiteListEnforced = var1.propertyManagerObj.getBooleanProperty("white-list", false); + this.readBannedPlayers(); + this.loadBannedList(); + this.loadOps(); + this.loadWhiteList(); + this.writeBannedPlayers(); + this.saveBannedList(); + this.saveOps(); + this.saveWhiteList(); + } + + public void setPlayerManager(WorldServer[] var1) { + this.playerNBTManagerObj = var1[0].getWorldFile().func_22090_d(); + } + + public void func_28172_a(EntityPlayerMP var1) { + this.playerManagerObj[0].removePlayer(var1); + this.playerManagerObj[1].removePlayer(var1); + this.getPlayerManager(var1.dimension).addPlayer(var1); + WorldServer var2 = this.mcServer.getWorldManager(var1.dimension); + var2.chunkProviderServer.loadChunk((int)var1.posX >> 4, (int)var1.posZ >> 4); + } + + public int getMaxTrackingDistance() { + return this.playerManagerObj[0].getMaxTrackingDistance(); + } + + private PlayerManager getPlayerManager(int var1) { + return var1 == -1 ? this.playerManagerObj[1] : this.playerManagerObj[0]; + } + + public void readPlayerDataFromFile(EntityPlayerMP var1) { + this.playerNBTManagerObj.readPlayerData(var1); + } + + public void playerLoggedIn(EntityPlayerMP var1) { + this.playerEntities.add(var1); + WorldServer var2 = this.mcServer.getWorldManager(var1.dimension); + var2.chunkProviderServer.loadChunk((int)var1.posX >> 4, (int)var1.posZ >> 4); + + while(var2.getCollidingBoundingBoxes(var1, var1.boundingBox).size() != 0) { + var1.setPosition(var1.posX, var1.posY + 1.0D, var1.posZ); + } + + var2.entityJoinedWorld(var1); + this.getPlayerManager(var1.dimension).addPlayer(var1); + } + + public void func_613_b(EntityPlayerMP var1) { + this.getPlayerManager(var1.dimension).func_543_c(var1); + } + + public void playerLoggedOut(EntityPlayerMP var1) { + this.playerNBTManagerObj.writePlayerData(var1); + this.mcServer.getWorldManager(var1.dimension).removePlayerForLogoff(var1); + this.playerEntities.remove(var1); + this.getPlayerManager(var1.dimension).removePlayer(var1); + } + + public EntityPlayerMP login(NetLoginHandler var1, String var2) { + if(this.bannedPlayers.contains(var2.trim().toLowerCase())) { + var1.kickUser("You are banned from this server!"); + return null; + } else if(!this.isAllowedToLogin(var2)) { + var1.kickUser("You are not white-listed on this server!"); + return null; + } else { + String var3 = var1.netManager.getRemoteAddress().toString(); + var3 = var3.substring(var3.indexOf("/") + 1); + var3 = var3.substring(0, var3.indexOf(":")); + if(this.bannedIPs.contains(var3)) { + 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 var4 = 0; var4 < this.playerEntities.size(); ++var4) { + EntityPlayerMP var5 = (EntityPlayerMP)this.playerEntities.get(var4); + if(var5.username.equalsIgnoreCase(var2)) { + var5.playerNetServerHandler.kickPlayer("You logged in from another location"); + } + } + + return new EntityPlayerMP(this.mcServer, this.mcServer.getWorldManager(0), var2, new ItemInWorldManager(this.mcServer.getWorldManager(0))); + } + } + } + + public EntityPlayerMP recreatePlayerEntity(EntityPlayerMP var1, int var2) { + this.mcServer.getEntityTracker(var1.dimension).removeTrackedPlayerSymmetric(var1); + this.mcServer.getEntityTracker(var1.dimension).untrackEntity(var1); + this.getPlayerManager(var1.dimension).removePlayer(var1); + this.playerEntities.remove(var1); + this.mcServer.getWorldManager(var1.dimension).removePlayer(var1); + ChunkCoordinates var3 = var1.getSpawnChunk(); + var1.dimension = var2; + EntityPlayerMP var4 = new EntityPlayerMP(this.mcServer, this.mcServer.getWorldManager(var1.dimension), var1.username, new ItemInWorldManager(this.mcServer.getWorldManager(var1.dimension))); + var4.entityId = var1.entityId; + var4.playerNetServerHandler = var1.playerNetServerHandler; + WorldServer var5 = this.mcServer.getWorldManager(var1.dimension); + if(var3 != null) { + ChunkCoordinates var6 = EntityPlayer.func_25051_a(this.mcServer.getWorldManager(var1.dimension), var3); + if(var6 != null) { + var4.setLocationAndAngles((double)((float)var6.posX + 0.5F), (double)((float)var6.posY + 0.1F), (double)((float)var6.posZ + 0.5F), 0.0F, 0.0F); + var4.setSpawnChunk(var3); + } else { + var4.playerNetServerHandler.sendPacket(new Packet70Bed(0)); + } + } + + var5.chunkProviderServer.loadChunk((int)var4.posX >> 4, (int)var4.posZ >> 4); + + while(var5.getCollidingBoundingBoxes(var4, var4.boundingBox).size() != 0) { + var4.setPosition(var4.posX, var4.posY + 1.0D, var4.posZ); + } + + var4.playerNetServerHandler.sendPacket(new Packet9Respawn((byte)var4.dimension)); + var4.playerNetServerHandler.teleportTo(var4.posX, var4.posY, var4.posZ, var4.rotationYaw, var4.rotationPitch); + this.func_28170_a(var4, var5); + this.getPlayerManager(var4.dimension).addPlayer(var4); + var5.entityJoinedWorld(var4); + this.playerEntities.add(var4); + var4.func_20057_k(); + var4.func_22068_s(); + return var4; + } + + public void sendPlayerToOtherDimension(EntityPlayerMP var1) { + WorldServer var2 = this.mcServer.getWorldManager(var1.dimension); + boolean var3 = false; + byte var11; + if(var1.dimension == -1) { + var11 = 0; + } else { + var11 = -1; + } + + var1.dimension = var11; + WorldServer var4 = this.mcServer.getWorldManager(var1.dimension); + var1.playerNetServerHandler.sendPacket(new Packet9Respawn((byte)var1.dimension)); + var2.removePlayer(var1); + var1.isDead = false; + double var5 = var1.posX; + double var7 = var1.posZ; + double var9 = 8.0D; + if(var1.dimension == -1) { + var5 /= var9; + var7 /= var9; + var1.setLocationAndAngles(var5, var1.posY, var7, var1.rotationYaw, var1.rotationPitch); + if(var1.isEntityAlive()) { + var2.updateEntityWithOptionalForce(var1, false); + } + } else { + var5 *= var9; + var7 *= var9; + var1.setLocationAndAngles(var5, var1.posY, var7, var1.rotationYaw, var1.rotationPitch); + if(var1.isEntityAlive()) { + var2.updateEntityWithOptionalForce(var1, false); + } + } + + if(var1.isEntityAlive()) { + var4.entityJoinedWorld(var1); + var1.setLocationAndAngles(var5, var1.posY, var7, var1.rotationYaw, var1.rotationPitch); + var4.updateEntityWithOptionalForce(var1, false); + var4.chunkProviderServer.chunkLoadOverride = true; + (new Teleporter()).setExitLocation(var4, var1); + var4.chunkProviderServer.chunkLoadOverride = false; + } + + this.func_28172_a(var1); + var1.playerNetServerHandler.teleportTo(var1.posX, var1.posY, var1.posZ, var1.rotationYaw, var1.rotationPitch); + var1.setWorldHandler(var4); + this.func_28170_a(var1, var4); + this.func_30008_g(var1); + } + + public void onTick() { + for(int var1 = 0; var1 < this.playerManagerObj.length; ++var1) { + this.playerManagerObj[var1].updatePlayerInstances(); + } + + } + + public void markBlockNeedsUpdate(int var1, int var2, int var3, int var4) { + this.getPlayerManager(var4).markBlockNeedsUpdate(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.playerNetServerHandler.sendPacket(var1); + } + + } + + public void sendPacketToAllPlayersInDimension(Packet var1, int var2) { + for(int var3 = 0; var3 < this.playerEntities.size(); ++var3) { + EntityPlayerMP var4 = (EntityPlayerMP)this.playerEntities.get(var3); + if(var4.dimension == var2) { + var4.playerNetServerHandler.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.bannedPlayers.add(var1.toLowerCase()); + this.writeBannedPlayers(); + } + + public void pardonPlayer(String var1) { + this.bannedPlayers.remove(var1.toLowerCase()); + this.writeBannedPlayers(); + } + + private void readBannedPlayers() { + try { + this.bannedPlayers.clear(); + BufferedReader var1 = new BufferedReader(new FileReader(this.bannedPlayersFile)); + String var2 = ""; + + while(true) { + var2 = var1.readLine(); + if(var2 == null) { + var1.close(); + break; + } + + this.bannedPlayers.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.bannedPlayers.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 pardonIP(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); + } + + } + + private void loadWhiteList() { + try { + this.whiteListedIPs.clear(); + BufferedReader var1 = new BufferedReader(new FileReader(this.whitelistPlayersFile)); + String var2 = ""; + + while(true) { + var2 = var1.readLine(); + if(var2 == null) { + var1.close(); + break; + } + + this.whiteListedIPs.add(var2.trim().toLowerCase()); + } + } catch (Exception var3) { + logger.warning("Failed to load white-list: " + var3); + } + + } + + private void saveWhiteList() { + try { + PrintWriter var1 = new PrintWriter(new FileWriter(this.whitelistPlayersFile, false)); + Iterator var2 = this.whiteListedIPs.iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + var1.println(var3); + } + + var1.close(); + } catch (Exception var4) { + logger.warning("Failed to save white-list: " + var4); + } + + } + + public boolean isAllowedToLogin(String var1) { + var1 = var1.trim().toLowerCase(); + return !this.whiteListEnforced || this.ops.contains(var1) || this.whiteListedIPs.contains(var1); + } + + 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.playerNetServerHandler.sendPacket(new Packet3Chat(var2)); + } + + } + + public void sendPacketToPlayersAroundPoint(double var1, double var3, double var5, double var7, int var9, Packet var10) { + this.func_28171_a((EntityPlayer)null, var1, var3, var5, var7, var9, var10); + } + + public void func_28171_a(EntityPlayer var1, double var2, double var4, double var6, double var8, int var10, Packet var11) { + for(int var12 = 0; var12 < this.playerEntities.size(); ++var12) { + EntityPlayerMP var13 = (EntityPlayerMP)this.playerEntities.get(var12); + if(var13 != var1 && var13.dimension == var10) { + double var14 = var2 - var13.posX; + double var16 = var4 - var13.posY; + double var18 = var6 - var13.posZ; + if(var14 * var14 + var16 * var16 + var18 * var18 < var8 * var8) { + var13.playerNetServerHandler.sendPacket(var11); + } + } + } + + } + + public void sendChatMessageToAllOps(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.playerNetServerHandler.sendPacket(var2); + } + } + + } + + public boolean sendPacketToPlayer(String var1, Packet var2) { + EntityPlayerMP var3 = this.getPlayerEntity(var1); + if(var3 != null) { + var3.playerNetServerHandler.sendPacket(var2); + return true; + } else { + return false; + } + } + + public void savePlayerStates() { + for(int var1 = 0; var1 < this.playerEntities.size(); ++var1) { + this.playerNBTManagerObj.writePlayerData((EntityPlayer)this.playerEntities.get(var1)); + } + + } + + public void sentTileEntityToPlayer(int var1, int var2, int var3, TileEntity var4) { + } + + public void addToWhiteList(String var1) { + this.whiteListedIPs.add(var1); + this.saveWhiteList(); + } + + public void removeFromWhiteList(String var1) { + this.whiteListedIPs.remove(var1); + this.saveWhiteList(); + } + + public Set getWhiteListedIPs() { + return this.whiteListedIPs; + } + + public void reloadWhiteList() { + this.loadWhiteList(); + } + + public void func_28170_a(EntityPlayerMP var1, WorldServer var2) { + var1.playerNetServerHandler.sendPacket(new Packet4UpdateTime(var2.getWorldTime())); + if(var2.func_27068_v()) { + var1.playerNetServerHandler.sendPacket(new Packet70Bed(1)); + } + + } + + public void func_30008_g(EntityPlayerMP var1) { + var1.func_28017_a(var1.personalCraftingInventory); + var1.func_30001_B(); + } +} diff --git a/src/net/minecraft/src/ServerGUI.java b/src/net/minecraft/src/ServerGUI.java new file mode 100644 index 0000000..f779cbe --- /dev/null +++ b/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/src/net/minecraft/src/ServerGuiCommandListener.java b/src/net/minecraft/src/ServerGuiCommandListener.java new file mode 100644 index 0000000..a3cf06e --- /dev/null +++ b/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/src/net/minecraft/src/ServerGuiFocusAdapter.java b/src/net/minecraft/src/ServerGuiFocusAdapter.java new file mode 100644 index 0000000..c9d9b1a --- /dev/null +++ b/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/src/net/minecraft/src/ServerWindowAdapter.java b/src/net/minecraft/src/ServerWindowAdapter.java new file mode 100644 index 0000000..a4210c8 --- /dev/null +++ b/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.initiateShutdown(); + + while(!this.mcServer.serverStopped) { + try { + Thread.sleep(100L); + } catch (InterruptedException var3) { + var3.printStackTrace(); + } + } + + System.exit(0); + } +} diff --git a/src/net/minecraft/src/ShapedRecipes.java b/src/net/minecraft/src/ShapedRecipes.java new file mode 100644 index 0000000..c397fdf --- /dev/null +++ b/src/net/minecraft/src/ShapedRecipes.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +public class ShapedRecipes implements IRecipe { + private int field_21140_b; + private int field_21144_c; + private ItemStack[] field_21143_d; + private ItemStack field_21142_e; + public final int field_21141_a; + + public ShapedRecipes(int var1, int var2, ItemStack[] var3, ItemStack var4) { + this.field_21141_a = var4.itemID; + this.field_21140_b = var1; + this.field_21144_c = var2; + this.field_21143_d = var3; + this.field_21142_e = var4; + } + + public ItemStack func_25077_b() { + return this.field_21142_e; + } + + public boolean func_21134_a(InventoryCrafting var1) { + for(int var2 = 0; var2 <= 3 - this.field_21140_b; ++var2) { + for(int var3 = 0; var3 <= 3 - this.field_21144_c; ++var3) { + if(this.func_21139_a(var1, var2, var3, true)) { + return true; + } + + if(this.func_21139_a(var1, var2, var3, false)) { + return true; + } + } + } + + return false; + } + + private boolean func_21139_a(InventoryCrafting var1, int var2, int var3, boolean var4) { + for(int var5 = 0; var5 < 3; ++var5) { + for(int var6 = 0; var6 < 3; ++var6) { + int var7 = var5 - var2; + int var8 = var6 - var3; + ItemStack var9 = null; + if(var7 >= 0 && var8 >= 0 && var7 < this.field_21140_b && var8 < this.field_21144_c) { + if(var4) { + var9 = this.field_21143_d[this.field_21140_b - var7 - 1 + var8 * this.field_21140_b]; + } else { + var9 = this.field_21143_d[var7 + var8 * this.field_21140_b]; + } + } + + ItemStack var10 = var1.func_21084_a(var5, var6); + if(var10 != null || var9 != null) { + if(var10 == null && var9 != null || var10 != null && var9 == null) { + return false; + } + + if(var9.itemID != var10.itemID) { + return false; + } + + if(var9.getItemDamage() != -1 && var9.getItemDamage() != var10.getItemDamage()) { + return false; + } + } + } + } + + return true; + } + + public ItemStack func_21136_b(InventoryCrafting var1) { + return new ItemStack(this.field_21142_e.itemID, this.field_21142_e.stackSize, this.field_21142_e.getItemDamage()); + } + + public int getRecipeSize() { + return this.field_21140_b * this.field_21144_c; + } +} diff --git a/src/net/minecraft/src/ShapelessRecipes.java b/src/net/minecraft/src/ShapelessRecipes.java new file mode 100644 index 0000000..4ac8e30 --- /dev/null +++ b/src/net/minecraft/src/ShapelessRecipes.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class ShapelessRecipes implements IRecipe { + private final ItemStack field_21138_a; + private final List field_21137_b; + + public ShapelessRecipes(ItemStack var1, List var2) { + this.field_21138_a = var1; + this.field_21137_b = var2; + } + + public ItemStack func_25077_b() { + return this.field_21138_a; + } + + public boolean func_21134_a(InventoryCrafting var1) { + ArrayList var2 = new ArrayList(this.field_21137_b); + + for(int var3 = 0; var3 < 3; ++var3) { + for(int var4 = 0; var4 < 3; ++var4) { + ItemStack var5 = var1.func_21084_a(var4, var3); + if(var5 != null) { + boolean var6 = false; + Iterator var7 = var2.iterator(); + + while(var7.hasNext()) { + ItemStack var8 = (ItemStack)var7.next(); + if(var5.itemID == var8.itemID && (var8.getItemDamage() == -1 || var5.getItemDamage() == var8.getItemDamage())) { + var6 = true; + var2.remove(var8); + break; + } + } + + if(!var6) { + return false; + } + } + } + } + + return var2.isEmpty(); + } + + public ItemStack func_21136_b(InventoryCrafting var1) { + return this.field_21138_a.copy(); + } + + public int getRecipeSize() { + return this.field_21137_b.size(); + } +} diff --git a/src/net/minecraft/src/Slot.java b/src/net/minecraft/src/Slot.java new file mode 100644 index 0000000..0bc077b --- /dev/null +++ b/src/net/minecraft/src/Slot.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +public class Slot { + private final int slotIndex; + private final IInventory inventory; + public int id; + public int xDisplayPosition; + public int yDisplayPosition; + + public Slot(IInventory var1, int var2, int var3, int var4) { + this.inventory = var1; + this.slotIndex = var2; + this.xDisplayPosition = var3; + this.yDisplayPosition = var4; + } + + public void onPickupFromSlot(ItemStack var1) { + this.onSlotChanged(); + } + + public boolean isItemValid(ItemStack var1) { + return true; + } + + public ItemStack getStack() { + return this.inventory.getStackInSlot(this.slotIndex); + } + + public boolean func_27006_b() { + return this.getStack() != null; + } + + public void putStack(ItemStack var1) { + this.inventory.setInventorySlotContents(this.slotIndex, var1); + this.onSlotChanged(); + } + + public void onSlotChanged() { + this.inventory.onInventoryChanged(); + } + + public int getSlotStackLimit() { + return this.inventory.getInventoryStackLimit(); + } + + public ItemStack decrStackSize(int var1) { + return this.inventory.decrStackSize(this.slotIndex, var1); + } + + public boolean isHere(IInventory var1, int var2) { + return var1 == this.inventory && var2 == this.slotIndex; + } +} diff --git a/src/net/minecraft/src/SlotArmor.java b/src/net/minecraft/src/SlotArmor.java new file mode 100644 index 0000000..09ff198 --- /dev/null +++ b/src/net/minecraft/src/SlotArmor.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +class SlotArmor extends Slot { + final int field_20102_a; + final ContainerPlayer field_20101_b; + + SlotArmor(ContainerPlayer var1, IInventory var2, int var3, int var4, int var5, int var6) { + super(var2, var3, var4, var5); + this.field_20101_b = var1; + this.field_20102_a = var6; + } + + public int getSlotStackLimit() { + return 1; + } + + public boolean isItemValid(ItemStack var1) { + return var1.getItem() instanceof ItemArmor ? ((ItemArmor)var1.getItem()).armorType == this.field_20102_a : (var1.getItem().shiftedIndex == Block.pumpkin.blockID ? this.field_20102_a == 0 : false); + } +} diff --git a/src/net/minecraft/src/SlotCrafting.java b/src/net/minecraft/src/SlotCrafting.java new file mode 100644 index 0000000..9ca3646 --- /dev/null +++ b/src/net/minecraft/src/SlotCrafting.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +public class SlotCrafting extends Slot { + private final IInventory craftMatrix; + private EntityPlayer field_25004_e; + + public SlotCrafting(EntityPlayer var1, IInventory var2, IInventory var3, int var4, int var5, int var6) { + super(var3, var4, var5, var6); + this.field_25004_e = var1; + this.craftMatrix = var2; + } + + public boolean isItemValid(ItemStack var1) { + return false; + } + + public void onPickupFromSlot(ItemStack var1) { + var1.func_28142_b(this.field_25004_e.worldObj, this.field_25004_e); + if(var1.itemID == Block.workbench.blockID) { + this.field_25004_e.addStat(AchievementList.field_25130_d, 1); + } else if(var1.itemID == Item.pickaxeWood.shiftedIndex) { + this.field_25004_e.addStat(AchievementList.field_27110_i, 1); + } else if(var1.itemID == Block.stoneOvenIdle.blockID) { + this.field_25004_e.addStat(AchievementList.field_27109_j, 1); + } else if(var1.itemID == Item.hoeWood.shiftedIndex) { + this.field_25004_e.addStat(AchievementList.field_27107_l, 1); + } else if(var1.itemID == Item.bread.shiftedIndex) { + this.field_25004_e.addStat(AchievementList.field_27106_m, 1); + } else if(var1.itemID == Item.cake.shiftedIndex) { + this.field_25004_e.addStat(AchievementList.field_27105_n, 1); + } else if(var1.itemID == Item.pickaxeStone.shiftedIndex) { + this.field_25004_e.addStat(AchievementList.field_27104_o, 1); + } else if(var1.itemID == Item.swordWood.shiftedIndex) { + this.field_25004_e.addStat(AchievementList.field_27101_r, 1); + } + + for(int var2 = 0; var2 < this.craftMatrix.getSizeInventory(); ++var2) { + ItemStack var3 = this.craftMatrix.getStackInSlot(var2); + if(var3 != null) { + this.craftMatrix.decrStackSize(var2, 1); + if(var3.getItem().hasContainerItem()) { + this.craftMatrix.setInventorySlotContents(var2, new ItemStack(var3.getItem().getContainerItem())); + } + } + } + + } +} diff --git a/src/net/minecraft/src/SlotFurnace.java b/src/net/minecraft/src/SlotFurnace.java new file mode 100644 index 0000000..0220106 --- /dev/null +++ b/src/net/minecraft/src/SlotFurnace.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class SlotFurnace extends Slot { + private EntityPlayer field_27007_d; + + public SlotFurnace(EntityPlayer var1, IInventory var2, int var3, int var4, int var5) { + super(var2, var3, var4, var5); + this.field_27007_d = var1; + } + + public boolean isItemValid(ItemStack var1) { + return false; + } + + public void onPickupFromSlot(ItemStack var1) { + var1.func_28142_b(this.field_27007_d.worldObj, this.field_27007_d); + if(var1.itemID == Item.ingotIron.shiftedIndex) { + this.field_27007_d.addStat(AchievementList.field_27108_k, 1); + } + + if(var1.itemID == Item.fishCooked.shiftedIndex) { + this.field_27007_d.addStat(AchievementList.field_27103_p, 1); + } + + super.onPickupFromSlot(var1); + } +} diff --git a/src/net/minecraft/src/SpawnListEntry.java b/src/net/minecraft/src/SpawnListEntry.java new file mode 100644 index 0000000..94c662f --- /dev/null +++ b/src/net/minecraft/src/SpawnListEntry.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class SpawnListEntry { + public Class entityClass; + public int spawnRarityRate; + + public SpawnListEntry(Class var1, int var2) { + this.entityClass = var1; + this.spawnRarityRate = var2; + } +} diff --git a/src/net/minecraft/src/SpawnerAnimals.java b/src/net/minecraft/src/SpawnerAnimals.java new file mode 100644 index 0000000..6f21055 --- /dev/null +++ b/src/net/minecraft/src/SpawnerAnimals.java @@ -0,0 +1,248 @@ +package net.minecraft.src; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +public final class SpawnerAnimals { + private static Set eligibleChunksForSpawning = new HashSet(); + protected static final Class[] field_22213_a = new Class[]{EntitySpider.class, EntityZombie.class, EntitySkeleton.class}; + + protected static ChunkPosition getRandomSpawningPointInChunk(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 performSpawning(World var0, boolean var1, boolean var2) { + if(!var1 && !var2) { + return 0; + } else { + eligibleChunksForSpawning.clear(); + + int var3; + int var6; + for(var3 = 0; var3 < var0.playerEntities.size(); ++var3) { + EntityPlayer var4 = (EntityPlayer)var0.playerEntities.get(var3); + int var5 = MathHelper.floor_double(var4.posX / 16.0D); + var6 = MathHelper.floor_double(var4.posZ / 16.0D); + byte var7 = 8; + + for(int var8 = -var7; var8 <= var7; ++var8) { + for(int var9 = -var7; var9 <= var7; ++var9) { + eligibleChunksForSpawning.add(new ChunkCoordIntPair(var8 + var5, var9 + var6)); + } + } + } + + var3 = 0; + ChunkCoordinates var35 = var0.getSpawnPoint(); + EnumCreatureType[] var36 = EnumCreatureType.values(); + var6 = var36.length; + + label133: + for(int var37 = 0; var37 < var6; ++var37) { + EnumCreatureType var38 = var36[var37]; + if((!var38.func_21103_d() || var2) && (var38.func_21103_d() || var1) && var0.countEntities(var38.getCreatureClass()) <= var38.getMaxNumberOfCreature() * eligibleChunksForSpawning.size() / 256) { + Iterator var39 = eligibleChunksForSpawning.iterator(); + + label130: + while(true) { + SpawnListEntry var15; + int var18; + int var19; + int var42; + do { + do { + ChunkCoordIntPair var10; + List var12; + do { + do { + if(!var39.hasNext()) { + continue label133; + } + + var10 = (ChunkCoordIntPair)var39.next(); + BiomeGenBase var11 = var0.getWorldChunkManager().func_4066_a(var10); + var12 = var11.getSpawnableList(var38); + } while(var12 == null); + } while(var12.isEmpty()); + + int var13 = 0; + + for(Iterator var14 = var12.iterator(); var14.hasNext(); var13 += var15.spawnRarityRate) { + var15 = (SpawnListEntry)var14.next(); + } + + int var40 = var0.rand.nextInt(var13); + var15 = (SpawnListEntry)var12.get(0); + Iterator var16 = var12.iterator(); + + while(var16.hasNext()) { + SpawnListEntry var17 = (SpawnListEntry)var16.next(); + var40 -= var17.spawnRarityRate; + if(var40 < 0) { + var15 = var17; + break; + } + } + + ChunkPosition var41 = getRandomSpawningPointInChunk(var0, var10.chunkXPos * 16, var10.chunkZPos * 16); + var42 = var41.x; + var18 = var41.y; + var19 = var41.z; + } while(var0.isBlockNormalCube(var42, var18, var19)); + } while(var0.getBlockMaterial(var42, var18, var19) != var38.getCreatureMaterial()); + + int var20 = 0; + + for(int var21 = 0; var21 < 3; ++var21) { + int var22 = var42; + int var23 = var18; + int var24 = var19; + byte var25 = 6; + + for(int var26 = 0; var26 < 4; ++var26) { + var22 += var0.rand.nextInt(var25) - var0.rand.nextInt(var25); + var23 += var0.rand.nextInt(1) - var0.rand.nextInt(1); + var24 += var0.rand.nextInt(var25) - var0.rand.nextInt(var25); + if(func_21167_a(var38, var0, var22, var23, var24)) { + float var27 = (float)var22 + 0.5F; + float var28 = (float)var23; + float var29 = (float)var24 + 0.5F; + if(var0.getClosestPlayer((double)var27, (double)var28, (double)var29, 24.0D) == null) { + float var30 = var27 - (float)var35.posX; + float var31 = var28 - (float)var35.posY; + float var32 = var29 - (float)var35.posZ; + float var33 = var30 * var30 + var31 * var31 + var32 * var32; + if(var33 >= 576.0F) { + EntityLiving var43; + try { + var43 = (EntityLiving)var15.entityClass.getConstructor(new Class[]{World.class}).newInstance(new Object[]{var0}); + } catch (Exception var34) { + var34.printStackTrace(); + return var3; + } + + var43.setLocationAndAngles((double)var27, (double)var28, (double)var29, var0.rand.nextFloat() * 360.0F, 0.0F); + if(var43.getCanSpawnHere()) { + ++var20; + var0.entityJoinedWorld(var43); + func_21166_a(var43, var0, var27, var28, var29); + if(var20 >= var43.getMaxSpawnedInChunk()) { + continue label130; + } + } + + var3 += var20; + } + } + } + } + } + } + } + } + + return var3; + } + } + + private static boolean func_21167_a(EnumCreatureType var0, World var1, int var2, int var3, int var4) { + return var0.getCreatureMaterial() == Material.water ? var1.getBlockMaterial(var2, var3, var4).getIsLiquid() && !var1.isBlockNormalCube(var2, var3 + 1, var4) : var1.isBlockNormalCube(var2, var3 - 1, var4) && !var1.isBlockNormalCube(var2, var3, var4) && !var1.getBlockMaterial(var2, var3, var4).getIsLiquid() && !var1.isBlockNormalCube(var2, var3 + 1, var4); + } + + private static void func_21166_a(EntityLiving var0, World var1, float var2, float var3, float var4) { + if(var0 instanceof EntitySpider && var1.rand.nextInt(100) == 0) { + EntitySkeleton var5 = new EntitySkeleton(var1); + var5.setLocationAndAngles((double)var2, (double)var3, (double)var4, var0.rotationYaw, 0.0F); + var1.entityJoinedWorld(var5); + var5.mountEntity(var0); + } else if(var0 instanceof EntitySheep) { + ((EntitySheep)var0).setFleeceColor(EntitySheep.func_21066_a(var1.rand)); + } + + } + + public static boolean performSleepSpawning(World var0, List var1) { + boolean var2 = false; + Pathfinder var3 = new Pathfinder(var0); + Iterator var4 = var1.iterator(); + + while(true) { + EntityPlayer var5; + Class[] var6; + do { + do { + if(!var4.hasNext()) { + return var2; + } + + var5 = (EntityPlayer)var4.next(); + var6 = field_22213_a; + } while(var6 == null); + } while(var6.length == 0); + + boolean var7 = false; + + for(int var8 = 0; var8 < 20 && !var7; ++var8) { + int var9 = MathHelper.floor_double(var5.posX) + var0.rand.nextInt(32) - var0.rand.nextInt(32); + int var10 = MathHelper.floor_double(var5.posZ) + var0.rand.nextInt(32) - var0.rand.nextInt(32); + int var11 = MathHelper.floor_double(var5.posY) + var0.rand.nextInt(16) - var0.rand.nextInt(16); + if(var11 < 1) { + var11 = 1; + } else if(var11 > 128) { + var11 = 128; + } + + int var12 = var0.rand.nextInt(var6.length); + + int var13; + for(var13 = var11; var13 > 2 && !var0.isBlockNormalCube(var9, var13 - 1, var10); --var13) { + } + + while(!func_21167_a(EnumCreatureType.monster, var0, var9, var13, var10) && var13 < var11 + 16 && var13 < 128) { + ++var13; + } + + if(var13 < var11 + 16 && var13 < 128) { + float var14 = (float)var9 + 0.5F; + float var15 = (float)var13; + float var16 = (float)var10 + 0.5F; + + EntityLiving var17; + try { + var17 = (EntityLiving)var6[var12].getConstructor(new Class[]{World.class}).newInstance(new Object[]{var0}); + } catch (Exception var21) { + var21.printStackTrace(); + return var2; + } + + var17.setLocationAndAngles((double)var14, (double)var15, (double)var16, var0.rand.nextFloat() * 360.0F, 0.0F); + if(var17.getCanSpawnHere()) { + PathEntity var18 = var3.createEntityPathTo(var17, var5, 32.0F); + if(var18 != null && var18.pathLength > 1) { + PathPoint var19 = var18.func_22211_c(); + if(Math.abs((double)var19.xCoord - var5.posX) < 1.5D && Math.abs((double)var19.zCoord - var5.posZ) < 1.5D && Math.abs((double)var19.yCoord - var5.posY) < 1.5D) { + ChunkCoordinates var20 = BlockBed.func_22021_g(var0, MathHelper.floor_double(var5.posX), MathHelper.floor_double(var5.posY), MathHelper.floor_double(var5.posZ), 1); + if(var20 == null) { + var20 = new ChunkCoordinates(var9, var13 + 1, var10); + } + + var17.setLocationAndAngles((double)((float)var20.posX + 0.5F), (double)var20.posY, (double)((float)var20.posZ + 0.5F), 0.0F, 0.0F); + var0.entityJoinedWorld(var17); + func_21166_a(var17, var0, (float)var20.posX + 0.5F, (float)var20.posY, (float)var20.posZ + 0.5F); + var5.wakeUpPlayer(true, false, false); + var17.playLivingSound(); + var2 = true; + var7 = true; + } + } + } + } + } + } + } +} diff --git a/src/net/minecraft/src/StatBase.java b/src/net/minecraft/src/StatBase.java new file mode 100644 index 0000000..699b97f --- /dev/null +++ b/src/net/minecraft/src/StatBase.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.Locale; + +public class StatBase { + public final int statId; + public final String statName; + public boolean field_27058_g; + public String field_27057_h; + private final IStatType field_25065_a; + private static NumberFormat field_25066_b = NumberFormat.getIntegerInstance(Locale.US); + public static IStatType field_27056_i = new StatTypeSimple(); + private static DecimalFormat field_25068_c = new DecimalFormat("########0.00"); + public static IStatType field_27055_j = new StatTypeTime(); + public static IStatType field_27054_k = new StatTypeDistance(); + + public StatBase(int var1, String var2, IStatType var3) { + this.field_27058_g = false; + this.statId = var1; + this.statName = var2; + this.field_25065_a = var3; + } + + public StatBase(int var1, String var2) { + this(var1, var2, field_27056_i); + } + + public StatBase func_27052_e() { + this.field_27058_g = true; + return this; + } + + public StatBase func_27053_d() { + if(StatList.field_25104_C.containsKey(Integer.valueOf(this.statId))) { + throw new RuntimeException("Duplicate stat id: \"" + ((StatBase)StatList.field_25104_C.get(Integer.valueOf(this.statId))).statName + "\" and \"" + this.statName + "\" at id " + this.statId); + } else { + StatList.field_25123_a.add(this); + StatList.field_25104_C.put(Integer.valueOf(this.statId), this); + this.field_27057_h = AchievementMap.func_25132_a(this.statId); + return this; + } + } + + public String toString() { + return this.statName; + } +} diff --git a/src/net/minecraft/src/StatBasic.java b/src/net/minecraft/src/StatBasic.java new file mode 100644 index 0000000..043862b --- /dev/null +++ b/src/net/minecraft/src/StatBasic.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class StatBasic extends StatBase { + public StatBasic(int var1, String var2, IStatType var3) { + super(var1, var2, var3); + } + + public StatBasic(int var1, String var2) { + super(var1, var2); + } + + public StatBase func_27053_d() { + super.func_27053_d(); + StatList.field_25122_b.add(this); + return this; + } +} diff --git a/src/net/minecraft/src/StatCollector.java b/src/net/minecraft/src/StatCollector.java new file mode 100644 index 0000000..21d20a7 --- /dev/null +++ b/src/net/minecraft/src/StatCollector.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class StatCollector { + private static StringTranslate localizedName = StringTranslate.getInstance(); + + public static String translateToLocal(String var0) { + return localizedName.translateKey(var0); + } + + public static String translateToLocalFormatted(String var0, Object... var1) { + return localizedName.translateKeyFormat(var0, var1); + } +} diff --git a/src/net/minecraft/src/StatCrafting.java b/src/net/minecraft/src/StatCrafting.java new file mode 100644 index 0000000..8b2f4f8 --- /dev/null +++ b/src/net/minecraft/src/StatCrafting.java @@ -0,0 +1,10 @@ +package net.minecraft.src; + +public class StatCrafting extends StatBase { + private final int field_27990_a; + + public StatCrafting(int var1, String var2, int var3) { + super(var1, var2); + this.field_27990_a = var3; + } +} diff --git a/src/net/minecraft/src/StatList.java b/src/net/minecraft/src/StatList.java new file mode 100644 index 0000000..cae94bb --- /dev/null +++ b/src/net/minecraft/src/StatList.java @@ -0,0 +1,175 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class StatList { + protected static Map field_25104_C = new HashMap(); + public static List field_25123_a = new ArrayList(); + public static List field_25122_b = new ArrayList(); + public static List field_25121_c = new ArrayList(); + public static List field_25120_d = new ArrayList(); + public static StatBase field_25119_e = (new StatBasic(1000, StatCollector.translateToLocal("stat.startGame"))).func_27052_e().func_27053_d(); + public static StatBase field_25118_f = (new StatBasic(1001, StatCollector.translateToLocal("stat.createWorld"))).func_27052_e().func_27053_d(); + public static StatBase field_25117_g = (new StatBasic(1002, StatCollector.translateToLocal("stat.loadWorld"))).func_27052_e().func_27053_d(); + public static StatBase field_25116_h = (new StatBasic(1003, StatCollector.translateToLocal("stat.joinMultiplayer"))).func_27052_e().func_27053_d(); + public static StatBase field_25115_i = (new StatBasic(1004, StatCollector.translateToLocal("stat.leaveGame"))).func_27052_e().func_27053_d(); + public static StatBase field_25114_j = (new StatBasic(1100, StatCollector.translateToLocal("stat.playOneMinute"), StatBase.field_27055_j)).func_27052_e().func_27053_d(); + public static StatBase field_25113_k = (new StatBasic(2000, StatCollector.translateToLocal("stat.walkOneCm"), StatBase.field_27054_k)).func_27052_e().func_27053_d(); + public static StatBase field_25112_l = (new StatBasic(2001, StatCollector.translateToLocal("stat.swimOneCm"), StatBase.field_27054_k)).func_27052_e().func_27053_d(); + public static StatBase field_25111_m = (new StatBasic(2002, StatCollector.translateToLocal("stat.fallOneCm"), StatBase.field_27054_k)).func_27052_e().func_27053_d(); + public static StatBase field_25110_n = (new StatBasic(2003, StatCollector.translateToLocal("stat.climbOneCm"), StatBase.field_27054_k)).func_27052_e().func_27053_d(); + public static StatBase field_25109_o = (new StatBasic(2004, StatCollector.translateToLocal("stat.flyOneCm"), StatBase.field_27054_k)).func_27052_e().func_27053_d(); + public static StatBase field_25108_p = (new StatBasic(2005, StatCollector.translateToLocal("stat.diveOneCm"), StatBase.field_27054_k)).func_27052_e().func_27053_d(); + public static StatBase field_27095_r = (new StatBasic(2006, StatCollector.translateToLocal("stat.minecartOneCm"), StatBase.field_27054_k)).func_27052_e().func_27053_d(); + public static StatBase field_27094_s = (new StatBasic(2007, StatCollector.translateToLocal("stat.boatOneCm"), StatBase.field_27054_k)).func_27052_e().func_27053_d(); + public static StatBase field_27093_t = (new StatBasic(2008, StatCollector.translateToLocal("stat.pigOneCm"), StatBase.field_27054_k)).func_27052_e().func_27053_d(); + public static StatBase field_25106_q = (new StatBasic(2010, StatCollector.translateToLocal("stat.jump"))).func_27052_e().func_27053_d(); + public static StatBase field_25103_r = (new StatBasic(2011, StatCollector.translateToLocal("stat.drop"))).func_27052_e().func_27053_d(); + public static StatBase field_25102_s = (new StatBasic(2020, StatCollector.translateToLocal("stat.damageDealt"))).func_27053_d(); + public static StatBase field_25100_t = (new StatBasic(2021, StatCollector.translateToLocal("stat.damageTaken"))).func_27053_d(); + public static StatBase field_25098_u = (new StatBasic(2022, StatCollector.translateToLocal("stat.deaths"))).func_27053_d(); + public static StatBase field_25097_v = (new StatBasic(2023, StatCollector.translateToLocal("stat.mobKills"))).func_27053_d(); + public static StatBase field_25096_w = (new StatBasic(2024, StatCollector.translateToLocal("stat.playerKills"))).func_27053_d(); + public static StatBase fishCaughtStat = (new StatBasic(2025, StatCollector.translateToLocal("stat.fishCaught"))).func_27053_d(); + public static StatBase[] mineBlockStatArray = func_25089_a("stat.mineBlock", 16777216); + public static StatBase[] field_25093_z; + public static StatBase[] field_25107_A; + public static StatBase[] field_25105_B; + private static boolean field_25101_D; + private static boolean field_25099_E; + + public static void func_27092_a() { + } + + public static void func_25088_a() { + field_25107_A = func_25090_a(field_25107_A, "stat.useItem", 16908288, 0, Block.blocksList.length); + field_25105_B = func_25087_b(field_25105_B, "stat.breakItem", 16973824, 0, Block.blocksList.length); + field_25101_D = true; + func_25091_c(); + } + + public static void func_25086_b() { + field_25107_A = func_25090_a(field_25107_A, "stat.useItem", 16908288, Block.blocksList.length, 32000); + field_25105_B = func_25087_b(field_25105_B, "stat.breakItem", 16973824, Block.blocksList.length, 32000); + field_25099_E = true; + func_25091_c(); + } + + public static void func_25091_c() { + if(field_25101_D && field_25099_E) { + HashSet var0 = new HashSet(); + Iterator var1 = CraftingManager.getInstance().getRecipeList().iterator(); + + while(var1.hasNext()) { + IRecipe var2 = (IRecipe)var1.next(); + var0.add(Integer.valueOf(var2.func_25077_b().itemID)); + } + + var1 = FurnaceRecipes.smelting().getSmeltingList().values().iterator(); + + while(var1.hasNext()) { + ItemStack var4 = (ItemStack)var1.next(); + var0.add(Integer.valueOf(var4.itemID)); + } + + field_25093_z = new StatBase[32000]; + var1 = var0.iterator(); + + while(var1.hasNext()) { + Integer var5 = (Integer)var1.next(); + if(Item.itemsList[var5.intValue()] != null) { + String var3 = StatCollector.translateToLocalFormatted("stat.craftItem", new Object[]{Item.itemsList[var5.intValue()].func_25006_i()}); + field_25093_z[var5.intValue()] = (new StatCrafting(16842752 + var5.intValue(), var3, var5.intValue())).func_27053_d(); + } + } + + replaceAllSimilarBlocks(field_25093_z); + } + } + + private static StatBase[] func_25089_a(String var0, int var1) { + StatBase[] var2 = new StatBase[256]; + + for(int var3 = 0; var3 < 256; ++var3) { + if(Block.blocksList[var3] != null && Block.blocksList[var3].getEnableStats()) { + String var4 = StatCollector.translateToLocalFormatted(var0, new Object[]{Block.blocksList[var3].getNameLocalizedForStats()}); + var2[var3] = (new StatCrafting(var1 + var3, var4, var3)).func_27053_d(); + field_25120_d.add((StatCrafting)var2[var3]); + } + } + + replaceAllSimilarBlocks(var2); + return var2; + } + + private static StatBase[] func_25090_a(StatBase[] var0, String var1, int var2, int var3, int var4) { + if(var0 == null) { + var0 = new StatBase[32000]; + } + + for(int var5 = var3; var5 < var4; ++var5) { + if(Item.itemsList[var5] != null) { + String var6 = StatCollector.translateToLocalFormatted(var1, new Object[]{Item.itemsList[var5].func_25006_i()}); + var0[var5] = (new StatCrafting(var2 + var5, var6, var5)).func_27053_d(); + if(var5 >= Block.blocksList.length) { + field_25121_c.add((StatCrafting)var0[var5]); + } + } + } + + replaceAllSimilarBlocks(var0); + return var0; + } + + private static StatBase[] func_25087_b(StatBase[] var0, String var1, int var2, int var3, int var4) { + if(var0 == null) { + var0 = new StatBase[32000]; + } + + for(int var5 = var3; var5 < var4; ++var5) { + if(Item.itemsList[var5] != null && Item.itemsList[var5].func_25005_e()) { + String var6 = StatCollector.translateToLocalFormatted(var1, new Object[]{Item.itemsList[var5].func_25006_i()}); + var0[var5] = (new StatCrafting(var2 + var5, var6, var5)).func_27053_d(); + } + } + + replaceAllSimilarBlocks(var0); + return var0; + } + + private static void replaceAllSimilarBlocks(StatBase[] var0) { + replaceSimilarBlocks(var0, Block.waterStill.blockID, Block.waterMoving.blockID); + replaceSimilarBlocks(var0, Block.lavaStill.blockID, Block.lavaStill.blockID); + replaceSimilarBlocks(var0, Block.pumpkinLantern.blockID, Block.pumpkin.blockID); + replaceSimilarBlocks(var0, Block.stoneOvenActive.blockID, Block.stoneOvenIdle.blockID); + replaceSimilarBlocks(var0, Block.oreRedstoneGlowing.blockID, Block.oreRedstone.blockID); + replaceSimilarBlocks(var0, Block.redstoneRepeaterActive.blockID, Block.redstoneRepeaterIdle.blockID); + replaceSimilarBlocks(var0, Block.torchRedstoneActive.blockID, Block.torchRedstoneIdle.blockID); + replaceSimilarBlocks(var0, Block.mushroomRed.blockID, Block.mushroomBrown.blockID); + replaceSimilarBlocks(var0, Block.stairDouble.blockID, Block.stairSingle.blockID); + replaceSimilarBlocks(var0, Block.grass.blockID, Block.dirt.blockID); + replaceSimilarBlocks(var0, Block.tilledField.blockID, Block.dirt.blockID); + } + + private static void replaceSimilarBlocks(StatBase[] var0, int var1, int var2) { + if(var0[var1] != null && var0[var2] == null) { + var0[var2] = var0[var1]; + } else { + field_25123_a.remove(var0[var1]); + field_25120_d.remove(var0[var1]); + field_25122_b.remove(var0[var1]); + var0[var1] = var0[var2]; + } + } + + static { + AchievementList.func_27097_a(); + field_25101_D = false; + field_25099_E = false; + } +} diff --git a/src/net/minecraft/src/StatTypeDistance.java b/src/net/minecraft/src/StatTypeDistance.java new file mode 100644 index 0000000..358662f --- /dev/null +++ b/src/net/minecraft/src/StatTypeDistance.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +final class StatTypeDistance implements IStatType { +} diff --git a/src/net/minecraft/src/StatTypeSimple.java b/src/net/minecraft/src/StatTypeSimple.java new file mode 100644 index 0000000..af05cbe --- /dev/null +++ b/src/net/minecraft/src/StatTypeSimple.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +final class StatTypeSimple implements IStatType { +} diff --git a/src/net/minecraft/src/StatTypeTime.java b/src/net/minecraft/src/StatTypeTime.java new file mode 100644 index 0000000..7d3c315 --- /dev/null +++ b/src/net/minecraft/src/StatTypeTime.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +final class StatTypeTime implements IStatType { +} diff --git a/src/net/minecraft/src/StepSound.java b/src/net/minecraft/src/StepSound.java new file mode 100644 index 0000000..b44aec4 --- /dev/null +++ b/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 getVolume() { + return this.field_1028_b; + } + + public float getPitch() { + return this.field_1030_c; + } + + public String func_737_c() { + return "step." + this.field_1029_a; + } +} diff --git a/src/net/minecraft/src/StepSoundSand.java b/src/net/minecraft/src/StepSoundSand.java new file mode 100644 index 0000000..0db0510 --- /dev/null +++ b/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/src/net/minecraft/src/StepSoundStone.java b/src/net/minecraft/src/StepSoundStone.java new file mode 100644 index 0000000..6dbdf6c --- /dev/null +++ b/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/src/net/minecraft/src/StringTranslate.java b/src/net/minecraft/src/StringTranslate.java new file mode 100644 index 0000000..ca361c5 --- /dev/null +++ b/src/net/minecraft/src/StringTranslate.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.util.Properties; + +public class StringTranslate { + private static StringTranslate instance = new StringTranslate(); + private Properties translateTable = new Properties(); + + private StringTranslate() { + try { + this.translateTable.load(StringTranslate.class.getResourceAsStream("/lang/en_US.lang")); + this.translateTable.load(StringTranslate.class.getResourceAsStream("/lang/stats_US.lang")); + } catch (IOException var2) { + var2.printStackTrace(); + } + + } + + public static StringTranslate getInstance() { + return instance; + } + + public String translateKey(String var1) { + return this.translateTable.getProperty(var1, var1); + } + + public String translateKeyFormat(String var1, Object... var2) { + String var3 = this.translateTable.getProperty(var1, var1); + return String.format(var3, var2); + } +} diff --git a/src/net/minecraft/src/Teleporter.java b/src/net/minecraft/src/Teleporter.java new file mode 100644 index 0000000..e69b3d3 --- /dev/null +++ b/src/net/minecraft/src/Teleporter.java @@ -0,0 +1,261 @@ +package net.minecraft.src; + +import java.util.Random; + +public class Teleporter { + private Random field_28117_a = new Random(); + + public void setExitLocation(World var1, Entity var2) { + if(!this.findExitLocation(var1, var2)) { + this.createExitLocation(var1, var2); + this.findExitLocation(var1, var2); + } + } + + public boolean findExitLocation(World var1, Entity var2) { + short var3 = 128; + double var4 = -1.0D; + int var6 = 0; + int var7 = 0; + int var8 = 0; + int var9 = MathHelper.floor_double(var2.posX); + int var10 = MathHelper.floor_double(var2.posZ); + + double var18; + for(int var11 = var9 - var3; var11 <= var9 + var3; ++var11) { + double var12 = (double)var11 + 0.5D - var2.posX; + + for(int var14 = var10 - var3; var14 <= var10 + var3; ++var14) { + double var15 = (double)var14 + 0.5D - var2.posZ; + + for(int var17 = 127; var17 >= 0; --var17) { + if(var1.getBlockId(var11, var17, var14) == Block.portal.blockID) { + while(var1.getBlockId(var11, var17 - 1, var14) == Block.portal.blockID) { + --var17; + } + + var18 = (double)var17 + 0.5D - var2.posY; + double var20 = var12 * var12 + var18 * var18 + var15 * var15; + if(var4 < 0.0D || var20 < var4) { + var4 = var20; + var6 = var11; + var7 = var17; + var8 = var14; + } + } + } + } + } + + if(var4 >= 0.0D) { + double var22 = (double)var6 + 0.5D; + double var16 = (double)var7 + 0.5D; + var18 = (double)var8 + 0.5D; + if(var1.getBlockId(var6 - 1, var7, var8) == Block.portal.blockID) { + var22 -= 0.5D; + } + + if(var1.getBlockId(var6 + 1, var7, var8) == Block.portal.blockID) { + var22 += 0.5D; + } + + if(var1.getBlockId(var6, var7, var8 - 1) == Block.portal.blockID) { + var18 -= 0.5D; + } + + if(var1.getBlockId(var6, var7, var8 + 1) == Block.portal.blockID) { + var18 += 0.5D; + } + + var2.setLocationAndAngles(var22, var16, var18, var2.rotationYaw, 0.0F); + var2.motionX = var2.motionY = var2.motionZ = 0.0D; + return true; + } else { + return false; + } + } + + public boolean createExitLocation(World var1, Entity var2) { + byte var3 = 16; + double var4 = -1.0D; + int var6 = MathHelper.floor_double(var2.posX); + int var7 = MathHelper.floor_double(var2.posY); + int var8 = MathHelper.floor_double(var2.posZ); + int var9 = var6; + int var10 = var7; + int var11 = var8; + int var12 = 0; + int var13 = this.field_28117_a.nextInt(4); + + int var14; + double var15; + int var17; + double var18; + int var20; + int var21; + int var22; + int var23; + int var24; + int var25; + int var26; + int var27; + int var28; + double var32; + double var33; + for(var14 = var6 - var3; var14 <= var6 + var3; ++var14) { + var15 = (double)var14 + 0.5D - var2.posX; + + for(var17 = var8 - var3; var17 <= var8 + var3; ++var17) { + var18 = (double)var17 + 0.5D - var2.posZ; + + label293: + for(var20 = 127; var20 >= 0; --var20) { + if(var1.isAirBlock(var14, var20, var17)) { + while(var20 > 0 && var1.isAirBlock(var14, var20 - 1, var17)) { + --var20; + } + + for(var21 = var13; var21 < var13 + 4; ++var21) { + var22 = var21 % 2; + var23 = 1 - var22; + if(var21 % 4 >= 2) { + var22 = -var22; + var23 = -var23; + } + + for(var24 = 0; var24 < 3; ++var24) { + for(var25 = 0; var25 < 4; ++var25) { + for(var26 = -1; var26 < 4; ++var26) { + var27 = var14 + (var25 - 1) * var22 + var24 * var23; + var28 = var20 + var26; + int var29 = var17 + (var25 - 1) * var23 - var24 * var22; + if(var26 < 0 && !var1.getBlockMaterial(var27, var28, var29).isSolid() || var26 >= 0 && !var1.isAirBlock(var27, var28, var29)) { + continue label293; + } + } + } + } + + var32 = (double)var20 + 0.5D - var2.posY; + var33 = var15 * var15 + var32 * var32 + var18 * var18; + if(var4 < 0.0D || var33 < var4) { + var4 = var33; + var9 = var14; + var10 = var20; + var11 = var17; + var12 = var21 % 4; + } + } + } + } + } + } + + if(var4 < 0.0D) { + for(var14 = var6 - var3; var14 <= var6 + var3; ++var14) { + var15 = (double)var14 + 0.5D - var2.posX; + + for(var17 = var8 - var3; var17 <= var8 + var3; ++var17) { + var18 = (double)var17 + 0.5D - var2.posZ; + + label231: + for(var20 = 127; var20 >= 0; --var20) { + if(var1.isAirBlock(var14, var20, var17)) { + while(var1.isAirBlock(var14, var20 - 1, var17)) { + --var20; + } + + for(var21 = var13; var21 < var13 + 2; ++var21) { + var22 = var21 % 2; + var23 = 1 - var22; + + for(var24 = 0; var24 < 4; ++var24) { + for(var25 = -1; var25 < 4; ++var25) { + var26 = var14 + (var24 - 1) * var22; + var27 = var20 + var25; + var28 = var17 + (var24 - 1) * var23; + if(var25 < 0 && !var1.getBlockMaterial(var26, var27, var28).isSolid() || var25 >= 0 && !var1.isAirBlock(var26, var27, var28)) { + continue label231; + } + } + } + + var32 = (double)var20 + 0.5D - var2.posY; + var33 = var15 * var15 + var32 * var32 + var18 * var18; + if(var4 < 0.0D || var33 < var4) { + var4 = var33; + var9 = var14; + var10 = var20; + var11 = var17; + var12 = var21 % 2; + } + } + } + } + } + } + } + + int var30 = var9; + int var16 = var10; + var17 = var11; + int var31 = var12 % 2; + int var19 = 1 - var31; + if(var12 % 4 >= 2) { + var31 = -var31; + var19 = -var19; + } + + boolean var34; + if(var4 < 0.0D) { + if(var10 < 70) { + var10 = 70; + } + + if(var10 > 118) { + var10 = 118; + } + + var16 = var10; + + for(var20 = -1; var20 <= 1; ++var20) { + for(var21 = 1; var21 < 3; ++var21) { + for(var22 = -1; var22 < 3; ++var22) { + var23 = var30 + (var21 - 1) * var31 + var20 * var19; + var24 = var16 + var22; + var25 = var17 + (var21 - 1) * var19 - var20 * var31; + var34 = var22 < 0; + var1.setBlockWithNotify(var23, var24, var25, var34 ? Block.obsidian.blockID : 0); + } + } + } + } + + for(var20 = 0; var20 < 4; ++var20) { + var1.editingBlocks = true; + + for(var21 = 0; var21 < 4; ++var21) { + for(var22 = -1; var22 < 4; ++var22) { + var23 = var30 + (var21 - 1) * var31; + var24 = var16 + var22; + var25 = var17 + (var21 - 1) * var19; + var34 = var21 == 0 || var21 == 3 || var22 == -1 || var22 == 3; + var1.setBlockWithNotify(var23, var24, var25, var34 ? Block.obsidian.blockID : Block.portal.blockID); + } + } + + var1.editingBlocks = false; + + for(var21 = 0; var21 < 4; ++var21) { + for(var22 = -1; var22 < 4; ++var22) { + var23 = var30 + (var21 - 1) * var31; + var24 = var16 + var22; + var25 = var17 + (var21 - 1) * var19; + var1.notifyBlocksOfNeighborChange(var23, var24, var25, var1.getBlockId(var23, var24, var25)); + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ThreadCommandReader.java b/src/net/minecraft/src/ThreadCommandReader.java new file mode 100644 index 0000000..2d58ef2 --- /dev/null +++ b/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.serverStopped && MinecraftServer.isServerRunning(this.mcServer)) { + var2 = var1.readLine(); + if(var2 == null) { + break; + } + + this.mcServer.addCommand(var2, this.mcServer); + } + } catch (IOException var4) { + var4.printStackTrace(); + } + + } +} diff --git a/src/net/minecraft/src/ThreadLoginVerifier.java b/src/net/minecraft/src/ThreadLoginVerifier.java new file mode 100644 index 0000000..e11ebeb --- /dev/null +++ b/src/net/minecraft/src/ThreadLoginVerifier.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLEncoder; + +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=" + URLEncoder.encode(this.loginPacket.username, "UTF-8") + "&serverId=" + URLEncoder.encode(var1, "UTF-8")); + BufferedReader var3 = new BufferedReader(new InputStreamReader(var2.openStream())); + String var4 = var3.readLine(); + var3.close(); + if(var4.equals("YES")) { + NetLoginHandler.setLoginPacket(this.loginHandler, this.loginPacket); + } else { + this.loginHandler.kickUser("Failed to verify username!"); + } + } catch (Exception var5) { + this.loginHandler.kickUser("Failed to verify username! [internal error " + var5 + "]"); + var5.printStackTrace(); + } + + } +} diff --git a/src/net/minecraft/src/ThreadMonitorConnection.java b/src/net/minecraft/src/ThreadMonitorConnection.java new file mode 100644 index 0000000..769a274 --- /dev/null +++ b/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("disconnect.closed", new Object[0]); + } + } catch (Exception var2) { + var2.printStackTrace(); + } + + } +} diff --git a/src/net/minecraft/src/ThreadServerApplication.java b/src/net/minecraft/src/ThreadServerApplication.java new file mode 100644 index 0000000..70d4d9c --- /dev/null +++ b/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/src/net/minecraft/src/ThreadSleepForever.java b/src/net/minecraft/src/ThreadSleepForever.java new file mode 100644 index 0000000..4c5b288 --- /dev/null +++ b/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/src/net/minecraft/src/TileEntity.java b/src/net/minecraft/src/TileEntity.java new file mode 100644 index 0000000..bb6625c --- /dev/null +++ b/src/net/minecraft/src/TileEntity.java @@ -0,0 +1,103 @@ +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; + protected boolean tileEntityInvalid; + + private static void addMapping(Class var0, String var1) { + if(classToNameMap.containsKey(var1)) { + throw new IllegalArgumentException("Duplicate id: " + var1); + } else { + nameToClassMap.put(var1, var0); + classToNameMap.put(var0, var1); + } + } + + public void readFromNBT(NBTTagCompound var1) { + this.xCoord = var1.getInteger("x"); + this.yCoord = var1.getInteger("y"); + this.zCoord = var1.getInteger("z"); + } + + public void writeToNBT(NBTTagCompound var1) { + String var2 = (String)classToNameMap.get(this.getClass()); + if(var2 == null) { + throw new RuntimeException(this.getClass() + " is missing a mapping! This is a bug!"); + } else { + var1.setString("id", var2); + var1.setInteger("x", this.xCoord); + var1.setInteger("y", this.yCoord); + var1.setInteger("z", this.zCoord); + } + } + + public void updateEntity() { + } + + public static TileEntity createAndLoadEntity(NBTTagCompound var0) { + TileEntity var1 = null; + + try { + Class var2 = (Class)nameToClassMap.get(var0.getString("id")); + if(var2 != null) { + var1 = (TileEntity)var2.newInstance(); + } + } catch (Exception var3) { + var3.printStackTrace(); + } + + if(var1 != null) { + var1.readFromNBT(var0); + } else { + System.out.println("Skipping TileEntity with id " + var0.getString("id")); + } + + return var1; + } + + public int func_31005_e() { + return this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord); + } + + public void onInventoryChanged() { + if(this.worldObj != null) { + this.worldObj.updateTileEntityChunkAndDoNothing(this.xCoord, this.yCoord, this.zCoord, this); + } + + } + + public Packet getDescriptionPacket() { + return null; + } + + public boolean isInvalid() { + return this.tileEntityInvalid; + } + + public void invalidate() { + this.tileEntityInvalid = true; + } + + public void validate() { + this.tileEntityInvalid = false; + } + + static { + addMapping(TileEntityFurnace.class, "Furnace"); + addMapping(TileEntityChest.class, "Chest"); + addMapping(TileEntityRecordPlayer.class, "RecordPlayer"); + addMapping(TileEntityDispenser.class, "Trap"); + addMapping(TileEntitySign.class, "Sign"); + addMapping(TileEntityMobSpawner.class, "MobSpawner"); + addMapping(TileEntityNote.class, "Music"); + addMapping(TileEntityPiston.class, "Piston"); + } +} diff --git a/src/net/minecraft/src/TileEntityChest.java b/src/net/minecraft/src/TileEntityChest.java new file mode 100644 index 0000000..a3d16a5 --- /dev/null +++ b/src/net/minecraft/src/TileEntityChest.java @@ -0,0 +1,87 @@ +package net.minecraft.src; + +public class TileEntityChest extends TileEntity implements IInventory { + private ItemStack[] chestContents = new ItemStack[36]; + + public int getSizeInventory() { + return 27; + } + + public ItemStack getStackInSlot(int var1) { + return this.chestContents[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.chestContents[var1] != null) { + ItemStack var3; + if(this.chestContents[var1].stackSize <= var2) { + var3 = this.chestContents[var1]; + this.chestContents[var1] = null; + this.onInventoryChanged(); + return var3; + } else { + var3 = this.chestContents[var1].splitStack(var2); + if(this.chestContents[var1].stackSize == 0) { + this.chestContents[var1] = null; + } + + this.onInventoryChanged(); + return var3; + } + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.chestContents[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + this.onInventoryChanged(); + } + + public String getInvName() { + return "Chest"; + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.chestContents = new ItemStack[this.getSizeInventory()]; + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + int var5 = var4.getByte("Slot") & 255; + if(var5 >= 0 && var5 < this.chestContents.length) { + this.chestContents[var5] = new ItemStack(var4); + } + } + + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.chestContents.length; ++var3) { + if(this.chestContents[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.chestContents[var3].writeToNBT(var4); + var2.setTag(var4); + } + } + + var1.setTag("Items", var2); + } + + public int getInventoryStackLimit() { + return 64; + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } +} diff --git a/src/net/minecraft/src/TileEntityDispenser.java b/src/net/minecraft/src/TileEntityDispenser.java new file mode 100644 index 0000000..b2cba91 --- /dev/null +++ b/src/net/minecraft/src/TileEntityDispenser.java @@ -0,0 +1,107 @@ +package net.minecraft.src; + +import java.util.Random; + +public class TileEntityDispenser extends TileEntity implements IInventory { + private ItemStack[] dispenserContents = new ItemStack[9]; + private Random dispenserRandom = new Random(); + + public int getSizeInventory() { + return 9; + } + + public ItemStack getStackInSlot(int var1) { + return this.dispenserContents[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.dispenserContents[var1] != null) { + ItemStack var3; + if(this.dispenserContents[var1].stackSize <= var2) { + var3 = this.dispenserContents[var1]; + this.dispenserContents[var1] = null; + this.onInventoryChanged(); + return var3; + } else { + var3 = this.dispenserContents[var1].splitStack(var2); + if(this.dispenserContents[var1].stackSize == 0) { + this.dispenserContents[var1] = null; + } + + this.onInventoryChanged(); + return var3; + } + } else { + return null; + } + } + + public ItemStack getRandomStackFromInventory() { + int var1 = -1; + int var2 = 1; + + for(int var3 = 0; var3 < this.dispenserContents.length; ++var3) { + if(this.dispenserContents[var3] != null && this.dispenserRandom.nextInt(var2++) == 0) { + var1 = var3; + } + } + + if(var1 >= 0) { + return this.decrStackSize(var1, 1); + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.dispenserContents[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + this.onInventoryChanged(); + } + + public String getInvName() { + return "Trap"; + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.dispenserContents = new ItemStack[this.getSizeInventory()]; + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + int var5 = var4.getByte("Slot") & 255; + if(var5 >= 0 && var5 < this.dispenserContents.length) { + this.dispenserContents[var5] = new ItemStack(var4); + } + } + + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.dispenserContents.length; ++var3) { + if(this.dispenserContents[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.dispenserContents[var3].writeToNBT(var4); + var2.setTag(var4); + } + } + + var1.setTag("Items", var2); + } + + public int getInventoryStackLimit() { + return 64; + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } +} diff --git a/src/net/minecraft/src/TileEntityFurnace.java b/src/net/minecraft/src/TileEntityFurnace.java new file mode 100644 index 0000000..916bd04 --- /dev/null +++ b/src/net/minecraft/src/TileEntityFurnace.java @@ -0,0 +1,175 @@ +package net.minecraft.src; + +public class TileEntityFurnace extends TileEntity implements IInventory { + private ItemStack[] furnaceItemStacks = new ItemStack[3]; + public int furnaceBurnTime = 0; + public int currentItemBurnTime = 0; + public int furnaceCookTime = 0; + + public int getSizeInventory() { + return this.furnaceItemStacks.length; + } + + public ItemStack getStackInSlot(int var1) { + return this.furnaceItemStacks[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.furnaceItemStacks[var1] != null) { + ItemStack var3; + if(this.furnaceItemStacks[var1].stackSize <= var2) { + var3 = this.furnaceItemStacks[var1]; + this.furnaceItemStacks[var1] = null; + return var3; + } else { + var3 = this.furnaceItemStacks[var1].splitStack(var2); + if(this.furnaceItemStacks[var1].stackSize == 0) { + this.furnaceItemStacks[var1] = null; + } + + return var3; + } + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.furnaceItemStacks[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + } + + public String getInvName() { + return "Furnace"; + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.furnaceItemStacks = new ItemStack[this.getSizeInventory()]; + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if(var5 >= 0 && var5 < this.furnaceItemStacks.length) { + this.furnaceItemStacks[var5] = new ItemStack(var4); + } + } + + this.furnaceBurnTime = var1.getShort("BurnTime"); + this.furnaceCookTime = var1.getShort("CookTime"); + this.currentItemBurnTime = this.getItemBurnTime(this.furnaceItemStacks[1]); + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setShort("BurnTime", (short)this.furnaceBurnTime); + var1.setShort("CookTime", (short)this.furnaceCookTime); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.furnaceItemStacks.length; ++var3) { + if(this.furnaceItemStacks[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.furnaceItemStacks[var3].writeToNBT(var4); + var2.setTag(var4); + } + } + + var1.setTag("Items", var2); + } + + public int getInventoryStackLimit() { + return 64; + } + + public boolean isBurning() { + return this.furnaceBurnTime > 0; + } + + public void updateEntity() { + boolean var1 = this.furnaceBurnTime > 0; + boolean var2 = false; + if(this.furnaceBurnTime > 0) { + --this.furnaceBurnTime; + } + + if(!this.worldObj.singleplayerWorld) { + if(this.furnaceBurnTime == 0 && this.canSmelt()) { + this.currentItemBurnTime = this.furnaceBurnTime = this.getItemBurnTime(this.furnaceItemStacks[1]); + if(this.furnaceBurnTime > 0) { + var2 = true; + if(this.furnaceItemStacks[1] != null) { + --this.furnaceItemStacks[1].stackSize; + if(this.furnaceItemStacks[1].stackSize == 0) { + this.furnaceItemStacks[1] = null; + } + } + } + } + + if(this.isBurning() && this.canSmelt()) { + ++this.furnaceCookTime; + if(this.furnaceCookTime == 200) { + this.furnaceCookTime = 0; + this.smeltItem(); + var2 = true; + } + } else { + this.furnaceCookTime = 0; + } + + if(var1 != this.furnaceBurnTime > 0) { + var2 = true; + BlockFurnace.updateFurnaceBlockState(this.furnaceBurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); + } + } + + if(var2) { + this.onInventoryChanged(); + } + + } + + private boolean canSmelt() { + if(this.furnaceItemStacks[0] == null) { + return false; + } else { + ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0].getItem().shiftedIndex); + return var1 == null ? false : (this.furnaceItemStacks[2] == null ? true : (!this.furnaceItemStacks[2].isItemEqual(var1) ? false : (this.furnaceItemStacks[2].stackSize < this.getInventoryStackLimit() && this.furnaceItemStacks[2].stackSize < this.furnaceItemStacks[2].getMaxStackSize() ? true : this.furnaceItemStacks[2].stackSize < var1.getMaxStackSize()))); + } + } + + public void smeltItem() { + if(this.canSmelt()) { + ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0].getItem().shiftedIndex); + if(this.furnaceItemStacks[2] == null) { + this.furnaceItemStacks[2] = var1.copy(); + } else if(this.furnaceItemStacks[2].itemID == var1.itemID) { + ++this.furnaceItemStacks[2].stackSize; + } + + --this.furnaceItemStacks[0].stackSize; + if(this.furnaceItemStacks[0].stackSize <= 0) { + this.furnaceItemStacks[0] = null; + } + + } + } + + private int getItemBurnTime(ItemStack var1) { + if(var1 == null) { + return 0; + } else { + int var2 = var1.getItem().shiftedIndex; + return var2 < 256 && Block.blocksList[var2].blockMaterial == Material.wood ? 300 : (var2 == Item.stick.shiftedIndex ? 100 : (var2 == Item.coal.shiftedIndex ? 1600 : (var2 == Item.bucketLava.shiftedIndex ? 20000 : (var2 == Block.sapling.blockID ? 100 : 0)))); + } + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } +} diff --git a/src/net/minecraft/src/TileEntityMobSpawner.java b/src/net/minecraft/src/TileEntityMobSpawner.java new file mode 100644 index 0000000..b7af306 --- /dev/null +++ b/src/net/minecraft/src/TileEntityMobSpawner.java @@ -0,0 +1,100 @@ +package net.minecraft.src; + +public class TileEntityMobSpawner extends TileEntity { + public int delay = -1; + private String mobID = "Pig"; + public double yaw; + public double yaw2 = 0.0D; + + public TileEntityMobSpawner() { + this.delay = 20; + } + + public void setMobID(String var1) { + this.mobID = var1; + } + + public boolean anyPlayerInRange() { + 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.yaw2 = this.yaw; + if(this.anyPlayerInRange()) { + double var1 = (double)((float)this.xCoord + this.worldObj.rand.nextFloat()); + double var3 = (double)((float)this.yCoord + this.worldObj.rand.nextFloat()); + double var5 = (double)((float)this.zCoord + this.worldObj.rand.nextFloat()); + this.worldObj.spawnParticle("smoke", var1, var3, var5, 0.0D, 0.0D, 0.0D); + this.worldObj.spawnParticle("flame", var1, var3, var5, 0.0D, 0.0D, 0.0D); + + for(this.yaw += (double)(1000.0F / ((float)this.delay + 200.0F)); this.yaw > 360.0D; this.yaw2 -= 360.0D) { + this.yaw -= 360.0D; + } + + if(!this.worldObj.singleplayerWorld) { + if(this.delay == -1) { + this.updateDelay(); + } + + if(this.delay > 0) { + --this.delay; + return; + } + + byte var7 = 4; + + for(int var8 = 0; var8 < var7; ++var8) { + EntityLiving var9 = (EntityLiving)((EntityLiving)EntityList.createEntityInWorld(this.mobID, this.worldObj)); + if(var9 == null) { + return; + } + + int var10 = this.worldObj.getEntitiesWithinAABB(var9.getClass(), AxisAlignedBB.getBoundingBoxFromPool((double)this.xCoord, (double)this.yCoord, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 1), (double)(this.zCoord + 1)).expand(8.0D, 4.0D, 8.0D)).size(); + if(var10 >= 6) { + this.updateDelay(); + return; + } + + if(var9 != null) { + double var11 = (double)this.xCoord + (this.worldObj.rand.nextDouble() - this.worldObj.rand.nextDouble()) * 4.0D; + double var13 = (double)(this.yCoord + this.worldObj.rand.nextInt(3) - 1); + double var15 = (double)this.zCoord + (this.worldObj.rand.nextDouble() - this.worldObj.rand.nextDouble()) * 4.0D; + var9.setLocationAndAngles(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.spawnExplosionParticle(); + this.updateDelay(); + } + } + } + } + + super.updateEntity(); + } + } + + private void updateDelay() { + this.delay = 200 + this.worldObj.rand.nextInt(600); + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.mobID = var1.getString("EntityId"); + this.delay = var1.getShort("Delay"); + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setString("EntityId", this.mobID); + var1.setShort("Delay", (short)this.delay); + } +} diff --git a/src/net/minecraft/src/TileEntityNote.java b/src/net/minecraft/src/TileEntityNote.java new file mode 100644 index 0000000..d284604 --- /dev/null +++ b/src/net/minecraft/src/TileEntityNote.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +public class TileEntityNote extends TileEntity { + public byte note = 0; + public boolean previousRedstoneState = false; + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setByte("note", this.note); + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.note = var1.getByte("note"); + if(this.note < 0) { + this.note = 0; + } + + if(this.note > 24) { + this.note = 24; + } + + } + + public void changePitch() { + this.note = (byte)((this.note + 1) % 25); + this.onInventoryChanged(); + } + + public void triggerNote(World var1, int var2, int var3, int var4) { + if(var1.getBlockMaterial(var2, var3 + 1, var4) == Material.air) { + Material var5 = var1.getBlockMaterial(var2, var3 - 1, var4); + byte var6 = 0; + if(var5 == Material.rock) { + var6 = 1; + } + + if(var5 == Material.sand) { + var6 = 2; + } + + if(var5 == Material.glass) { + var6 = 3; + } + + if(var5 == Material.wood) { + var6 = 4; + } + + var1.playNoteAt(var2, var3, var4, var6, this.note); + } + } +} diff --git a/src/net/minecraft/src/TileEntityPiston.java b/src/net/minecraft/src/TileEntityPiston.java new file mode 100644 index 0000000..456ca19 --- /dev/null +++ b/src/net/minecraft/src/TileEntityPiston.java @@ -0,0 +1,129 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class TileEntityPiston extends TileEntity { + private int storedBlockID; + private int storedMetadata; + private int storedOrientation; + private boolean isExtending; + private boolean field_31018_j; + private float progress; + private float lastProgress; + private static List field_31013_m = new ArrayList(); + + public TileEntityPiston() { + } + + public TileEntityPiston(int var1, int var2, int var3, boolean var4, boolean var5) { + this.storedBlockID = var1; + this.storedMetadata = var2; + this.storedOrientation = var3; + this.isExtending = var4; + this.field_31018_j = var5; + } + + public int getStoredBlockID() { + return this.storedBlockID; + } + + public int func_31005_e() { + return this.storedMetadata; + } + + public boolean func_31010_c() { + return this.isExtending; + } + + public int func_31008_d() { + return this.storedOrientation; + } + + public float func_31007_a(float var1) { + if(var1 > 1.0F) { + var1 = 1.0F; + } + + return this.lastProgress + (this.progress - this.lastProgress) * var1; + } + + private void func_31009_a(float var1, float var2) { + if(!this.isExtending) { + --var1; + } else { + var1 = 1.0F - var1; + } + + AxisAlignedBB var3 = Block.pistonMoving.func_31032_a(this.worldObj, this.xCoord, this.yCoord, this.zCoord, this.storedBlockID, var1, this.storedOrientation); + if(var3 != null) { + List var4 = this.worldObj.getEntitiesWithinAABBExcludingEntity((Entity)null, var3); + if(!var4.isEmpty()) { + field_31013_m.addAll(var4); + Iterator var5 = field_31013_m.iterator(); + + while(var5.hasNext()) { + Entity var6 = (Entity)var5.next(); + var6.moveEntity((double)(var2 * (float)PistonBlockTextures.field_31051_b[this.storedOrientation]), (double)(var2 * (float)PistonBlockTextures.field_31054_c[this.storedOrientation]), (double)(var2 * (float)PistonBlockTextures.field_31053_d[this.storedOrientation])); + } + + field_31013_m.clear(); + } + } + + } + + public void clearPistonTileEntity() { + if(this.lastProgress < 1.0F) { + this.lastProgress = this.progress = 1.0F; + this.worldObj.removeBlockTileEntity(this.xCoord, this.yCoord, this.zCoord); + this.invalidate(); + if(this.worldObj.getBlockId(this.xCoord, this.yCoord, this.zCoord) == Block.pistonMoving.blockID) { + this.worldObj.setBlockAndMetadataWithNotify(this.xCoord, this.yCoord, this.zCoord, this.storedBlockID, this.storedMetadata); + } + } + + } + + public void updateEntity() { + this.lastProgress = this.progress; + if(this.lastProgress >= 1.0F) { + this.func_31009_a(1.0F, 0.25F); + this.worldObj.removeBlockTileEntity(this.xCoord, this.yCoord, this.zCoord); + this.invalidate(); + if(this.worldObj.getBlockId(this.xCoord, this.yCoord, this.zCoord) == Block.pistonMoving.blockID) { + this.worldObj.setBlockAndMetadataWithNotify(this.xCoord, this.yCoord, this.zCoord, this.storedBlockID, this.storedMetadata); + } + + } else { + this.progress += 0.5F; + if(this.progress >= 1.0F) { + this.progress = 1.0F; + } + + if(this.isExtending) { + this.func_31009_a(this.progress, this.progress - this.lastProgress + 1.0F / 16.0F); + } + + } + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.storedBlockID = var1.getInteger("blockId"); + this.storedMetadata = var1.getInteger("blockData"); + this.storedOrientation = var1.getInteger("facing"); + this.lastProgress = this.progress = var1.getFloat("progress"); + this.isExtending = var1.getBoolean("extending"); + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setInteger("blockId", this.storedBlockID); + var1.setInteger("blockData", this.storedMetadata); + var1.setInteger("facing", this.storedOrientation); + var1.setFloat("progress", this.lastProgress); + var1.setBoolean("extending", this.isExtending); + } +} diff --git a/src/net/minecraft/src/TileEntityRecordPlayer.java b/src/net/minecraft/src/TileEntityRecordPlayer.java new file mode 100644 index 0000000..ea3da06 --- /dev/null +++ b/src/net/minecraft/src/TileEntityRecordPlayer.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +public class TileEntityRecordPlayer extends TileEntity { + public int field_28009_a; + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.field_28009_a = var1.getInteger("Record"); + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + if(this.field_28009_a > 0) { + var1.setInteger("Record", this.field_28009_a); + } + + } +} diff --git a/src/net/minecraft/src/TileEntitySign.java b/src/net/minecraft/src/TileEntitySign.java new file mode 100644 index 0000000..dd5385b --- /dev/null +++ b/src/net/minecraft/src/TileEntitySign.java @@ -0,0 +1,46 @@ +package net.minecraft.src; + +public class TileEntitySign extends TileEntity { + public String[] signText = new String[]{"", "", "", ""}; + public int lineBeingEdited = -1; + private boolean isEditAble = true; + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setString("Text1", this.signText[0]); + var1.setString("Text2", this.signText[1]); + var1.setString("Text3", this.signText[2]); + var1.setString("Text4", this.signText[3]); + } + + public void readFromNBT(NBTTagCompound var1) { + this.isEditAble = false; + super.readFromNBT(var1); + + for(int var2 = 0; var2 < 4; ++var2) { + this.signText[var2] = var1.getString("Text" + (var2 + 1)); + if(this.signText[var2].length() > 15) { + this.signText[var2] = this.signText[var2].substring(0, 15); + } + } + + } + + public Packet getDescriptionPacket() { + String[] var1 = new String[4]; + + for(int var2 = 0; var2 < 4; ++var2) { + var1[var2] = this.signText[var2]; + } + + return new Packet130UpdateSign(this.xCoord, this.yCoord, this.zCoord, var1); + } + + public boolean getIsEditAble() { + return this.isEditAble; + } + + public void func_32001_a(boolean var1) { + this.isEditAble = var1; + } +} diff --git a/src/net/minecraft/src/Vec3D.java b/src/net/minecraft/src/Vec3D.java new file mode 100644 index 0000000..8ded9a0 --- /dev/null +++ b/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/src/net/minecraft/src/WatchableObject.java b/src/net/minecraft/src/WatchableObject.java new file mode 100644 index 0000000..ae1ca87 --- /dev/null +++ b/src/net/minecraft/src/WatchableObject.java @@ -0,0 +1,39 @@ +package net.minecraft.src; + +public class WatchableObject { + private final int objectType; + private final int dataValueId; + private Object watchedObject; + private boolean isWatching; + + public WatchableObject(int var1, int var2, Object var3) { + this.dataValueId = var2; + this.watchedObject = var3; + this.objectType = var1; + this.isWatching = true; + } + + public int getDataValueId() { + return this.dataValueId; + } + + public void setObject(Object var1) { + this.watchedObject = var1; + } + + public Object getObject() { + return this.watchedObject; + } + + public int getObjectType() { + return this.objectType; + } + + public boolean getWatching() { + return this.isWatching; + } + + public void setWatching(boolean var1) { + this.isWatching = var1; + } +} diff --git a/src/net/minecraft/src/World.java b/src/net/minecraft/src/World.java new file mode 100644 index 0000000..ebd4d57 --- /dev/null +++ b/src/net/minecraft/src/World.java @@ -0,0 +1,2118 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.Set; +import java.util.TreeSet; + +public class World implements IBlockAccess { + public boolean scheduledUpdatesAreImmediate = false; + private List field_821_y = new ArrayList(); + public List loadedEntityList = new ArrayList(); + private List unloadedEntityList = new ArrayList(); + private TreeSet scheduledTickTreeSet = new TreeSet(); + private Set scheduledTickSet = new HashSet(); + public List loadedTileEntityList = new ArrayList(); + private List field_20912_E = new ArrayList(); + public List playerEntities = new ArrayList(); + public List lightningEntities = new ArrayList(); + private long field_6159_E = 16777215L; + public int skylightSubtracted = 0; + protected int distHashCounter = (new Random()).nextInt(); + protected final int DIST_HASH_MAGIC = 1013904223; + protected float field_27079_B; + protected float field_27078_C; + protected float field_27077_D; + protected float field_27076_E; + protected int field_27075_F = 0; + public int field_27080_i = 0; + public boolean editingBlocks = false; + private long lockTimestamp = System.currentTimeMillis(); + protected int autosavePeriod = 40; + public int difficultySetting; + public Random rand = new Random(); + public boolean isNewWorld = false; + public final WorldProvider worldProvider; + protected List worldAccesses = new ArrayList(); + protected IChunkProvider chunkProvider; + protected final ISaveHandler worldFile; + protected WorldInfo worldInfo; + public boolean worldChunkLoadOverride; + private boolean allPlayersSleeping; + public MapStorage field_28105_z; + private ArrayList field_9207_I = new ArrayList(); + private boolean field_31048_L; + private int field_4265_J = 0; + private boolean spawnHostileMobs = true; + private boolean spawnPeacefulMobs = true; + static int field_4268_y = 0; + private Set activeChunkSet = new HashSet(); + private int ambientTickCountdown = this.rand.nextInt(12000); + private List field_778_L = new ArrayList(); + public boolean singleplayerWorld = false; + + public WorldChunkManager getWorldChunkManager() { + return this.worldProvider.worldChunkMgr; + } + + public World(ISaveHandler var1, String var2, long var3, WorldProvider var5) { + this.worldFile = var1; + this.field_28105_z = new MapStorage(var1); + this.worldInfo = var1.func_22096_c(); + this.isNewWorld = this.worldInfo == null; + if(var5 != null) { + this.worldProvider = var5; + } else if(this.worldInfo != null && this.worldInfo.getDimension() == -1) { + this.worldProvider = WorldProvider.func_4091_a(-1); + } else { + this.worldProvider = WorldProvider.func_4091_a(0); + } + + boolean var6 = false; + if(this.worldInfo == null) { + this.worldInfo = new WorldInfo(var3, var2); + var6 = true; + } else { + this.worldInfo.setLevelName(var2); + } + + this.worldProvider.registerWorld(this); + this.chunkProvider = this.getChunkProvider(); + if(var6) { + this.generateSpawnPoint(); + } + + this.calculateInitialSkylight(); + this.func_27070_x(); + } + + protected IChunkProvider getChunkProvider() { + IChunkLoader var1 = this.worldFile.func_22092_a(this.worldProvider); + return new ChunkProvider(this, var1, this.worldProvider.getChunkProvider()); + } + + protected void generateSpawnPoint() { + this.worldChunkLoadOverride = true; + int var1 = 0; + byte var2 = 64; + + int var3; + for(var3 = 0; !this.worldProvider.canCoordinateBeSpawn(var1, var3); var3 += this.rand.nextInt(64) - this.rand.nextInt(64)) { + var1 += this.rand.nextInt(64) - this.rand.nextInt(64); + } + + this.worldInfo.setSpawnPosition(var1, var2, var3); + this.worldChunkLoadOverride = false; + } + + public int getFirstUncoveredBlock(int var1, int var2) { + int var3; + for(var3 = 63; !this.isAirBlock(var1, var3 + 1, var2); ++var3) { + } + + return this.getBlockId(var1, var3, var2); + } + + public void saveWorld(boolean var1, IProgressUpdate var2) { + if(this.chunkProvider.func_364_b()) { + if(var2 != null) { + var2.func_438_a("Saving level"); + } + + this.saveLevel(); + if(var2 != null) { + var2.displayLoadingString("Saving chunks"); + } + + this.chunkProvider.saveChunks(var1, var2); + } + } + + private void saveLevel() { + this.checkSessionLock(); + this.worldFile.func_22095_a(this.worldInfo, this.playerEntities); + this.field_28105_z.func_28176_a(); + } + + 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 isAirBlock(int var1, int var2, int var3) { + return this.getBlockId(var1, var2, var3) == 0; + } + + public boolean blockExists(int var1, int var2, int var3) { + return var2 >= 0 && var2 < 128 ? this.chunkExists(var1 >> 4, var3 >> 4) : false; + } + + public boolean doChunksNearChunkExist(int var1, int var2, int var3, int var4) { + return this.checkChunksExist(var1 - var4, var2 - var4, var3 - var4, var1 + var4, var2 + var4, var3 + var4); + } + + public boolean checkChunksExist(int var1, int var2, int var3, int var4, int var5, int var6) { + if(var5 >= 0 && var2 < 128) { + var1 >>= 4; + var2 >>= 4; + var3 >>= 4; + var4 >>= 4; + var5 >>= 4; + var6 >>= 4; + + for(int var7 = var1; var7 <= var4; ++var7) { + for(int var8 = var3; var8 <= var6; ++var8) { + if(!this.chunkExists(var7, var8)) { + return false; + } + } + } + + return true; + } else { + return false; + } + } + + private boolean chunkExists(int var1, int var2) { + return this.chunkProvider.chunkExists(var1, var2); + } + + public Chunk getChunkFromBlockCoords(int var1, int var2) { + return this.getChunkFromChunkCoords(var1 >> 4, var2 >> 4); + } + + public Chunk getChunkFromChunkCoords(int var1, int var2) { + return this.chunkProvider.provideChunk(var1, var2); + } + + public boolean setBlockAndMetadata(int var1, int var2, int var3, int var4, int var5) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 128) { + return false; + } else { + Chunk var6 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + return var6.setBlockIDWithMetadata(var1 & 15, var2, var3 & 15, var4, var5); + } + } else { + return false; + } + } + + public boolean setBlock(int var1, int var2, int var3, int var4) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 128) { + return false; + } else { + Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + return var5.setBlockID(var1 & 15, var2, var3 & 15, var4); + } + } else { + return false; + } + } + + public Material getBlockMaterial(int var1, int var2, int var3) { + int var4 = this.getBlockId(var1, var2, var3); + return var4 == 0 ? Material.air : Block.blocksList[var4].blockMaterial; + } + + public int getBlockMetadata(int var1, int var2, int var3) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return 0; + } else if(var2 >= 128) { + return 0; + } else { + Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + var1 &= 15; + var3 &= 15; + return var4.getBlockMetadata(var1, var2, var3); + } + } else { + return 0; + } + } + + public void setBlockMetadataWithNotify(int var1, int var2, int var3, int var4) { + if(this.setBlockMetadata(var1, var2, var3, var4)) { + int var5 = this.getBlockId(var1, var2, var3); + if(Block.requiresSelfNotify[var5 & 255]) { + this.notifyBlockChange(var1, var2, var3, var5); + } else { + this.notifyBlocksOfNeighborChange(var1, var2, var3, var5); + } + } + + } + + 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 setBlockAndMetadataWithNotify(int var1, int var2, int var3, int var4, int var5) { + if(this.setBlockAndMetadata(var1, var2, var3, var4, var5)) { + this.notifyBlockChange(var1, var2, var3, var4); + return true; + } else { + return false; + } + } + + public void markBlockNeedsUpdate(int var1, int var2, int var3) { + for(int var4 = 0; var4 < this.worldAccesses.size(); ++var4) { + ((IWorldAccess)this.worldAccesses.get(var4)).markBlockNeedsUpdate(var1, var2, var3); + } + + } + + protected void notifyBlockChange(int var1, int var2, int var3, int var4) { + this.markBlockNeedsUpdate(var1, var2, var3); + this.notifyBlocksOfNeighborChange(var1, var2, var3, var4); + } + + public void markBlocksDirtyVertical(int var1, int var2, int var3, int var4) { + if(var3 > var4) { + int var5 = var4; + var4 = var3; + var3 = var5; + } + + this.markBlocksDirty(var1, var3, var2, var1, var4, var2); + } + + public void markBlockAsNeedsUpdate(int var1, int var2, int var3) { + for(int var4 = 0; var4 < this.worldAccesses.size(); ++var4) { + ((IWorldAccess)this.worldAccesses.get(var4)).markBlockRangeNeedsUpdate(var1, var2, var3, var1, var2, var3); + } + + } + + public void markBlocksDirty(int var1, int var2, int var3, int var4, int var5, int var6) { + for(int var7 = 0; var7 < this.worldAccesses.size(); ++var7) { + ((IWorldAccess)this.worldAccesses.get(var7)).markBlockRangeNeedsUpdate(var1, var2, var3, var4, var5, var6); + } + + } + + public void notifyBlocksOfNeighborChange(int var1, int var2, int var3, int var4) { + this.notifyBlockOfNeighborChange(var1 - 1, var2, var3, var4); + this.notifyBlockOfNeighborChange(var1 + 1, var2, var3, var4); + this.notifyBlockOfNeighborChange(var1, var2 - 1, var3, var4); + this.notifyBlockOfNeighborChange(var1, var2 + 1, var3, var4); + this.notifyBlockOfNeighborChange(var1, var2, var3 - 1, var4); + this.notifyBlockOfNeighborChange(var1, var2, var3 + 1, var4); + } + + private void notifyBlockOfNeighborChange(int var1, int var2, int var3, int var4) { + if(!this.editingBlocks && !this.singleplayerWorld) { + 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 getBlockLightValueNoChecks(int var1, int var2, int var3) { + if(var2 < 0) { + return 0; + } else { + if(var2 >= 128) { + var2 = 127; + } + + return this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4).getBlockLightValue(var1 & 15, var2, var3 & 15, 0); + } + } + + public int getBlockLightValue(int var1, int var2, int var3) { + return this.getBlockLightValue_do(var1, var2, var3, true); + } + + public int getBlockLightValue_do(int var1, int var2, int var3, boolean var4) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var4) { + int var5 = this.getBlockId(var1, var2, var3); + if(var5 == Block.stairSingle.blockID || var5 == Block.tilledField.blockID || var5 == Block.stairCompactCobblestone.blockID || var5 == Block.stairCompactPlanks.blockID) { + int var6 = this.getBlockLightValue_do(var1, var2 + 1, var3, false); + int var7 = this.getBlockLightValue_do(var1 + 1, var2, var3, false); + int var8 = this.getBlockLightValue_do(var1 - 1, var2, var3, false); + int var9 = this.getBlockLightValue_do(var1, var2, var3 + 1, false); + int var10 = this.getBlockLightValue_do(var1, var2, var3 - 1, false); + if(var7 > var6) { + var6 = var7; + } + + if(var8 > var6) { + var6 = var8; + } + + if(var9 > var6) { + var6 = var9; + } + + if(var10 > var6) { + var6 = var10; + } + + return var6; + } + } + + if(var2 < 0) { + return 0; + } else { + if(var2 >= 128) { + var2 = 127; + } + + 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.worldProvider.field_4306_c || var1 != EnumSkyBlock.Sky) { + if(this.blockExists(var2, var3, var4)) { + if(var1 == EnumSkyBlock.Sky) { + if(this.canExistingBlockSeeTheSky(var2, var3, var4)) { + var5 = 15; + } + } else if(var1 == EnumSkyBlock.Block) { + int var6 = this.getBlockId(var2, var3, var4); + if(Block.lightValue[var6] > var5) { + var5 = Block.lightValue[var6]; + } + } + + if(this.getSavedLightValue(var1, var2, var3, var4) != var5) { + this.scheduleLightingUpdate(var1, var2, var3, var4, var2, var3, var4); + } + + } + } + } + + public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) { + if(var3 < 0) { + var3 = 0; + } + + if(var3 >= 128) { + var3 = 127; + } + + 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.worldAccesses.size(); ++var7) { + ((IWorldAccess)this.worldAccesses.get(var7)).markBlockNeedsUpdate(var2, var3, var4); + } + + } + } + } + } + } + + public float getLightBrightness(int var1, int var2, int var3) { + return this.worldProvider.lightBrightnessTable[this.getBlockLightValue(var1, var2, var3)]; + } + + public boolean isDaytime() { + return this.skylightSubtracted < 4; + } + + public MovingObjectPosition rayTraceBlocks(Vec3D var1, Vec3D var2) { + return this.func_28099_a(var1, var2, false, false); + } + + public MovingObjectPosition rayTraceBlocks_do(Vec3D var1, Vec3D var2, boolean var3) { + return this.func_28099_a(var1, var2, var3, false); + } + + public MovingObjectPosition func_28099_a(Vec3D var1, Vec3D var2, boolean var3, boolean var4) { + if(!Double.isNaN(var1.xCoord) && !Double.isNaN(var1.yCoord) && !Double.isNaN(var1.zCoord)) { + if(!Double.isNaN(var2.xCoord) && !Double.isNaN(var2.yCoord) && !Double.isNaN(var2.zCoord)) { + int var5 = MathHelper.floor_double(var2.xCoord); + int var6 = MathHelper.floor_double(var2.yCoord); + int var7 = MathHelper.floor_double(var2.zCoord); + int var8 = MathHelper.floor_double(var1.xCoord); + int var9 = MathHelper.floor_double(var1.yCoord); + int var10 = MathHelper.floor_double(var1.zCoord); + int var11 = this.getBlockId(var8, var9, var10); + int var12 = this.getBlockMetadata(var8, var9, var10); + Block var13 = Block.blocksList[var11]; + if((!var4 || var13 == null || var13.getCollisionBoundingBoxFromPool(this, var8, var9, var10) != null) && var11 > 0 && var13.canCollideCheck(var12, var3)) { + MovingObjectPosition var14 = var13.collisionRayTrace(this, var8, var9, var10, var1, var2); + if(var14 != null) { + return var14; + } + } + + var11 = 200; + + while(var11-- >= 0) { + if(Double.isNaN(var1.xCoord) || Double.isNaN(var1.yCoord) || Double.isNaN(var1.zCoord)) { + return null; + } + + if(var8 == var5 && var9 == var6 && var10 == var7) { + return null; + } + + boolean var39 = true; + boolean var40 = true; + boolean var41 = true; + double var15 = 999.0D; + double var17 = 999.0D; + double var19 = 999.0D; + if(var5 > var8) { + var15 = (double)var8 + 1.0D; + } else if(var5 < var8) { + var15 = (double)var8 + 0.0D; + } else { + var39 = false; + } + + if(var6 > var9) { + var17 = (double)var9 + 1.0D; + } else if(var6 < var9) { + var17 = (double)var9 + 0.0D; + } else { + var40 = false; + } + + if(var7 > var10) { + var19 = (double)var10 + 1.0D; + } else if(var7 < var10) { + var19 = (double)var10 + 0.0D; + } else { + var41 = false; + } + + double var21 = 999.0D; + double var23 = 999.0D; + double var25 = 999.0D; + double var27 = var2.xCoord - var1.xCoord; + double var29 = var2.yCoord - var1.yCoord; + double var31 = var2.zCoord - var1.zCoord; + if(var39) { + var21 = (var15 - var1.xCoord) / var27; + } + + if(var40) { + var23 = (var17 - var1.yCoord) / var29; + } + + if(var41) { + var25 = (var19 - var1.zCoord) / var31; + } + + boolean var33 = false; + byte var42; + if(var21 < var23 && var21 < var25) { + if(var5 > var8) { + var42 = 4; + } else { + var42 = 5; + } + + var1.xCoord = var15; + var1.yCoord += var29 * var21; + var1.zCoord += var31 * var21; + } else if(var23 < var25) { + if(var6 > var9) { + var42 = 0; + } else { + var42 = 1; + } + + var1.xCoord += var27 * var23; + var1.yCoord = var17; + var1.zCoord += var31 * var23; + } else { + if(var7 > var10) { + var42 = 2; + } else { + var42 = 3; + } + + var1.xCoord += var27 * var25; + var1.yCoord += var29 * var25; + var1.zCoord = var19; + } + + Vec3D var34 = Vec3D.createVector(var1.xCoord, var1.yCoord, var1.zCoord); + var8 = (int)(var34.xCoord = (double)MathHelper.floor_double(var1.xCoord)); + if(var42 == 5) { + --var8; + ++var34.xCoord; + } + + var9 = (int)(var34.yCoord = (double)MathHelper.floor_double(var1.yCoord)); + if(var42 == 1) { + --var9; + ++var34.yCoord; + } + + var10 = (int)(var34.zCoord = (double)MathHelper.floor_double(var1.zCoord)); + if(var42 == 3) { + --var10; + ++var34.zCoord; + } + + int var35 = this.getBlockId(var8, var9, var10); + int var36 = this.getBlockMetadata(var8, var9, var10); + Block var37 = Block.blocksList[var35]; + if((!var4 || var37 == null || var37.getCollisionBoundingBoxFromPool(this, var8, var9, var10) != null) && var35 > 0 && var37.canCollideCheck(var36, var3)) { + MovingObjectPosition var38 = var37.collisionRayTrace(this, var8, var9, var10, var1, var2); + if(var38 != null) { + return var38; + } + } + } + + return null; + } else { + return null; + } + } else { + return null; + } + } + + public void playSoundAtEntity(Entity var1, String var2, float var3, float var4) { + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + ((IWorldAccess)this.worldAccesses.get(var5)).playSound(var2, var1.posX, var1.posY - (double)var1.yOffset, var1.posZ, var3, var4); + } + + } + + public void playSoundEffect(double var1, double var3, double var5, String var7, float var8, float var9) { + for(int var10 = 0; var10 < this.worldAccesses.size(); ++var10) { + ((IWorldAccess)this.worldAccesses.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.worldAccesses.size(); ++var5) { + ((IWorldAccess)this.worldAccesses.get(var5)).playRecord(var1, var2, var3, var4); + } + + } + + public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) { + for(int var14 = 0; var14 < this.worldAccesses.size(); ++var14) { + ((IWorldAccess)this.worldAccesses.get(var14)).spawnParticle(var1, var2, var4, var6, var8, var10, var12); + } + + } + + public boolean addLightningBolt(Entity var1) { + this.lightningEntities.add(var1); + return true; + } + + 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) { + EntityPlayer var5 = (EntityPlayer)var1; + this.playerEntities.add(var5); + this.updateAllPlayersSleepingFlag(); + } + + this.getChunkFromChunkCoords(var2, var3).addEntity(var1); + this.loadedEntityList.add(var1); + this.obtainEntitySkin(var1); + return true; + } + } + + protected void obtainEntitySkin(Entity var1) { + for(int var2 = 0; var2 < this.worldAccesses.size(); ++var2) { + ((IWorldAccess)this.worldAccesses.get(var2)).obtainEntitySkin(var1); + } + + } + + protected void releaseEntitySkin(Entity var1) { + for(int var2 = 0; var2 < this.worldAccesses.size(); ++var2) { + ((IWorldAccess)this.worldAccesses.get(var2)).releaseEntitySkin(var1); + } + + } + + public void removePlayerForLogoff(Entity var1) { + if(var1.riddenByEntity != null) { + var1.riddenByEntity.mountEntity((Entity)null); + } + + if(var1.ridingEntity != null) { + var1.mountEntity((Entity)null); + } + + var1.setEntityDead(); + if(var1 instanceof EntityPlayer) { + this.playerEntities.remove((EntityPlayer)var1); + this.updateAllPlayersSleepingFlag(); + } + + } + + public void removePlayer(Entity var1) { + var1.setEntityDead(); + if(var1 instanceof EntityPlayer) { + this.playerEntities.remove((EntityPlayer)var1); + this.updateAllPlayersSleepingFlag(); + } + + int var2 = var1.chunkCoordX; + int var3 = var1.chunkCoordZ; + if(var1.addedToChunk && this.chunkExists(var2, var3)) { + this.getChunkFromChunkCoords(var2, var3).removeEntity(var1); + } + + this.loadedEntityList.remove(var1); + this.releaseEntitySkin(var1); + } + + public void addWorldAccess(IWorldAccess var1) { + this.worldAccesses.add(var1); + } + + public 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.blockExists(var9, 64, var10)) { + for(int var11 = var5 - 1; var11 < var6; ++var11) { + Block var12 = Block.blocksList[this.getBlockId(var9, var11, var10)]; + if(var12 != null) { + var12.getCollidingBoundingBoxes(this, var9, var11, var10, var2, this.field_9207_I); + } + } + } + } + } + + double var14 = 0.25D; + List var15 = this.getEntitiesWithinAABBExcludingEntity(var1, var2.expand(var14, var14, var14)); + + for(int var16 = 0; var16 < var15.size(); ++var16) { + AxisAlignedBB var13 = ((Entity)var15.get(var16)).getBoundingBox(); + if(var13 != null && var13.intersectsWith(var2)) { + this.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.getCelestialAngle(var1); + float var3 = 1.0F - (MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 0.5F); + if(var3 < 0.0F) { + var3 = 0.0F; + } + + if(var3 > 1.0F) { + var3 = 1.0F; + } + + var3 = 1.0F - var3; + var3 = (float)((double)var3 * (1.0D - (double)(this.func_27074_d(var1) * 5.0F) / 16.0D)); + var3 = (float)((double)var3 * (1.0D - (double)(this.func_27065_c(var1) * 5.0F) / 16.0D)); + var3 = 1.0F - var3; + return (int)(var3 * 11.0F); + } + + public float getCelestialAngle(float var1) { + return this.worldProvider.calculateCelestialAngle(this.worldInfo.getWorldTime(), var1); + } + + public int getTopSolidOrLiquidBlock(int var1, int var2) { + Chunk var3 = this.getChunkFromBlockCoords(var1, var2); + int var4 = 127; + var1 &= 15; + + for(var2 &= 15; var4 > 0; --var4) { + int var5 = var3.getBlockID(var1, var4, var2); + Material var6 = var5 == 0 ? Material.air : Block.blocksList[var5].blockMaterial; + if(var6.getIsSolid() || var6.getIsLiquid()) { + return var4 + 1; + } + } + + return -1; + } + + public int findTopSolidBlock(int var1, int var2) { + Chunk var3 = this.getChunkFromBlockCoords(var1, var2); + int var4 = 127; + var1 &= 15; + + for(var2 &= 15; var4 > 0; --var4) { + int var5 = var3.getBlockID(var1, var4, var2); + if(var5 != 0 && Block.blocksList[var5].blockMaterial.getIsSolid()) { + return var4 + 1; + } + } + + return -1; + } + + public void scheduleUpdateTick(int var1, int var2, int var3, int var4, int var5) { + NextTickListEntry var6 = new NextTickListEntry(var1, var2, var3, var4); + byte var7 = 8; + if(this.scheduledUpdatesAreImmediate) { + if(this.checkChunksExist(var6.xCoord - var7, var6.yCoord - var7, var6.zCoord - var7, var6.xCoord + var7, var6.yCoord + var7, var6.zCoord + var7)) { + int var8 = this.getBlockId(var6.xCoord, var6.yCoord, var6.zCoord); + if(var8 == var6.blockID && var8 > 0) { + Block.blocksList[var8].updateTick(this, var6.xCoord, var6.yCoord, var6.zCoord, this.rand); + } + } + + } else { + if(this.checkChunksExist(var1 - var7, var2 - var7, var3 - var7, var1 + var7, var2 + var7, var3 + var7)) { + if(var4 > 0) { + var6.setScheduledTime((long)var5 + this.worldInfo.getWorldTime()); + } + + if(!this.scheduledTickSet.contains(var6)) { + this.scheduledTickSet.add(var6); + this.scheduledTickTreeSet.add(var6); + } + } + + } + } + + public void updateEntities() { + int var1; + Entity var2; + for(var1 = 0; var1 < this.lightningEntities.size(); ++var1) { + var2 = (Entity)this.lightningEntities.get(var1); + var2.onUpdate(); + if(var2.isDead) { + this.lightningEntities.remove(var1--); + } + } + + this.loadedEntityList.removeAll(this.unloadedEntityList); + + int var3; + int var4; + for(var1 = 0; var1 < this.unloadedEntityList.size(); ++var1) { + var2 = (Entity)this.unloadedEntityList.get(var1); + var3 = var2.chunkCoordX; + var4 = var2.chunkCoordZ; + if(var2.addedToChunk && this.chunkExists(var3, var4)) { + this.getChunkFromChunkCoords(var3, var4).removeEntity(var2); + } + } + + for(var1 = 0; var1 < this.unloadedEntityList.size(); ++var1) { + this.releaseEntitySkin((Entity)this.unloadedEntityList.get(var1)); + } + + this.unloadedEntityList.clear(); + + for(var1 = 0; var1 < this.loadedEntityList.size(); ++var1) { + var2 = (Entity)this.loadedEntityList.get(var1); + if(var2.ridingEntity != null) { + if(!var2.ridingEntity.isDead && var2.ridingEntity.riddenByEntity == var2) { + continue; + } + + var2.ridingEntity.riddenByEntity = null; + var2.ridingEntity = null; + } + + if(!var2.isDead) { + this.updateEntity(var2); + } + + if(var2.isDead) { + var3 = var2.chunkCoordX; + var4 = var2.chunkCoordZ; + if(var2.addedToChunk && this.chunkExists(var3, var4)) { + this.getChunkFromChunkCoords(var3, var4).removeEntity(var2); + } + + this.loadedEntityList.remove(var1--); + this.releaseEntitySkin(var2); + } + } + + this.field_31048_L = true; + Iterator var10 = this.loadedTileEntityList.iterator(); + + while(var10.hasNext()) { + TileEntity var5 = (TileEntity)var10.next(); + if(!var5.isInvalid()) { + var5.updateEntity(); + } + + if(var5.isInvalid()) { + var10.remove(); + Chunk var7 = this.getChunkFromChunkCoords(var5.xCoord >> 4, var5.zCoord >> 4); + if(var7 != null) { + var7.removeChunkBlockTileEntity(var5.xCoord & 15, var5.yCoord, var5.zCoord & 15); + } + } + } + + this.field_31048_L = false; + if(!this.field_20912_E.isEmpty()) { + Iterator var6 = this.field_20912_E.iterator(); + + while(var6.hasNext()) { + TileEntity var8 = (TileEntity)var6.next(); + if(!var8.isInvalid()) { + if(!this.loadedTileEntityList.contains(var8)) { + this.loadedTileEntityList.add(var8); + } + + Chunk var9 = this.getChunkFromChunkCoords(var8.xCoord >> 4, var8.zCoord >> 4); + if(var9 != null) { + var9.setChunkBlockTileEntity(var8.xCoord & 15, var8.yCoord, var8.zCoord & 15, var8); + } + + this.markBlockNeedsUpdate(var8.xCoord, var8.yCoord, var8.zCoord); + } + } + + this.field_20912_E.clear(); + } + + } + + public void func_31047_a(Collection var1) { + if(this.field_31048_L) { + this.field_20912_E.addAll(var1); + } else { + this.loadedTileEntityList.addAll(var1); + } + + } + + public void updateEntity(Entity var1) { + this.updateEntityWithOptionalForce(var1, true); + } + + public void updateEntityWithOptionalForce(Entity var1, boolean var2) { + int var3 = MathHelper.floor_double(var1.posX); + int var4 = MathHelper.floor_double(var1.posZ); + byte var5 = 32; + if(!var2 || this.checkChunksExist(var3 - var5, 0, var4 - var5, var3 + var5, 128, var4 + var5)) { + var1.lastTickPosX = var1.posX; + var1.lastTickPosY = var1.posY; + var1.lastTickPosZ = var1.posZ; + var1.prevRotationYaw = var1.rotationYaw; + var1.prevRotationPitch = var1.rotationPitch; + if(var2 && var1.addedToChunk) { + if(var1.ridingEntity != null) { + var1.updateRidden(); + } else { + var1.onUpdate(); + } + } + + if(Double.isNaN(var1.posX) || Double.isInfinite(var1.posX)) { + var1.posX = var1.lastTickPosX; + } + + if(Double.isNaN(var1.posY) || Double.isInfinite(var1.posY)) { + var1.posY = var1.lastTickPosY; + } + + if(Double.isNaN(var1.posZ) || Double.isInfinite(var1.posZ)) { + var1.posZ = var1.lastTickPosZ; + } + + if(Double.isNaN((double)var1.rotationPitch) || Double.isInfinite((double)var1.rotationPitch)) { + var1.rotationPitch = var1.prevRotationPitch; + } + + if(Double.isNaN((double)var1.rotationYaw) || Double.isInfinite((double)var1.rotationYaw)) { + var1.rotationYaw = var1.prevRotationYaw; + } + + int var6 = MathHelper.floor_double(var1.posX / 16.0D); + int var7 = MathHelper.floor_double(var1.posY / 16.0D); + int var8 = MathHelper.floor_double(var1.posZ / 16.0D); + if(!var1.addedToChunk || var1.chunkCoordX != var6 || var1.chunkCoordY != var7 || var1.chunkCoordZ != var8) { + if(var1.addedToChunk && this.chunkExists(var1.chunkCoordX, var1.chunkCoordZ)) { + this.getChunkFromChunkCoords(var1.chunkCoordX, var1.chunkCoordZ).removeEntityAtIndex(var1, var1.chunkCoordY); + } + + if(this.chunkExists(var6, var8)) { + var1.addedToChunk = true; + this.getChunkFromChunkCoords(var6, var8).addEntity(var1); + } else { + var1.addedToChunk = false; + } + } + + if(var2 && var1.addedToChunk && var1.riddenByEntity != null) { + if(!var1.riddenByEntity.isDead && var1.riddenByEntity.ridingEntity == var1) { + this.updateEntity(var1.riddenByEntity); + } else { + var1.riddenByEntity.ridingEntity = null; + var1.riddenByEntity = null; + } + } + + } + } + + public boolean checkIfAABBIsClear(AxisAlignedBB var1) { + List var2 = this.getEntitiesWithinAABBExcludingEntity((Entity)null, var1); + + for(int var3 = 0; var3 < var2.size(); ++var3) { + Entity var4 = (Entity)var2.get(var3); + if(!var4.isDead && var4.preventEntitySpawning) { + return false; + } + } + + return true; + } + + public boolean func_27069_b(AxisAlignedBB var1) { + int var2 = MathHelper.floor_double(var1.minX); + int var3 = MathHelper.floor_double(var1.maxX + 1.0D); + int var4 = MathHelper.floor_double(var1.minY); + int var5 = MathHelper.floor_double(var1.maxY + 1.0D); + int var6 = MathHelper.floor_double(var1.minZ); + int var7 = MathHelper.floor_double(var1.maxZ + 1.0D); + if(var1.minX < 0.0D) { + --var2; + } + + if(var1.minY < 0.0D) { + --var4; + } + + if(var1.minZ < 0.0D) { + --var6; + } + + for(int var8 = var2; var8 < var3; ++var8) { + for(int var9 = var4; var9 < var5; ++var9) { + for(int var10 = var6; var10 < var7; ++var10) { + Block var11 = Block.blocksList[this.getBlockId(var8, var9, var10)]; + if(var11 != null) { + return true; + } + } + } + } + + return false; + } + + public boolean getIsAnyLiquid(AxisAlignedBB var1) { + int var2 = MathHelper.floor_double(var1.minX); + int var3 = MathHelper.floor_double(var1.maxX + 1.0D); + int var4 = MathHelper.floor_double(var1.minY); + int var5 = MathHelper.floor_double(var1.maxY + 1.0D); + int var6 = MathHelper.floor_double(var1.minZ); + int var7 = MathHelper.floor_double(var1.maxZ + 1.0D); + if(var1.minX < 0.0D) { + --var2; + } + + if(var1.minY < 0.0D) { + --var4; + } + + if(var1.minZ < 0.0D) { + --var6; + } + + for(int var8 = var2; var8 < var3; ++var8) { + for(int var9 = var4; var9 < var5; ++var9) { + for(int var10 = var6; var10 < var7; ++var10) { + Block var11 = Block.blocksList[this.getBlockId(var8, var9, var10)]; + if(var11 != null && var11.blockMaterial.getIsLiquid()) { + return true; + } + } + } + } + + return false; + } + + public boolean isBoundingBoxBurning(AxisAlignedBB var1) { + int var2 = MathHelper.floor_double(var1.minX); + int var3 = MathHelper.floor_double(var1.maxX + 1.0D); + int var4 = MathHelper.floor_double(var1.minY); + int var5 = MathHelper.floor_double(var1.maxY + 1.0D); + int var6 = MathHelper.floor_double(var1.minZ); + int var7 = MathHelper.floor_double(var1.maxZ + 1.0D); + if(this.checkChunksExist(var2, var4, var6, var3, var5, var7)) { + for(int var8 = var2; var8 < var3; ++var8) { + for(int var9 = var4; var9 < var5; ++var9) { + for(int var10 = var6; var10 < var7; ++var10) { + int var11 = this.getBlockId(var8, var9, var10); + if(var11 == Block.fire.blockID || var11 == Block.lavaMoving.blockID || var11 == Block.lavaStill.blockID) { + return true; + } + } + } + } + } + + return false; + } + + public boolean handleMaterialAcceleration(AxisAlignedBB var1, Material var2, Entity var3) { + int var4 = MathHelper.floor_double(var1.minX); + int var5 = MathHelper.floor_double(var1.maxX + 1.0D); + int var6 = MathHelper.floor_double(var1.minY); + int var7 = MathHelper.floor_double(var1.maxY + 1.0D); + int var8 = MathHelper.floor_double(var1.minZ); + int var9 = MathHelper.floor_double(var1.maxZ + 1.0D); + if(!this.checkChunksExist(var4, var6, var8, var5, var7, var9)) { + return false; + } else { + boolean var10 = false; + Vec3D var11 = Vec3D.createVector(0.0D, 0.0D, 0.0D); + + for(int var12 = var4; var12 < var5; ++var12) { + for(int var13 = var6; var13 < var7; ++var13) { + for(int var14 = var8; var14 < var9; ++var14) { + Block var15 = Block.blocksList[this.getBlockId(var12, var13, var14)]; + if(var15 != null && var15.blockMaterial == var2) { + double var16 = (double)((float)(var13 + 1) - BlockFluid.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.014D; + var3.motionX += var11.xCoord * var18; + var3.motionY += var11.yCoord * var18; + var3.motionZ += var11.zCoord * var18; + } + + return var10; + } + } + + public boolean isMaterialInBB(AxisAlignedBB var1, Material var2) { + int var3 = MathHelper.floor_double(var1.minX); + int var4 = MathHelper.floor_double(var1.maxX + 1.0D); + int var5 = MathHelper.floor_double(var1.minY); + int var6 = MathHelper.floor_double(var1.maxY + 1.0D); + int var7 = MathHelper.floor_double(var1.minZ); + int var8 = MathHelper.floor_double(var1.maxZ + 1.0D); + + for(int var9 = var3; var9 < var4; ++var9) { + for(int var10 = var5; var10 < var6; ++var10) { + for(int var11 = var7; var11 < var8; ++var11) { + Block var12 = Block.blocksList[this.getBlockId(var9, var10, var11)]; + if(var12 != null && var12.blockMaterial == var2) { + return true; + } + } + } + } + + return false; + } + + public boolean isAABBInMaterial(AxisAlignedBB var1, Material var2) { + int var3 = MathHelper.floor_double(var1.minX); + int var4 = MathHelper.floor_double(var1.maxX + 1.0D); + int var5 = MathHelper.floor_double(var1.minY); + int var6 = MathHelper.floor_double(var1.maxY + 1.0D); + int var7 = MathHelper.floor_double(var1.minZ); + int var8 = MathHelper.floor_double(var1.maxZ + 1.0D); + + for(int var9 = var3; var9 < var4; ++var9) { + for(int var10 = var5; var10 < var6; ++var10) { + for(int var11 = var7; var11 < var8; ++var11) { + Block var12 = Block.blocksList[this.getBlockId(var9, var10, var11)]; + if(var12 != null && var12.blockMaterial == var2) { + int var13 = this.getBlockMetadata(var9, var10, var11); + double var14 = (double)(var10 + 1); + if(var13 < 8) { + var14 = (double)(var10 + 1) - (double)var13 / 8.0D; + } + + if(var14 >= var1.minY) { + return true; + } + } + } + } + } + + return false; + } + + public Explosion createExplosion(Entity var1, double var2, double var4, double var6, float var8) { + return this.newExplosion(var1, var2, var4, var6, var8, false); + } + + public Explosion newExplosion(Entity var1, double var2, double var4, double var6, float var8, boolean var9) { + Explosion var10 = new Explosion(this, var1, var2, var4, var6, var8); + var10.isFlaming = var9; + var10.doExplosion(); + var10.doEffects(true); + 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.rayTraceBlocks(Vec3D.createVector(var14, var16, var18), var1) == null) { + ++var9; + } + + ++var10; + } + } + } + + return (float)var9 / (float)var10; + } + + public void func_28096_a(EntityPlayer var1, int var2, int var3, int var4, int var5) { + if(var5 == 0) { + --var3; + } + + if(var5 == 1) { + ++var3; + } + + if(var5 == 2) { + --var4; + } + + if(var5 == 3) { + ++var4; + } + + if(var5 == 4) { + --var2; + } + + if(var5 == 5) { + ++var2; + } + + if(this.getBlockId(var2, var3, var4) == Block.fire.blockID) { + this.func_28101_a(var1, 1004, var2, var3, var4, 0); + this.setBlockWithNotify(var2, var3, var4, 0); + } + + } + + public TileEntity getBlockTileEntity(int var1, int var2, int var3) { + Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + return var4 != null ? var4.getChunkBlockTileEntity(var1 & 15, var2, var3 & 15) : null; + } + + public void setBlockTileEntity(int var1, int var2, int var3, TileEntity var4) { + if(!var4.isInvalid()) { + if(this.field_31048_L) { + var4.xCoord = var1; + var4.yCoord = var2; + var4.zCoord = var3; + this.field_20912_E.add(var4); + } else { + this.loadedTileEntityList.add(var4); + Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + if(var5 != null) { + var5.setChunkBlockTileEntity(var1 & 15, var2, var3 & 15, var4); + } + } + } + + } + + public void removeBlockTileEntity(int var1, int var2, int var3) { + TileEntity var4 = this.getBlockTileEntity(var1, var2, var3); + if(var4 != null && this.field_31048_L) { + var4.invalidate(); + } else { + if(var4 != null) { + this.loadedTileEntityList.remove(var4); + } + + Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + if(var5 != null) { + var5.removeChunkBlockTileEntity(var1 & 15, var2, var3 & 15); + } + } + + } + + public boolean isBlockOpaqueCube(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.isOpaqueCube(); + } + + public boolean isBlockNormalCube(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.blockMaterial.getIsOpaque() && var4.isACube(); + } + + public boolean func_6156_d() { + if(this.field_4265_J >= 50) { + return false; + } else { + ++this.field_4265_J; + + try { + int var1 = 500; + + boolean var2; + while(this.field_821_y.size() > 0) { + --var1; + if(var1 <= 0) { + var2 = true; + return var2; + } + + ((MetadataChunkBlock)this.field_821_y.remove(this.field_821_y.size() - 1)).func_4107_a(this); + } + + var2 = false; + return var2; + } finally { + --this.field_4265_J; + } + } + } + + public void scheduleLightingUpdate(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.worldProvider.field_4306_c || var1 != EnumSkyBlock.Sky) { + ++field_4268_y; + + try { + if(field_4268_y == 50) { + return; + } + + int var9 = (var5 + var2) / 2; + int var10 = (var7 + var4) / 2; + if(this.blockExists(var9, 64, var10)) { + if(this.getChunkFromBlockCoords(var9, var10).func_21101_g()) { + return; + } + + int var11 = this.field_821_y.size(); + int var12; + if(var8) { + var12 = 5; + if(var12 > var11) { + var12 = var11; + } + + for(int var13 = 0; var13 < var12; ++var13) { + MetadataChunkBlock var14 = (MetadataChunkBlock)this.field_821_y.get(this.field_821_y.size() - var13 - 1); + if(var14.field_957_a == var1 && var14.func_692_a(var2, var3, var4, var5, var6, var7)) { + return; + } + } + } + + this.field_821_y.add(new MetadataChunkBlock(var1, var2, var3, var4, var5, var6, var7)); + var12 = 1000000; + if(this.field_821_y.size() > 1000000) { + System.out.println("More than " + var12 + " updates, aborting lighting updates"); + this.field_821_y.clear(); + } + + return; + } + } finally { + --field_4268_y; + } + + } + } + + public void calculateInitialSkylight() { + int var1 = this.calculateSkylightSubtracted(1.0F); + if(var1 != this.skylightSubtracted) { + this.skylightSubtracted = var1; + } + + } + + public void setAllowedSpawnTypes(boolean var1, boolean var2) { + this.spawnHostileMobs = var1; + this.spawnPeacefulMobs = var2; + } + + public void tick() { + this.updateWeather(); + long var2; + if(this.isAllPlayersFullyAsleep()) { + boolean var1 = false; + if(this.spawnHostileMobs && this.difficultySetting >= 1) { + var1 = SpawnerAnimals.performSleepSpawning(this, this.playerEntities); + } + + if(!var1) { + var2 = this.worldInfo.getWorldTime() + 24000L; + this.worldInfo.setWorldTime(var2 - var2 % 24000L); + this.wakeUpAllPlayers(); + } + } + + SpawnerAnimals.performSpawning(this, this.spawnHostileMobs, this.spawnPeacefulMobs); + this.chunkProvider.func_361_a(); + int var4 = this.calculateSkylightSubtracted(1.0F); + if(var4 != this.skylightSubtracted) { + this.skylightSubtracted = var4; + + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + ((IWorldAccess)this.worldAccesses.get(var5)).updateAllRenderers(); + } + } + + var2 = this.worldInfo.getWorldTime() + 1L; + if(var2 % (long)this.autosavePeriod == 0L) { + this.saveWorld(false, (IProgressUpdate)null); + } + + this.worldInfo.setWorldTime(var2); + this.TickUpdates(false); + this.doRandomUpdateTicks(); + } + + private void func_27070_x() { + if(this.worldInfo.getIsRaining()) { + this.field_27078_C = 1.0F; + if(this.worldInfo.getIsThundering()) { + this.field_27076_E = 1.0F; + } + } + + } + + protected void updateWeather() { + if(!this.worldProvider.field_4306_c) { + if(this.field_27075_F > 0) { + --this.field_27075_F; + } + + int var1 = this.worldInfo.getThunderTime(); + if(var1 <= 0) { + if(this.worldInfo.getIsThundering()) { + this.worldInfo.setThunderTime(this.rand.nextInt(12000) + 3600); + } else { + this.worldInfo.setThunderTime(this.rand.nextInt(168000) + 12000); + } + } else { + --var1; + this.worldInfo.setThunderTime(var1); + if(var1 <= 0) { + this.worldInfo.setIsThundering(!this.worldInfo.getIsThundering()); + } + } + + int var2 = this.worldInfo.getRainTime(); + if(var2 <= 0) { + if(this.worldInfo.getIsRaining()) { + this.worldInfo.setRainTime(this.rand.nextInt(12000) + 12000); + } else { + this.worldInfo.setRainTime(this.rand.nextInt(168000) + 12000); + } + } else { + --var2; + this.worldInfo.setRainTime(var2); + if(var2 <= 0) { + this.worldInfo.setIsRaining(!this.worldInfo.getIsRaining()); + } + } + + this.field_27079_B = this.field_27078_C; + if(this.worldInfo.getIsRaining()) { + this.field_27078_C = (float)((double)this.field_27078_C + 0.01D); + } else { + this.field_27078_C = (float)((double)this.field_27078_C - 0.01D); + } + + if(this.field_27078_C < 0.0F) { + this.field_27078_C = 0.0F; + } + + if(this.field_27078_C > 1.0F) { + this.field_27078_C = 1.0F; + } + + this.field_27077_D = this.field_27076_E; + if(this.worldInfo.getIsThundering()) { + this.field_27076_E = (float)((double)this.field_27076_E + 0.01D); + } else { + this.field_27076_E = (float)((double)this.field_27076_E - 0.01D); + } + + if(this.field_27076_E < 0.0F) { + this.field_27076_E = 0.0F; + } + + if(this.field_27076_E > 1.0F) { + this.field_27076_E = 1.0F; + } + + } + } + + private void clearWeather() { + this.worldInfo.setRainTime(0); + this.worldInfo.setIsRaining(false); + this.worldInfo.setThunderTime(0); + this.worldInfo.setIsThundering(false); + } + + protected void doRandomUpdateTicks() { + this.activeChunkSet.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.activeChunkSet.add(new ChunkCoordIntPair(var6 + var3, var7 + var4)); + } + } + } + + if(this.ambientTickCountdown > 0) { + --this.ambientTickCountdown; + } + + Iterator var12 = this.activeChunkSet.iterator(); + + while(var12.hasNext()) { + ChunkCoordIntPair var13 = (ChunkCoordIntPair)var12.next(); + var3 = var13.chunkXPos * 16; + var4 = var13.chunkZPos * 16; + Chunk var14 = this.getChunkFromChunkCoords(var13.chunkXPos, var13.chunkZPos); + int var8; + int var9; + int var10; + if(this.ambientTickCountdown == 0) { + this.distHashCounter = this.distHashCounter * 3 + 1013904223; + var6 = this.distHashCounter >> 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.getBlockLightValueNoChecks(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.ambientTickCountdown = this.rand.nextInt(12000) + 6000; + } + } + } + + if(this.rand.nextInt(100000) == 0 && this.func_27068_v() && this.func_27067_u()) { + this.distHashCounter = this.distHashCounter * 3 + 1013904223; + var6 = this.distHashCounter >> 2; + var7 = var3 + (var6 & 15); + var8 = var4 + (var6 >> 8 & 15); + var9 = this.getTopSolidOrLiquidBlock(var7, var8); + if(this.canLightningStrikeAt(var7, var9, var8)) { + this.addLightningBolt(new EntityLightningBolt(this, (double)var7, (double)var9, (double)var8)); + this.field_27075_F = 2; + } + } + + int var15; + if(this.rand.nextInt(16) == 0) { + this.distHashCounter = this.distHashCounter * 3 + 1013904223; + var6 = this.distHashCounter >> 2; + var7 = var6 & 15; + var8 = var6 >> 8 & 15; + var9 = this.getTopSolidOrLiquidBlock(var7 + var3, var8 + var4); + if(this.getWorldChunkManager().getBiomeGenAt(var7 + var3, var8 + var4).getEnableSnow() && var9 >= 0 && var9 < 128 && var14.getSavedLightValue(EnumSkyBlock.Block, var7, var9, var8) < 10) { + var10 = var14.getBlockID(var7, var9 - 1, var8); + var15 = var14.getBlockID(var7, var9, var8); + if(this.func_27068_v() && var15 == 0 && Block.snow.canPlaceBlockAt(this, var7 + var3, var9, var8 + var4) && var10 != 0 && var10 != Block.ice.blockID && Block.blocksList[var10].blockMaterial.getIsSolid()) { + this.setBlockWithNotify(var7 + var3, var9, var8 + var4, Block.snow.blockID); + } + + if(var10 == Block.waterStill.blockID && var14.getBlockMetadata(var7, var9 - 1, var8) == 0) { + this.setBlockWithNotify(var7 + var3, var9 - 1, var8 + var4, Block.ice.blockID); + } + } + } + + for(var6 = 0; var6 < 80; ++var6) { + this.distHashCounter = this.distHashCounter * 3 + 1013904223; + var7 = this.distHashCounter >> 2; + var8 = var7 & 15; + var9 = var7 >> 8 & 15; + var10 = var7 >> 16 & 127; + var15 = var14.blocks[var8 << 11 | var9 << 7 | var10] & 255; + 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.worldInfo.getWorldTime()) { + 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 updateTileEntityChunkAndDoNothing(int var1, int var2, int var3, TileEntity var4) { + if(this.blockExists(var1, var2, var3)) { + this.getChunkFromBlockCoords(var1, var3).setChunkModified(); + } + + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + ((IWorldAccess)this.worldAccesses.get(var5)).doNothingWithTileEntity(var1, var2, var3, var4); + } + + } + + public int countEntities(Class var1) { + int var2 = 0; + + for(int var3 = 0; var3 < this.loadedEntityList.size(); ++var3) { + Entity var4 = (Entity)this.loadedEntityList.get(var3); + if(var1.isAssignableFrom(var4.getClass())) { + ++var2; + } + } + + return var2; + } + + public void addLoadedEntities(List var1) { + this.loadedEntityList.addAll(var1); + + for(int var2 = 0; var2 < var1.size(); ++var2) { + this.obtainEntitySkin((Entity)var1.get(var2)); + } + + } + + public void addUnloadedEntities(List var1) { + this.unloadedEntityList.addAll(var1); + } + + public boolean canBlockBePlacedAt(int var1, int var2, int var3, int var4, boolean var5, int var6) { + int var7 = this.getBlockId(var2, var3, var4); + Block var8 = Block.blocksList[var7]; + Block var9 = Block.blocksList[var1]; + AxisAlignedBB var10 = var9.getCollisionBoundingBoxFromPool(this, var2, var3, var4); + if(var5) { + var10 = null; + } + + if(var10 != null && !this.checkIfAABBIsClear(var10)) { + return false; + } else { + if(var8 == Block.waterMoving || var8 == Block.waterStill || var8 == Block.lavaMoving || var8 == Block.lavaStill || var8 == Block.fire || var8 == Block.snow) { + var8 = null; + } + + return var1 > 0 && var8 == null && var9.canPlaceBlockOnSide(this, var2, var3, var4, var6); + } + } + + public PathEntity getPathToEntity(Entity var1, Entity var2, float var3) { + int var4 = MathHelper.floor_double(var1.posX); + int var5 = MathHelper.floor_double(var1.posY); + int var6 = MathHelper.floor_double(var1.posZ); + int var7 = (int)(var3 + 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 getEntityPathToXYZ(Entity var1, int var2, int var3, int var4, float var5) { + int var6 = MathHelper.floor_double(var1.posX); + int var7 = MathHelper.floor_double(var1.posY); + int var8 = MathHelper.floor_double(var1.posZ); + int var9 = (int)(var5 + 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.isBlockNormalCube(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 EntityPlayer getPlayerEntityByName(String var1) { + for(int var2 = 0; var2 < this.playerEntities.size(); ++var2) { + if(var1.equals(((EntityPlayer)this.playerEntities.get(var2)).username)) { + return (EntityPlayer)this.playerEntities.get(var2); + } + } + + return null; + } + + public byte[] getChunkData(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).getChunkData(var7, var16, var13, var19, var17, var14, var20, var12); + } + } + + return var7; + } + + public void checkSessionLock() { + this.worldFile.func_22091_b(); + } + + public void setWorldTime(long var1) { + this.worldInfo.setWorldTime(var1); + } + + public void func_32005_b(long var1) { + long var3 = var1 - this.worldInfo.getWorldTime(); + + NextTickListEntry var6; + for(Iterator var5 = this.scheduledTickSet.iterator(); var5.hasNext(); var6.scheduledTime += var3) { + var6 = (NextTickListEntry)var5.next(); + } + + this.setWorldTime(var1); + } + + public long getRandomSeed() { + return this.worldInfo.getRandomSeed(); + } + + public long getWorldTime() { + return this.worldInfo.getWorldTime(); + } + + public ChunkCoordinates getSpawnPoint() { + return new ChunkCoordinates(this.worldInfo.getSpawnX(), this.worldInfo.getSpawnY(), this.worldInfo.getSpawnZ()); + } + + public boolean canMineBlock(EntityPlayer var1, int var2, int var3, int var4) { + return true; + } + + public void sendTrackedEntityStatusUpdatePacket(Entity var1, byte var2) { + } + + public IChunkProvider o() { + return this.chunkProvider; + } + + public void playNoteAt(int var1, int var2, int var3, int var4, int var5) { + int var6 = this.getBlockId(var1, var2, var3); + if(var6 > 0) { + Block.blocksList[var6].playBlock(this, var1, var2, var3, var4, var5); + } + + } + + public ISaveHandler getWorldFile() { + return this.worldFile; + } + + public WorldInfo getWorldInfo() { + return this.worldInfo; + } + + public void updateAllPlayersSleepingFlag() { + this.allPlayersSleeping = !this.playerEntities.isEmpty(); + Iterator var1 = this.playerEntities.iterator(); + + while(var1.hasNext()) { + EntityPlayer var2 = (EntityPlayer)var1.next(); + if(!var2.func_22057_E()) { + this.allPlayersSleeping = false; + break; + } + } + + } + + protected void wakeUpAllPlayers() { + this.allPlayersSleeping = false; + Iterator var1 = this.playerEntities.iterator(); + + while(var1.hasNext()) { + EntityPlayer var2 = (EntityPlayer)var1.next(); + if(var2.func_22057_E()) { + var2.wakeUpPlayer(false, false, true); + } + } + + this.clearWeather(); + } + + public boolean isAllPlayersFullyAsleep() { + if(this.allPlayersSleeping && !this.singleplayerWorld) { + Iterator var1 = this.playerEntities.iterator(); + + EntityPlayer var2; + do { + if(!var1.hasNext()) { + return true; + } + + var2 = (EntityPlayer)var1.next(); + } while(var2.isPlayerFullyAsleep()); + + return false; + } else { + return false; + } + } + + public float func_27065_c(float var1) { + return (this.field_27077_D + (this.field_27076_E - this.field_27077_D) * var1) * this.func_27074_d(var1); + } + + public float func_27074_d(float var1) { + return this.field_27079_B + (this.field_27078_C - this.field_27079_B) * var1; + } + + public boolean func_27067_u() { + return (double)this.func_27065_c(1.0F) > 0.9D; + } + + public boolean func_27068_v() { + return (double)this.func_27074_d(1.0F) > 0.2D; + } + + public boolean canLightningStrikeAt(int var1, int var2, int var3) { + if(!this.func_27068_v()) { + return false; + } else if(!this.canBlockSeeTheSky(var1, var2, var3)) { + return false; + } else if(this.getTopSolidOrLiquidBlock(var1, var3) > var2) { + return false; + } else { + BiomeGenBase var4 = this.getWorldChunkManager().getBiomeGenAt(var1, var3); + return var4.getEnableSnow() ? false : var4.canSpawnLightningBolt(); + } + } + + public void func_28102_a(String var1, MapDataBase var2) { + this.field_28105_z.func_28177_a(var1, var2); + } + + public MapDataBase func_28103_a(Class var1, String var2) { + return this.field_28105_z.func_28178_a(var1, var2); + } + + public int func_28104_b(String var1) { + return this.field_28105_z.func_28173_a(var1); + } + + public void func_28097_e(int var1, int var2, int var3, int var4, int var5) { + this.func_28101_a((EntityPlayer)null, var1, var2, var3, var4, var5); + } + + public void func_28101_a(EntityPlayer var1, int var2, int var3, int var4, int var5, int var6) { + for(int var7 = 0; var7 < this.worldAccesses.size(); ++var7) { + ((IWorldAccess)this.worldAccesses.get(var7)).func_28133_a(var1, var2, var3, var4, var5, var6); + } + + } +} diff --git a/src/net/minecraft/src/WorldChunkManager.java b/src/net/minecraft/src/WorldChunkManager.java new file mode 100644 index 0000000..7560939 --- /dev/null +++ b/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 BiomeGenBase[] field_4256_d; + + protected WorldChunkManager() { + } + + public WorldChunkManager(World var1) { + this.field_4255_e = new NoiseGeneratorOctaves2(new Random(var1.getRandomSeed() * 9871L), 4); + this.field_4254_f = new NoiseGeneratorOctaves2(new Random(var1.getRandomSeed() * 39811L), 4); + this.field_4253_g = new NoiseGeneratorOctaves2(new Random(var1.getRandomSeed() * 543321L), 2); + } + + public BiomeGenBase func_4066_a(ChunkCoordIntPair var1) { + return this.getBiomeGenAt(var1.chunkXPos << 4, var1.chunkZPos << 4); + } + + public BiomeGenBase getBiomeGenAt(int var1, int var2) { + return this.func_4065_a(var1, var2, 1, 1)[0]; + } + + public BiomeGenBase[] 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, var5, (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, var5, 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 BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase[] var1, int var2, int var3, int var4, int var5) { + if(var1 == null || var1.length < var4 * var5) { + var1 = new BiomeGenBase[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++] = BiomeGenBase.getBiomeFromLookup(var15, var17); + } + } + + return var1; + } +} diff --git a/src/net/minecraft/src/WorldChunkManagerHell.java b/src/net/minecraft/src/WorldChunkManagerHell.java new file mode 100644 index 0000000..4d16d9a --- /dev/null +++ b/src/net/minecraft/src/WorldChunkManagerHell.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.util.Arrays; + +public class WorldChunkManagerHell extends WorldChunkManager { + private BiomeGenBase field_4262_e; + private double field_4261_f; + private double field_4260_g; + + public WorldChunkManagerHell(BiomeGenBase var1, double var2, double var4) { + this.field_4262_e = var1; + this.field_4261_f = var2; + this.field_4260_g = var4; + } + + public BiomeGenBase func_4066_a(ChunkCoordIntPair var1) { + return this.field_4262_e; + } + + public BiomeGenBase getBiomeGenAt(int var1, int var2) { + return this.field_4262_e; + } + + public BiomeGenBase[] 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 BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase[] var1, int var2, int var3, int var4, int var5) { + if(var1 == null || var1.length < var4 * var5) { + var1 = new BiomeGenBase[var4 * var5]; + } + + if(this.temperature == null || this.temperature.length < 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/src/net/minecraft/src/WorldGenBigTree.java b/src/net/minecraft/src/WorldGenBigTree.java new file mode 100644 index 0000000..b61b8e8 --- /dev/null +++ b/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 random0 = new Random(); + World worldObj; + int[] basePos = new int[]{0, 0, 0}; + int field_756_e = 0; + int height; + 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.height = (int)((double)this.field_756_e * this.field_754_g); + if(this.height >= this.field_756_e) { + this.height = 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.basePos[1] + this.field_756_e - this.field_747_n; + int var4 = 1; + int var5 = this.basePos[1] + this.height; + int var6 = var3 - this.basePos[1]; + var2[0][0] = this.basePos[0]; + var2[0][1] = var3; + var2[0][2] = this.basePos[2]; + var2[0][3] = var5; + --var3; + + while(true) { + while(var6 >= 0) { + int var7 = 0; + float var8 = this.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.random0.nextFloat() + 0.328D); + double var13 = (double)this.random0.nextFloat() * 2.0D * 3.14159D; + int var15 = MathHelper.floor_double(var11 * Math.sin(var13) + (double)this.basePos[0] + var9); + int var16 = MathHelper.floor_double(var11 * Math.cos(var13) + (double)this.basePos[2] + var9); + int[] var17 = new int[]{var15, var3, var16}; + int[] var18 = new int[]{var15, var3 + this.field_747_n, var16}; + if(this.func_427_a(var17, var18) == -1) { + int[] var19 = new int[]{this.basePos[0], this.basePos[1], this.basePos[2]}; + double var20 = Math.sqrt(Math.pow((double)Math.abs(this.basePos[0] - var17[0]), 2.0D) + Math.pow((double)Math.abs(this.basePos[2] - var17[2]), 2.0D)); + double var22 = var20 * this.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.basePos[0]; + int var2 = this.basePos[1]; + int var3 = this.basePos[1] + this.height; + int var4 = this.basePos[2]; + int[] var5 = new int[]{var1, var2, var4}; + int[] var6 = new int[]{var1, var3, var4}; + this.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.basePos[0], this.basePos[1], this.basePos[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.basePos[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] = MathHelper.floor_double((double)var1[var6] + (double)var14 * var9); + var13[var7] = MathHelper.floor_double((double)var1[var7] + (double)var14 * var11); + int var16 = this.worldObj.getBlockId(var13[0], var13[1], var13[2]); + if(var16 != 0 && var16 != 18) { + break; + } + } + + return var14 == var15 ? -1 : Math.abs(var14); + } + } + + boolean func_422_e() { + int[] var1 = new int[]{this.basePos[0], this.basePos[1], this.basePos[2]}; + int[] var2 = new int[]{this.basePos[0], this.basePos[1] + this.field_756_e - 1, this.basePos[2]}; + int var3 = this.worldObj.getBlockId(this.basePos[0], this.basePos[1] - 1, this.basePos[2]); + if(var3 != 2 && var3 != 3) { + return false; + } else { + int var4 = this.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.random0.setSeed(var6); + this.basePos[0] = var3; + this.basePos[1] = var4; + this.basePos[2] = var5; + if(this.field_756_e == 0) { + this.field_756_e = 5 + this.random0.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/src/net/minecraft/src/WorldGenCactus.java b/src/net/minecraft/src/WorldGenCactus.java new file mode 100644 index 0000000..cedc49d --- /dev/null +++ b/src/net/minecraft/src/WorldGenCactus.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenCactus extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 10; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var7, var8, var9)) { + int var10 = 1 + var2.nextInt(var2.nextInt(3) + 1); + + for(int var11 = 0; var11 < var10; ++var11) { + if(Block.cactus.canBlockStay(var1, var7, var8 + var11, var9)) { + var1.setBlock(var7, var8 + var11, var9, Block.cactus.blockID); + } + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenClay.java b/src/net/minecraft/src/WorldGenClay.java new file mode 100644 index 0000000..1e538a4 --- /dev/null +++ b/src/net/minecraft/src/WorldGenClay.java @@ -0,0 +1,59 @@ +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; + int var32 = MathHelper.floor_double(var20 - var28 / 2.0D); + int var33 = MathHelper.floor_double(var20 + var28 / 2.0D); + int var34 = MathHelper.floor_double(var22 - var30 / 2.0D); + int var35 = MathHelper.floor_double(var22 + var30 / 2.0D); + int var36 = MathHelper.floor_double(var24 - var28 / 2.0D); + int var37 = MathHelper.floor_double(var24 + var28 / 2.0D); + + for(int var38 = var32; var38 <= var33; ++var38) { + for(int var39 = var34; var39 <= var35; ++var39) { + for(int var40 = var36; var40 <= var37; ++var40) { + double var41 = ((double)var38 + 0.5D - var20) / (var28 / 2.0D); + double var43 = ((double)var39 + 0.5D - var22) / (var30 / 2.0D); + double var45 = ((double)var40 + 0.5D - var24) / (var28 / 2.0D); + if(var41 * var41 + var43 * var43 + var45 * var45 < 1.0D) { + int var47 = var1.getBlockId(var38, var39, var40); + if(var47 == Block.sand.blockID) { + var1.setBlock(var38, var39, var40, this.clayBlockId); + } + } + } + } + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenDeadBush.java b/src/net/minecraft/src/WorldGenDeadBush.java new file mode 100644 index 0000000..0f3805f --- /dev/null +++ b/src/net/minecraft/src/WorldGenDeadBush.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenDeadBush extends WorldGenerator { + private int field_28055_a; + + public WorldGenDeadBush(int var1) { + this.field_28055_a = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + boolean var6 = false; + + while(true) { + int var11 = var1.getBlockId(var3, var4, var5); + if(var11 != 0 && var11 != Block.leaves.blockID || var4 <= 0) { + for(int var7 = 0; var7 < 4; ++var7) { + int var8 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var9 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var10 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var8, var9, var10) && ((BlockFlower)Block.blocksList[this.field_28055_a]).canBlockStay(var1, var8, var9, var10)) { + var1.setBlock(var8, var9, var10, this.field_28055_a); + } + } + + return true; + } + + --var4; + } + } +} diff --git a/src/net/minecraft/src/WorldGenDungeons.java b/src/net/minecraft/src/WorldGenDungeons.java new file mode 100644 index 0000000..72bd60f --- /dev/null +++ b/src/net/minecraft/src/WorldGenDungeons.java @@ -0,0 +1,116 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenDungeons extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + byte var6 = 3; + int var7 = var2.nextInt(2) + 2; + int var8 = var2.nextInt(2) + 2; + int var9 = 0; + + int var10; + int var11; + int var12; + for(var10 = var3 - var7 - 1; var10 <= var3 + var7 + 1; ++var10) { + for(var11 = var4 - 1; var11 <= var4 + var6 + 1; ++var11) { + for(var12 = var5 - var8 - 1; var12 <= var5 + var8 + 1; ++var12) { + Material var13 = var1.getBlockMaterial(var10, var11, var12); + if(var11 == var4 - 1 && !var13.isSolid()) { + return false; + } + + if(var11 == var4 + var6 + 1 && !var13.isSolid()) { + return false; + } + + if((var10 == var3 - var7 - 1 || var10 == var3 + var7 + 1 || var12 == var5 - var8 - 1 || var12 == var5 + var8 + 1) && var11 == var4 && var1.isAirBlock(var10, var11, var12) && var1.isAirBlock(var10, var11 + 1, var12)) { + ++var9; + } + } + } + } + + if(var9 >= 1 && var9 <= 5) { + for(var10 = var3 - var7 - 1; var10 <= var3 + var7 + 1; ++var10) { + for(var11 = var4 + var6; var11 >= var4 - 1; --var11) { + for(var12 = var5 - var8 - 1; var12 <= var5 + var8 + 1; ++var12) { + if(var10 != var3 - var7 - 1 && var11 != var4 - 1 && var12 != var5 - var8 - 1 && var10 != var3 + var7 + 1 && var11 != var4 + var6 + 1 && var12 != var5 + var8 + 1) { + var1.setBlockWithNotify(var10, var11, var12, 0); + } else if(var11 >= 0 && !var1.getBlockMaterial(var10, var11 - 1, var12).isSolid()) { + var1.setBlockWithNotify(var10, var11, var12, 0); + } else if(var1.getBlockMaterial(var10, var11, var12).isSolid()) { + if(var11 == var4 - 1 && var2.nextInt(4) != 0) { + var1.setBlockWithNotify(var10, var11, var12, Block.cobblestoneMossy.blockID); + } else { + var1.setBlockWithNotify(var10, var11, var12, Block.cobblestone.blockID); + } + } + } + } + } + + label110: + for(var10 = 0; var10 < 2; ++var10) { + for(var11 = 0; var11 < 3; ++var11) { + var12 = var3 + var2.nextInt(var7 * 2 + 1) - var7; + int var14 = var5 + var2.nextInt(var8 * 2 + 1) - var8; + if(var1.isAirBlock(var12, var4, var14)) { + int var15 = 0; + if(var1.getBlockMaterial(var12 - 1, var4, var14).isSolid()) { + ++var15; + } + + if(var1.getBlockMaterial(var12 + 1, var4, var14).isSolid()) { + ++var15; + } + + if(var1.getBlockMaterial(var12, var4, var14 - 1).isSolid()) { + ++var15; + } + + if(var1.getBlockMaterial(var12, var4, var14 + 1).isSolid()) { + ++var15; + } + + if(var15 == 1) { + var1.setBlockWithNotify(var12, var4, var14, Block.chest.blockID); + TileEntityChest var16 = (TileEntityChest)var1.getBlockTileEntity(var12, var4, var14); + int var17 = 0; + + while(true) { + if(var17 >= 8) { + continue label110; + } + + ItemStack var18 = this.pickCheckLootItem(var2); + if(var18 != null) { + var16.setInventorySlotContents(var2.nextInt(var16.getSizeInventory()), var18); + } + + ++var17; + } + } + } + } + } + + var1.setBlockWithNotify(var3, var4, var5, Block.mobSpawner.blockID); + TileEntityMobSpawner var19 = (TileEntityMobSpawner)var1.getBlockTileEntity(var3, var4, var5); + var19.setMobID(this.pickMobSpawner(var2)); + return true; + } else { + return false; + } + } + + private ItemStack pickCheckLootItem(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.shiftedIndex + var1.nextInt(2)]) : (var2 == 10 ? new ItemStack(Item.dyePowder, 1, 3) : null)))))))))); + } + + private String pickMobSpawner(Random var1) { + int var2 = var1.nextInt(4); + return var2 == 0 ? "Skeleton" : (var2 == 1 ? "Zombie" : (var2 == 2 ? "Zombie" : (var2 == 3 ? "Spider" : ""))); + } +} diff --git a/src/net/minecraft/src/WorldGenFire.java b/src/net/minecraft/src/WorldGenFire.java new file mode 100644 index 0000000..e037ecd --- /dev/null +++ b/src/net/minecraft/src/WorldGenFire.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenFire extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 64; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var7, var8, var9) && var1.getBlockId(var7, var8 - 1, var9) == Block.bloodStone.blockID) { + var1.setBlockWithNotify(var7, var8, var9, Block.fire.blockID); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenFlowers.java b/src/net/minecraft/src/WorldGenFlowers.java new file mode 100644 index 0000000..199050b --- /dev/null +++ b/src/net/minecraft/src/WorldGenFlowers.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenFlowers extends WorldGenerator { + private int plantBlockId; + + public WorldGenFlowers(int var1) { + this.plantBlockId = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 64; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var7, var8, var9) && ((BlockFlower)Block.blocksList[this.plantBlockId]).canBlockStay(var1, var7, var8, var9)) { + var1.setBlock(var7, var8, var9, this.plantBlockId); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenForest.java b/src/net/minecraft/src/WorldGenForest.java new file mode 100644 index 0000000..844b2c3 --- /dev/null +++ b/src/net/minecraft/src/WorldGenForest.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenForest extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(3) + 5; + boolean var7 = true; + if(var4 >= 1 && var4 + var6 + 1 <= 128) { + int var8; + int var10; + int var11; + int var12; + for(var8 = var4; var8 <= var4 + 1 + var6; ++var8) { + byte var9 = 1; + if(var8 == var4) { + var9 = 0; + } + + if(var8 >= var4 + 1 + var6 - 2) { + var9 = 2; + } + + for(var10 = var3 - var9; var10 <= var3 + var9 && var7; ++var10) { + for(var11 = var5 - var9; var11 <= var5 + var9 && var7; ++var11) { + if(var8 >= 0 && var8 < 128) { + var12 = var1.getBlockId(var10, var8, var11); + if(var12 != 0 && var12 != Block.leaves.blockID) { + var7 = false; + } + } else { + var7 = false; + } + } + } + } + + if(!var7) { + return false; + } else { + var8 = var1.getBlockId(var3, var4 - 1, var5); + if((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && var4 < 128 - var6 - 1) { + var1.setBlock(var3, var4 - 1, var5, Block.dirt.blockID); + + int var16; + for(var16 = var4 - 3 + var6; var16 <= var4 + var6; ++var16) { + var10 = var16 - (var4 + var6); + var11 = 1 - var10 / 2; + + for(var12 = var3 - var11; var12 <= var3 + var11; ++var12) { + int var13 = var12 - var3; + + for(int var14 = var5 - var11; var14 <= var5 + var11; ++var14) { + int var15 = var14 - var5; + if((Math.abs(var13) != var11 || Math.abs(var15) != var11 || var2.nextInt(2) != 0 && var10 != 0) && !Block.opaqueCubeLookup[var1.getBlockId(var12, var16, var14)]) { + var1.setBlockAndMetadata(var12, var16, var14, Block.leaves.blockID, 2); + } + } + } + } + + for(var16 = 0; var16 < var6; ++var16) { + var10 = var1.getBlockId(var3, var4 + var16, var5); + if(var10 == 0 || var10 == Block.leaves.blockID) { + var1.setBlockAndMetadata(var3, var4 + var16, var5, Block.wood.blockID, 2); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/WorldGenGlowStone1.java b/src/net/minecraft/src/WorldGenGlowStone1.java new file mode 100644 index 0000000..44e19c1 --- /dev/null +++ b/src/net/minecraft/src/WorldGenGlowStone1.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenGlowStone1 extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(!var1.isAirBlock(var3, var4, var5)) { + return false; + } else if(var1.getBlockId(var3, var4 + 1, var5) != Block.bloodStone.blockID) { + return false; + } else { + var1.setBlockWithNotify(var3, var4, var5, Block.glowStone.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.glowStone.blockID) { + ++var10; + } + } + + if(var10 == 1) { + var1.setBlockWithNotify(var7, var8, var9, Block.glowStone.blockID); + } + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenGlowStone2.java b/src/net/minecraft/src/WorldGenGlowStone2.java new file mode 100644 index 0000000..ca70e0f --- /dev/null +++ b/src/net/minecraft/src/WorldGenGlowStone2.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenGlowStone2 extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(!var1.isAirBlock(var3, var4, var5)) { + return false; + } else if(var1.getBlockId(var3, var4 + 1, var5) != Block.bloodStone.blockID) { + return false; + } else { + var1.setBlockWithNotify(var3, var4, var5, Block.glowStone.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.glowStone.blockID) { + ++var10; + } + } + + if(var10 == 1) { + var1.setBlockWithNotify(var7, var8, var9, Block.glowStone.blockID); + } + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenHellLava.java b/src/net/minecraft/src/WorldGenHellLava.java new file mode 100644 index 0000000..4646bea --- /dev/null +++ b/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.isAirBlock(var3 - 1, var4, var5)) { + ++var7; + } + + if(var1.isAirBlock(var3 + 1, var4, var5)) { + ++var7; + } + + if(var1.isAirBlock(var3, var4, var5 - 1)) { + ++var7; + } + + if(var1.isAirBlock(var3, var4, var5 + 1)) { + ++var7; + } + + if(var1.isAirBlock(var3, var4 - 1, var5)) { + ++var7; + } + + if(var6 == 4 && var7 == 1) { + var1.setBlockWithNotify(var3, var4, var5, this.field_4250_a); + var1.scheduledUpdatesAreImmediate = true; + Block.blocksList[this.field_4250_a].updateTick(var1, var3, var4, var5, var2); + var1.scheduledUpdatesAreImmediate = false; + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenLakes.java b/src/net/minecraft/src/WorldGenLakes.java new file mode 100644 index 0000000..1cf6123 --- /dev/null +++ b/src/net/minecraft/src/WorldGenLakes.java @@ -0,0 +1,102 @@ +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.isAirBlock(var3, var4, var5); --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; + boolean var33; + for(var8 = 0; var8 < 16; ++var8) { + for(var32 = 0; var32 < 16; ++var32) { + for(var10 = 0; var10 < 8; ++var10) { + var33 = !var6[(var8 * 16 + var32) * 8 + var10] && (var8 < 15 && var6[((var8 + 1) * 16 + var32) * 8 + var10] || var8 > 0 && var6[((var8 - 1) * 16 + var32) * 8 + var10] || var32 < 15 && var6[(var8 * 16 + var32 + 1) * 8 + var10] || var32 > 0 && var6[(var8 * 16 + (var32 - 1)) * 8 + var10] || var10 < 7 && var6[(var8 * 16 + var32) * 8 + var10 + 1] || var10 > 0 && var6[(var8 * 16 + var32) * 8 + (var10 - 1)]); + if(var33) { + Material var12 = var1.getBlockMaterial(var3 + var8, var4 + var10, var5 + var32); + if(var10 >= 4 && var12.getIsLiquid()) { + return false; + } + + if(var10 < 4 && !var12.isSolid() && 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.setBlock(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.setBlock(var3 + var8, var4 + var10 - 1, var5 + var32, Block.grass.blockID); + } + } + } + } + + if(Block.blocksList[this.field_15005_a].blockMaterial == Material.lava) { + for(var8 = 0; var8 < 16; ++var8) { + for(var32 = 0; var32 < 16; ++var32) { + for(var10 = 0; var10 < 8; ++var10) { + var33 = !var6[(var8 * 16 + var32) * 8 + var10] && (var8 < 15 && var6[((var8 + 1) * 16 + var32) * 8 + var10] || var8 > 0 && var6[((var8 - 1) * 16 + var32) * 8 + var10] || var32 < 15 && var6[(var8 * 16 + var32 + 1) * 8 + var10] || var32 > 0 && var6[(var8 * 16 + (var32 - 1)) * 8 + var10] || var10 < 7 && var6[(var8 * 16 + var32) * 8 + var10 + 1] || var10 > 0 && var6[(var8 * 16 + var32) * 8 + (var10 - 1)]); + if(var33 && (var10 < 4 || var2.nextInt(2) != 0) && var1.getBlockMaterial(var3 + var8, var4 + var10, var5 + var32).isSolid()) { + var1.setBlock(var3 + var8, var4 + var10, var5 + var32, Block.stone.blockID); + } + } + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenLiquids.java b/src/net/minecraft/src/WorldGenLiquids.java new file mode 100644 index 0000000..05c797f --- /dev/null +++ b/src/net/minecraft/src/WorldGenLiquids.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenLiquids extends WorldGenerator { + private int liquidBlockId; + + public WorldGenLiquids(int var1) { + this.liquidBlockId = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(var1.getBlockId(var3, var4 + 1, var5) != Block.stone.blockID) { + return false; + } else if(var1.getBlockId(var3, var4 - 1, var5) != Block.stone.blockID) { + return false; + } else if(var1.getBlockId(var3, var4, var5) != 0 && var1.getBlockId(var3, var4, var5) != Block.stone.blockID) { + return false; + } else { + int var6 = 0; + if(var1.getBlockId(var3 - 1, var4, var5) == Block.stone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3 + 1, var4, var5) == Block.stone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4, var5 - 1) == Block.stone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4, var5 + 1) == Block.stone.blockID) { + ++var6; + } + + int var7 = 0; + if(var1.isAirBlock(var3 - 1, var4, var5)) { + ++var7; + } + + if(var1.isAirBlock(var3 + 1, var4, var5)) { + ++var7; + } + + if(var1.isAirBlock(var3, var4, var5 - 1)) { + ++var7; + } + + if(var1.isAirBlock(var3, var4, var5 + 1)) { + ++var7; + } + + if(var6 == 3 && var7 == 1) { + var1.setBlockWithNotify(var3, var4, var5, this.liquidBlockId); + var1.scheduledUpdatesAreImmediate = true; + Block.blocksList[this.liquidBlockId].updateTick(var1, var3, var4, var5, var2); + var1.scheduledUpdatesAreImmediate = false; + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenMinable.java b/src/net/minecraft/src/WorldGenMinable.java new file mode 100644 index 0000000..ef0ef94 --- /dev/null +++ b/src/net/minecraft/src/WorldGenMinable.java @@ -0,0 +1,57 @@ +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; + int var32 = MathHelper.floor_double(var20 - var28 / 2.0D); + int var33 = MathHelper.floor_double(var22 - var30 / 2.0D); + int var34 = MathHelper.floor_double(var24 - var28 / 2.0D); + int var35 = MathHelper.floor_double(var20 + var28 / 2.0D); + int var36 = MathHelper.floor_double(var22 + var30 / 2.0D); + int var37 = MathHelper.floor_double(var24 + var28 / 2.0D); + + for(int var38 = var32; var38 <= var35; ++var38) { + double var39 = ((double)var38 + 0.5D - var20) / (var28 / 2.0D); + if(var39 * var39 < 1.0D) { + for(int var41 = var33; var41 <= var36; ++var41) { + double var42 = ((double)var41 + 0.5D - var22) / (var30 / 2.0D); + if(var39 * var39 + var42 * var42 < 1.0D) { + for(int var44 = var34; var44 <= var37; ++var44) { + double var45 = ((double)var44 + 0.5D - var24) / (var28 / 2.0D); + if(var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && var1.getBlockId(var38, var41, var44) == Block.stone.blockID) { + var1.setBlock(var38, var41, var44, this.minableBlockId); + } + } + } + } + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenPumpkin.java b/src/net/minecraft/src/WorldGenPumpkin.java new file mode 100644 index 0000000..5353a73 --- /dev/null +++ b/src/net/minecraft/src/WorldGenPumpkin.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenPumpkin extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 64; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var7, var8, var9) && var1.getBlockId(var7, var8 - 1, var9) == Block.grass.blockID && Block.pumpkin.canPlaceBlockAt(var1, var7, var8, var9)) { + var1.setBlockAndMetadata(var7, var8, var9, Block.pumpkin.blockID, var2.nextInt(4)); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenReed.java b/src/net/minecraft/src/WorldGenReed.java new file mode 100644 index 0000000..c87d951 --- /dev/null +++ b/src/net/minecraft/src/WorldGenReed.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenReed extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 20; ++var6) { + int var7 = var3 + var2.nextInt(4) - var2.nextInt(4); + int var8 = var4; + int var9 = var5 + var2.nextInt(4) - var2.nextInt(4); + if(var1.isAirBlock(var7, var4, var9) && (var1.getBlockMaterial(var7 - 1, var4 - 1, var9) == Material.water || var1.getBlockMaterial(var7 + 1, var4 - 1, var9) == Material.water || var1.getBlockMaterial(var7, var4 - 1, var9 - 1) == Material.water || var1.getBlockMaterial(var7, var4 - 1, var9 + 1) == Material.water)) { + int var10 = 2 + var2.nextInt(var2.nextInt(3) + 1); + + for(int var11 = 0; var11 < var10; ++var11) { + if(Block.reed.canBlockStay(var1, var7, var8 + var11, var9)) { + var1.setBlock(var7, var8 + var11, var9, Block.reed.blockID); + } + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenTaiga1.java b/src/net/minecraft/src/WorldGenTaiga1.java new file mode 100644 index 0000000..0956a9f --- /dev/null +++ b/src/net/minecraft/src/WorldGenTaiga1.java @@ -0,0 +1,83 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenTaiga1 extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(5) + 7; + int var7 = var6 - var2.nextInt(2) - 3; + int var8 = var6 - var7; + int var9 = 1 + var2.nextInt(var8 + 1); + boolean var10 = true; + if(var4 >= 1 && var4 + var6 + 1 <= 128) { + int var11; + int var13; + int var14; + int var15; + int var18; + for(var11 = var4; var11 <= var4 + 1 + var6 && var10; ++var11) { + boolean var12 = true; + if(var11 - var4 < var7) { + var18 = 0; + } else { + var18 = var9; + } + + for(var13 = var3 - var18; var13 <= var3 + var18 && var10; ++var13) { + for(var14 = var5 - var18; var14 <= var5 + var18 && var10; ++var14) { + if(var11 >= 0 && var11 < 128) { + var15 = var1.getBlockId(var13, var11, var14); + if(var15 != 0 && var15 != Block.leaves.blockID) { + var10 = false; + } + } else { + var10 = false; + } + } + } + } + + if(!var10) { + return false; + } else { + var11 = var1.getBlockId(var3, var4 - 1, var5); + if((var11 == Block.grass.blockID || var11 == Block.dirt.blockID) && var4 < 128 - var6 - 1) { + var1.setBlock(var3, var4 - 1, var5, Block.dirt.blockID); + var18 = 0; + + for(var13 = var4 + var6; var13 >= var4 + var7; --var13) { + for(var14 = var3 - var18; var14 <= var3 + var18; ++var14) { + var15 = var14 - var3; + + for(int var16 = var5 - var18; var16 <= var5 + var18; ++var16) { + int var17 = var16 - var5; + if((Math.abs(var15) != var18 || Math.abs(var17) != var18 || var18 <= 0) && !Block.opaqueCubeLookup[var1.getBlockId(var14, var13, var16)]) { + var1.setBlockAndMetadata(var14, var13, var16, Block.leaves.blockID, 1); + } + } + } + + if(var18 >= 1 && var13 == var4 + var7 + 1) { + --var18; + } else if(var18 < var9) { + ++var18; + } + } + + for(var13 = 0; var13 < var6 - 1; ++var13) { + var14 = var1.getBlockId(var3, var4 + var13, var5); + if(var14 == 0 || var14 == Block.leaves.blockID) { + var1.setBlockAndMetadata(var3, var4 + var13, var5, Block.wood.blockID, 1); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/WorldGenTaiga2.java b/src/net/minecraft/src/WorldGenTaiga2.java new file mode 100644 index 0000000..2294b74 --- /dev/null +++ b/src/net/minecraft/src/WorldGenTaiga2.java @@ -0,0 +1,95 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenTaiga2 extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(4) + 6; + int var7 = 1 + var2.nextInt(2); + int var8 = var6 - var7; + int var9 = 2 + var2.nextInt(2); + boolean var10 = true; + if(var4 >= 1 && var4 + var6 + 1 <= 128) { + int var11; + int var13; + int var15; + int var21; + for(var11 = var4; var11 <= var4 + 1 + var6 && var10; ++var11) { + boolean var12 = true; + if(var11 - var4 < var7) { + var21 = 0; + } else { + var21 = var9; + } + + for(var13 = var3 - var21; var13 <= var3 + var21 && var10; ++var13) { + for(int var14 = var5 - var21; var14 <= var5 + var21 && var10; ++var14) { + if(var11 >= 0 && var11 < 128) { + var15 = var1.getBlockId(var13, var11, var14); + if(var15 != 0 && var15 != Block.leaves.blockID) { + var10 = false; + } + } else { + var10 = false; + } + } + } + } + + if(!var10) { + return false; + } else { + var11 = var1.getBlockId(var3, var4 - 1, var5); + if((var11 == Block.grass.blockID || var11 == Block.dirt.blockID) && var4 < 128 - var6 - 1) { + var1.setBlock(var3, var4 - 1, var5, Block.dirt.blockID); + var21 = var2.nextInt(2); + var13 = 1; + byte var22 = 0; + + int var16; + int var17; + for(var15 = 0; var15 <= var8; ++var15) { + var16 = var4 + var6 - var15; + + for(var17 = var3 - var21; var17 <= var3 + var21; ++var17) { + int var18 = var17 - var3; + + for(int var19 = var5 - var21; var19 <= var5 + var21; ++var19) { + int var20 = var19 - var5; + if((Math.abs(var18) != var21 || Math.abs(var20) != var21 || var21 <= 0) && !Block.opaqueCubeLookup[var1.getBlockId(var17, var16, var19)]) { + var1.setBlockAndMetadata(var17, var16, var19, Block.leaves.blockID, 1); + } + } + } + + if(var21 >= var13) { + var21 = var22; + var22 = 1; + ++var13; + if(var13 > var9) { + var13 = var9; + } + } else { + ++var21; + } + } + + var15 = var2.nextInt(3); + + for(var16 = 0; var16 < var6 - var15; ++var16) { + var17 = var1.getBlockId(var3, var4 + var16, var5); + if(var17 == 0 || var17 == Block.leaves.blockID) { + var1.setBlockAndMetadata(var3, var4 + var16, var5, Block.wood.blockID, 1); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/WorldGenTallGrass.java b/src/net/minecraft/src/WorldGenTallGrass.java new file mode 100644 index 0000000..89216a5 --- /dev/null +++ b/src/net/minecraft/src/WorldGenTallGrass.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenTallGrass extends WorldGenerator { + private int field_28057_a; + private int field_28056_b; + + public WorldGenTallGrass(int var1, int var2) { + this.field_28057_a = var1; + this.field_28056_b = var2; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + boolean var6 = false; + + while(true) { + int var11 = var1.getBlockId(var3, var4, var5); + if(var11 != 0 && var11 != Block.leaves.blockID || var4 <= 0) { + for(int var7 = 0; var7 < 128; ++var7) { + int var8 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var9 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var10 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var8, var9, var10) && ((BlockFlower)Block.blocksList[this.field_28057_a]).canBlockStay(var1, var8, var9, var10)) { + var1.setBlockAndMetadata(var8, var9, var10, this.field_28057_a, this.field_28056_b); + } + } + + return true; + } + + --var4; + } + } +} diff --git a/src/net/minecraft/src/WorldGenTrees.java b/src/net/minecraft/src/WorldGenTrees.java new file mode 100644 index 0000000..631e379 --- /dev/null +++ b/src/net/minecraft/src/WorldGenTrees.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenTrees extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(3) + 4; + boolean var7 = true; + if(var4 >= 1 && var4 + var6 + 1 <= 128) { + int var8; + int var10; + int var11; + int var12; + for(var8 = var4; var8 <= var4 + 1 + var6; ++var8) { + byte var9 = 1; + if(var8 == var4) { + var9 = 0; + } + + if(var8 >= var4 + 1 + var6 - 2) { + var9 = 2; + } + + for(var10 = var3 - var9; var10 <= var3 + var9 && var7; ++var10) { + for(var11 = var5 - var9; var11 <= var5 + var9 && var7; ++var11) { + if(var8 >= 0 && var8 < 128) { + var12 = var1.getBlockId(var10, var8, var11); + if(var12 != 0 && var12 != Block.leaves.blockID) { + var7 = false; + } + } else { + var7 = false; + } + } + } + } + + if(!var7) { + return false; + } else { + var8 = var1.getBlockId(var3, var4 - 1, var5); + if((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && var4 < 128 - var6 - 1) { + var1.setBlock(var3, var4 - 1, var5, Block.dirt.blockID); + + int var16; + for(var16 = var4 - 3 + var6; var16 <= var4 + var6; ++var16) { + var10 = var16 - (var4 + var6); + var11 = 1 - var10 / 2; + + for(var12 = var3 - var11; var12 <= var3 + var11; ++var12) { + int var13 = var12 - var3; + + for(int var14 = var5 - var11; var14 <= var5 + var11; ++var14) { + int var15 = var14 - var5; + if((Math.abs(var13) != var11 || Math.abs(var15) != var11 || var2.nextInt(2) != 0 && var10 != 0) && !Block.opaqueCubeLookup[var1.getBlockId(var12, var16, var14)]) { + var1.setBlock(var12, var16, var14, Block.leaves.blockID); + } + } + } + } + + for(var16 = 0; var16 < var6; ++var16) { + var10 = var1.getBlockId(var3, var4 + var16, var5); + if(var10 == 0 || var10 == Block.leaves.blockID) { + var1.setBlock(var3, var4 + var16, var5, Block.wood.blockID); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/WorldGenerator.java b/src/net/minecraft/src/WorldGenerator.java new file mode 100644 index 0000000..afbcdc8 --- /dev/null +++ b/src/net/minecraft/src/WorldGenerator.java @@ -0,0 +1,10 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class WorldGenerator { + public abstract boolean generate(World var1, Random var2, int var3, int var4, int var5); + + public void func_420_a(double var1, double var3, double var5) { + } +} diff --git a/src/net/minecraft/src/WorldInfo.java b/src/net/minecraft/src/WorldInfo.java new file mode 100644 index 0000000..74fcd15 --- /dev/null +++ b/src/net/minecraft/src/WorldInfo.java @@ -0,0 +1,194 @@ +package net.minecraft.src; + +import java.util.List; + +public class WorldInfo { + private long randomSeed; + private int spawnX; + private int spawnY; + private int spawnZ; + private long worldTime; + private long lastTimePlayed; + private long sizeOnDisk; + private NBTTagCompound field_22195_h; + private int field_22194_i; + private String levelName; + private int saveVersion; + private boolean isRaining; + private int rainTime; + private boolean isThundering; + private int thunderTime; + + public WorldInfo(NBTTagCompound var1) { + this.randomSeed = var1.getLong("RandomSeed"); + this.spawnX = var1.getInteger("SpawnX"); + this.spawnY = var1.getInteger("SpawnY"); + this.spawnZ = var1.getInteger("SpawnZ"); + this.worldTime = var1.getLong("Time"); + this.lastTimePlayed = var1.getLong("LastPlayed"); + this.sizeOnDisk = var1.getLong("SizeOnDisk"); + this.levelName = var1.getString("LevelName"); + this.saveVersion = var1.getInteger("version"); + this.rainTime = var1.getInteger("rainTime"); + this.isRaining = var1.getBoolean("raining"); + this.thunderTime = var1.getInteger("thunderTime"); + this.isThundering = var1.getBoolean("thundering"); + if(var1.hasKey("Player")) { + this.field_22195_h = var1.getCompoundTag("Player"); + this.field_22194_i = this.field_22195_h.getInteger("Dimension"); + } + + } + + public WorldInfo(long var1, String var3) { + this.randomSeed = var1; + this.levelName = var3; + } + + public WorldInfo(WorldInfo var1) { + this.randomSeed = var1.randomSeed; + this.spawnX = var1.spawnX; + this.spawnY = var1.spawnY; + this.spawnZ = var1.spawnZ; + this.worldTime = var1.worldTime; + this.lastTimePlayed = var1.lastTimePlayed; + this.sizeOnDisk = var1.sizeOnDisk; + this.field_22195_h = var1.field_22195_h; + this.field_22194_i = var1.field_22194_i; + this.levelName = var1.levelName; + this.saveVersion = var1.saveVersion; + this.rainTime = var1.rainTime; + this.isRaining = var1.isRaining; + this.thunderTime = var1.thunderTime; + this.isThundering = var1.isThundering; + } + + public NBTTagCompound func_22185_a() { + NBTTagCompound var1 = new NBTTagCompound(); + this.saveNBTTag(var1, this.field_22195_h); + return var1; + } + + public NBTTagCompound func_22183_a(List var1) { + NBTTagCompound var2 = new NBTTagCompound(); + EntityPlayer var3 = null; + NBTTagCompound var4 = null; + if(var1.size() > 0) { + var3 = (EntityPlayer)var1.get(0); + } + + if(var3 != null) { + var4 = new NBTTagCompound(); + var3.writeToNBT(var4); + } + + this.saveNBTTag(var2, var4); + return var2; + } + + private void saveNBTTag(NBTTagCompound var1, NBTTagCompound var2) { + 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()); + var1.setString("LevelName", this.levelName); + var1.setInteger("version", this.saveVersion); + var1.setInteger("rainTime", this.rainTime); + var1.setBoolean("raining", this.isRaining); + var1.setInteger("thunderTime", this.thunderTime); + var1.setBoolean("thundering", this.isThundering); + if(var2 != null) { + var1.setCompoundTag("Player", var2); + } + + } + + public long getRandomSeed() { + return this.randomSeed; + } + + public int getSpawnX() { + return this.spawnX; + } + + public int getSpawnY() { + return this.spawnY; + } + + public int getSpawnZ() { + return this.spawnZ; + } + + public long getWorldTime() { + return this.worldTime; + } + + public long getSizeOnDisk() { + return this.sizeOnDisk; + } + + public int getDimension() { + return this.field_22194_i; + } + + public void setWorldTime(long var1) { + this.worldTime = var1; + } + + public void setSizeOnDisk(long var1) { + this.sizeOnDisk = var1; + } + + public void setSpawnPosition(int var1, int var2, int var3) { + this.spawnX = var1; + this.spawnY = var2; + this.spawnZ = var3; + } + + public void setLevelName(String var1) { + this.levelName = var1; + } + + public int getVersion() { + return this.saveVersion; + } + + public void setVersion(int var1) { + this.saveVersion = var1; + } + + public boolean getIsThundering() { + return this.isThundering; + } + + public void setIsThundering(boolean var1) { + this.isThundering = var1; + } + + public int getThunderTime() { + return this.thunderTime; + } + + public void setThunderTime(int var1) { + this.thunderTime = var1; + } + + public boolean getIsRaining() { + return this.isRaining; + } + + public void setIsRaining(boolean var1) { + this.isRaining = var1; + } + + public int getRainTime() { + return this.rainTime; + } + + public void setRainTime(int var1) { + this.rainTime = var1; + } +} diff --git a/src/net/minecraft/src/WorldManager.java b/src/net/minecraft/src/WorldManager.java new file mode 100644 index 0000000..623aaef --- /dev/null +++ b/src/net/minecraft/src/WorldManager.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class WorldManager implements IWorldAccess { + private MinecraftServer mcServer; + private WorldServer field_28134_b; + + public WorldManager(MinecraftServer var1, WorldServer var2) { + this.mcServer = var1; + this.field_28134_b = var2; + } + + public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) { + } + + public void obtainEntitySkin(Entity var1) { + this.mcServer.getEntityTracker(this.field_28134_b.worldProvider.worldType).trackEntity(var1); + } + + public void releaseEntitySkin(Entity var1) { + this.mcServer.getEntityTracker(this.field_28134_b.worldProvider.worldType).untrackEntity(var1); + } + + public void playSound(String var1, double var2, double var4, double var6, float var8, float var9) { + } + + public void markBlockRangeNeedsUpdate(int var1, int var2, int var3, int var4, int var5, int var6) { + } + + public void updateAllRenderers() { + } + + public void markBlockNeedsUpdate(int var1, int var2, int var3) { + this.mcServer.configManager.markBlockNeedsUpdate(var1, var2, var3, this.field_28134_b.worldProvider.worldType); + } + + public void playRecord(String var1, int var2, int var3, int var4) { + } + + public void doNothingWithTileEntity(int var1, int var2, int var3, TileEntity var4) { + this.mcServer.configManager.sentTileEntityToPlayer(var1, var2, var3, var4); + } + + public void func_28133_a(EntityPlayer var1, int var2, int var3, int var4, int var5, int var6) { + this.mcServer.configManager.func_28171_a(var1, (double)var3, (double)var4, (double)var5, 64.0D, this.field_28134_b.worldProvider.worldType, new Packet61DoorChange(var2, var3, var4, var5, var6)); + } +} diff --git a/src/net/minecraft/src/WorldProvider.java b/src/net/minecraft/src/WorldProvider.java new file mode 100644 index 0000000..ef899b7 --- /dev/null +++ b/src/net/minecraft/src/WorldProvider.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +public abstract class WorldProvider { + public World worldObj; + public WorldChunkManager worldChunkMgr; + public boolean field_6167_c = false; + public boolean isHellWorld = false; + public boolean field_4306_c = false; + public float[] lightBrightnessTable = new float[16]; + public int worldType = 0; + private float[] field_6164_h = new float[4]; + + public final void registerWorld(World var1) { + this.worldObj = var1; + this.registerWorldChunkManager(); + 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 registerWorldChunkManager() { + this.worldChunkMgr = new WorldChunkManager(this.worldObj); + } + + public IChunkProvider getChunkProvider() { + return new ChunkProviderGenerate(this.worldObj, this.worldObj.getRandomSeed()); + } + + public boolean canCoordinateBeSpawn(int var1, int var2) { + int var3 = this.worldObj.getFirstUncoveredBlock(var1, var2); + return var3 == Block.sand.blockID; + } + + public float calculateCelestialAngle(long var1, float var3) { + int var4 = (int)(var1 % 24000L); + float var5 = ((float)var4 + var3) / 24000.0F - 0.25F; + if(var5 < 0.0F) { + ++var5; + } + + if(var5 > 1.0F) { + --var5; + } + + float var6 = var5; + var5 = 1.0F - (float)((Math.cos((double)var5 * Math.PI) + 1.0D) / 2.0D); + var5 = var6 + (var5 - var6) / 3.0F; + return var5; + } + + public boolean func_28108_d() { + return true; + } + + public static WorldProvider func_4091_a(int var0) { + return (WorldProvider)(var0 == -1 ? new WorldProviderHell() : (var0 == 0 ? new WorldProviderSurface() : (var0 == 1 ? new WorldProviderSky() : null))); + } +} diff --git a/src/net/minecraft/src/WorldProviderHell.java b/src/net/minecraft/src/WorldProviderHell.java new file mode 100644 index 0000000..4bdd8dc --- /dev/null +++ b/src/net/minecraft/src/WorldProviderHell.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +public class WorldProviderHell extends WorldProvider { + public void registerWorldChunkManager() { + this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.hell, 1.0D, 0.0D); + this.field_6167_c = true; + this.isHellWorld = true; + this.field_4306_c = true; + this.worldType = -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.worldObj, this.worldObj.getRandomSeed()); + } + + public boolean canCoordinateBeSpawn(int var1, int var2) { + int var3 = this.worldObj.getFirstUncoveredBlock(var1, var2); + return var3 == Block.bedrock.blockID ? false : (var3 == 0 ? false : Block.opaqueCubeLookup[var3]); + } + + public float calculateCelestialAngle(long var1, float var3) { + return 0.5F; + } + + public boolean func_28108_d() { + return false; + } +} diff --git a/src/net/minecraft/src/WorldProviderSky.java b/src/net/minecraft/src/WorldProviderSky.java new file mode 100644 index 0000000..fc21ebf --- /dev/null +++ b/src/net/minecraft/src/WorldProviderSky.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public class WorldProviderSky extends WorldProvider { + public void registerWorldChunkManager() { + this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.field_28054_m, 0.5D, 0.0D); + this.worldType = 1; + } + + public IChunkProvider getChunkProvider() { + return new ChunkProviderSky(this.worldObj, this.worldObj.getRandomSeed()); + } + + public float calculateCelestialAngle(long var1, float var3) { + return 0.0F; + } + + public boolean canCoordinateBeSpawn(int var1, int var2) { + int var3 = this.worldObj.getFirstUncoveredBlock(var1, var2); + return var3 == 0 ? false : Block.blocksList[var3].blockMaterial.getIsSolid(); + } +} diff --git a/src/net/minecraft/src/WorldProviderSurface.java b/src/net/minecraft/src/WorldProviderSurface.java new file mode 100644 index 0000000..29a566d --- /dev/null +++ b/src/net/minecraft/src/WorldProviderSurface.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public class WorldProviderSurface extends WorldProvider { +} diff --git a/src/net/minecraft/src/WorldServer.java b/src/net/minecraft/src/WorldServer.java new file mode 100644 index 0000000..a6b7af6 --- /dev/null +++ b/src/net/minecraft/src/WorldServer.java @@ -0,0 +1,121 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class WorldServer extends World { + public ChunkProviderServer chunkProviderServer; + public boolean field_819_z = false; + public boolean levelSaving; + private MinecraftServer mcServer; + private MCHash field_20912_E = new MCHash(); + + public WorldServer(MinecraftServer var1, ISaveHandler var2, String var3, int var4, long var5) { + super(var2, var3, var5, WorldProvider.func_4091_a(var4)); + this.mcServer = var1; + } + + public void updateEntityWithOptionalForce(Entity var1, boolean var2) { + if(!this.mcServer.spawnPeacefulMobs && (var1 instanceof EntityAnimal || var1 instanceof EntityWaterMob)) { + var1.setEntityDead(); + } + + if(var1.riddenByEntity == null || !(var1.riddenByEntity instanceof EntityPlayer)) { + super.updateEntityWithOptionalForce(var1, var2); + } + + } + + public void func_12017_b(Entity var1, boolean var2) { + super.updateEntityWithOptionalForce(var1, var2); + } + + protected IChunkProvider getChunkProvider() { + IChunkLoader var1 = this.worldFile.func_22092_a(this.worldProvider); + this.chunkProviderServer = new ChunkProviderServer(this, var1, this.worldProvider.getChunkProvider()); + return this.chunkProviderServer; + } + + public List getTileEntityList(int var1, int var2, int var3, int var4, int var5, int var6) { + ArrayList var7 = new ArrayList(); + + for(int var8 = 0; var8 < this.loadedTileEntityList.size(); ++var8) { + TileEntity var9 = (TileEntity)this.loadedTileEntityList.get(var8); + if(var9.xCoord >= var1 && var9.yCoord >= var2 && var9.zCoord >= var3 && var9.xCoord < var4 && var9.yCoord < var5 && var9.zCoord < var6) { + var7.add(var9); + } + } + + return var7; + } + + public boolean canMineBlock(EntityPlayer var1, int var2, int var3, int var4) { + int var5 = (int)MathHelper.abs((float)(var2 - this.worldInfo.getSpawnX())); + int var6 = (int)MathHelper.abs((float)(var4 - this.worldInfo.getSpawnZ())); + if(var5 > var6) { + var6 = var5; + } + + return var6 > 16 || this.mcServer.configManager.isOp(var1.username); + } + + protected void obtainEntitySkin(Entity var1) { + super.obtainEntitySkin(var1); + this.field_20912_E.addKey(var1.entityId, var1); + } + + protected void releaseEntitySkin(Entity var1) { + super.releaseEntitySkin(var1); + this.field_20912_E.removeObject(var1.entityId); + } + + public Entity func_6158_a(int var1) { + return (Entity)this.field_20912_E.lookup(var1); + } + + public boolean addLightningBolt(Entity var1) { + if(super.addLightningBolt(var1)) { + this.mcServer.configManager.sendPacketToPlayersAroundPoint(var1.posX, var1.posY, var1.posZ, 512.0D, this.worldProvider.worldType, new Packet71Weather(var1)); + return true; + } else { + return false; + } + } + + public void sendTrackedEntityStatusUpdatePacket(Entity var1, byte var2) { + Packet38EntityStatus var3 = new Packet38EntityStatus(var1.entityId, var2); + this.mcServer.getEntityTracker(this.worldProvider.worldType).sendPacketToTrackedPlayersAndTrackedEntity(var1, var3); + } + + public Explosion newExplosion(Entity var1, double var2, double var4, double var6, float var8, boolean var9) { + Explosion var10 = new Explosion(this, var1, var2, var4, var6, var8); + var10.isFlaming = var9; + var10.doExplosion(); + var10.doEffects(false); + this.mcServer.configManager.sendPacketToPlayersAroundPoint(var2, var4, var6, 64.0D, this.worldProvider.worldType, new Packet60Explosion(var2, var4, var6, var8, var10.destroyedBlockPositions)); + return var10; + } + + public void playNoteAt(int var1, int var2, int var3, int var4, int var5) { + super.playNoteAt(var1, var2, var3, var4, var5); + this.mcServer.configManager.sendPacketToPlayersAroundPoint((double)var1, (double)var2, (double)var3, 64.0D, this.worldProvider.worldType, new Packet54PlayNoteBlock(var1, var2, var3, var4, var5)); + } + + public void func_30006_w() { + this.worldFile.func_22093_e(); + } + + protected void updateWeather() { + boolean var1 = this.func_27068_v(); + super.updateWeather(); + if(var1 != this.func_27068_v()) { + if(var1) { + this.mcServer.configManager.sendPacketToAllPlayers(new Packet70Bed(2)); + } else { + this.mcServer.configManager.sendPacketToAllPlayers(new Packet70Bed(1)); + } + } + + } +} diff --git a/src/net/minecraft/src/WorldServerMulti.java b/src/net/minecraft/src/WorldServerMulti.java new file mode 100644 index 0000000..e4d699e --- /dev/null +++ b/src/net/minecraft/src/WorldServerMulti.java @@ -0,0 +1,10 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class WorldServerMulti extends WorldServer { + public WorldServerMulti(MinecraftServer var1, ISaveHandler var2, String var3, int var4, long var5, WorldServer var7) { + super(var1, var2, var3, var4, var5); + this.field_28105_z = var7.field_28105_z; + } +}