From 3a38411e1394ab7310864c15e52c6e2be684556a Mon Sep 17 00:00:00 2001 From: Sen Date: Fri, 11 Jul 2025 00:00:43 +0200 Subject: [PATCH] removed herobrine??! --- client/src/main/java/client/Client.java | 20 +- .../main/java/client/init/RenderRegistry.java | 25 +- .../java/client/renderer/EntityRenderer.java | 51 +-- .../renderer/entity/RenderArachnoid.java | 7 +- .../client/renderer/entity/RenderArrow.java | 2 +- .../client/renderer/entity/RenderBat.java | 2 +- .../client/renderer/entity/RenderBoat.java | 2 +- .../client/renderer/entity/RenderBullet.java | 2 +- .../client/renderer/entity/RenderCat.java | 56 ++++ .../client/renderer/entity/RenderChicken.java | 2 +- .../client/renderer/entity/RenderCow.java | 2 +- .../client/renderer/entity/RenderCrystal.java | 2 +- .../client/renderer/entity/RenderDragon.java | 2 +- .../client/renderer/entity/RenderFish.java | 2 +- .../renderer/entity/RenderFlyingBox.java | 4 +- .../client/renderer/entity/RenderFox.java | 2 +- .../client/renderer/entity/RenderHorse.java | 14 +- .../renderer/entity/RenderLeashKnot.java | 2 +- .../renderer/entity/RenderMinecart.java | 2 +- .../client/renderer/entity/RenderMissile.java | 2 +- .../renderer/entity/RenderMooshroom.java | 25 -- .../client/renderer/entity/RenderMouse.java | 2 +- .../client/renderer/entity/RenderOcelot.java | 56 ---- .../client/renderer/entity/RenderPig.java | 2 +- .../client/renderer/entity/RenderRabbit.java | 32 +- .../client/renderer/entity/RenderSheep.java | 2 +- .../client/renderer/entity/RenderSlime.java | 2 +- .../renderer/entity/RenderSpaceMarine.java | 2 +- .../client/renderer/entity/RenderSquid.java | 44 --- .../client/renderer/entity/RenderWolf.java | 6 +- .../java/client/renderer/entity/RenderXp.java | 69 +++++ .../client/renderer/entity/RenderXpOrb.java | 85 ----- .../renderer/entity/RendererLivingEntity.java | 2 +- .../client/renderer/layers/LayerCape.java | 5 +- .../client/renderer/layers/LayerCharge.java | 2 +- .../renderer/layers/LayerEnderDragonEyes.java | 2 +- .../client/renderer/layers/LayerExtra.java | 5 +- .../layers/LayerMooshroomMushroom.java | 63 ---- .../renderer/layers/LayerPowerRods.java | 2 +- .../client/renderer/layers/LayerSaddle.java | 2 +- .../renderer/layers/LayerSheepWool.java | 2 +- .../renderer/layers/LayerWolfCollar.java | 2 +- .../java/client/renderer/model/ModelCat.java | 205 ++++++++++++ .../client/renderer/model/ModelOcelot.java | 220 ------------- .../client/renderer/model/ModelSquid.java | 61 ---- .../renderer/texture/EntityTexManager.java | 51 --- .../main/java/client/world/WorldClient.java | 4 + .../textures/{entity => creature}/bat.png | Bin .../{entity => creature}/cat_black.png | Bin .../textures/{entity => creature}/cat_red.png | Bin .../{entity => creature}/cat_siamese.png | Bin .../cat_ocelot.png => creature/cat_wild.png} | Bin .../textures/{entity => creature}/chicken.png | Bin .../textures/{entity => creature}/cow.png | Bin .../textures/{entity => creature}/donkey.png | Bin .../textures/{entity => creature}/dragon.png | Bin .../{entity => creature}/dragon_eyes.png | Bin .../textures/{entity => creature}/fox.png | Bin .../{entity => creature}/horse_black.png | Bin .../{entity => creature}/horse_brown.png | Bin .../{entity => creature}/horse_chestnut.png | Bin .../{entity => creature}/horse_creamy.png | Bin .../{entity => creature}/horse_darkbrown.png | Bin .../{entity => creature}/horse_gray.png | Bin .../horse_markings_blackdots.png | Bin .../horse_markings_white.png | Bin .../horse_markings_whitedots.png | Bin .../horse_markings_whitefield.png | Bin .../{entity => creature}/horse_white.png | Bin .../textures/{entity => creature}/mouse.png | Bin .../textures/{entity => creature}/mule.png | Bin .../textures/{entity => creature}/pig.png | Bin .../{entity => creature}/pig_saddle.png | Bin .../{entity => creature}/rabbit_black.png | Bin .../rabbit_black_splotched.png | Bin .../{entity => creature}/rabbit_brown.png | Bin .../{entity => creature}/rabbit_dark.png | Bin .../{entity => creature}/rabbit_dark_gray.png | Bin .../rabbit_evil.png} | Bin .../{entity => creature}/rabbit_gold.png | Bin .../{entity => creature}/rabbit_gray.png | Bin .../rabbit_half.png} | Bin .../{entity => creature}/rabbit_salt.png | Bin .../{entity => creature}/rabbit_white.png | Bin .../rabbit_white_splotched.png | Bin .../textures/{entity => creature}/sheep.png | Bin .../{entity => creature}/sheep_fur.png | Bin .../textures/{entity => creature}/wolf.png | Bin .../{entity => creature}/wolf_angry.png | Bin .../{entity => creature}/wolf_collar.png | Bin .../{entity => creature}/wolf_tame.png | Bin .../textures/entity/experience_orb.png | Bin 1064 -> 0 bytes .../resources/textures/entity/herobrine.png | Bin 1681 -> 0 bytes .../textures/entity/horse_skeleton.png | Bin 11643 -> 0 bytes .../textures/entity/horse_zombie.png | Bin 13998 -> 0 bytes .../main/resources/textures/entity/magma.png | Bin 10097 -> 0 bytes .../resources/textures/entity/metalhead.png | Bin 2660 -> 0 bytes .../resources/textures/entity/mooshroom.png | Bin 1391 -> 0 bytes .../main/resources/textures/entity/sen.png | Bin 2825 -> 0 bytes .../main/resources/textures/entity/squid.png | Bin 905 -> 0 bytes .../resources/textures/entity/unknown.png | Bin 6065 -> 0 bytes .../textures/{entity => npc}/alucard_1.png | Bin .../textures/{entity => npc}/alucard_2.png | Bin .../textures/{entity => npc}/arachnoid.png | Bin .../textures/{entity => npc}/bloodelf.png | Bin .../cape_bloodelf.png => npc/cape_dark.png} | Bin .../textures/{entity => npc}/char.png | Bin .../textures/{entity => npc}/charge.png | Bin .../textures/{entity => npc}/darkmage.png | Bin .../textures/{entity => npc}/dracula_1.png | Bin .../textures/{entity => npc}/dracula_2.png | Bin .../textures/{entity => npc}/dracula_3.png | Bin .../textures/{entity => npc}/dracula_4.png | Bin .../textures/{entity => npc}/dracula_5.png | Bin .../textures/{entity => npc}/dracula_6.png | Bin .../textures/{entity => npc}/dwarf.png | Bin .../textures/{entity => npc}/firedemon.png | Bin .../textures/{entity => npc}/gargoyle.png | Bin .../textures/{entity => npc}/goblin.png | Bin .../textures/{entity => npc}/hacker.png | Bin .../textures/{entity => npc}/haunter.png | Bin .../textures/{entity => npc}/highelf.png | Bin .../textures/{entity => npc}/jiang_cheng.png | Bin .../textures/{entity => npc}/knight_1.png | Bin .../textures/{entity => npc}/knight_2.png | Bin .../textures/{entity => npc}/knight_3.png | Bin .../textures/{entity => npc}/knight_4.png | Bin .../textures/{entity => npc}/knight_5.png | Bin .../textures/{entity => npc}/knight_6.png | Bin .../textures/{entity => npc}/knight_7.png | Bin .../textures/{entity => npc}/knight_8.png | Bin .../textures/{entity => npc}/lan_wangji.png | Bin .../textures/{entity => npc}/luo_binghe.png | Bin .../textures/{entity => npc}/mage_1.png | Bin .../textures/{entity => npc}/mage_2.png | Bin .../textures/{entity => npc}/mage_3.png | Bin .../textures/{entity => npc}/mage_4.png | Bin .../textures/{entity => npc}/mage_5.png | Bin .../textures/{entity => npc}/mage_6.png | Bin .../textures/{entity => npc}/marine.png | Bin .../{entity => npc}/marine_black_templar.png | Bin .../textures/{entity => npc}/metalhead_1.png | Bin .../textures/{entity => npc}/metalhead_10.png | Bin .../textures/{entity => npc}/metalhead_11.png | Bin .../textures/{entity => npc}/metalhead_12.png | Bin .../textures/{entity => npc}/metalhead_13.png | Bin .../textures/{entity => npc}/metalhead_14.png | Bin .../textures/{entity => npc}/metalhead_2.png | Bin .../textures/{entity => npc}/metalhead_3.png | Bin .../textures/{entity => npc}/metalhead_4.png | Bin .../textures/{entity => npc}/metalhead_5.png | Bin .../textures/{entity => npc}/metalhead_6.png | Bin .../textures/{entity => npc}/metalhead_7.png | Bin .../textures/{entity => npc}/metalhead_8.png | Bin .../textures/{entity => npc}/metalhead_9.png | Bin .../textures/{entity => npc}/orc_1.png | Bin .../textures/{entity => npc}/orc_10.png | Bin .../textures/{entity => npc}/orc_11.png | Bin .../textures/{entity => npc}/orc_12.png | Bin .../textures/{entity => npc}/orc_2.png | Bin .../textures/{entity => npc}/orc_3.png | Bin .../textures/{entity => npc}/orc_4.png | Bin .../textures/{entity => npc}/orc_5.png | Bin .../textures/{entity => npc}/orc_6.png | Bin .../textures/{entity => npc}/orc_7.png | Bin .../textures/{entity => npc}/orc_8.png | Bin .../textures/{entity => npc}/orc_9.png | Bin .../textures/{entity => npc}/peasant_1.png | Bin .../textures/{entity => npc}/peasant_2.png | Bin .../textures/{entity => npc}/peasant_3.png | Bin .../textures/{entity => npc}/peasant_4.png | Bin .../textures/{entity => npc}/peasant_5.png | Bin .../textures/{entity => npc}/peasant_6.png | Bin .../textures/{entity => npc}/power_rod.png | Bin .../textures/{entity => npc}/shen_qingqiu.png | Bin .../textures/{entity => npc}/skull.png | Bin .../textures/{entity => npc}/slime.png | Bin .../textures/{entity => npc}/spirit.png | Bin .../textures/{entity => npc}/thranduil.png | Bin .../textures/{entity => npc}/tiefling.png | Bin .../{entity => npc}/tinyarachnoid.png | Bin .../textures/{entity => npc}/trollface.png | Bin .../textures/{entity => npc}/undead_1.png | Bin .../textures/{entity => npc}/undead_2.png | Bin .../textures/{entity => npc}/undead_3.png | Bin .../textures/{entity => npc}/undead_4.png | Bin .../textures/{entity => npc}/vampire_1.png | Bin .../textures/{entity => npc}/vampire_2.png | Bin .../textures/{entity => npc}/vampire_3.png | Bin .../textures/{entity => npc}/vampire_4.png | Bin .../textures/{entity => npc}/vampire_5.png | Bin .../textures/{entity => npc}/vampire_6.png | Bin .../textures/{entity => npc}/vampire_7.png | Bin .../textures/{entity => npc}/vampire_8.png | Bin .../textures/{entity => npc}/wei_wuxian.png | Bin .../textures/{entity => npc}/woodelf.png | Bin .../textures/{entity => npc}/zombie_1.png | Bin .../textures/{entity => npc}/zombie_2.png | Bin .../textures/{entity => npc}/zombie_3.png | Bin .../textures/{entity => npc}/zombie_4.png | Bin .../textures/{entity => npc}/zombie_5.png | Bin .../textures/{entity => npc}/zombie_6.png | Bin .../textures/{entity => object}/arrow.png | Bin .../textures/{entity => object}/boat.png | Bin .../textures/{entity => object}/box.png | Bin .../{entity => object}/box_brittle.png | Bin .../textures/{entity => object}/bullet.png | Bin .../textures/{entity => object}/crystal.png | Bin .../resources/textures/object/experience.png | Bin 0 -> 9995 bytes .../textures/{entity => object}/hook.png | Bin .../textures/{entity => object}/lead_knot.png | Bin .../textures/{entity => object}/minecart.png | Bin .../textures/{entity => object}/missile.png | Bin .../crystal_beam.png => world/beam.png} | Bin ...elotAttack.java => EntityAICatAttack.java} | 4 +- ...tyAIOcelotSit.java => EntityAICatSit.java} | 26 +- .../java/common/ai/EntityAISwimNavigate.java | 26 ++ .../java/common/block/tech/BlockChest.java | 12 +- .../main/java/common/dimension/Dimension.java | 24 ++ .../{EntityOcelot.java => EntityCat.java} | 37 ++- .../common/entity/animal/EntityHorse.java | 108 +++---- .../common/entity/animal/EntityMooshroom.java | 90 ------ .../common/entity/animal/EntitySquid.java | 292 ------------------ .../java/common/entity/npc/CharacterInfo.java | 6 +- .../common/entity/npc/EntityBloodElf.java | 4 + .../java/common/entity/npc/EntityHaunter.java | 2 +- .../java/common/entity/npc/EntityMerfolk.java | 34 ++ .../java/common/entity/npc/EntityNPC.java | 46 ++- .../common/entity/npc/EntityWaterNPC.java | 83 +++++ .../main/java/common/entity/npc/NpcInfo.java | 4 +- .../java/common/entity/npc/SpeciesInfo.java | 2 +- .../common/entity/types/EntityWaterMob.java | 116 ------- .../main/java/common/init/EntityRegistry.java | 8 +- .../java/common/init/SpeciesRegistry.java | 10 +- .../java/common/init/UniverseRegistry.java | 2 +- .../main/java/server/biome/BiomeJungle.java | 4 +- .../main/java/server/biome/BiomeMushroom.java | 32 +- .../src/main/java/server/biome/BiomeTian.java | 3 +- .../main/java/server/biome/BiomeWater.java | 5 +- .../src/main/java/server/biome/GenBiome.java | 2 - .../src/main/java/server/world/Converter.java | 10 +- .../src/main/java/server/world/Spawner.java | 6 +- 242 files changed, 749 insertions(+), 1407 deletions(-) create mode 100755 client/src/main/java/client/renderer/entity/RenderCat.java delete mode 100755 client/src/main/java/client/renderer/entity/RenderMooshroom.java delete mode 100755 client/src/main/java/client/renderer/entity/RenderOcelot.java delete mode 100755 client/src/main/java/client/renderer/entity/RenderSquid.java create mode 100755 client/src/main/java/client/renderer/entity/RenderXp.java delete mode 100755 client/src/main/java/client/renderer/entity/RenderXpOrb.java delete mode 100755 client/src/main/java/client/renderer/layers/LayerMooshroomMushroom.java create mode 100755 client/src/main/java/client/renderer/model/ModelCat.java delete mode 100755 client/src/main/java/client/renderer/model/ModelOcelot.java delete mode 100755 client/src/main/java/client/renderer/model/ModelSquid.java rename client/src/main/resources/textures/{entity => creature}/bat.png (100%) rename client/src/main/resources/textures/{entity => creature}/cat_black.png (100%) rename client/src/main/resources/textures/{entity => creature}/cat_red.png (100%) rename client/src/main/resources/textures/{entity => creature}/cat_siamese.png (100%) rename client/src/main/resources/textures/{entity/cat_ocelot.png => creature/cat_wild.png} (100%) rename client/src/main/resources/textures/{entity => creature}/chicken.png (100%) rename client/src/main/resources/textures/{entity => creature}/cow.png (100%) rename client/src/main/resources/textures/{entity => creature}/donkey.png (100%) rename client/src/main/resources/textures/{entity => creature}/dragon.png (100%) rename client/src/main/resources/textures/{entity => creature}/dragon_eyes.png (100%) rename client/src/main/resources/textures/{entity => creature}/fox.png (100%) rename client/src/main/resources/textures/{entity => creature}/horse_black.png (100%) rename client/src/main/resources/textures/{entity => creature}/horse_brown.png (100%) rename client/src/main/resources/textures/{entity => creature}/horse_chestnut.png (100%) rename client/src/main/resources/textures/{entity => creature}/horse_creamy.png (100%) rename client/src/main/resources/textures/{entity => creature}/horse_darkbrown.png (100%) rename client/src/main/resources/textures/{entity => creature}/horse_gray.png (100%) rename client/src/main/resources/textures/{entity => creature}/horse_markings_blackdots.png (100%) rename client/src/main/resources/textures/{entity => creature}/horse_markings_white.png (100%) rename client/src/main/resources/textures/{entity => creature}/horse_markings_whitedots.png (100%) rename client/src/main/resources/textures/{entity => creature}/horse_markings_whitefield.png (100%) rename client/src/main/resources/textures/{entity => creature}/horse_white.png (100%) rename client/src/main/resources/textures/{entity => creature}/mouse.png (100%) rename client/src/main/resources/textures/{entity => creature}/mule.png (100%) rename client/src/main/resources/textures/{entity => creature}/pig.png (100%) rename client/src/main/resources/textures/{entity => creature}/pig_saddle.png (100%) rename client/src/main/resources/textures/{entity => creature}/rabbit_black.png (100%) rename client/src/main/resources/textures/{entity => creature}/rabbit_black_splotched.png (100%) rename client/src/main/resources/textures/{entity => creature}/rabbit_brown.png (100%) rename client/src/main/resources/textures/{entity => creature}/rabbit_dark.png (100%) rename client/src/main/resources/textures/{entity => creature}/rabbit_dark_gray.png (100%) rename client/src/main/resources/textures/{entity/rabbit_caerbannog.png => creature/rabbit_evil.png} (100%) rename client/src/main/resources/textures/{entity => creature}/rabbit_gold.png (100%) rename client/src/main/resources/textures/{entity => creature}/rabbit_gray.png (100%) rename client/src/main/resources/textures/{entity/rabbit_toast.png => creature/rabbit_half.png} (100%) rename client/src/main/resources/textures/{entity => creature}/rabbit_salt.png (100%) rename client/src/main/resources/textures/{entity => creature}/rabbit_white.png (100%) rename client/src/main/resources/textures/{entity => creature}/rabbit_white_splotched.png (100%) rename client/src/main/resources/textures/{entity => creature}/sheep.png (100%) rename client/src/main/resources/textures/{entity => creature}/sheep_fur.png (100%) rename client/src/main/resources/textures/{entity => creature}/wolf.png (100%) rename client/src/main/resources/textures/{entity => creature}/wolf_angry.png (100%) rename client/src/main/resources/textures/{entity => creature}/wolf_collar.png (100%) rename client/src/main/resources/textures/{entity => creature}/wolf_tame.png (100%) delete mode 100755 client/src/main/resources/textures/entity/experience_orb.png delete mode 100755 client/src/main/resources/textures/entity/herobrine.png delete mode 100755 client/src/main/resources/textures/entity/horse_skeleton.png delete mode 100755 client/src/main/resources/textures/entity/horse_zombie.png delete mode 100755 client/src/main/resources/textures/entity/magma.png delete mode 100755 client/src/main/resources/textures/entity/metalhead.png delete mode 100755 client/src/main/resources/textures/entity/mooshroom.png delete mode 100755 client/src/main/resources/textures/entity/sen.png delete mode 100755 client/src/main/resources/textures/entity/squid.png delete mode 100755 client/src/main/resources/textures/entity/unknown.png rename client/src/main/resources/textures/{entity => npc}/alucard_1.png (100%) rename client/src/main/resources/textures/{entity => npc}/alucard_2.png (100%) rename client/src/main/resources/textures/{entity => npc}/arachnoid.png (100%) rename client/src/main/resources/textures/{entity => npc}/bloodelf.png (100%) rename client/src/main/resources/textures/{entity/cape_bloodelf.png => npc/cape_dark.png} (100%) rename client/src/main/resources/textures/{entity => npc}/char.png (100%) rename client/src/main/resources/textures/{entity => npc}/charge.png (100%) rename client/src/main/resources/textures/{entity => npc}/darkmage.png (100%) rename client/src/main/resources/textures/{entity => npc}/dracula_1.png (100%) rename client/src/main/resources/textures/{entity => npc}/dracula_2.png (100%) rename client/src/main/resources/textures/{entity => npc}/dracula_3.png (100%) rename client/src/main/resources/textures/{entity => npc}/dracula_4.png (100%) rename client/src/main/resources/textures/{entity => npc}/dracula_5.png (100%) rename client/src/main/resources/textures/{entity => npc}/dracula_6.png (100%) rename client/src/main/resources/textures/{entity => npc}/dwarf.png (100%) rename client/src/main/resources/textures/{entity => npc}/firedemon.png (100%) rename client/src/main/resources/textures/{entity => npc}/gargoyle.png (100%) rename client/src/main/resources/textures/{entity => npc}/goblin.png (100%) rename client/src/main/resources/textures/{entity => npc}/hacker.png (100%) rename client/src/main/resources/textures/{entity => npc}/haunter.png (100%) rename client/src/main/resources/textures/{entity => npc}/highelf.png (100%) rename client/src/main/resources/textures/{entity => npc}/jiang_cheng.png (100%) rename client/src/main/resources/textures/{entity => npc}/knight_1.png (100%) rename client/src/main/resources/textures/{entity => npc}/knight_2.png (100%) rename client/src/main/resources/textures/{entity => npc}/knight_3.png (100%) rename client/src/main/resources/textures/{entity => npc}/knight_4.png (100%) rename client/src/main/resources/textures/{entity => npc}/knight_5.png (100%) rename client/src/main/resources/textures/{entity => npc}/knight_6.png (100%) rename client/src/main/resources/textures/{entity => npc}/knight_7.png (100%) rename client/src/main/resources/textures/{entity => npc}/knight_8.png (100%) rename client/src/main/resources/textures/{entity => npc}/lan_wangji.png (100%) rename client/src/main/resources/textures/{entity => npc}/luo_binghe.png (100%) rename client/src/main/resources/textures/{entity => npc}/mage_1.png (100%) rename client/src/main/resources/textures/{entity => npc}/mage_2.png (100%) rename client/src/main/resources/textures/{entity => npc}/mage_3.png (100%) rename client/src/main/resources/textures/{entity => npc}/mage_4.png (100%) rename client/src/main/resources/textures/{entity => npc}/mage_5.png (100%) rename client/src/main/resources/textures/{entity => npc}/mage_6.png (100%) rename client/src/main/resources/textures/{entity => npc}/marine.png (100%) rename client/src/main/resources/textures/{entity => npc}/marine_black_templar.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_1.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_10.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_11.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_12.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_13.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_14.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_2.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_3.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_4.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_5.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_6.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_7.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_8.png (100%) rename client/src/main/resources/textures/{entity => npc}/metalhead_9.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_1.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_10.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_11.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_12.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_2.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_3.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_4.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_5.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_6.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_7.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_8.png (100%) rename client/src/main/resources/textures/{entity => npc}/orc_9.png (100%) rename client/src/main/resources/textures/{entity => npc}/peasant_1.png (100%) rename client/src/main/resources/textures/{entity => npc}/peasant_2.png (100%) rename client/src/main/resources/textures/{entity => npc}/peasant_3.png (100%) rename client/src/main/resources/textures/{entity => npc}/peasant_4.png (100%) rename client/src/main/resources/textures/{entity => npc}/peasant_5.png (100%) rename client/src/main/resources/textures/{entity => npc}/peasant_6.png (100%) rename client/src/main/resources/textures/{entity => npc}/power_rod.png (100%) rename client/src/main/resources/textures/{entity => npc}/shen_qingqiu.png (100%) rename client/src/main/resources/textures/{entity => npc}/skull.png (100%) rename client/src/main/resources/textures/{entity => npc}/slime.png (100%) rename client/src/main/resources/textures/{entity => npc}/spirit.png (100%) rename client/src/main/resources/textures/{entity => npc}/thranduil.png (100%) rename client/src/main/resources/textures/{entity => npc}/tiefling.png (100%) rename client/src/main/resources/textures/{entity => npc}/tinyarachnoid.png (100%) rename client/src/main/resources/textures/{entity => npc}/trollface.png (100%) rename client/src/main/resources/textures/{entity => npc}/undead_1.png (100%) rename client/src/main/resources/textures/{entity => npc}/undead_2.png (100%) rename client/src/main/resources/textures/{entity => npc}/undead_3.png (100%) rename client/src/main/resources/textures/{entity => npc}/undead_4.png (100%) rename client/src/main/resources/textures/{entity => npc}/vampire_1.png (100%) rename client/src/main/resources/textures/{entity => npc}/vampire_2.png (100%) rename client/src/main/resources/textures/{entity => npc}/vampire_3.png (100%) rename client/src/main/resources/textures/{entity => npc}/vampire_4.png (100%) rename client/src/main/resources/textures/{entity => npc}/vampire_5.png (100%) rename client/src/main/resources/textures/{entity => npc}/vampire_6.png (100%) rename client/src/main/resources/textures/{entity => npc}/vampire_7.png (100%) rename client/src/main/resources/textures/{entity => npc}/vampire_8.png (100%) rename client/src/main/resources/textures/{entity => npc}/wei_wuxian.png (100%) rename client/src/main/resources/textures/{entity => npc}/woodelf.png (100%) rename client/src/main/resources/textures/{entity => npc}/zombie_1.png (100%) rename client/src/main/resources/textures/{entity => npc}/zombie_2.png (100%) rename client/src/main/resources/textures/{entity => npc}/zombie_3.png (100%) rename client/src/main/resources/textures/{entity => npc}/zombie_4.png (100%) rename client/src/main/resources/textures/{entity => npc}/zombie_5.png (100%) rename client/src/main/resources/textures/{entity => npc}/zombie_6.png (100%) rename client/src/main/resources/textures/{entity => object}/arrow.png (100%) rename client/src/main/resources/textures/{entity => object}/boat.png (100%) rename client/src/main/resources/textures/{entity => object}/box.png (100%) rename client/src/main/resources/textures/{entity => object}/box_brittle.png (100%) rename client/src/main/resources/textures/{entity => object}/bullet.png (100%) rename client/src/main/resources/textures/{entity => object}/crystal.png (100%) create mode 100755 client/src/main/resources/textures/object/experience.png rename client/src/main/resources/textures/{entity => object}/hook.png (100%) rename client/src/main/resources/textures/{entity => object}/lead_knot.png (100%) rename client/src/main/resources/textures/{entity => object}/minecart.png (100%) rename client/src/main/resources/textures/{entity => object}/missile.png (100%) rename client/src/main/resources/textures/{entity/crystal_beam.png => world/beam.png} (100%) rename common/src/main/java/common/ai/{EntityAIOcelotAttack.java => EntityAICatAttack.java} (95%) rename common/src/main/java/common/ai/{EntityAIOcelotSit.java => EntityAICatSit.java} (76%) create mode 100644 common/src/main/java/common/ai/EntityAISwimNavigate.java rename common/src/main/java/common/entity/animal/{EntityOcelot.java => EntityCat.java} (90%) delete mode 100755 common/src/main/java/common/entity/animal/EntityMooshroom.java delete mode 100755 common/src/main/java/common/entity/animal/EntitySquid.java create mode 100755 common/src/main/java/common/entity/npc/EntityMerfolk.java create mode 100755 common/src/main/java/common/entity/npc/EntityWaterNPC.java delete mode 100755 common/src/main/java/common/entity/types/EntityWaterMob.java diff --git a/client/src/main/java/client/Client.java b/client/src/main/java/client/Client.java index 2f4f8412..a28b6cdd 100755 --- a/client/src/main/java/client/Client.java +++ b/client/src/main/java/client/Client.java @@ -115,6 +115,7 @@ import common.entity.animal.EntityHorse; import common.entity.npc.Energy; import common.entity.npc.EntityCpu; import common.entity.npc.EntityNPC; +import common.entity.npc.EntityWaterNPC; import common.entity.npc.PlayerCharacter; import common.entity.types.EntityLiving; import common.future.Futures; @@ -1022,7 +1023,6 @@ public class Client implements IThreadListener { int color = potion.getColor(); String name = (potion.isBadEffect() ? TextColor.ORANGE : TextColor.ACID) + effect.getEffectName(); String desc = TextColor.NEON + effect.getDurationString(); -// Drawing.drawRectColor(x, y, 250, Font.DEFAULT.yglyph + 2, color | 0xff000000); Drawing.drawRectBorder(x, y, 250, Font.YGLYPH + 6, 0xff000000, 0xff202020, 0xffcfcfcf, 0xff6f6f6f); Drawing.drawGradient(x + 2, y + 2, effect.isInfinite() ? 246 : ((int)(246.0f * ((float)effect.getRemaining() / (float)effect.getDuration()))), Font.YGLYPH + 2, color | 0xff000000, Util.mixColor(color | 0xff000000, 0xff000000)); Drawing.drawText(name, x + 4, y + 3, 0xffffffff); @@ -1035,7 +1035,7 @@ public class Client implements IThreadListener { int absorb = entity.getAbsorptionAmount(); int armor = entity.getTotalArmorValue(); int stats = 1 + (absorb > 0 ? 1 : 0) + (armor > 0 ? 1 : 0) + (entity.vehicle instanceof EntityLiving ? 1 : 0) - + (entity instanceof EntityNPC npc && npc.getManaPoints() > 0 ? 1 : 0); + + (entity.getManaPoints() > 0 ? 1 : 0) + (entity instanceof EntityWaterNPC ? 1 : 0); for(Energy energy : Energy.values()) { if(entity.getEnergy(energy) > 0) stats += 1; @@ -1047,17 +1047,21 @@ public class Client implements IThreadListener { y = stats(x, y, TextColor.RED + "Schaden", hp, max, 0xff0000); if(absorb > 0) y = stats(x, y, TextColor.YELLOW + "Schadenspuffer", absorb, 1024, 0xffff00); + if(entity instanceof EntityWaterNPC npc) { + int moist = npc.getMoisture(); + int maxm = npc.getMaxMoisture(); + y = stats(x, y, TextColor.BLUE + "Feuchtigkeit", moist, maxm, 0x4f4fff); + } if(armor > 0) y = stats(x, y, TextColor.GRAY + "RĂ¼stung", armor, 1024, 0x707070); - if(entity.vehicle instanceof EntityLiving) { - EntityLiving living = (EntityLiving)entity.vehicle; + if(entity.vehicle instanceof EntityLiving living) { int vh = living.getHealth(); int vhMax = living.getMaxHealth(); - y = stats(x, y, living.getDisplayName() /* + " (Reittier)" */, vh, vhMax, 0xff6060); + y = stats(x, y, living.getDisplayName(), vh, vhMax, 0xff6060); } - if(entity instanceof EntityNPC npc && npc.getManaPoints() > 0) { - int mana = npc.getManaPoints(); - int maxm = npc.getMaxMana(); + if(entity.getManaPoints() > 0) { + int mana = entity.getManaPoints(); + int maxm = entity.getMaxMana(); y = stats(x, y, TextColor.CYAN + "Mana", mana, maxm, 0x0000ff); } for(int z = 0; z < Energy.values().length; z++) { diff --git a/client/src/main/java/client/init/RenderRegistry.java b/client/src/main/java/client/init/RenderRegistry.java index a862a28c..b1c085e5 100644 --- a/client/src/main/java/client/init/RenderRegistry.java +++ b/client/src/main/java/client/init/RenderRegistry.java @@ -31,31 +31,28 @@ import client.renderer.entity.RenderLightning; import client.renderer.entity.RenderManager; import client.renderer.entity.RenderMinecart; import client.renderer.entity.RenderMissile; -import client.renderer.entity.RenderMooshroom; import client.renderer.entity.RenderMouse; import client.renderer.entity.RenderNpc; -import client.renderer.entity.RenderOcelot; +import client.renderer.entity.RenderCat; import client.renderer.entity.RenderPig; import client.renderer.entity.RenderPotion; import client.renderer.entity.RenderRabbit; import client.renderer.entity.RenderSheep; import client.renderer.entity.RenderSlime; import client.renderer.entity.RenderSpaceMarine; -import client.renderer.entity.RenderSquid; import client.renderer.entity.RenderTntMinecart; import client.renderer.entity.RenderTntPrimed; import client.renderer.entity.RenderWolf; -import client.renderer.entity.RenderXpOrb; +import client.renderer.entity.RenderXp; import client.renderer.model.ModelChicken; import client.renderer.model.ModelCow; import client.renderer.model.ModelFox; import client.renderer.model.ModelHorse; import client.renderer.model.ModelMouse; -import client.renderer.model.ModelOcelot; +import client.renderer.model.ModelCat; import client.renderer.model.ModelPig; import client.renderer.model.ModelRabbit; import client.renderer.model.ModelSheep2; -import client.renderer.model.ModelSquid; import client.renderer.model.ModelWolf; import client.renderer.texture.TextureTicked; import client.renderer.ticked.TextureFlamesFX1; @@ -73,13 +70,11 @@ import common.entity.animal.EntityCow; import common.entity.animal.EntityDragon; import common.entity.animal.EntityFox; import common.entity.animal.EntityHorse; -import common.entity.animal.EntityMooshroom; import common.entity.animal.EntityMouse; -import common.entity.animal.EntityOcelot; +import common.entity.animal.EntityCat; import common.entity.animal.EntityPig; import common.entity.animal.EntityRabbit; import common.entity.animal.EntitySheep; -import common.entity.animal.EntitySquid; import common.entity.animal.EntityWolf; import common.entity.effect.EntityLightning; import common.entity.item.EntityBoat; @@ -119,13 +114,11 @@ public abstract class RenderRegistry { map.put(EntityPig.class, new RenderPig(mgr, new ModelPig())); map.put(EntitySheep.class, new RenderSheep(mgr, new ModelSheep2())); map.put(EntityCow.class, new RenderCow(mgr, new ModelCow())); - map.put(EntityMooshroom.class, new RenderMooshroom(mgr, new ModelCow())); map.put(EntityWolf.class, new RenderWolf(mgr, new ModelWolf())); map.put(EntityFox.class, new RenderFox(mgr, new ModelFox())); map.put(EntityChicken.class, new RenderChicken(mgr, new ModelChicken())); - map.put(EntityOcelot.class, new RenderOcelot(mgr, new ModelOcelot())); + map.put(EntityCat.class, new RenderCat(mgr, new ModelCat())); map.put(EntityRabbit.class, new RenderRabbit(mgr, new ModelRabbit())); - map.put(EntitySquid.class, new RenderSquid(mgr, new ModelSquid())); map.put(EntityBat.class, new RenderBat(mgr)); map.put(EntityDragon.class, new RenderDragon(mgr)); map.put(EntityCrystal.class, new RenderCrystal(mgr)); @@ -141,7 +134,7 @@ public abstract class RenderRegistry { map.put(EntityFireCharge.class, new RenderFireball(mgr, 0.5F)); map.put(EntityBox.class, new RenderFlyingBox(mgr)); map.put(EntityItem.class, new RenderEntityItem(mgr, ritem)); - map.put(EntityXp.class, new RenderXpOrb(mgr)); + map.put(EntityXp.class, new RenderXp(mgr)); map.put(EntityTnt.class, new RenderTntPrimed(mgr)); map.put(EntityFalling.class, new RenderFallingBlock(mgr)); map.put(EntityTntCart.class, new RenderTntMinecart(mgr)); @@ -156,11 +149,11 @@ public abstract class RenderRegistry { map.put(EntityBullet.class, new RenderBullet(mgr)); map.put(EntityMissile.class, new RenderMissile(mgr)); map.put(EntityLightning.class, new RenderLightning(mgr)); - models.put(ModelType.HUMANOID, new RenderHumanoid(mgr, 12, 12, "textures/entity/char.png")); + models.put(ModelType.HUMANOID, new RenderHumanoid(mgr, 12, 12, "textures/npc/char.png")); models.put(ModelType.ARACHNOID, new RenderArachnoid(mgr)); models.put(ModelType.SLIME, new RenderSlime(mgr)); - models.put(ModelType.DWARF, new RenderHumanoid(mgr, 10, 10, "textures/entity/dwarf.png")); - models.put(ModelType.HALFLING, new RenderHumanoid(mgr, 8, 8, "textures/entity/goblin.png")); + models.put(ModelType.DWARF, new RenderHumanoid(mgr, 10, 10, "textures/npc/dwarf.png")); + models.put(ModelType.HALFLING, new RenderHumanoid(mgr, 8, 8, "textures/npc/goblin.png")); models.put(ModelType.SPACE_MARINE, new RenderSpaceMarine(mgr)); for(int z = 0; z < SpeciesRegistry.SPECIMEN.size(); z++) { SpeciesInfo info = SpeciesRegistry.SPECIMEN.get(z); diff --git a/client/src/main/java/client/renderer/EntityRenderer.java b/client/src/main/java/client/renderer/EntityRenderer.java index 5687df91..9d7fea1c 100755 --- a/client/src/main/java/client/renderer/EntityRenderer.java +++ b/client/src/main/java/client/renderer/EntityRenderer.java @@ -748,18 +748,14 @@ public class EntityRenderer { if (world != null) { float sun = world.getSunBrightness(1.0F); - float msun = sun * 0.95F + 0.05F; + float msun = world.getLastLightning() > 0 ? 1.0f : sun * 0.95F + 0.05F; + float fsun = world.getLastLightning() > 0 ? 1.0f : sun; for (int n = 0; n < 256; ++n) { float sky = World.BRIGHTNESS[world.dimension.getBrightness()][n / 16] * msun; float block = World.BRIGHTNESS[world.dimension.getBrightness()][n % 16] * (this.torchFlickerX * 0.1F + 1.5F); - if (world.getLastLightning() > 0) - { - sky = World.BRIGHTNESS[world.dimension.getBrightness()][n / 16]; - } - float sred = sky * (sun * 0.65F + 0.35F); float sgreen = sky * (sun * 0.65F + 0.35F); float bgreen = block * ((block * 0.6F + 0.4F) * 0.6F + 0.4F); @@ -771,20 +767,35 @@ public class EntityRenderer { green = green * 0.96F + 0.03F; blue = blue * 0.96F + 0.03F; -// if (this.bossColorModifier > 0.0F) -// { -// float f11 = this.bossColorModifierPrev + (this.bossColorModifier - this.bossColorModifierPrev) * partialTicks; -// f8 = f8 * (1.0F - f11) + f8 * 0.7F * f11; -// f9 = f9 * (1.0F - f11) + f9 * 0.6F * f11; -// f10 = f10 * (1.0F - f11) + f10 * 0.6F * f11; -// } + if (world.dimension.getLightColor() != 0xffffffff) + { + Vec3 lightColor = new Vec3(world.dimension.getLightColor()); + float light = (float)(15 - (n % 16)) / 15.0f * (float)(n / 16) / 15.0f; + red = red * (1.0F - light) + (float)lightColor.xCoord * fsun * light; + green = green * (1.0F - light) + (float)lightColor.yCoord * fsun * light; + blue = blue * (1.0F - light) + (float)lightColor.zCoord * fsun * light; + } -// if (world.dimension.getDimensionId() == 1) -// { -// f8 = 0.22F + f3 * 0.75F; -// f9 = 0.28F + f6 * 0.75F; -// f10 = 0.25F + f7 * 0.75F; -// } + if (world.dimension.getBlockColor() != 0xffffffff) + { + Vec3 lightColor = new Vec3(world.dimension.getBlockColor()); + float light = (float)(15 - (n / 16)) / 15.0f * (float)(n % 16) / 15.0f; + red = red * (1.0F - light) + (float)lightColor.xCoord * light; + green = green * (1.0F - light) + (float)lightColor.yCoord * light; + blue = blue * (1.0F - light) + (float)lightColor.zCoord * light; + } + + if (world.getLastLightning() > 0) + { + Vec3 lightColor = world.getLightColor(); + float light = (float)world.getLastLightning() - partialTicks; + if(light > 1.0F) + light = 1.0F; + light *= (float)(15 - (n % 16)) / 15.0f * (float)(n / 16) / 15.0f; + red = red * (1.0F - light) + (float)lightColor.xCoord * light; + green = green * (1.0F - light) + (float)lightColor.yCoord * light; + blue = blue * (1.0F - light) + (float)lightColor.zCoord * light; + } if (this.gm.player.hasEffect(Effect.NIGHT_VISION)) { @@ -821,7 +832,7 @@ public class EntityRenderer { blue = 1.0F; } - float bright = this.gm.setGamma || this.gm.xrayActive ? 100.0f : 0.1f; + float bright = this.gm.setGamma || this.gm.xrayActive ? 100.0f : this.gm.player.getVisionBrightness(); float ri = 1.0F - red; float gi = 1.0F - green; float bi = 1.0F - blue; diff --git a/client/src/main/java/client/renderer/entity/RenderArachnoid.java b/client/src/main/java/client/renderer/entity/RenderArachnoid.java index 1a356522..c34656dc 100755 --- a/client/src/main/java/client/renderer/entity/RenderArachnoid.java +++ b/client/src/main/java/client/renderer/entity/RenderArachnoid.java @@ -11,7 +11,7 @@ public class RenderArachnoid extends RenderHumanoid { public RenderArachnoid(RenderManager renderManagerIn) { - super(renderManagerIn, new ModelArachnoid(), 12, 12, false, "textures/entity/arachnoid.png"); + super(renderManagerIn, new ModelArachnoid(), 12, 12, false, "textures/npc/arachnoid.png"); this.addLayer(new LayerArachnoidArmor(this)); // this.addLayer(new LayerSpiderEyes(this)); } @@ -36,11 +36,6 @@ public class RenderArachnoid extends RenderHumanoid // public boolean canSneak() { // return false; // } - -// public String getDefaultTexture() -// { -// return "textures/entity/npc/arachnoid.png"; -// } // public int getCompressedSize() { // return super.getCompressedSize() + 2616; diff --git a/client/src/main/java/client/renderer/entity/RenderArrow.java b/client/src/main/java/client/renderer/entity/RenderArrow.java index 59b26ab0..9e816fc7 100755 --- a/client/src/main/java/client/renderer/entity/RenderArrow.java +++ b/client/src/main/java/client/renderer/entity/RenderArrow.java @@ -12,7 +12,7 @@ import common.util.ExtMath; public class RenderArrow extends Render { - private static final String arrowTextures = "textures/entity/arrow.png"; + private static final String arrowTextures = "textures/object/arrow.png"; public RenderArrow(RenderManager renderManagerIn) { diff --git a/client/src/main/java/client/renderer/entity/RenderBat.java b/client/src/main/java/client/renderer/entity/RenderBat.java index 0aa6c4a0..0e621efe 100755 --- a/client/src/main/java/client/renderer/entity/RenderBat.java +++ b/client/src/main/java/client/renderer/entity/RenderBat.java @@ -9,7 +9,7 @@ import common.util.ExtMath; public class RenderBat extends RenderLiving { - private static final String batTextures = "textures/entity/bat.png"; + private static final String batTextures = "textures/creature/bat.png"; public RenderBat(RenderManager renderManagerIn) { diff --git a/client/src/main/java/client/renderer/entity/RenderBoat.java b/client/src/main/java/client/renderer/entity/RenderBoat.java index a9fafcae..4bb7c7fe 100755 --- a/client/src/main/java/client/renderer/entity/RenderBoat.java +++ b/client/src/main/java/client/renderer/entity/RenderBoat.java @@ -10,7 +10,7 @@ import common.util.ExtMath; public class RenderBoat extends Render { - private static final String boatTextures = "textures/entity/boat.png"; + private static final String boatTextures = "textures/object/boat.png"; /** instance of ModelBoat for rendering */ protected ModelBase modelBoat = new ModelBoat(); diff --git a/client/src/main/java/client/renderer/entity/RenderBullet.java b/client/src/main/java/client/renderer/entity/RenderBullet.java index c1433122..6fe7ad2e 100755 --- a/client/src/main/java/client/renderer/entity/RenderBullet.java +++ b/client/src/main/java/client/renderer/entity/RenderBullet.java @@ -11,7 +11,7 @@ import common.entity.projectile.EntityBullet; public class RenderBullet extends Render { - private static final String bulletTextures = "textures/entity/bullet.png"; + private static final String bulletTextures = "textures/object/bullet.png"; public RenderBullet(RenderManager renderManagerIn) { diff --git a/client/src/main/java/client/renderer/entity/RenderCat.java b/client/src/main/java/client/renderer/entity/RenderCat.java new file mode 100755 index 00000000..04a45412 --- /dev/null +++ b/client/src/main/java/client/renderer/entity/RenderCat.java @@ -0,0 +1,56 @@ +package client.renderer.entity; + +import org.lwjgl.opengl.GL11; + +import client.renderer.model.ModelBase; +import common.entity.animal.EntityCat; + + +public class RenderCat extends RenderLiving +{ + private static final String TEXTURE_BLACK = "textures/creature/cat_black.png"; + private static final String TEXTURE_WILD = "textures/creature/cat_wild.png"; + private static final String TEXTURE_RED = "textures/creature/cat_red.png"; + private static final String TEXTURE_SIAMESE = "textures/creature/cat_siamese.png"; + + public RenderCat(RenderManager renderManagerIn, ModelBase modelBaseIn) + { + super(renderManagerIn, modelBaseIn); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected String getEntityTexture(EntityCat entity) + { + switch (entity.getTameSkin()) + { + case 0: + default: + return TEXTURE_WILD; + + case 1: + return TEXTURE_BLACK; + + case 2: + return TEXTURE_RED; + + case 3: + return TEXTURE_SIAMESE; + } + } + + /** + * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args: + * entityLiving, partialTickTime + */ + protected void preRenderCallback(EntityCat entitylivingbaseIn, float partialTickTime) + { + super.preRenderCallback(entitylivingbaseIn, partialTickTime); + + if (entitylivingbaseIn.isTamed()) + { + GL11.glScalef(0.8F, 0.8F, 0.8F); + } + } +} diff --git a/client/src/main/java/client/renderer/entity/RenderChicken.java b/client/src/main/java/client/renderer/entity/RenderChicken.java index d9f885cb..7c78c380 100755 --- a/client/src/main/java/client/renderer/entity/RenderChicken.java +++ b/client/src/main/java/client/renderer/entity/RenderChicken.java @@ -7,7 +7,7 @@ import common.util.ExtMath; public class RenderChicken extends RenderLiving { - private static final String chickenTextures = "textures/entity/chicken.png"; + private static final String chickenTextures = "textures/creature/chicken.png"; public RenderChicken(RenderManager renderManagerIn, ModelBase modelBaseIn) { diff --git a/client/src/main/java/client/renderer/entity/RenderCow.java b/client/src/main/java/client/renderer/entity/RenderCow.java index b6280ab4..c46711f0 100755 --- a/client/src/main/java/client/renderer/entity/RenderCow.java +++ b/client/src/main/java/client/renderer/entity/RenderCow.java @@ -6,7 +6,7 @@ import common.entity.animal.EntityCow; public class RenderCow extends RenderLiving { - private static final String cowTextures = "textures/entity/cow.png"; + private static final String cowTextures = "textures/creature/cow.png"; public RenderCow(RenderManager renderManagerIn, ModelBase modelBaseIn) { diff --git a/client/src/main/java/client/renderer/entity/RenderCrystal.java b/client/src/main/java/client/renderer/entity/RenderCrystal.java index d5642b17..bdaa469d 100755 --- a/client/src/main/java/client/renderer/entity/RenderCrystal.java +++ b/client/src/main/java/client/renderer/entity/RenderCrystal.java @@ -10,7 +10,7 @@ import common.util.ExtMath; public class RenderCrystal extends Render { - private static final String crystalTextures = "textures/entity/crystal.png"; + private static final String crystalTextures = "textures/object/crystal.png"; private ModelBase modelCrystal = new ModelCrystal(0.0F, false); diff --git a/client/src/main/java/client/renderer/entity/RenderDragon.java b/client/src/main/java/client/renderer/entity/RenderDragon.java index e76f6363..3198a263 100755 --- a/client/src/main/java/client/renderer/entity/RenderDragon.java +++ b/client/src/main/java/client/renderer/entity/RenderDragon.java @@ -11,7 +11,7 @@ import common.util.ExtMath; public class RenderDragon extends RenderLiving { - private static final String enderDragonTextures = "textures/entity/dragon.png"; + private static final String enderDragonTextures = "textures/creature/dragon.png"; /** An instance of the dragon model in RenderDragon */ protected ModelDragon modelDragon; diff --git a/client/src/main/java/client/renderer/entity/RenderFish.java b/client/src/main/java/client/renderer/entity/RenderFish.java index 8c9710d1..65d35f1c 100755 --- a/client/src/main/java/client/renderer/entity/RenderFish.java +++ b/client/src/main/java/client/renderer/entity/RenderFish.java @@ -13,7 +13,7 @@ import common.util.Vec3; public class RenderFish extends Render { - private static final String TEXTURE = "textures/entity/hook.png"; + private static final String TEXTURE = "textures/object/hook.png"; public RenderFish(RenderManager renderManagerIn) { diff --git a/client/src/main/java/client/renderer/entity/RenderFlyingBox.java b/client/src/main/java/client/renderer/entity/RenderFlyingBox.java index a8518c5c..b1ad0e8d 100755 --- a/client/src/main/java/client/renderer/entity/RenderFlyingBox.java +++ b/client/src/main/java/client/renderer/entity/RenderFlyingBox.java @@ -9,8 +9,8 @@ import common.entity.projectile.EntityBox; public class RenderFlyingBox extends Render { - private static final String BOX_TEX = "textures/entity/box.png"; - private static final String BRITTLE_TEX = "textures/entity/box_brittle.png"; + private static final String BOX_TEX = "textures/object/box.png"; + private static final String BRITTLE_TEX = "textures/object/box_brittle.png"; private final ModelHead boxModel = new ModelHead(); public RenderFlyingBox(RenderManager renderManagerIn) diff --git a/client/src/main/java/client/renderer/entity/RenderFox.java b/client/src/main/java/client/renderer/entity/RenderFox.java index d3bc73bd..cc055aee 100644 --- a/client/src/main/java/client/renderer/entity/RenderFox.java +++ b/client/src/main/java/client/renderer/entity/RenderFox.java @@ -4,7 +4,7 @@ import client.renderer.model.ModelBase; import common.entity.animal.EntityFox; public class RenderFox extends RenderLiving { - private static final String FOX_TEXTURE = "textures/entity/fox.png"; + private static final String FOX_TEXTURE = "textures/creature/fox.png"; public RenderFox(RenderManager renderManagerIn, ModelBase modelBaseIn) { super(renderManagerIn, modelBaseIn); diff --git a/client/src/main/java/client/renderer/entity/RenderHorse.java b/client/src/main/java/client/renderer/entity/RenderHorse.java index 36656ebc..879509aa 100755 --- a/client/src/main/java/client/renderer/entity/RenderHorse.java +++ b/client/src/main/java/client/renderer/entity/RenderHorse.java @@ -13,11 +13,9 @@ import common.entity.animal.EntityHorse; public class RenderHorse extends RenderLiving { private static final Set loaded = Sets.newHashSet(); - private static final String whiteHorseTextures = "textures/entity/horse_white.png"; - private static final String muleTextures = "textures/entity/mule.png"; - private static final String donkeyTextures = "textures/entity/donkey.png"; - private static final String zombieHorseTextures = "textures/entity/horse_zombie.png"; - private static final String skeletonHorseTextures = "textures/entity/horse_skeleton.png"; + private static final String whiteHorseTextures = "textures/creature/horse_white.png"; + private static final String muleTextures = "textures/creature/mule.png"; + private static final String donkeyTextures = "textures/creature/donkey.png"; public RenderHorse(RenderManager rendermanagerIn, ModelHorse model) { @@ -64,12 +62,6 @@ public class RenderHorse extends RenderLiving case 2: return muleTextures; - - case 3: - return zombieHorseTextures; - - case 4: - return skeletonHorseTextures; } } else diff --git a/client/src/main/java/client/renderer/entity/RenderLeashKnot.java b/client/src/main/java/client/renderer/entity/RenderLeashKnot.java index 9a03683b..722fd80e 100755 --- a/client/src/main/java/client/renderer/entity/RenderLeashKnot.java +++ b/client/src/main/java/client/renderer/entity/RenderLeashKnot.java @@ -9,7 +9,7 @@ import common.entity.item.EntityLeashKnot; public class RenderLeashKnot extends Render { - private static final String leashKnotTextures = "textures/entity/lead_knot.png"; + private static final String leashKnotTextures = "textures/object/lead_knot.png"; private ModelLeashKnot leashKnotModel = new ModelLeashKnot(); public RenderLeashKnot(RenderManager renderManagerIn) diff --git a/client/src/main/java/client/renderer/entity/RenderMinecart.java b/client/src/main/java/client/renderer/entity/RenderMinecart.java index cc8b7d8a..02a765c9 100755 --- a/client/src/main/java/client/renderer/entity/RenderMinecart.java +++ b/client/src/main/java/client/renderer/entity/RenderMinecart.java @@ -14,7 +14,7 @@ import common.world.State; public class RenderMinecart extends Render { - private static final String minecartTextures = "textures/entity/minecart.png"; + private static final String minecartTextures = "textures/object/minecart.png"; /** instance of ModelMinecart for rendering */ protected ModelBase modelMinecart = new ModelMinecart(); diff --git a/client/src/main/java/client/renderer/entity/RenderMissile.java b/client/src/main/java/client/renderer/entity/RenderMissile.java index 89dfeb04..a6e60c31 100644 --- a/client/src/main/java/client/renderer/entity/RenderMissile.java +++ b/client/src/main/java/client/renderer/entity/RenderMissile.java @@ -3,7 +3,7 @@ package client.renderer.entity; import common.entity.projectile.EntityBullet; public class RenderMissile extends RenderBullet { - private static final String MISSILE_TEXTURE = "textures/entity/missile.png"; + private static final String MISSILE_TEXTURE = "textures/object/missile.png"; public RenderMissile(RenderManager renderManagerIn) { super(renderManagerIn); diff --git a/client/src/main/java/client/renderer/entity/RenderMooshroom.java b/client/src/main/java/client/renderer/entity/RenderMooshroom.java deleted file mode 100755 index 28793f39..00000000 --- a/client/src/main/java/client/renderer/entity/RenderMooshroom.java +++ /dev/null @@ -1,25 +0,0 @@ -package client.renderer.entity; - -import client.renderer.layers.LayerMooshroomMushroom; -import client.renderer.model.ModelBase; -import common.entity.animal.EntityMooshroom; - - -public class RenderMooshroom extends RenderLiving -{ - private static final String mooshroomTextures = "textures/entity/mooshroom.png"; - - public RenderMooshroom(RenderManager renderManagerIn, ModelBase modelBaseIn) - { - super(renderManagerIn, modelBaseIn); - this.addLayer(new LayerMooshroomMushroom(this)); - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. - */ - protected String getEntityTexture(EntityMooshroom entity) - { - return mooshroomTextures; - } -} diff --git a/client/src/main/java/client/renderer/entity/RenderMouse.java b/client/src/main/java/client/renderer/entity/RenderMouse.java index 5c266ddb..5a04314c 100755 --- a/client/src/main/java/client/renderer/entity/RenderMouse.java +++ b/client/src/main/java/client/renderer/entity/RenderMouse.java @@ -6,7 +6,7 @@ import common.entity.animal.EntityMouse; public class RenderMouse extends RenderLiving { - private static final String mouseTextures = "textures/entity/mouse.png"; + private static final String mouseTextures = "textures/creature/mouse.png"; public RenderMouse(RenderManager renderManagerIn, ModelBase modelBaseIn) { diff --git a/client/src/main/java/client/renderer/entity/RenderOcelot.java b/client/src/main/java/client/renderer/entity/RenderOcelot.java deleted file mode 100755 index 09edb567..00000000 --- a/client/src/main/java/client/renderer/entity/RenderOcelot.java +++ /dev/null @@ -1,56 +0,0 @@ -package client.renderer.entity; - -import org.lwjgl.opengl.GL11; - -import client.renderer.model.ModelBase; -import common.entity.animal.EntityOcelot; - - -public class RenderOcelot extends RenderLiving -{ - private static final String blackOcelotTextures = "textures/entity/cat_black.png"; - private static final String ocelotTextures = "textures/entity/cat_ocelot.png"; - private static final String redOcelotTextures = "textures/entity/cat_red.png"; - private static final String siameseOcelotTextures = "textures/entity/cat_siamese.png"; - - public RenderOcelot(RenderManager renderManagerIn, ModelBase modelBaseIn) - { - super(renderManagerIn, modelBaseIn); - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. - */ - protected String getEntityTexture(EntityOcelot entity) - { - switch (entity.getTameSkin()) - { - case 0: - default: - return ocelotTextures; - - case 1: - return blackOcelotTextures; - - case 2: - return redOcelotTextures; - - case 3: - return siameseOcelotTextures; - } - } - - /** - * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args: - * entityLiving, partialTickTime - */ - protected void preRenderCallback(EntityOcelot entitylivingbaseIn, float partialTickTime) - { - super.preRenderCallback(entitylivingbaseIn, partialTickTime); - - if (entitylivingbaseIn.isTamed()) - { - GL11.glScalef(0.8F, 0.8F, 0.8F); - } - } -} diff --git a/client/src/main/java/client/renderer/entity/RenderPig.java b/client/src/main/java/client/renderer/entity/RenderPig.java index be614ee3..e36954be 100755 --- a/client/src/main/java/client/renderer/entity/RenderPig.java +++ b/client/src/main/java/client/renderer/entity/RenderPig.java @@ -7,7 +7,7 @@ import common.entity.animal.EntityPig; public class RenderPig extends RenderLiving { - private static final String pigTextures = "textures/entity/pig.png"; + private static final String pigTextures = "textures/creature/pig.png"; public RenderPig(RenderManager renderManagerIn, ModelBase modelBaseIn) { diff --git a/client/src/main/java/client/renderer/entity/RenderRabbit.java b/client/src/main/java/client/renderer/entity/RenderRabbit.java index 7527e5a7..ed680beb 100755 --- a/client/src/main/java/client/renderer/entity/RenderRabbit.java +++ b/client/src/main/java/client/renderer/entity/RenderRabbit.java @@ -7,19 +7,19 @@ import common.entity.animal.EntityRabbit; public class RenderRabbit extends RenderLiving { private static final String[] TYPES = new String[] { - "textures/entity/rabbit_brown.png", - "textures/entity/rabbit_white.png", - "textures/entity/rabbit_black.png", - "textures/entity/rabbit_white_splotched.png", - "textures/entity/rabbit_gold.png", - "textures/entity/rabbit_salt.png", - "textures/entity/rabbit_gray.png", - "textures/entity/rabbit_dark_gray.png", - "textures/entity/rabbit_dark.png", - "textures/entity/rabbit_black_splotched.png" + "textures/creature/rabbit_brown.png", + "textures/creature/rabbit_white.png", + "textures/creature/rabbit_black.png", + "textures/creature/rabbit_white_splotched.png", + "textures/creature/rabbit_gold.png", + "textures/creature/rabbit_salt.png", + "textures/creature/rabbit_gray.png", + "textures/creature/rabbit_dark_gray.png", + "textures/creature/rabbit_dark.png", + "textures/creature/rabbit_black_splotched.png" }; - private static final String TOAST = "textures/entity/rabbit_toast.png"; - private static final String CAERBANNOG = "textures/entity/rabbit_caerbannog.png"; + private static final String HALF = "textures/creature/rabbit_half.png"; + private static final String EVIL = "textures/creature/rabbit_evil.png"; public RenderRabbit(RenderManager manager, ModelBase model) { super(manager, model); @@ -27,11 +27,11 @@ public class RenderRabbit extends RenderLiving { protected String getEntityTexture(EntityRabbit entity) { String name = TextColor.stripCodes(entity.getCustomNameTag()); - if(name != null && name.equals("Toast")) - return TOAST; + if("Lola".equalsIgnoreCase(name) || "Lolo".equalsIgnoreCase(name)) + return HALF; int type = entity.getRabbitType(); if(type == 99) - return CAERBANNOG; - return type >= 0 && type < TYPES.length ? TYPES[type] : TOAST; + return EVIL; + return type >= 0 && type < TYPES.length ? TYPES[type] : HALF; } } diff --git a/client/src/main/java/client/renderer/entity/RenderSheep.java b/client/src/main/java/client/renderer/entity/RenderSheep.java index c9277db3..4f63cdcb 100755 --- a/client/src/main/java/client/renderer/entity/RenderSheep.java +++ b/client/src/main/java/client/renderer/entity/RenderSheep.java @@ -7,7 +7,7 @@ import common.entity.animal.EntitySheep; public class RenderSheep extends RenderLiving { - private static final String shearedSheepTextures = "textures/entity/sheep.png"; + private static final String shearedSheepTextures = "textures/creature/sheep.png"; public RenderSheep(RenderManager renderManagerIn, ModelBase modelBaseIn) { diff --git a/client/src/main/java/client/renderer/entity/RenderSlime.java b/client/src/main/java/client/renderer/entity/RenderSlime.java index e76df433..0ba57981 100755 --- a/client/src/main/java/client/renderer/entity/RenderSlime.java +++ b/client/src/main/java/client/renderer/entity/RenderSlime.java @@ -35,7 +35,7 @@ public class RenderSlime extends RenderNpc public String getDefaultTexture() { - return "textures/entity/slime.png"; + return "textures/npc/slime.png"; } // public int getCompressedSize() { diff --git a/client/src/main/java/client/renderer/entity/RenderSpaceMarine.java b/client/src/main/java/client/renderer/entity/RenderSpaceMarine.java index 864b24cb..e925ab26 100755 --- a/client/src/main/java/client/renderer/entity/RenderSpaceMarine.java +++ b/client/src/main/java/client/renderer/entity/RenderSpaceMarine.java @@ -99,7 +99,7 @@ public class RenderSpaceMarine extends RenderNpc public final String getDefaultTexture() { - return "textures/entity/marine.png"; + return "textures/npc/marine.png"; } public void getSegments(TexList opaque, TexList alpha) { diff --git a/client/src/main/java/client/renderer/entity/RenderSquid.java b/client/src/main/java/client/renderer/entity/RenderSquid.java deleted file mode 100755 index 15f3c96a..00000000 --- a/client/src/main/java/client/renderer/entity/RenderSquid.java +++ /dev/null @@ -1,44 +0,0 @@ -package client.renderer.entity; - -import org.lwjgl.opengl.GL11; - -import client.renderer.model.ModelBase; -import common.entity.animal.EntitySquid; - - -public class RenderSquid extends RenderLiving -{ - private static final String squidTextures = "textures/entity/squid.png"; - - public RenderSquid(RenderManager renderManagerIn, ModelBase modelBaseIn) - { - super(renderManagerIn, modelBaseIn); - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. - */ - protected String getEntityTexture(EntitySquid entity) - { - return squidTextures; - } - - protected void rotateCorpse(EntitySquid bat, float p_77043_2_, float p_77043_3_, float partialTicks) - { - float f = bat.prevSquidPitch + (bat.squidPitch - bat.prevSquidPitch) * partialTicks; - float f1 = bat.prevSquidYaw + (bat.squidYaw - bat.prevSquidYaw) * partialTicks; - GL11.glTranslatef(0.0F, 0.5F, 0.0F); - GL11.glRotatef(180.0F - p_77043_3_, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(f, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(f1, 0.0F, 1.0F, 0.0F); - GL11.glTranslatef(0.0F, -1.2F, 0.0F); - } - - /** - * Defines what float the third param in setRotationAngles of ModelBase is - */ - protected float handleRotationFloat(EntitySquid livingBase, float partialTicks) - { - return livingBase.lastTentacleAngle + (livingBase.tentacleAngle - livingBase.lastTentacleAngle) * partialTicks; - } -} diff --git a/client/src/main/java/client/renderer/entity/RenderWolf.java b/client/src/main/java/client/renderer/entity/RenderWolf.java index 3fb1bf13..996d6660 100755 --- a/client/src/main/java/client/renderer/entity/RenderWolf.java +++ b/client/src/main/java/client/renderer/entity/RenderWolf.java @@ -8,9 +8,9 @@ import common.entity.animal.EntityWolf; public class RenderWolf extends RenderLiving { - private static final String wolfTextures = "textures/entity/wolf.png"; - private static final String tamedWolfTextures = "textures/entity/wolf_tame.png"; - private static final String anrgyWolfTextures = "textures/entity/wolf_angry.png"; + private static final String wolfTextures = "textures/creature/wolf.png"; + private static final String tamedWolfTextures = "textures/creature/wolf_tame.png"; + private static final String anrgyWolfTextures = "textures/creature/wolf_angry.png"; public RenderWolf(RenderManager renderManagerIn, ModelBase modelBaseIn) { diff --git a/client/src/main/java/client/renderer/entity/RenderXp.java b/client/src/main/java/client/renderer/entity/RenderXp.java new file mode 100755 index 00000000..9159e32b --- /dev/null +++ b/client/src/main/java/client/renderer/entity/RenderXp.java @@ -0,0 +1,69 @@ +package client.renderer.entity; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL13; + +import client.renderer.DefaultVertexFormats; +import client.renderer.GlState; +import client.renderer.RenderBuffer; +import client.renderer.Tessellator; +import common.entity.item.EntityXp; +import common.util.ExtMath; + +public class RenderXp extends Render { + private static final String TEXTURE = "textures/object/experience.png"; + + public RenderXp(RenderManager renderManagerIn) { + super(renderManagerIn); + } + + public void doRender(EntityXp entity, double x, double y, double z, float partial) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)x, (float)y, (float)z); + this.bindEntityTexture(entity); + int value = entity.getXpValue(); + float u1 = (float)(value % 4 * 16 + 0) / 64.0F; + float u2 = (float)(value % 4 * 16 + 16) / 64.0F; + float v1 = (float)(value / 4 * 16 + 0) / 64.0F; + float v2 = (float)(value / 4 * 16 + 16) / 64.0F; + float bx = 1.0F; + float dx = 0.5F; + float dy = 0.25F; + int light = entity.getBrightnessForRender(partial); + int block = light % 65536; + int sky = light / 65536; + GL13.glMultiTexCoord2f(GL13.GL_TEXTURE1, (float)block / 1.0F, (float)sky / 1.0F); + GlState.color(1.0F, 1.0F, 1.0F, 1.0F); + float color = ((float)entity.xpColor + partial) / 2.0F; + int r = (int)((ExtMath.sin(color + 0.0F) + 1.0F) * 0.5F * 255.0F); + int g = 255; + int b = (int)((ExtMath.sin(color + 4.1887903F) + 1.0F) * 0.1F * 255.0F); + GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + float size = 0.3F; + GL11.glScalef(size, size, size); + RenderBuffer rb = Tessellator.getBuffer(); + rb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL); + rb.pos((double)(0.0F - dx), (double)(0.0F - dy), 0.0D).tex((double)u1, (double)v2).color(r, g, b, 128).normal(0.0F, 1.0F, 0.0F) + .endVertex(); + rb.pos((double)(bx - dx), (double)(0.0F - dy), 0.0D).tex((double)u2, (double)v2).color(r, g, b, 128).normal(0.0F, 1.0F, 0.0F) + .endVertex(); + rb.pos((double)(bx - dx), (double)(1.0F - dy), 0.0D).tex((double)u2, (double)v1).color(r, g, b, 128).normal(0.0F, 1.0F, 0.0F) + .endVertex(); + rb.pos((double)(0.0F - dx), (double)(1.0F - dy), 0.0D).tex((double)u1, (double)v1).color(r, g, b, 128).normal(0.0F, 1.0F, 0.0F) + .endVertex(); + Tessellator.draw(); + GlState.disableBlend(); + GlState.disableRescaleNormal(); + GL11.glPopMatrix(); + super.doRender(entity, x, y, z, partial); + } + + protected String getEntityTexture(EntityXp entity) { + return TEXTURE; + } + + protected void renderLivingLabel(EntityXp entityIn, String str, double x, double y, double z, int maxDistance) { + super.renderLivingLabel(entityIn, str, x, y - 0.5, z, maxDistance); + } +} diff --git a/client/src/main/java/client/renderer/entity/RenderXpOrb.java b/client/src/main/java/client/renderer/entity/RenderXpOrb.java deleted file mode 100755 index 815456dd..00000000 --- a/client/src/main/java/client/renderer/entity/RenderXpOrb.java +++ /dev/null @@ -1,85 +0,0 @@ -package client.renderer.entity; - -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL13; - -import client.renderer.DefaultVertexFormats; -import client.renderer.GlState; -import client.renderer.RenderBuffer; -import client.renderer.Tessellator; -import common.entity.item.EntityXp; -import common.util.ExtMath; - - -public class RenderXpOrb extends Render -{ - private static final String experienceOrbTextures = "textures/entity/experience_orb.png"; - - public RenderXpOrb(RenderManager renderManagerIn) - { - super(renderManagerIn); -// this.shadowSize = 0.15F; -// this.shadowOpaque = 0.75F; - } - - /** - * Renders the desired {@code T} type Entity. - */ - public void doRender(EntityXp entity, double x, double y, double z, float partialTicks) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float)x, (float)y, (float)z); - this.bindEntityTexture(entity); - int i = entity.getXpValue(); - float f = (float)(i % 4 * 16 + 0) / 64.0F; - float f1 = (float)(i % 4 * 16 + 16) / 64.0F; - float f2 = (float)(i / 4 * 16 + 0) / 64.0F; - float f3 = (float)(i / 4 * 16 + 16) / 64.0F; - float f4 = 1.0F; - float f5 = 0.5F; - float f6 = 0.25F; - int j = entity.getBrightnessForRender(partialTicks); - int k = j % 65536; - int l = j / 65536; - GL13.glMultiTexCoord2f(GL13.GL_TEXTURE1, (float)k / 1.0F, (float)l / 1.0F); - GlState.color(1.0F, 1.0F, 1.0F, 1.0F); - float f8 = 255.0F; - float f9 = ((float)entity.xpColor + partialTicks) / 2.0F; - l = (int)((ExtMath.sin(f9 + 0.0F) + 1.0F) * 0.5F * 255.0F); - int i1 = 255; - int j1 = (int)((ExtMath.sin(f9 + 4.1887903F) + 1.0F) * 0.1F * 255.0F); - GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); - float f7 = 0.3F; - GL11.glScalef(0.3F, 0.3F, 0.3F); -// Tessellator tessellator = Tessellator.getInstance(); - RenderBuffer worldrenderer = Tessellator.getBuffer(); - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL); - worldrenderer.pos((double)(0.0F - f5), (double)(0.0F - f6), 0.0D).tex((double)f, (double)f3).color(l, 255, j1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); - worldrenderer.pos((double)(f4 - f5), (double)(0.0F - f6), 0.0D).tex((double)f1, (double)f3).color(l, 255, j1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); - worldrenderer.pos((double)(f4 - f5), (double)(1.0F - f6), 0.0D).tex((double)f1, (double)f2).color(l, 255, j1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); - worldrenderer.pos((double)(0.0F - f5), (double)(1.0F - f6), 0.0D).tex((double)f, (double)f2).color(l, 255, j1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); - Tessellator.draw(); - GlState.disableBlend(); - GlState.disableRescaleNormal(); - GL11.glPopMatrix(); - super.doRender(entity, x, y, z, partialTicks); - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. - */ - protected String getEntityTexture(EntityXp entity) - { - return experienceOrbTextures; - } - -// protected boolean canRenderName(EntityXp entity) -// { -// return entity.hasCustomName() || super.canRenderName(entity); -// } - - protected void renderLivingLabel(EntityXp entityIn, String str, double x, double y, double z, int maxDistance) { - super.renderLivingLabel(entityIn, str, x, y - 0.5, z, maxDistance); - } -} diff --git a/client/src/main/java/client/renderer/entity/RendererLivingEntity.java b/client/src/main/java/client/renderer/entity/RendererLivingEntity.java index 949810bf..c2fe4f81 100755 --- a/client/src/main/java/client/renderer/entity/RendererLivingEntity.java +++ b/client/src/main/java/client/renderer/entity/RendererLivingEntity.java @@ -28,7 +28,7 @@ import common.util.ExtMath; public abstract class RendererLivingEntity extends Render { private static final DynamicTexture textureBrightness = new DynamicTexture(16, 16); - private static final String crystalBeamTextures = "textures/entity/crystal_beam.png"; + private static final String crystalBeamTextures = "textures/world/beam.png"; protected ModelBase mainModel; protected FloatBuffer brightnessBuffer = ByteBuffer.allocateDirect(4 << 2).order(ByteOrder.nativeOrder()).asFloatBuffer(); protected List> layerRenderers = Lists.>newArrayList(); diff --git a/client/src/main/java/client/renderer/layers/LayerCape.java b/client/src/main/java/client/renderer/layers/LayerCape.java index 495e6781..9e79b88f 100755 --- a/client/src/main/java/client/renderer/layers/LayerCape.java +++ b/client/src/main/java/client/renderer/layers/LayerCape.java @@ -5,7 +5,6 @@ import org.lwjgl.opengl.GL11; import client.renderer.GlState; import client.renderer.entity.RenderHumanoid; import client.renderer.model.ModelRenderer; -import client.renderer.texture.EntityTexManager; import common.entity.npc.EntityNPC; import common.util.ExtMath; @@ -29,9 +28,9 @@ public class LayerCape implements LayerRenderer { if(/* !entitylivingbaseIn.isInvisible() && */ // entitylivingbaseIn.isWearing(ModelPart.CAPE) // && - EntityTexManager.getCape(entitylivingbaseIn) != null) { + entitylivingbaseIn.getCape() != null) { GlState.color(1.0F, 1.0F, 1.0F, 1.0F); - this.renderer.bindTexture(EntityTexManager.getCape(entitylivingbaseIn)); + this.renderer.bindTexture("textures/npc/cape_" + entitylivingbaseIn.getCape() + ".png"); GL11.glPushMatrix(); GL11.glTranslatef(0.0F, 0.0F, 0.125F); if(entitylivingbaseIn.isPlayer()) { diff --git a/client/src/main/java/client/renderer/layers/LayerCharge.java b/client/src/main/java/client/renderer/layers/LayerCharge.java index 2bc65785..033b9368 100755 --- a/client/src/main/java/client/renderer/layers/LayerCharge.java +++ b/client/src/main/java/client/renderer/layers/LayerCharge.java @@ -10,7 +10,7 @@ import common.entity.npc.EntityNPC; public class LayerCharge implements LayerRenderer { - private static final String LIGHTNING_TEXTURE = "textures/entity/charge.png"; + private static final String LIGHTNING_TEXTURE = "textures/npc/charge.png"; private final RenderHumanoid main; private final ModelCharge charge = new ModelCharge(2.0F); diff --git a/client/src/main/java/client/renderer/layers/LayerEnderDragonEyes.java b/client/src/main/java/client/renderer/layers/LayerEnderDragonEyes.java index 7fb6b277..2620990e 100755 --- a/client/src/main/java/client/renderer/layers/LayerEnderDragonEyes.java +++ b/client/src/main/java/client/renderer/layers/LayerEnderDragonEyes.java @@ -10,7 +10,7 @@ import common.entity.animal.EntityDragon; public class LayerEnderDragonEyes implements LayerRenderer { - private static final String TEXTURE = "textures/entity/dragon_eyes.png"; + private static final String TEXTURE = "textures/creature/dragon_eyes.png"; private final RenderDragon dragonRenderer; public LayerEnderDragonEyes(RenderDragon dragonRendererIn) diff --git a/client/src/main/java/client/renderer/layers/LayerExtra.java b/client/src/main/java/client/renderer/layers/LayerExtra.java index ebfe2bb9..40bd8dac 100755 --- a/client/src/main/java/client/renderer/layers/LayerExtra.java +++ b/client/src/main/java/client/renderer/layers/LayerExtra.java @@ -58,11 +58,10 @@ public class LayerExtra implements LayerRenderer public void doRenderLayer(EntityNPC entity, float p_177141_2_, float p_177141_3_, float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scale) { - EntityNPC extended = entity; // if (!entity.isInvisible()) // { GlState.color(1.0F, 1.0F, 1.0F, 1.0F); - Client.CLIENT.getTextureManager().bindTexture(EntityTexManager.getSkin(extended)); + Client.CLIENT.getTextureManager().bindTexture(EntityTexManager.getSkin(entity)); GL11.glPushMatrix(); if (entity.isSneakingVisually()) @@ -81,7 +80,7 @@ public class LayerExtra implements LayerRenderer GL11.glPushMatrix(); this.model.bipedBody.postRender(0.0625F); for(ModelRenderer model : this.wing) { - if(extended.hasDualWings()) { + if(entity.hasDualWings()) { GL11.glPushMatrix(); GL11.glRotatef(model.rotateAngleY < 0.0f ? -10.0f : 10.0f, 0.0f, 1.0f, 0.0f); GL11.glTranslatef(0.0f, 0.125f, -0.0625f); diff --git a/client/src/main/java/client/renderer/layers/LayerMooshroomMushroom.java b/client/src/main/java/client/renderer/layers/LayerMooshroomMushroom.java deleted file mode 100755 index 8cd71080..00000000 --- a/client/src/main/java/client/renderer/layers/LayerMooshroomMushroom.java +++ /dev/null @@ -1,63 +0,0 @@ -package client.renderer.layers; - -import org.lwjgl.opengl.GL11; - -import client.Client; -import client.renderer.BlockRenderer; -import client.renderer.GlState; -import client.renderer.entity.RenderMooshroom; -import client.renderer.model.ModelQuadruped; -import client.renderer.texture.TextureMap; -import common.entity.animal.EntityMooshroom; -import common.init.Blocks; - -public class LayerMooshroomMushroom implements LayerRenderer -{ - private final RenderMooshroom mooshroomRenderer; - - public LayerMooshroomMushroom(RenderMooshroom mooshroomRendererIn) - { - this.mooshroomRenderer = mooshroomRendererIn; - } - - public void doRenderLayer(EntityMooshroom entitylivingbaseIn, float p_177141_2_, float p_177141_3_, float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scale) - { - if (!entitylivingbaseIn.isChild()) // && !entitylivingbaseIn.isInvisible()) - { - BlockRenderer blockrendererdispatcher = Client.CLIENT.getBlockRendererDispatcher(); - this.mooshroomRenderer.bindTexture(TextureMap.BLOCKS); - GlState.enableCull(); - GlState.cullFace(GL11.GL_FRONT); - GL11.glPushMatrix(); - GL11.glScalef(1.0F, -1.0F, 1.0F); - GL11.glTranslatef(0.2F, 0.35F, 0.5F); - GL11.glRotatef(42.0F, 0.0F, 1.0F, 0.0F); - GL11.glPushMatrix(); - GL11.glTranslatef(-0.5F, -0.5F, 0.5F); - blockrendererdispatcher.renderBlockBrightness(Blocks.red_mushroom.getState(), 1.0F); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - GL11.glTranslatef(0.1F, 0.0F, -0.6F); - GL11.glRotatef(42.0F, 0.0F, 1.0F, 0.0F); - GL11.glTranslatef(-0.5F, -0.5F, 0.5F); - blockrendererdispatcher.renderBlockBrightness(Blocks.red_mushroom.getState(), 1.0F); - GL11.glPopMatrix(); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - ((ModelQuadruped)this.mooshroomRenderer.getMainModel()).head.postRender(0.0625F); - GL11.glScalef(1.0F, -1.0F, 1.0F); - GL11.glTranslatef(0.0F, 0.7F, -0.2F); - GL11.glRotatef(12.0F, 0.0F, 1.0F, 0.0F); - GL11.glTranslatef(-0.5F, -0.5F, 0.5F); - blockrendererdispatcher.renderBlockBrightness(Blocks.red_mushroom.getState(), 1.0F); - GL11.glPopMatrix(); - GlState.cullFace(GL11.GL_BACK); - GlState.disableCull(); - } - } - - public boolean shouldCombineTextures() - { - return true; - } -} diff --git a/client/src/main/java/client/renderer/layers/LayerPowerRods.java b/client/src/main/java/client/renderer/layers/LayerPowerRods.java index 54b45a4b..1c800c56 100755 --- a/client/src/main/java/client/renderer/layers/LayerPowerRods.java +++ b/client/src/main/java/client/renderer/layers/LayerPowerRods.java @@ -8,7 +8,7 @@ import common.util.ExtMath; public class LayerPowerRods implements LayerRenderer { - private static final String ROD_TEXTURE = "textures/entity/power_rod.png"; + private static final String ROD_TEXTURE = "textures/npc/power_rod.png"; private final RenderHumanoid renderer; private ModelRenderer powerRod; diff --git a/client/src/main/java/client/renderer/layers/LayerSaddle.java b/client/src/main/java/client/renderer/layers/LayerSaddle.java index ce30c6b3..cdd49aac 100755 --- a/client/src/main/java/client/renderer/layers/LayerSaddle.java +++ b/client/src/main/java/client/renderer/layers/LayerSaddle.java @@ -7,7 +7,7 @@ import common.entity.animal.EntityPig; public class LayerSaddle implements LayerRenderer { - private static final String TEXTURE = "textures/entity/pig_saddle.png"; + private static final String TEXTURE = "textures/creature/pig_saddle.png"; private final RenderPig pigRenderer; private final ModelPig pigModel = new ModelPig(0.5F); diff --git a/client/src/main/java/client/renderer/layers/LayerSheepWool.java b/client/src/main/java/client/renderer/layers/LayerSheepWool.java index dd1022cf..42920353 100755 --- a/client/src/main/java/client/renderer/layers/LayerSheepWool.java +++ b/client/src/main/java/client/renderer/layers/LayerSheepWool.java @@ -8,7 +8,7 @@ import common.entity.animal.EntitySheep; public class LayerSheepWool implements LayerRenderer { - private static final String TEXTURE = "textures/entity/sheep_fur.png"; + private static final String TEXTURE = "textures/creature/sheep_fur.png"; private final RenderSheep sheepRenderer; private final ModelSheep1 sheepModel = new ModelSheep1(); diff --git a/client/src/main/java/client/renderer/layers/LayerWolfCollar.java b/client/src/main/java/client/renderer/layers/LayerWolfCollar.java index d83c826c..b346c20d 100755 --- a/client/src/main/java/client/renderer/layers/LayerWolfCollar.java +++ b/client/src/main/java/client/renderer/layers/LayerWolfCollar.java @@ -9,7 +9,7 @@ import common.entity.animal.EntityWolf; public class LayerWolfCollar implements LayerRenderer { - private static final String WOLF_COLLAR = "textures/entity/wolf_collar.png"; + private static final String WOLF_COLLAR = "textures/creature/wolf_collar.png"; private final RenderWolf wolfRenderer; public LayerWolfCollar(RenderWolf wolfRendererIn) diff --git a/client/src/main/java/client/renderer/model/ModelCat.java b/client/src/main/java/client/renderer/model/ModelCat.java new file mode 100755 index 00000000..55b5f6c1 --- /dev/null +++ b/client/src/main/java/client/renderer/model/ModelCat.java @@ -0,0 +1,205 @@ +package client.renderer.model; + +import org.lwjgl.opengl.GL11; + +import common.entity.Entity; +import common.entity.animal.EntityCat; +import common.entity.types.EntityLiving; +import common.util.ExtMath; + +public class ModelCat extends ModelBase +{ + ModelRenderer backLeftLeg; + ModelRenderer backRightLeg; + ModelRenderer frontLeftLeg; + ModelRenderer frontRightLeg; + ModelRenderer tail; + ModelRenderer tail2; + ModelRenderer head; + ModelRenderer body; + int field_78163_i = 1; + + public ModelCat() + { + this.setTextureOffset("head.main", 0, 0); + this.setTextureOffset("head.nose", 0, 24); + this.setTextureOffset("head.ear1", 0, 10); + this.setTextureOffset("head.ear2", 6, 10); + this.head = new ModelRenderer(this, "head"); + this.head.addBox("main", -2.5F, -2.0F, -3.0F, 5, 4, 5); + this.head.addBox("nose", -1.5F, 0.0F, -4.0F, 3, 2, 2); + this.head.addBox("ear1", -2.0F, -3.0F, 0.0F, 1, 1, 2); + this.head.addBox("ear2", 1.0F, -3.0F, 0.0F, 1, 1, 2); + this.head.setRotationPoint(0.0F, 15.0F, -9.0F); + this.body = new ModelRenderer(this, 20, 0); + this.body.addBox(-2.0F, 3.0F, -8.0F, 4, 16, 6, 0.0F); + this.body.setRotationPoint(0.0F, 12.0F, -10.0F); + this.tail = new ModelRenderer(this, 0, 15); + this.tail.addBox(-0.5F, 0.0F, 0.0F, 1, 8, 1); + this.tail.rotateAngleX = 0.9F; + this.tail.setRotationPoint(0.0F, 15.0F, 8.0F); + this.tail2 = new ModelRenderer(this, 4, 15); + this.tail2.addBox(-0.5F, 0.0F, 0.0F, 1, 8, 1); + this.tail2.setRotationPoint(0.0F, 20.0F, 14.0F); + this.backLeftLeg = new ModelRenderer(this, 8, 13); + this.backLeftLeg.addBox(-1.0F, 0.0F, 1.0F, 2, 6, 2); + this.backLeftLeg.setRotationPoint(1.1F, 18.0F, 5.0F); + this.backRightLeg = new ModelRenderer(this, 8, 13); + this.backRightLeg.addBox(-1.0F, 0.0F, 1.0F, 2, 6, 2); + this.backRightLeg.setRotationPoint(-1.1F, 18.0F, 5.0F); + this.frontLeftLeg = new ModelRenderer(this, 40, 0); + this.frontLeftLeg.addBox(-1.0F, 0.0F, 0.0F, 2, 10, 2); + this.frontLeftLeg.setRotationPoint(1.2F, 13.8F, -5.0F); + this.frontRightLeg = new ModelRenderer(this, 40, 0); + this.frontRightLeg.addBox(-1.0F, 0.0F, 0.0F, 2, 10, 2); + this.frontRightLeg.setRotationPoint(-1.2F, 13.8F, -5.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale) + { + this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale, entityIn); + + if (this.isChild) + { + float f = 2.0F; + GL11.glPushMatrix(); + GL11.glScalef(1.5F / f, 1.5F / f, 1.5F / f); + GL11.glTranslatef(0.0F, 10.0F * scale, 4.0F * scale); + this.head.render(scale); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(1.0F / f, 1.0F / f, 1.0F / f); + GL11.glTranslatef(0.0F, 24.0F * scale, 0.0F); + this.body.render(scale); + this.backLeftLeg.render(scale); + this.backRightLeg.render(scale); + this.frontLeftLeg.render(scale); + this.frontRightLeg.render(scale); + this.tail.render(scale); + this.tail2.render(scale); + GL11.glPopMatrix(); + } + else + { + this.head.render(scale); + this.body.render(scale); + this.tail.render(scale); + this.tail2.render(scale); + this.backLeftLeg.render(scale); + this.backRightLeg.render(scale); + this.frontLeftLeg.render(scale); + this.frontRightLeg.render(scale); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + this.head.rotateAngleX = headPitch / (180F / (float)Math.PI); + this.head.rotateAngleY = netHeadYaw / (180F / (float)Math.PI); + + if (this.field_78163_i != 3) + { + this.body.rotateAngleX = ((float)Math.PI / 2F); + + if (this.field_78163_i == 2) + { + this.backLeftLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F) * 1.0F * limbSwingAmount; + this.backRightLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + 0.3F) * 1.0F * limbSwingAmount; + this.frontLeftLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + (float)Math.PI + 0.3F) * 1.0F * limbSwingAmount; + this.frontRightLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.0F * limbSwingAmount; + this.tail2.rotateAngleX = 1.7278761F + ((float)Math.PI / 10F) * ExtMath.cos(limbSwing) * limbSwingAmount; + } + else + { + this.backLeftLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F) * 1.0F * limbSwingAmount; + this.backRightLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.0F * limbSwingAmount; + this.frontLeftLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.0F * limbSwingAmount; + this.frontRightLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F) * 1.0F * limbSwingAmount; + + if (this.field_78163_i == 1) + { + this.tail2.rotateAngleX = 1.7278761F + ((float)Math.PI / 4F) * ExtMath.cos(limbSwing) * limbSwingAmount; + } + else + { + this.tail2.rotateAngleX = 1.7278761F + 0.47123894F * ExtMath.cos(limbSwing) * limbSwingAmount; + } + } + } + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLiving entitylivingbaseIn, float p_78086_2_, float p_78086_3_, float partialTickTime) + { + EntityCat cat = (EntityCat)entitylivingbaseIn; + this.body.rotationPointY = 12.0F; + this.body.rotationPointZ = -10.0F; + this.head.rotationPointY = 15.0F; + this.head.rotationPointZ = -9.0F; + this.tail.rotationPointY = 15.0F; + this.tail.rotationPointZ = 8.0F; + this.tail2.rotationPointY = 20.0F; + this.tail2.rotationPointZ = 14.0F; + this.frontLeftLeg.rotationPointY = this.frontRightLeg.rotationPointY = 13.8F; + this.frontLeftLeg.rotationPointZ = this.frontRightLeg.rotationPointZ = -5.0F; + this.backLeftLeg.rotationPointY = this.backRightLeg.rotationPointY = 18.0F; + this.backLeftLeg.rotationPointZ = this.backRightLeg.rotationPointZ = 5.0F; + this.tail.rotateAngleX = 0.9F; + + if (cat.isSneakingVisually()) + { + ++this.body.rotationPointY; + this.head.rotationPointY += 2.0F; + ++this.tail.rotationPointY; + this.tail2.rotationPointY += -4.0F; + this.tail2.rotationPointZ += 2.0F; + this.tail.rotateAngleX = ((float)Math.PI / 2F); + this.tail2.rotateAngleX = ((float)Math.PI / 2F); + this.field_78163_i = 0; + } + else if (cat.isSprinting()) + { + this.tail2.rotationPointY = this.tail.rotationPointY; + this.tail2.rotationPointZ += 2.0F; + this.tail.rotateAngleX = ((float)Math.PI / 2F); + this.tail2.rotateAngleX = ((float)Math.PI / 2F); + this.field_78163_i = 2; + } + else if (cat.isSitting()) + { + this.body.rotateAngleX = ((float)Math.PI / 4F); + this.body.rotationPointY += -4.0F; + this.body.rotationPointZ += 5.0F; + this.head.rotationPointY += -3.3F; + ++this.head.rotationPointZ; + this.tail.rotationPointY += 8.0F; + this.tail.rotationPointZ += -2.0F; + this.tail2.rotationPointY += 2.0F; + this.tail2.rotationPointZ += -0.8F; + this.tail.rotateAngleX = 1.7278761F; + this.tail2.rotateAngleX = 2.670354F; + this.frontLeftLeg.rotateAngleX = this.frontRightLeg.rotateAngleX = -0.15707964F; + this.frontLeftLeg.rotationPointY = this.frontRightLeg.rotationPointY = 15.8F; + this.frontLeftLeg.rotationPointZ = this.frontRightLeg.rotationPointZ = -7.0F; + this.backLeftLeg.rotateAngleX = this.backRightLeg.rotateAngleX = -((float)Math.PI / 2F); + this.backLeftLeg.rotationPointY = this.backRightLeg.rotationPointY = 21.0F; + this.backLeftLeg.rotationPointZ = this.backRightLeg.rotationPointZ = 1.0F; + this.field_78163_i = 3; + } + else + { + this.field_78163_i = 1; + } + } +} diff --git a/client/src/main/java/client/renderer/model/ModelOcelot.java b/client/src/main/java/client/renderer/model/ModelOcelot.java deleted file mode 100755 index e7765ca0..00000000 --- a/client/src/main/java/client/renderer/model/ModelOcelot.java +++ /dev/null @@ -1,220 +0,0 @@ -package client.renderer.model; - -import org.lwjgl.opengl.GL11; - -import common.entity.Entity; -import common.entity.animal.EntityOcelot; -import common.entity.types.EntityLiving; -import common.util.ExtMath; - -public class ModelOcelot extends ModelBase -{ - /** The back left leg model for the Ocelot. */ - ModelRenderer ocelotBackLeftLeg; - - /** The back right leg model for the Ocelot. */ - ModelRenderer ocelotBackRightLeg; - - /** The front left leg model for the Ocelot. */ - ModelRenderer ocelotFrontLeftLeg; - - /** The front right leg model for the Ocelot. */ - ModelRenderer ocelotFrontRightLeg; - - /** The tail model for the Ocelot. */ - ModelRenderer ocelotTail; - - /** The second part of tail model for the Ocelot. */ - ModelRenderer ocelotTail2; - - /** The head model for the Ocelot. */ - ModelRenderer ocelotHead; - - /** The body model for the Ocelot. */ - ModelRenderer ocelotBody; - int field_78163_i = 1; - - public ModelOcelot() - { - this.setTextureOffset("head.main", 0, 0); - this.setTextureOffset("head.nose", 0, 24); - this.setTextureOffset("head.ear1", 0, 10); - this.setTextureOffset("head.ear2", 6, 10); - this.ocelotHead = new ModelRenderer(this, "head"); - this.ocelotHead.addBox("main", -2.5F, -2.0F, -3.0F, 5, 4, 5); - this.ocelotHead.addBox("nose", -1.5F, 0.0F, -4.0F, 3, 2, 2); - this.ocelotHead.addBox("ear1", -2.0F, -3.0F, 0.0F, 1, 1, 2); - this.ocelotHead.addBox("ear2", 1.0F, -3.0F, 0.0F, 1, 1, 2); - this.ocelotHead.setRotationPoint(0.0F, 15.0F, -9.0F); - this.ocelotBody = new ModelRenderer(this, 20, 0); - this.ocelotBody.addBox(-2.0F, 3.0F, -8.0F, 4, 16, 6, 0.0F); - this.ocelotBody.setRotationPoint(0.0F, 12.0F, -10.0F); - this.ocelotTail = new ModelRenderer(this, 0, 15); - this.ocelotTail.addBox(-0.5F, 0.0F, 0.0F, 1, 8, 1); - this.ocelotTail.rotateAngleX = 0.9F; - this.ocelotTail.setRotationPoint(0.0F, 15.0F, 8.0F); - this.ocelotTail2 = new ModelRenderer(this, 4, 15); - this.ocelotTail2.addBox(-0.5F, 0.0F, 0.0F, 1, 8, 1); - this.ocelotTail2.setRotationPoint(0.0F, 20.0F, 14.0F); - this.ocelotBackLeftLeg = new ModelRenderer(this, 8, 13); - this.ocelotBackLeftLeg.addBox(-1.0F, 0.0F, 1.0F, 2, 6, 2); - this.ocelotBackLeftLeg.setRotationPoint(1.1F, 18.0F, 5.0F); - this.ocelotBackRightLeg = new ModelRenderer(this, 8, 13); - this.ocelotBackRightLeg.addBox(-1.0F, 0.0F, 1.0F, 2, 6, 2); - this.ocelotBackRightLeg.setRotationPoint(-1.1F, 18.0F, 5.0F); - this.ocelotFrontLeftLeg = new ModelRenderer(this, 40, 0); - this.ocelotFrontLeftLeg.addBox(-1.0F, 0.0F, 0.0F, 2, 10, 2); - this.ocelotFrontLeftLeg.setRotationPoint(1.2F, 13.8F, -5.0F); - this.ocelotFrontRightLeg = new ModelRenderer(this, 40, 0); - this.ocelotFrontRightLeg.addBox(-1.0F, 0.0F, 0.0F, 2, 10, 2); - this.ocelotFrontRightLeg.setRotationPoint(-1.2F, 13.8F, -5.0F); - } - - /** - * Sets the models various rotation angles then renders the model. - */ - public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale) - { - this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale, entityIn); - - if (this.isChild) - { - float f = 2.0F; - GL11.glPushMatrix(); - GL11.glScalef(1.5F / f, 1.5F / f, 1.5F / f); - GL11.glTranslatef(0.0F, 10.0F * scale, 4.0F * scale); - this.ocelotHead.render(scale); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - GL11.glScalef(1.0F / f, 1.0F / f, 1.0F / f); - GL11.glTranslatef(0.0F, 24.0F * scale, 0.0F); - this.ocelotBody.render(scale); - this.ocelotBackLeftLeg.render(scale); - this.ocelotBackRightLeg.render(scale); - this.ocelotFrontLeftLeg.render(scale); - this.ocelotFrontRightLeg.render(scale); - this.ocelotTail.render(scale); - this.ocelotTail2.render(scale); - GL11.glPopMatrix(); - } - else - { - this.ocelotHead.render(scale); - this.ocelotBody.render(scale); - this.ocelotTail.render(scale); - this.ocelotTail2.render(scale); - this.ocelotBackLeftLeg.render(scale); - this.ocelotBackRightLeg.render(scale); - this.ocelotFrontLeftLeg.render(scale); - this.ocelotFrontRightLeg.render(scale); - } - } - - /** - * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms - * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how - * "far" arms and legs can swing at most. - */ - public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) - { - this.ocelotHead.rotateAngleX = headPitch / (180F / (float)Math.PI); - this.ocelotHead.rotateAngleY = netHeadYaw / (180F / (float)Math.PI); - - if (this.field_78163_i != 3) - { - this.ocelotBody.rotateAngleX = ((float)Math.PI / 2F); - - if (this.field_78163_i == 2) - { - this.ocelotBackLeftLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F) * 1.0F * limbSwingAmount; - this.ocelotBackRightLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + 0.3F) * 1.0F * limbSwingAmount; - this.ocelotFrontLeftLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + (float)Math.PI + 0.3F) * 1.0F * limbSwingAmount; - this.ocelotFrontRightLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.0F * limbSwingAmount; - this.ocelotTail2.rotateAngleX = 1.7278761F + ((float)Math.PI / 10F) * ExtMath.cos(limbSwing) * limbSwingAmount; - } - else - { - this.ocelotBackLeftLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F) * 1.0F * limbSwingAmount; - this.ocelotBackRightLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.0F * limbSwingAmount; - this.ocelotFrontLeftLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.0F * limbSwingAmount; - this.ocelotFrontRightLeg.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F) * 1.0F * limbSwingAmount; - - if (this.field_78163_i == 1) - { - this.ocelotTail2.rotateAngleX = 1.7278761F + ((float)Math.PI / 4F) * ExtMath.cos(limbSwing) * limbSwingAmount; - } - else - { - this.ocelotTail2.rotateAngleX = 1.7278761F + 0.47123894F * ExtMath.cos(limbSwing) * limbSwingAmount; - } - } - } - } - - /** - * Used for easily adding entity-dependent animations. The second and third float params here are the same second - * and third as in the setRotationAngles method. - */ - public void setLivingAnimations(EntityLiving entitylivingbaseIn, float p_78086_2_, float p_78086_3_, float partialTickTime) - { - EntityOcelot entityocelot = (EntityOcelot)entitylivingbaseIn; - this.ocelotBody.rotationPointY = 12.0F; - this.ocelotBody.rotationPointZ = -10.0F; - this.ocelotHead.rotationPointY = 15.0F; - this.ocelotHead.rotationPointZ = -9.0F; - this.ocelotTail.rotationPointY = 15.0F; - this.ocelotTail.rotationPointZ = 8.0F; - this.ocelotTail2.rotationPointY = 20.0F; - this.ocelotTail2.rotationPointZ = 14.0F; - this.ocelotFrontLeftLeg.rotationPointY = this.ocelotFrontRightLeg.rotationPointY = 13.8F; - this.ocelotFrontLeftLeg.rotationPointZ = this.ocelotFrontRightLeg.rotationPointZ = -5.0F; - this.ocelotBackLeftLeg.rotationPointY = this.ocelotBackRightLeg.rotationPointY = 18.0F; - this.ocelotBackLeftLeg.rotationPointZ = this.ocelotBackRightLeg.rotationPointZ = 5.0F; - this.ocelotTail.rotateAngleX = 0.9F; - - if (entityocelot.isSneakingVisually()) - { - ++this.ocelotBody.rotationPointY; - this.ocelotHead.rotationPointY += 2.0F; - ++this.ocelotTail.rotationPointY; - this.ocelotTail2.rotationPointY += -4.0F; - this.ocelotTail2.rotationPointZ += 2.0F; - this.ocelotTail.rotateAngleX = ((float)Math.PI / 2F); - this.ocelotTail2.rotateAngleX = ((float)Math.PI / 2F); - this.field_78163_i = 0; - } - else if (entityocelot.isSprinting()) - { - this.ocelotTail2.rotationPointY = this.ocelotTail.rotationPointY; - this.ocelotTail2.rotationPointZ += 2.0F; - this.ocelotTail.rotateAngleX = ((float)Math.PI / 2F); - this.ocelotTail2.rotateAngleX = ((float)Math.PI / 2F); - this.field_78163_i = 2; - } - else if (entityocelot.isSitting()) - { - this.ocelotBody.rotateAngleX = ((float)Math.PI / 4F); - this.ocelotBody.rotationPointY += -4.0F; - this.ocelotBody.rotationPointZ += 5.0F; - this.ocelotHead.rotationPointY += -3.3F; - ++this.ocelotHead.rotationPointZ; - this.ocelotTail.rotationPointY += 8.0F; - this.ocelotTail.rotationPointZ += -2.0F; - this.ocelotTail2.rotationPointY += 2.0F; - this.ocelotTail2.rotationPointZ += -0.8F; - this.ocelotTail.rotateAngleX = 1.7278761F; - this.ocelotTail2.rotateAngleX = 2.670354F; - this.ocelotFrontLeftLeg.rotateAngleX = this.ocelotFrontRightLeg.rotateAngleX = -0.15707964F; - this.ocelotFrontLeftLeg.rotationPointY = this.ocelotFrontRightLeg.rotationPointY = 15.8F; - this.ocelotFrontLeftLeg.rotationPointZ = this.ocelotFrontRightLeg.rotationPointZ = -7.0F; - this.ocelotBackLeftLeg.rotateAngleX = this.ocelotBackRightLeg.rotateAngleX = -((float)Math.PI / 2F); - this.ocelotBackLeftLeg.rotationPointY = this.ocelotBackRightLeg.rotationPointY = 21.0F; - this.ocelotBackLeftLeg.rotationPointZ = this.ocelotBackRightLeg.rotationPointZ = 1.0F; - this.field_78163_i = 3; - } - else - { - this.field_78163_i = 1; - } - } -} diff --git a/client/src/main/java/client/renderer/model/ModelSquid.java b/client/src/main/java/client/renderer/model/ModelSquid.java deleted file mode 100755 index 5db6680a..00000000 --- a/client/src/main/java/client/renderer/model/ModelSquid.java +++ /dev/null @@ -1,61 +0,0 @@ -package client.renderer.model; - -import common.entity.Entity; - -public class ModelSquid extends ModelBase -{ - /** The squid's body */ - ModelRenderer squidBody; - - /** The squid's tentacles */ - ModelRenderer[] squidTentacles = new ModelRenderer[8]; - - public ModelSquid() - { - int i = -16; - this.squidBody = new ModelRenderer(this, 0, 0); - this.squidBody.addBox(-6.0F, -8.0F, -6.0F, 12, 16, 12); - this.squidBody.rotationPointY += (float)(24 + i); - - for (int j = 0; j < this.squidTentacles.length; ++j) - { - this.squidTentacles[j] = new ModelRenderer(this, 48, 0); - double d0 = (double)j * Math.PI * 2.0D / (double)this.squidTentacles.length; - float f = (float)Math.cos(d0) * 5.0F; - float f1 = (float)Math.sin(d0) * 5.0F; - this.squidTentacles[j].addBox(-1.0F, 0.0F, -1.0F, 2, 18, 2); - this.squidTentacles[j].rotationPointX = f; - this.squidTentacles[j].rotationPointZ = f1; - this.squidTentacles[j].rotationPointY = (float)(31 + i); - d0 = (double)j * Math.PI * -2.0D / (double)this.squidTentacles.length + (Math.PI / 2D); - this.squidTentacles[j].rotateAngleY = (float)d0; - } - } - - /** - * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms - * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how - * "far" arms and legs can swing at most. - */ - public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) - { - for (ModelRenderer modelrenderer : this.squidTentacles) - { - modelrenderer.rotateAngleX = ageInTicks; - } - } - - /** - * Sets the models various rotation angles then renders the model. - */ - public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale) - { - this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale, entityIn); - this.squidBody.render(scale); - - for (int i = 0; i < this.squidTentacles.length; ++i) - { - this.squidTentacles[i].render(scale); - } - } -} diff --git a/client/src/main/java/client/renderer/texture/EntityTexManager.java b/client/src/main/java/client/renderer/texture/EntityTexManager.java index bcde521d..b567ea1a 100755 --- a/client/src/main/java/client/renderer/texture/EntityTexManager.java +++ b/client/src/main/java/client/renderer/texture/EntityTexManager.java @@ -90,41 +90,6 @@ public abstract class EntityTexManager extra.discard(); // setTexture(skin, image, entry.getValue()); } - for(String cape : SpeciesRegistry.CAPES) { - String loc = EntityNPC.getCapeTexture(cape); - BufferedImage image; - try { - image = TextureUtil.readImage(FileUtils.getResource(loc)); - } - catch(IOException e) { - if(e instanceof FileNotFoundException) - Log.IO.warn("Textur ist nicht vorhanden: " + loc); - else - Log.IO.error(e, "Konnte Textur nicht laden: " + loc); - image = new BufferedImage(64, 32, BufferedImage.TYPE_INT_ARGB); - Graphics2D g = image.createGraphics(); - g.setColor(Color.BLACK); - g.fillRect(0, 0, 64, 32); - g.dispose(); - } - loc = getCapeLocation(cape); - DynamicTexture dyntex = (DynamicTexture)manager.getTexture(loc); - if(dyntex == null || (dyntex.getWidth() != image.getWidth() || dyntex.getHeight() != image.getHeight())) { - if(dyntex != null) - manager.deleteTexture(loc); - dyntex = new DynamicTexture(image); - manager.loadTexture(loc, dyntex); - } - else { - image.getRGB(0, 0, image.getWidth(), image.getHeight(), dyntex.getData(), 0, image.getWidth()); - } - dyntex.updateTexture(); -// setCape(cape, image); - } -// for(ModelType model : ModelType.values()) { -// if(DEF_TEXTURES.get(model) == null) -// Log.IO.warn(altNpcLayer); -// } } public static String getDefault(ModelType model) { @@ -141,10 +106,6 @@ public abstract class EntityTexManager private static String getNpcSkinLocation(String user) { return "npcs/" + user.toLowerCase() + "/dyn"; } - - private static String getCapeLocation(String name) { - return "capes/" + name.toLowerCase() + "/dyn"; - } public static LayerExtra getLayer(int id, String skin, ModelType model) { @@ -166,14 +127,6 @@ public abstract class EntityTexManager return Client.CLIENT.getTextureManager().getTexture(getSkinLocation(id)) != null; } - public static String getCape(String name) - { - if(name == null || name.isEmpty()) - return null; - String loc = getCapeLocation(name); - return Client.CLIENT.getTextureManager().getTexture(loc) != null ? loc : null; - } - public static void clearTextures() { List list = Lists.newArrayList(USER_TEXTURES); for(Integer user : list) { @@ -239,8 +192,4 @@ public abstract class EntityTexManager public static LayerExtra getLayer(EntityNPC entity) { return getLayer(entity.isPlayer() ? entity.getId() : -1, entity.getChar(), entity.getSpecies().renderer); } - - public static String getCape(EntityNPC entity) { - return !entity.getCape().isEmpty() ? EntityTexManager.getCape(entity.getCape()) : null; - } } diff --git a/client/src/main/java/client/world/WorldClient.java b/client/src/main/java/client/world/WorldClient.java index 6de831c7..5ed45e98 100755 --- a/client/src/main/java/client/world/WorldClient.java +++ b/client/src/main/java/client/world/WorldClient.java @@ -868,6 +868,10 @@ public class WorldClient extends AWorldClient return this.lastLightning; } + public Vec3 getLightColor() { + return this.lightColor; + } + public void decrLightning() { if(this.lastLightning > 0) this.lastLightning -= 1; diff --git a/client/src/main/resources/textures/entity/bat.png b/client/src/main/resources/textures/creature/bat.png similarity index 100% rename from client/src/main/resources/textures/entity/bat.png rename to client/src/main/resources/textures/creature/bat.png diff --git a/client/src/main/resources/textures/entity/cat_black.png b/client/src/main/resources/textures/creature/cat_black.png similarity index 100% rename from client/src/main/resources/textures/entity/cat_black.png rename to client/src/main/resources/textures/creature/cat_black.png diff --git a/client/src/main/resources/textures/entity/cat_red.png b/client/src/main/resources/textures/creature/cat_red.png similarity index 100% rename from client/src/main/resources/textures/entity/cat_red.png rename to client/src/main/resources/textures/creature/cat_red.png diff --git a/client/src/main/resources/textures/entity/cat_siamese.png b/client/src/main/resources/textures/creature/cat_siamese.png similarity index 100% rename from client/src/main/resources/textures/entity/cat_siamese.png rename to client/src/main/resources/textures/creature/cat_siamese.png diff --git a/client/src/main/resources/textures/entity/cat_ocelot.png b/client/src/main/resources/textures/creature/cat_wild.png similarity index 100% rename from client/src/main/resources/textures/entity/cat_ocelot.png rename to client/src/main/resources/textures/creature/cat_wild.png diff --git a/client/src/main/resources/textures/entity/chicken.png b/client/src/main/resources/textures/creature/chicken.png similarity index 100% rename from client/src/main/resources/textures/entity/chicken.png rename to client/src/main/resources/textures/creature/chicken.png diff --git a/client/src/main/resources/textures/entity/cow.png b/client/src/main/resources/textures/creature/cow.png similarity index 100% rename from client/src/main/resources/textures/entity/cow.png rename to client/src/main/resources/textures/creature/cow.png diff --git a/client/src/main/resources/textures/entity/donkey.png b/client/src/main/resources/textures/creature/donkey.png similarity index 100% rename from client/src/main/resources/textures/entity/donkey.png rename to client/src/main/resources/textures/creature/donkey.png diff --git a/client/src/main/resources/textures/entity/dragon.png b/client/src/main/resources/textures/creature/dragon.png similarity index 100% rename from client/src/main/resources/textures/entity/dragon.png rename to client/src/main/resources/textures/creature/dragon.png diff --git a/client/src/main/resources/textures/entity/dragon_eyes.png b/client/src/main/resources/textures/creature/dragon_eyes.png similarity index 100% rename from client/src/main/resources/textures/entity/dragon_eyes.png rename to client/src/main/resources/textures/creature/dragon_eyes.png diff --git a/client/src/main/resources/textures/entity/fox.png b/client/src/main/resources/textures/creature/fox.png similarity index 100% rename from client/src/main/resources/textures/entity/fox.png rename to client/src/main/resources/textures/creature/fox.png diff --git a/client/src/main/resources/textures/entity/horse_black.png b/client/src/main/resources/textures/creature/horse_black.png similarity index 100% rename from client/src/main/resources/textures/entity/horse_black.png rename to client/src/main/resources/textures/creature/horse_black.png diff --git a/client/src/main/resources/textures/entity/horse_brown.png b/client/src/main/resources/textures/creature/horse_brown.png similarity index 100% rename from client/src/main/resources/textures/entity/horse_brown.png rename to client/src/main/resources/textures/creature/horse_brown.png diff --git a/client/src/main/resources/textures/entity/horse_chestnut.png b/client/src/main/resources/textures/creature/horse_chestnut.png similarity index 100% rename from client/src/main/resources/textures/entity/horse_chestnut.png rename to client/src/main/resources/textures/creature/horse_chestnut.png diff --git a/client/src/main/resources/textures/entity/horse_creamy.png b/client/src/main/resources/textures/creature/horse_creamy.png similarity index 100% rename from client/src/main/resources/textures/entity/horse_creamy.png rename to client/src/main/resources/textures/creature/horse_creamy.png diff --git a/client/src/main/resources/textures/entity/horse_darkbrown.png b/client/src/main/resources/textures/creature/horse_darkbrown.png similarity index 100% rename from client/src/main/resources/textures/entity/horse_darkbrown.png rename to client/src/main/resources/textures/creature/horse_darkbrown.png diff --git a/client/src/main/resources/textures/entity/horse_gray.png b/client/src/main/resources/textures/creature/horse_gray.png similarity index 100% rename from client/src/main/resources/textures/entity/horse_gray.png rename to client/src/main/resources/textures/creature/horse_gray.png diff --git a/client/src/main/resources/textures/entity/horse_markings_blackdots.png b/client/src/main/resources/textures/creature/horse_markings_blackdots.png similarity index 100% rename from client/src/main/resources/textures/entity/horse_markings_blackdots.png rename to client/src/main/resources/textures/creature/horse_markings_blackdots.png diff --git a/client/src/main/resources/textures/entity/horse_markings_white.png b/client/src/main/resources/textures/creature/horse_markings_white.png similarity index 100% rename from client/src/main/resources/textures/entity/horse_markings_white.png rename to client/src/main/resources/textures/creature/horse_markings_white.png diff --git a/client/src/main/resources/textures/entity/horse_markings_whitedots.png b/client/src/main/resources/textures/creature/horse_markings_whitedots.png similarity index 100% rename from client/src/main/resources/textures/entity/horse_markings_whitedots.png rename to client/src/main/resources/textures/creature/horse_markings_whitedots.png diff --git a/client/src/main/resources/textures/entity/horse_markings_whitefield.png b/client/src/main/resources/textures/creature/horse_markings_whitefield.png similarity index 100% rename from client/src/main/resources/textures/entity/horse_markings_whitefield.png rename to client/src/main/resources/textures/creature/horse_markings_whitefield.png diff --git a/client/src/main/resources/textures/entity/horse_white.png b/client/src/main/resources/textures/creature/horse_white.png similarity index 100% rename from client/src/main/resources/textures/entity/horse_white.png rename to client/src/main/resources/textures/creature/horse_white.png diff --git a/client/src/main/resources/textures/entity/mouse.png b/client/src/main/resources/textures/creature/mouse.png similarity index 100% rename from client/src/main/resources/textures/entity/mouse.png rename to client/src/main/resources/textures/creature/mouse.png diff --git a/client/src/main/resources/textures/entity/mule.png b/client/src/main/resources/textures/creature/mule.png similarity index 100% rename from client/src/main/resources/textures/entity/mule.png rename to client/src/main/resources/textures/creature/mule.png diff --git a/client/src/main/resources/textures/entity/pig.png b/client/src/main/resources/textures/creature/pig.png similarity index 100% rename from client/src/main/resources/textures/entity/pig.png rename to client/src/main/resources/textures/creature/pig.png diff --git a/client/src/main/resources/textures/entity/pig_saddle.png b/client/src/main/resources/textures/creature/pig_saddle.png similarity index 100% rename from client/src/main/resources/textures/entity/pig_saddle.png rename to client/src/main/resources/textures/creature/pig_saddle.png diff --git a/client/src/main/resources/textures/entity/rabbit_black.png b/client/src/main/resources/textures/creature/rabbit_black.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_black.png rename to client/src/main/resources/textures/creature/rabbit_black.png diff --git a/client/src/main/resources/textures/entity/rabbit_black_splotched.png b/client/src/main/resources/textures/creature/rabbit_black_splotched.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_black_splotched.png rename to client/src/main/resources/textures/creature/rabbit_black_splotched.png diff --git a/client/src/main/resources/textures/entity/rabbit_brown.png b/client/src/main/resources/textures/creature/rabbit_brown.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_brown.png rename to client/src/main/resources/textures/creature/rabbit_brown.png diff --git a/client/src/main/resources/textures/entity/rabbit_dark.png b/client/src/main/resources/textures/creature/rabbit_dark.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_dark.png rename to client/src/main/resources/textures/creature/rabbit_dark.png diff --git a/client/src/main/resources/textures/entity/rabbit_dark_gray.png b/client/src/main/resources/textures/creature/rabbit_dark_gray.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_dark_gray.png rename to client/src/main/resources/textures/creature/rabbit_dark_gray.png diff --git a/client/src/main/resources/textures/entity/rabbit_caerbannog.png b/client/src/main/resources/textures/creature/rabbit_evil.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_caerbannog.png rename to client/src/main/resources/textures/creature/rabbit_evil.png diff --git a/client/src/main/resources/textures/entity/rabbit_gold.png b/client/src/main/resources/textures/creature/rabbit_gold.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_gold.png rename to client/src/main/resources/textures/creature/rabbit_gold.png diff --git a/client/src/main/resources/textures/entity/rabbit_gray.png b/client/src/main/resources/textures/creature/rabbit_gray.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_gray.png rename to client/src/main/resources/textures/creature/rabbit_gray.png diff --git a/client/src/main/resources/textures/entity/rabbit_toast.png b/client/src/main/resources/textures/creature/rabbit_half.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_toast.png rename to client/src/main/resources/textures/creature/rabbit_half.png diff --git a/client/src/main/resources/textures/entity/rabbit_salt.png b/client/src/main/resources/textures/creature/rabbit_salt.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_salt.png rename to client/src/main/resources/textures/creature/rabbit_salt.png diff --git a/client/src/main/resources/textures/entity/rabbit_white.png b/client/src/main/resources/textures/creature/rabbit_white.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_white.png rename to client/src/main/resources/textures/creature/rabbit_white.png diff --git a/client/src/main/resources/textures/entity/rabbit_white_splotched.png b/client/src/main/resources/textures/creature/rabbit_white_splotched.png similarity index 100% rename from client/src/main/resources/textures/entity/rabbit_white_splotched.png rename to client/src/main/resources/textures/creature/rabbit_white_splotched.png diff --git a/client/src/main/resources/textures/entity/sheep.png b/client/src/main/resources/textures/creature/sheep.png similarity index 100% rename from client/src/main/resources/textures/entity/sheep.png rename to client/src/main/resources/textures/creature/sheep.png diff --git a/client/src/main/resources/textures/entity/sheep_fur.png b/client/src/main/resources/textures/creature/sheep_fur.png similarity index 100% rename from client/src/main/resources/textures/entity/sheep_fur.png rename to client/src/main/resources/textures/creature/sheep_fur.png diff --git a/client/src/main/resources/textures/entity/wolf.png b/client/src/main/resources/textures/creature/wolf.png similarity index 100% rename from client/src/main/resources/textures/entity/wolf.png rename to client/src/main/resources/textures/creature/wolf.png diff --git a/client/src/main/resources/textures/entity/wolf_angry.png b/client/src/main/resources/textures/creature/wolf_angry.png similarity index 100% rename from client/src/main/resources/textures/entity/wolf_angry.png rename to client/src/main/resources/textures/creature/wolf_angry.png diff --git a/client/src/main/resources/textures/entity/wolf_collar.png b/client/src/main/resources/textures/creature/wolf_collar.png similarity index 100% rename from client/src/main/resources/textures/entity/wolf_collar.png rename to client/src/main/resources/textures/creature/wolf_collar.png diff --git a/client/src/main/resources/textures/entity/wolf_tame.png b/client/src/main/resources/textures/creature/wolf_tame.png similarity index 100% rename from client/src/main/resources/textures/entity/wolf_tame.png rename to client/src/main/resources/textures/creature/wolf_tame.png diff --git a/client/src/main/resources/textures/entity/experience_orb.png b/client/src/main/resources/textures/entity/experience_orb.png deleted file mode 100755 index 92f9d0f0643a2428b5f2c1ce8472b235ab124acf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1064 zcmV+@1lRkCP)VGd00YQLL_t(|+U;9Cj`BbZovNeYsw*$scdGTh*Wg;BO2*8X6yI$!nds<8NHR75H18=j6GvEX5$S#Yc?uH{TV* zIRVc52>5~kE0AZNCEqQmswhjzt`~C0XvB}ueVC=issLxtE z91f3_hx_l(ZMp0gfU+!2p64~k(IzOGwbo==R&%^<5c>oT2VWX5q`^=Kjl2{N7A(l& z;qBS?a4$LBm%xy_IHWTyq_lWSjH$9f9|9DXQiDV0aSl%vLSh}zWdP234$lRltDMzv z_xbRq9bi76o9p#zrqiiO({yt@9zV3sWBlcEF|*mMHiqOp;H#=KNs=@;u-x~1W2(xS zG-Z8=y}B8swx?Dca`NpW>L4V}=1JBj;r1Mz6ARn-{iK#}0Z-6Yz z^uh=`plqVlu%{EL>_iU09pf2w82SP3F8jEQaJ10pR-&Jqze^cw~X&@%WLZ>1H~en(Osy=JUBa4FYyH zo0-ey;>A;G5YL??iK(iJ#B*to<({UG48Zvi3ZYO6k6a7|IjoJIHj2;2cMbraSm^4K zME(Vy+5?6TM1&{jc5rGZ$0UZtV=VPx1vWEZ5ZdekF&A|zjbvG7thFZ3^F}Q$sX5=( zAmMQ!;5VEW@MWR(dVOnT0V?`FJ?*Z7>wx4u&d1nRtCcEvz+t!BHCDAt9r5=5{=Q+I zC-gMd4KR=E6`ZDJGyTJkQTu*^As+SOZdjX7|7N6U>a&)m^ zEqyUVx*gMT6htbkrt*11x~{{esb_!3q8YE-NZ}*m+!8xrK!<^6oi| z_sz|5aOd7`w^3P^##&1rlpKz6Wd^UsxUaWxrL3>A)0Dy#9?vb6!d$uA>Dl0@#n71L zaInx3`VV`0eg9wJPhV4eHs1S;UQ41=+t}LIff`Gm}zrF&mzLKDUMv;-SfU%08iK>v5hKQA6 zr@fY_y}iAoB9D_Smy?!|s}i4^)zUyi)gTSEFwZkd&iYvn2HDx!xz1Yot~wx*fT(0&N6xWn4gdfDhlJKBIc!28C_zRU=o!Y6AirP+hi5m^fEmNy z)5S5Q;?~=+v-y_|MC!LqzLk4xV_LjaQ?AEugBAy-%yhm#n`M4TTPXU<+~CaQ;N)v) zGf7<$d1*&ya?Wwz&1)hra~@gh?{%;GW;7EG41 zU8=d1~T;9#lanaat`AQaqSZOtHectgk$S%Z%Dlc~Gb zzK+*wp4t3PwPCeFfjdX@^;?X$nx>Te(oDG5nf&M^-;QwMhfUefm9i!_7OdMKe(=dX zKQTWm!SZ8AV;I&aU3t>b8xY>5aeTeZq=!FBL<}#<`d@Rg6yGkqu%e;DF5!4bdUE+5 z(H)cbTozS&_p#-YsgRxyvO?i#L9F3~bn)AZ zi{*VMu_!AXI@204h4JQzJ?-u)elm62j_%tbIsLEgq-8$GoJHF1IkBHpteAM>?vw2; z#XO#RvD4n#oltr(|BBC>OY^&*Ioy|M`;+-BMgHyKd&P(SDswk%y_>9FYGHm=TdeggRg9-&4u%!){hP!|wCh zxpD{giD}ldxL?tcwr10gy4V$VpYRAkxr?^`VE zzJF|=wk+EH>TcC8gXRab+*WgMiRJwFC+2T`i{t0{Gv$9gvp1a4`fRQ7gFQ{I0WZ8$ z9l95pdjDO}vPrh1F4@<+>4p9mi~TH7POb}$-SZm{mLyO9H~sko{+3VrX~oPtfmw-x N!PC{xWt~$(695@!0Sy2E diff --git a/client/src/main/resources/textures/entity/horse_skeleton.png b/client/src/main/resources/textures/entity/horse_skeleton.png deleted file mode 100755 index 29d4ed5d1d11bdb94e214963f23aa20e078a8eac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11643 zcmdT~19v6O7QL};+s-5t&BV6tOl&*3@x-=mXJTVw+nCrk-u-^YTg|Fk-F^Dh*}Ha~ z?r=qU2_$%YcmM!^Bqb@T3_1e;+hCzV`vHEVaR2~b&Qe4~QPINQ#opP%-hos~M1<7A z$==M;#uNbXSj$#%*GzoE=HGrYMNt=Cxvo#O2>_5&RKbp*Y89X+0E~iB(FKP>e#5I{ zVxeV8stpD%!b@iV-piwHH5ZEbtsSYR%Y8|*QToT%>+0g-ZTYS9DC_8b%5xe8h=xub ze^_7z;870w!Mj2ds~|Zz+64s1lH7qLMLitvH-{Pm0InfCJ^Wni1m3}F?E&Bbhec*e z^x@sFpms%S4FG98V22$22mvfk88E`EI)Vup!3ET*H2#7IBmn?6o<73lfC?nQ`MnfB z6kw%1aRUdiQb1S^3y1~-q|-`Jf(v#44AlaZ8Nqw|0eMw|6j? zEk-jAMbHocOc!RH0FZKn14M{1CLu^=A@W$~dUnbU970+p!2rGE$&;xvbKfvqlV|YV zZ?AXu$oBee>V=JP=upkz_Q|tSGbu16k04~H5CH)Em)X8gZh^R?!~NYuvm=|U`=NqQ z>uY;*ezKeG&(0`tNC2w*^wpZd!NC%Q!!TH#Ymarg4q#0kV6pw8_iY_6PaA&5>m|~Y z`(2PYCtq>o2N5AW0>TBAaef!;zexVCZ@cz8k$#V$*3WgXYk*^hV0v|LVbF)8k)2zO za?H^X~Fc&j40+^}bxa=a+nX!0KVi9h=dNy-OY zqB|0xDpa9Yz8U7vxJ|F$B^Y=lvgVu{K+x}wDGDDU9)N1j!S4A403`Oj#0oNi0VY$6 z{s91;$GEy>NjS29VF3Wqya4(-AsECy%&K1GtUjX7UL0^EXi-5#%HAKS!qEFbLil{# z6d^p-UfvbRKXnlJd1x8Cs7-xr+(<_|=(+)C4mi+;xH4F<@FV`_InTOqpy&Zp3an@Gn}~k`n+r;3WsY540KO41Ccs%XWV5JM zBi*PlF~e|8eClCrlLJjo^;k|5B26wgEP~z~qbpcS@JJxWIjnv#YQIfjT%3fatfojA z)j35IdONHJTu?AuKMi?enL-nl7y8SfhcRz`oThjc^(7fGSq_yx4Kjv7q9i5qXu`fc zJQ-CSyA*nOwV7~>Ecj)(? zEL;Jla#0exG^eS+0c3G5yKs75h09+kwMNB%Y8~a@Yo?Ulm17mBl?)2I4L$;2O^_NwL&Wn!B@0zeTK?ii zlVSg5H@(pmUUE{0IAgR%RY3R1VjE?zjMvA znk79&Hib0h%>= zv2~hd>+E&#ZW-FRMSJ|9Md7SeAx$gwWtjOtP7fS@vnqQ+<0_6V(+%q%M#h%x>qUb_ zL;KxylS$SYX6>_0^DYw;Ba9nWD^;WCF+7V|);UJqtDWob(ILfRSwqs1-y?@p)>3@N zp;F{ho~qK+`PDtuAJmttq?UBg7|(2%G;9#7}Xp2c_nmz{iM0)IPovLG_$n-F7Aj$-%Vdj|E-Hyp)rd(XNlEzWPMO)r)%8X zkeC0b>Fd-91pi-t@LaFlu^6j796n;y7>3%TpId6Qg;~%llJ-eQ_*f;V}hG2bQ z2Vh+R_yLU&)(|9+>5#=RoKVqF9ndU@{8++>a7bDtPKoxtIJX2ZCf_#988c?F#$dCt zvT`adC8c zVqB`)*LpMWin)m`k80yvw`z8BGq19;QMNHT&uj&@RmF z{tW-;41Q#j@hxjVLp8<4q~>6wpbh8nWNJLe{f8E(R-6xaNE&)-gTO%$sjwmouEIg7 zog5LyZE$9Yf>?J!bb(TRORMycgu`t0G_7#I?f_B{`6#|RR`#-8>mUYzgNv1~$Q zXA7H@YZQ^OWm(D?Jalk%JX$5YB()d5ZJT|bzEB_pV*7N()hV{tHLkRJXx;3P_lR|1 zQ$(uZxHGfqDYyUfu)Lo09k&>7Ncm9Q(^OWwwesA!jZqGoD=rpc2-M(6E>9XAx2w6= zZZp9$O8%vGWtF<9qwY_SlWb7sP*qm*TqoXoxThg+u;}yPX}h+zCEYT1aVB|IbY@re zq}5X^-DM@TI1_q}R84RbeL!GfE4}5C?`8E6GubpbHVMIL#Cf4J(Ok8DoBzG=(JR|u zZ(RMOy0WEvm3nQdXVcyL4mpSji*M^H>Adp~gNKH7mzeK^-P~p1W-PujL3_`k-)5_X zyTVXTtaq_D%%j-VnU#yZ%|>lcPXnB-^7m+BNnVG8OrZT*=0%449|vuEHaMbuxFB<40F6au2oEhws}AEyRMF-3bTpyi6pvPzWlD({+YNA zbH-}qm0FKM0Y>UCu=-t*) ztlo8}!#(+v@j6wDO!d#2pAvo!AG?yZI`(I#PvaLFKWbd=<<9tKujc(RJCuKu1AwAfK^61GycKRmlVUf{UHU&?OidBu9vzIU&EoWi`KoccF?)|>X)?mQdz z8cq*rp=I-~H!f8_J|&hiv|_eM3B`wgTop^arEL;+v_EqPs~iJ%%d2T3hw004R5 zzYT2IzU&vM62?VJP7G!f3JZ}NpSg+65&$3tNQnxmdaPY!dwQrYeta1mZSl#VqYH!N zo)Ov*Eg5q$sa?pD6>6N7jt_(j7r?DcE1>>E2f_pN^>$l;6nU@|w1u?)FEs+m5n2e724nvrQp;7y3THW{Tl@ zO-Ssa@{0EL@WMIfRx~BV#Wl#|#dErx8d#AkvrxeU482C(x)FR{PuAHn*G~P2d2Xd= zm)iNZa)ny`1OgUZ`XAm-3|y=u*;7%@$b$Mvziqv&**--u)WoT&sZHbx7!0P&b40H) zG`F;V?mNFq$|=Pw8>c~66p#i3AYoaNAoA(Yw;E%ATNV(YQ%ZuN3kH_JatytGO+PGF z^A{#H=v^tM^R^0fJgGN&+jC|p&IIqF_oH}MTT~4y(S$76FFa&Ro1~0zJz43i( zz9SN+g^S6s)4$_<@JR*S;EyPqS63D-eY$lDQ0zK3^c2gOkGr02B~+?+G2h+Blq%%< zJf6QmlR?U)PNgLNMK+sT=?kj@11PJgthU&b^clugRM1;lTZ8SzoSmJ`x)K2mSyu{> z)YMpQg&2g5k9p(E0#Ng;=mGpgr)MQiULBV1%o?lG;q-!P$O2#-!&?v&M4qM_QhKrN z!!aZ?y3dnvv&23hhe4O)u|N57d0oef^7EN5J0M`Jw5#vbZa6AhYGFv-7rqp49!&uI z@B3cDkzf65=@`dz-f`Y2Pg^g5P@}kv3~3XSLhCyslAV*%T5dp-fs#)U=Wsr5Afry@*gZI8tgj4F>MxctMibG z8tniNn zpsOj(7RwhhD?z4}3?}V7!OeZp3u|_fyk%kbFL_{tVL~C&q220G14~|X^UZ&`h|T-3 zO}sN#`wtt6Qm7tgQ{YT`1=kN-fg3JWN$k($AI)?*Wsi)UoMpi1Esu_jI817?ljJ!r zTfO@U#7k0=!C{hJzi>>1($e{bsP;UJxvD7Ruqk3=Fu3p^} zCDSF>$)Qbh{_lMO$)g_D!JB7cXHR$MFx!KhPhy)D8yO&&UOr8Zb4rND7F5tjRO~Ec zzWX7emX$Pd1XdX0QbVI}COK~Ph+(cjU^i=c6mbBP67Hr2ax*eM-aoET;#0YR3k!(r zpOUfzq@0{Vudmu;<6L*^+gq|`X1w;@FNa25`M-!gC5YNIof|7%u(Hpr2aBXoTKRj6 zq*R8QHT)DH>MC8-vPe)PS6T(Imt&4;3TJ6gPEJ5r+Piy!g#?EsE32#=;BfKDkfzD) zy?V;0g)gy0zqbBmti9I9agv;T`3g~D3Bp}y5_;~m1SPuAJV(JSEzSOcq~0&JPeU(SV3P~4kbtuYOlNR!l5$x7y7$0C zgbqLE&9$#}=`^abA;eY66C?32y?L@mvBV{bH{cJlVD!U&2&5$tfAJQ$_9qG7QI zjHiAjD)7HVoz---sga-S-l%RwMo0IUgpf$enIA=z0up$GK$L`u9h2|)A#BAk_8;2L zc3Z?b3fbBW-BW9Nb2HLaAqWxC^k_PkQvPBI1Cwyg z*7R6(oa(MLDn}q&2)#d<9P^Jr$S<4V3%if5O-Px~ZI7shHQQ(PxXmg; zX?Ht>B!5sZTRBQaX@Z3ya+wzRm-i{kSb})P0!FSB2?$qI>LTe;uvYO_=z2@GxZs5u zh;r|?NrmIK*iHX-6;~)84Pkh**Jk5$N+P^s1mC;O|9P4hPFgC_GQ8?M#<>hG46Dws zDcWQ39Cz8@gVl(ve z+Hed%?HEp%P3>uS<-Qab1%>mW<>k0Jp5aBnBwFTs_)mVqG#B~YqVoN#YB)`ILCHR)F){)MpDP{Bx~4I7a^u7aY@z zwY^q8y&gMX-N;gT?oRNPn@_~{d*VT}RVY5R;A~jq;~9h#{kF@zJBUw$SvGLmu$+{~ zx1d3JF22VH_ZO#O@zJ|bzzKUiGR^l^Y) z2kxmi6i9Hnr?r42yD+)lx#C7sJ3Ib-MLGb&*LBZD_jTIaRa{%!3!qA?F-ocMuaZ_< z7^ig#o2S#>qqOu^@|0|0R8$S5fHuR@v=*!|>oHd$p2HARSTaBYA?7>N3Hpza7 z2KLB}^A#3=rL#ehm=25E)I*@WVu^8+=IcSNa=G>Pd~1#sk=ONf(3vC@vUh@lmD>NJ zZJ34~Y+D}l`lOVhxbPF_W7m!hHBAbV>B4#H30~1-^T25&?rsBmxk~GA9NAHP_GWZK zLb8gQ^%cNupEO%9YW?sp9OI+kgsD<9By4Ps02sv&7m~s<52sl12|zMrNdAC%u6G# zt}b5DKzJLSx)e7(AYNYL>N(yYT~<_66DyTZXLEGLo@Vxx;^ptt^Z&Ckfg6%>eT z#C-0elNHi9U!dbl%A>sZ(BSG0?fuYEq3#VeJGZ67JzrEC~TPFidhGWQ{ zDs+nfjU=bqm;QQf6b6e@556>9_;7DJ-VF&c|1ZGmO{%9^^qmU<795mkOMboOL18@o zH~<5mdi9c0ccaZU6xhr_OpHVQ4?ecb(H}@ZkDjBZJg(*8r zEf*-<9r=6rhMX}%0}%Y~DcmmC#7J?Abj+yNSzhzsZ`+n3dmU3hboKrJ1?@SkwqhS1 zN%$69W-Kf&-t5tM4+$wZDbI7b=nX4%O{!HVv6ow2mcboMdQbWOS%*nuGs#%&g~^4N zQ&Kd>S1ED{VYygkn4B)8t@3{7sh@)MJfv&ze!6s%{B7NlNztf6^9ULA93;ff=W5LN z*idSp-!tt~JK-Au0*N~XI31OxrRBo%vQ8p5R!B4a^wAwvxKkie`|!Z#mXMsFt1Bms zo-2d(5@R9A*K&+4tCY5-3cOl7xXnoIuUz{F4<+sG+HNOvL!4m9W)qq-d!Xb-tYK{S z{b-j59@p$Jh`Q;QOYsi`l|!lIILcf9p)~jyjzmPL`Tazki1_J(*jTC2|9w%b}{WT3QPL zRJ0ycC9b{N*xv0rIp6V|6dCz^zQFv~4(a67-im|C`0pZoLp_2&mj%rp~Qfg zOSi?iyAW}y%Q~v+mt=e$1o@~{I&T4xt>@ukrl6^>d%5TApB^`ZMB0!u3+V>g?_2Leo>1(>fnaF^9`sJF~vP5U2AMHoF81(0;Gln?#(nyt>L_ z9;wuI5?UmdLQrZ{8t=?wD*Fu+3JPLKS*FYpywg#W|0fGE-Eed!x=t>aeUCyKJZ!L- zpXF7^OjUP~X4rIF7_(j#oh1*CC(~s|K|$8(Dg1Yvm629Q710UbF=jodge9=Dnwq@l zskabCwIUJ}N9=592+_y$`vI z^iARLikpNY0ybllT3xSX>s?5fb;#ScSyj>s-$Lt8X7%U#NR?j;f@M}4!sIsR75~Oi+ z1@ih^0Et30PDCHg@xN7*_k8;Ug8_#xEFwTv)wt${U+3 ze`ARLG2_<9o@5;!3Hmlttw$J->()0aMp)-$&7RxY zPtKq68EDa}0~u*0Nm<{Ji&2{eDAzbXy6UbOjWA^X!gCPXk)leHp-LJJghn&f;Jjt4 zEb-Ko(VCB5_+!aanq^Sa!bcdPCqrix0B4Ltk9h?F5*JsX^oNO4gGD5qq#1H(7Q5hg zE*P92*JY5JZMOzhT6ae0+yR8_`!390$M(-3U?tJrq->EyRC$_|s1bs+83Ytu!&4gA z5%&6e!4>ebbal>ZH|!~apduwaJan^#DDBc;jg_uRcxG*V>$PbX8~8<=SUpl*fnb@#j8B2y`;hFp=jOo#o@UqpN#%sa3b!LofGD3fmSC7_xuLQnuR5GCEZTS`mhT4r=FxawV?=rh|03 zAd-@*e*G5+5e2A|EFO?m6yD(uR5Wv4#( z4+x@xLeLM>nJq=a-Q0aF_|eKy`_pc1={&yzR!~e$?G0B|Et;iJ z`z?su6s)Mg(0EOX0c*Fhp`reQ5FL!3AOo_wuq0GJJw0oQZ_h7g{Dy`$lPCriSz>SM zPsYKV>oVrAU%!T4yqMt#vCh}Nnmya6m`jMnyifVG^L{ouB2(9i9%XM1QiAumc{mF* zEkWInP1ukf|FV$L8t&FmJ-2gYUV@~pH|s@)D0aG+?~h)jWo-+ivv zIJeoXIuT2;M;sMpXS)F=$Y^ASd3^WdQ)4u#71#BYhN=$a96z&bsaZC18b)P-HD?wX z*s14b)zt;Kzbv+VW(ykECnSG<(KI+8$=dmOhX5F^NUW8!Ft2aDN%op@(l2}E@A6fS zsAwvBo@-!41yyvaxAo=b3MH8J+V^J)CG0v*-JA3~;I3a%ZYg+=XRCFX<0aGP=HxK3 z0}Ehf=hujl@|v3?qM{fZ8l6YF-6E=*RQmHh@5C;taN2}C+?o%nF2eDT(GRyBb5|Tj zaXlYbDKzW%h(O#CvHbaq%D*Vdq9QPZ)X!d0`Rfj68?^#e)aHvq>*KK?&ydv96M~ku z>{pLXcA+acZMb-329#WhRhpRuk_70Yzz+?EPVj@ZWrHgU|`nSee6BCvr#JK5su9mjj z{{g6|7*^{|O5b0)TEb7bHY^`pHU(*|BHyZ_Pbn(|_FluCZU!1fRa2|~v(flM4TO5* z%Z*aq>V}sCu>wvxcBlPh+05@)rSB=8ks%l#+?mqDRz*YZKS^WCpt;e5gkmyKLg?uj zZ6W}K=-f)c!o8QpY0BPI1MTwp4H@Q$Z(yO84mZ__7~Qi(d~RcB#9cZ+oIZ$XOE?YZ z2&)%KT<0lY)*uw%R1%u}$mQmAUHP;R3e64p%BaJczE%aWQJ0WZ8BJG+qg^yZgA{oA zui~Qg$^G|Y_^MKEsRI8tS%C*vBsgt3z{%n7jI(fI=s$L|7J*Sutm%5Hih>CctYkW< zCKSLCdt2iHWKudAy&q2TDw93_^`#5b(%aiu@%*$~s_HmdtSpUU__~%2fI}k{L*vGm zQrhX)p&pk?y!=rmfa^F26O=`p*W{AOhm4v@;x60Ex5|TV_zzdpqejci$n1P)TX_Lsi0wVOaK|Ca*j%BK-j(i;GZ;P}sHjN}i0_s!uH+jWoK#T0^M zXmC1J)uav#!Hi5`y~%JKNT%#QsOYY5*PZLtPk)EnHNAod3N6dpB|_sq{&RlzIn)65 z*OBB7+#lgIorMrueH8x5{*D5@$=@(q9*!>;GweG~PD$TknL5>MyIxjazPqPlC>XQN zgfP?PO+rsUhR5e7JGaWd+3}RWU+>tDhdkA_PmWg!_IOd5zkgE-X`9B$7%a%;B6v0v zI4V-@-_$&R*heaYfDWrk@1r4ywCM}4tqq-`GuLpQ_v!cDkDs8cK3>K9d1g*|vw>|l zp5Ta@7n-*7(+W;eOH1gu_{DfzlHuN()=$IbYjJwtak+UC=6J4}!N2ogERi2snD&>2 zEe&0tI7rua*3C%YJpQ1LM1a=P$>Z70#<-l+Mjqb(HM`UxFIwkpZmC=Fud=oqI?w;h zj_b7ho%R%y_!@$ut=E#lFyaW!2w>s(0<9DLw9*o(F5v zP47p;vt=Dt0s=JQybAb?l6-pj61rKW>?k`uidOY4snCxt{zL8}KG293T5t!m0ODEpmPVZ~KkEXVT%Vc*I8 zxENN>k19?JPd%gPKnO}q#MgI^1VSN*y&f4*gzWS^Nk1!yhsgp_;RE6e5Ae(pX;3A1 zv)xnvQrWydUMyqM&~RTaU#+x0^MBtW`T4s1I4k{qy`RgKC?7TfPM{g7^de|ea@EU>TD5r=TNY>#wWF@psJ%R2sSmlmWwLu&=_8hywAm#h19YKq-n)VI)%r{gNl-)dh&Lo%=- zV>28A6yj08t{)N)P-LPppB=vpWA3k`K zh~<|#-|R@$yNir35qipvHNHPKh_qeL=pPg$4Y6I94j09@wBRC5x=3L}iFV`$#nh*SU zgv;&*eJPlkap<*WdBhLD%s2BF$@)IB+N8Cx6av@t5aW@<429TO(!g=y$qT*@gI)m&Zk z$lLxbO^>^kpzMc{zpBxfc$bm3fKkLCp&LCgi`D2q9A7^d_n^(k1) zkN2xsNMR9L)CC_4eyn^!QLfoS-u5n@kcC1?OVBsfnHisqE@_w&|Mm}WENE>E1KDsR zT-;F0i!`i7w(U1m!HM)cL^ZXJw#VXBDu$)spnF^X>9f}Nk;2AdAp?bDs2zE6xMjxi zEUXu0pyes?K4~S=+phf$6^o*Eq6XES1PcXPkpO1cFnqucGn2E5S5U| zpcF-f7~o(-wESu>aV093h$lZRT?HkOKD(j-fFuhJX_JM#6L(mqe7cfBpQ|8l^o{2= z0V>jp3b${Ldz?SKhkmiS9J7|lb?9JX>GfvuOv3^rG`3Ll74f(xytOivHkIq=dVh;n zKU|bpe$dufqD^tQ*rjnPgbJIgcHV{p(!M!1(9*X9-z0FtK|Z`W$4VR;3EdpKJ3yOy|pX1P&?*j(o!$=%gl@7qkpR~@k4^j{Nwob^7tyd|mcOQ#63MJ6Ew&V+XA_NCJRD4EDnV^7{X&Fo4$k a1%?-@Tf*iIMgjVp1t29RFIppP82CTx)R@cw diff --git a/client/src/main/resources/textures/entity/horse_zombie.png b/client/src/main/resources/textures/entity/horse_zombie.png deleted file mode 100755 index 22d55faa4005b9d4471259402d06297ba5e8f4ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13998 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 B24esK diff --git a/client/src/main/resources/textures/entity/metalhead.png b/client/src/main/resources/textures/entity/metalhead.png deleted file mode 100755 index dd94a820fe4ad91793b162bfa0da90586c47b259..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2660 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 diff --git a/client/src/main/resources/textures/entity/sen.png b/client/src/main/resources/textures/entity/sen.png deleted file mode 100755 index df769e35d387455138231db4e2556b005961e4d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2825 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 bU8nMY4@$ESMWJN<00000NkvXXu0mjf8M$N~ diff --git a/client/src/main/resources/textures/entity/squid.png b/client/src/main/resources/textures/entity/squid.png deleted file mode 100755 index f2853887a115d992148e9fd0bdc493b84d5a596e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 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 literal 0 HcmV?d00001 diff --git a/client/src/main/resources/textures/entity/hook.png b/client/src/main/resources/textures/object/hook.png similarity index 100% rename from client/src/main/resources/textures/entity/hook.png rename to client/src/main/resources/textures/object/hook.png diff --git a/client/src/main/resources/textures/entity/lead_knot.png b/client/src/main/resources/textures/object/lead_knot.png similarity index 100% rename from client/src/main/resources/textures/entity/lead_knot.png rename to client/src/main/resources/textures/object/lead_knot.png diff --git a/client/src/main/resources/textures/entity/minecart.png b/client/src/main/resources/textures/object/minecart.png similarity index 100% rename from client/src/main/resources/textures/entity/minecart.png rename to client/src/main/resources/textures/object/minecart.png diff --git a/client/src/main/resources/textures/entity/missile.png b/client/src/main/resources/textures/object/missile.png similarity index 100% rename from client/src/main/resources/textures/entity/missile.png rename to client/src/main/resources/textures/object/missile.png diff --git a/client/src/main/resources/textures/entity/crystal_beam.png b/client/src/main/resources/textures/world/beam.png similarity index 100% rename from client/src/main/resources/textures/entity/crystal_beam.png rename to client/src/main/resources/textures/world/beam.png diff --git a/common/src/main/java/common/ai/EntityAIOcelotAttack.java b/common/src/main/java/common/ai/EntityAICatAttack.java similarity index 95% rename from common/src/main/java/common/ai/EntityAIOcelotAttack.java rename to common/src/main/java/common/ai/EntityAICatAttack.java index 87c61e82..aeeb8282 100755 --- a/common/src/main/java/common/ai/EntityAIOcelotAttack.java +++ b/common/src/main/java/common/ai/EntityAICatAttack.java @@ -3,14 +3,14 @@ package common.ai; import common.entity.types.EntityLiving; import common.world.World; -public class EntityAIOcelotAttack extends EntityAIBase +public class EntityAICatAttack extends EntityAIBase { World theWorld; EntityLiving theEntity; EntityLiving theVictim; int attackCountdown; - public EntityAIOcelotAttack(EntityLiving theEntityIn) + public EntityAICatAttack(EntityLiving theEntityIn) { this.theEntity = theEntityIn; this.theWorld = theEntityIn.worldObj; diff --git a/common/src/main/java/common/ai/EntityAIOcelotSit.java b/common/src/main/java/common/ai/EntityAICatSit.java similarity index 76% rename from common/src/main/java/common/ai/EntityAIOcelotSit.java rename to common/src/main/java/common/ai/EntityAICatSit.java index 407c6fd1..a39ef9df 100755 --- a/common/src/main/java/common/ai/EntityAIOcelotSit.java +++ b/common/src/main/java/common/ai/EntityAICatSit.java @@ -2,7 +2,7 @@ package common.ai; import common.block.Block; import common.block.artificial.BlockBed; -import common.entity.animal.EntityOcelot; +import common.entity.animal.EntityCat; import common.init.Blocks; import common.tileentity.TileEntity; import common.tileentity.TileEntityChest; @@ -10,14 +10,14 @@ import common.util.BlockPos; import common.world.State; import common.world.World; -public class EntityAIOcelotSit extends EntityAIMoveToBlock +public class EntityAICatSit extends EntityAIMoveToBlock { - private final EntityOcelot ocelot; + private final EntityCat cat; - public EntityAIOcelotSit(EntityOcelot ocelotIn, double p_i45315_2_) + public EntityAICatSit(EntityCat cat, double p_i45315_2_) { - super(ocelotIn, p_i45315_2_, 8); - this.ocelot = ocelotIn; + super(cat, p_i45315_2_, 8); + this.cat = cat; } /** @@ -25,7 +25,7 @@ public class EntityAIOcelotSit extends EntityAIMoveToBlock */ public boolean shouldExecute() { - return this.ocelot.isTamed() && !this.ocelot.isSitting() && super.shouldExecute(); + return this.cat.isTamed() && !this.cat.isSitting() && super.shouldExecute(); } /** @@ -42,7 +42,7 @@ public class EntityAIOcelotSit extends EntityAIMoveToBlock public void startExecuting() { super.startExecuting(); - this.ocelot.getAISit().setSitting(false); + this.cat.getAISit().setSitting(false); } /** @@ -51,7 +51,7 @@ public class EntityAIOcelotSit extends EntityAIMoveToBlock public void resetTask() { super.resetTask(); - this.ocelot.setSitting(false); + this.cat.setSitting(false); } /** @@ -60,15 +60,15 @@ public class EntityAIOcelotSit extends EntityAIMoveToBlock public void updateTask() { super.updateTask(); - this.ocelot.getAISit().setSitting(false); + this.cat.getAISit().setSitting(false); if (!this.getIsAboveDestination()) { - this.ocelot.setSitting(false); + this.cat.setSitting(false); } - else if (!this.ocelot.isSitting()) + else if (!this.cat.isSitting()) { - this.ocelot.setSitting(true); + this.cat.setSitting(true); } } diff --git a/common/src/main/java/common/ai/EntityAISwimNavigate.java b/common/src/main/java/common/ai/EntityAISwimNavigate.java new file mode 100644 index 00000000..2fa34da4 --- /dev/null +++ b/common/src/main/java/common/ai/EntityAISwimNavigate.java @@ -0,0 +1,26 @@ +package common.ai; + +import common.entity.npc.EntityNPC; +import common.pathfinding.PathNavigateGround; + +public class EntityAISwimNavigate extends EntityAIBase +{ + private EntityNPC theEntity; + + public EntityAISwimNavigate(EntityNPC entitylivingIn) + { + this.theEntity = entitylivingIn; + this.setMutexBits(4); + ((PathNavigateGround)entitylivingIn.getNavigator()).setCanSwim(true); + } + + public boolean shouldExecute() + { + return (this.theEntity.isInLiquid() || this.theEntity.isInMolten()) && !this.theEntity.getNavigator().noPath() && !this.theEntity.getMoveHelper().isUpdating() && this.theEntity.posY < this.theEntity.getMoveHelper().getY() - 1.15; + } + + public void updateTask() + { + this.theEntity.getJumpHelper().setJumping(); + } +} diff --git a/common/src/main/java/common/block/tech/BlockChest.java b/common/src/main/java/common/block/tech/BlockChest.java index b159f3ab..3b9dd583 100755 --- a/common/src/main/java/common/block/tech/BlockChest.java +++ b/common/src/main/java/common/block/tech/BlockChest.java @@ -6,7 +6,7 @@ import common.block.Rotatable; import common.block.Material; import common.color.TextColor; import common.entity.Entity; -import common.entity.animal.EntityOcelot; +import common.entity.animal.EntityCat; import common.entity.npc.EntityNPC; import common.entity.types.EntityLiving; import common.init.Items; @@ -571,7 +571,7 @@ public class BlockChest extends BlockContainer implements Rotatable private boolean isBlocked(World worldIn, BlockPos pos) { - return this.isBelowSolidBlock(worldIn, pos) || this.isOcelotSittingOnChest(worldIn, pos); + return this.isBelowSolidBlock(worldIn, pos) || this.isCatSittingOnChest(worldIn, pos); } private boolean isBelowSolidBlock(World worldIn, BlockPos pos) @@ -579,13 +579,13 @@ public class BlockChest extends BlockContainer implements Rotatable return worldIn.getState(pos.up()).getBlock().isNormalCube(); } - private boolean isOcelotSittingOnChest(World worldIn, BlockPos pos) + private boolean isCatSittingOnChest(World worldIn, BlockPos pos) { - for (Entity entity : worldIn.getEntitiesWithinAABB(EntityOcelot.class, new BoundingBox((double)pos.getX(), (double)(pos.getY() + 1), (double)pos.getZ(), (double)(pos.getX() + 1), (double)(pos.getY() + 2), (double)(pos.getZ() + 1)))) + for (Entity entity : worldIn.getEntitiesWithinAABB(EntityCat.class, new BoundingBox((double)pos.getX(), (double)(pos.getY() + 1), (double)pos.getZ(), (double)(pos.getX() + 1), (double)(pos.getY() + 2), (double)(pos.getZ() + 1)))) { - EntityOcelot entityocelot = (EntityOcelot)entity; + EntityCat cat = (EntityCat)entity; - if (entityocelot.isSitting()) + if (cat.isSitting()) { return true; } diff --git a/common/src/main/java/common/dimension/Dimension.java b/common/src/main/java/common/dimension/Dimension.java index 66c12e43..c2617660 100755 --- a/common/src/main/java/common/dimension/Dimension.java +++ b/common/src/main/java/common/dimension/Dimension.java @@ -149,6 +149,8 @@ public abstract class Dimension extends Nameable { private int skyColor = 0x000000; private int fogColor = 0x000000; private int cloudColor = 0x000000; + private int lightColor = 0xffffffff; + private int blockColor = 0xffffffff; private float starBrightness = 0.0f; private float deepstarBrightness = 0.0f; private CloudType cloudTexture = CloudType.NORMAL; @@ -549,6 +551,16 @@ public abstract class Dimension extends Nameable { return this; } + public final Dimension setLightColor(int value) { + this.lightColor = value; + return this; + } + + public final Dimension setBlockColor(int value) { + this.blockColor = value; + return this; + } + public final Dimension setTimeQualifier(int value) { this.timeQualifier = value; @@ -698,6 +710,14 @@ public abstract class Dimension extends Nameable { return this.cloudColor; } + public final int getLightColor() { + return this.lightColor; + } + + public final int getBlockColor() { + return this.blockColor; + } + public final String getCloudTexture() { return "textures/world/" + this.cloudTexture.getTexture() + ".png"; } @@ -1005,6 +1025,8 @@ public abstract class Dimension extends Nameable { this.skyColor = tag.getInt("SkyColor"); this.fogColor = tag.getInt("FogColor"); this.cloudColor = tag.getInt("CloudColor"); + this.lightColor = tag.getInt("LightColor"); + this.blockColor = tag.getInt("BlockColor"); this.gravity = tag.getFloat("Gravity"); this.temperature = tag.getFloat("Temperature"); this.orbitOffset = tag.getFloat("OrbitOffset"); @@ -1181,6 +1203,8 @@ public abstract class Dimension extends Nameable { tag.setInt("SkyColor", this.skyColor); tag.setInt("FogColor", this.fogColor); tag.setInt("CloudColor", this.cloudColor); + tag.setInt("LightColor", this.lightColor); + tag.setInt("BlockColor", this.blockColor); tag.setFloat("Gravity", this.gravity); tag.setFloat("Temperature", this.temperature); tag.setFloat("OrbitOffset", this.orbitOffset); diff --git a/common/src/main/java/common/entity/animal/EntityOcelot.java b/common/src/main/java/common/entity/animal/EntityCat.java similarity index 90% rename from common/src/main/java/common/entity/animal/EntityOcelot.java rename to common/src/main/java/common/entity/animal/EntityCat.java index 2cffee8e..7305c7e8 100755 --- a/common/src/main/java/common/entity/animal/EntityOcelot.java +++ b/common/src/main/java/common/entity/animal/EntityCat.java @@ -6,8 +6,8 @@ import common.ai.EntityAIAvoidEntity; import common.ai.EntityAIFollowOwner; import common.ai.EntityAILeapAtTarget; import common.ai.EntityAIMate; -import common.ai.EntityAIOcelotAttack; -import common.ai.EntityAIOcelotSit; +import common.ai.EntityAICatAttack; +import common.ai.EntityAICatSit; import common.ai.EntityAISwimming; import common.ai.EntityAITargetNonTamed; import common.ai.EntityAITempt; @@ -30,7 +30,7 @@ import common.tags.TagObject; import common.vars.Vars; import common.world.World; -public class EntityOcelot extends EntityTameable +public class EntityCat extends EntityTameable { private EntityAIAvoidEntity avoidEntity; @@ -40,7 +40,7 @@ public class EntityOcelot extends EntityTameable private EntityAITempt aiTempt; private boolean wasTempted; - public EntityOcelot(World worldIn) + public EntityCat(World worldIn) { super(worldIn); this.setSize(0.6F, 0.7F); @@ -49,9 +49,9 @@ public class EntityOcelot extends EntityTameable this.tasks.addTask(2, this.aiSit); this.tasks.addTask(3, this.aiTempt = new EntityAITempt(this, 0.6D, stack -> stack.getItem() instanceof ItemFishFood fish && !fish.isCooked(), true)); this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 5.0F)); - this.tasks.addTask(6, new EntityAIOcelotSit(this, 0.8D)); + this.tasks.addTask(6, new EntityAICatSit(this, 0.8D)); this.tasks.addTask(7, new EntityAILeapAtTarget(this, 0.3F)); - this.tasks.addTask(8, new EntityAIOcelotAttack(this)); + this.tasks.addTask(8, new EntityAICatAttack(this)); this.tasks.addTask(9, new EntityAIMate(this, 0.8D)); this.tasks.addTask(10, new EntityAIWander(this, 0.8D)); this.tasks.addTask(11, new EntityAIWatchClosest(this, null, 10.0F)); @@ -248,18 +248,17 @@ public class EntityOcelot extends EntityTameable return super.interact(player); } - public EntityOcelot createChild(EntityLiving ageable) + public EntityCat createChild(EntityLiving ageable) { - EntityOcelot entityocelot = new EntityOcelot(this.worldObj); + EntityCat child = new EntityCat(this.worldObj); if (this.isTamed()) { -// entityocelot.setOwnerId(this.getOwnerId()); - entityocelot.setTamed(true); - entityocelot.setTameSkin(this.getTameSkin()); + child.setTamed(true); + child.setTameSkin(this.getTameSkin()); } - return entityocelot; + return child; } /** @@ -284,14 +283,14 @@ public class EntityOcelot extends EntityTameable // { // return false; // } - else if (!(otherAnimal instanceof EntityOcelot)) + else if (!(otherAnimal instanceof EntityCat)) { return false; } else { - EntityOcelot entityocelot = (EntityOcelot)otherAnimal; - return (entityocelot.isTamed() != this.isTamed()) ? false : this.isInLove() && entityocelot.isInLove(); + EntityCat cat = (EntityCat)otherAnimal; + return (cat.isTamed() != this.isTamed()) ? false : this.isInLove() && cat.isInLove(); } } @@ -380,10 +379,10 @@ public class EntityOcelot extends EntityTameable { for (int i = 0; i < 2; ++i) { - EntityOcelot entityocelot = new EntityOcelot(this.worldObj); - entityocelot.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotYaw, 0.0F); - entityocelot.setGrowingAge(-24000); - this.worldObj.spawnEntityInWorld(entityocelot); + EntityCat baby = new EntityCat(this.worldObj); + baby.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotYaw, 0.0F); + baby.setGrowingAge(-24000); + this.worldObj.spawnEntityInWorld(baby); } } diff --git a/common/src/main/java/common/entity/animal/EntityHorse.java b/common/src/main/java/common/entity/animal/EntityHorse.java index a56f2b62..18423932 100755 --- a/common/src/main/java/common/entity/animal/EntityHorse.java +++ b/common/src/main/java/common/entity/animal/EntityHorse.java @@ -49,9 +49,9 @@ public class EntityHorse extends EntityAnimal implements IInvBasic private static final String[] horseArmorTextures = new String[] {null, "textures/armor/horse_armor_iron.png", "textures/armor/horse_armor_gold.png", "textures/armor/horse_armor_diamond.png"}; private static final String[] HORSE_ARMOR_TEXTURES_ABBR = new String[] {"", "meo", "goo", "dio"}; private static final int[] armorValues = new int[] {0, 5, 7, 11}; - private static final String[] horseTextures = new String[] {"textures/entity/horse_white.png", "textures/entity/horse_creamy.png", "textures/entity/horse_chestnut.png", "textures/entity/horse_brown.png", "textures/entity/horse_black.png", "textures/entity/horse_gray.png", "textures/entity/horse_darkbrown.png"}; + private static final String[] horseTextures = new String[] {"textures/creature/horse_white.png", "textures/creature/horse_creamy.png", "textures/creature/horse_chestnut.png", "textures/creature/horse_brown.png", "textures/creature/horse_black.png", "textures/creature/horse_gray.png", "textures/creature/horse_darkbrown.png"}; private static final String[] HORSE_TEXTURES_ABBR = new String[] {"hwh", "hcr", "hch", "hbr", "hbl", "hgr", "hdb"}; - private static final String[] horseMarkingTextures = new String[] {null, "textures/entity/horse_markings_white.png", "textures/entity/horse_markings_whitefield.png", "textures/entity/horse_markings_whitedots.png", "textures/entity/horse_markings_blackdots.png"}; + private static final String[] horseMarkingTextures = new String[] {null, "textures/creature/horse_markings_white.png", "textures/creature/horse_markings_whitefield.png", "textures/creature/horse_markings_whitedots.png", "textures/creature/horse_markings_blackdots.png"}; private static final String[] HORSE_MARKING_TEXTURES_ABBR = new String[] {"", "wo_", "wmo", "wdo", "bdo"}; private int eatingHaystackCounter; private int openMouthCounter; @@ -116,7 +116,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic } /** - * Returns the horse type. 0 = Normal, 1 = Donkey, 2 = Mule, 3 = Undead Horse, 4 = Skeleton Horse + * Returns the horse type. 0 = Normal, 1 = Donkey, 2 = Mule */ public int getHorseType() { @@ -250,11 +250,6 @@ public class EntityHorse extends EntityAnimal implements IInvBasic this.horseJumping = jumping; } - public boolean allowLeashing() - { - return !this.isUndead() && super.allowLeashing(); - } - protected void onUpdateLeashed(float distance) { if (distance > 6.0F && this.isEatingHaystack()) @@ -570,9 +565,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic protected Item getDropItem() { - boolean flag = this.rand.chance(4); - int i = this.getHorseType(); - return i == 4 ? Items.bone : (i == 3 ? (flag ? null : Items.rotten_flesh) : Items.leather); + return Items.leather; } /** @@ -805,10 +798,6 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { return super.interact(player); } - else if (!this.isTame() && this.isUndead()) - { - return false; - } else if (this.isTame() && this.isAdultHorse() && player.isSneaking()) { this.openGUI(player); @@ -854,7 +843,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic } } - if (!flag && !this.isUndead()) + if (!flag) { int hp = 0; int j = 0; @@ -1027,20 +1016,11 @@ public class EntityHorse extends EntityAnimal implements IInvBasic } /** - * Used to know if the horse can be leashed, if he can mate, or if we can interact with him - */ - public boolean isUndead() - { - int i = this.getHorseType(); - return i == 3 || i == 4; - } - - /** - * Return true if the horse entity is sterile (Undead || Mule) + * Return true if the horse entity is sterile (Mule) */ public boolean isSterile() { - return this.isUndead() || this.getHorseType() == 2; + return this.getHorseType() == 2; } /** @@ -1540,56 +1520,56 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { EntityHorse entityhorse = (EntityHorse)ageable; EntityHorse entityhorse1 = new EntityHorse(this.worldObj); - int i = this.getHorseType(); - int j = entityhorse.getHorseType(); - int k = 0; + int t1 = this.getHorseType(); + int t2 = entityhorse.getHorseType(); + int type = 0; - if (i == j) + if (t1 == t2) { - k = i; + type = t1; } - else if (i == 0 && j == 1 || i == 1 && j == 0) + else if (t1 == 0 && t2 == 1 || t1 == 1 && t2 == 0) { - k = 2; + type = 2; } - if (k == 0) + if (type == 0) { int i1 = this.rand.zrange(9); - int l; + int variant; if (i1 < 4) { - l = this.getHorseVariant() & 255; + variant = this.getHorseVariant() & 255; } else if (i1 < 8) { - l = entityhorse.getHorseVariant() & 255; + variant = entityhorse.getHorseVariant() & 255; } else { - l = this.rand.zrange(7); + variant = this.rand.zrange(7); } int j1 = this.rand.zrange(5); if (j1 < 2) { - l = l | this.getHorseVariant() & 65280; + variant = variant | this.getHorseVariant() & 65280; } else if (j1 < 4) { - l = l | entityhorse.getHorseVariant() & 65280; + variant = variant | entityhorse.getHorseVariant() & 65280; } else { - l = l | this.rand.zrange(5) << 8 & 65280; + variant = variant | this.rand.zrange(5) << 8 & 65280; } - entityhorse1.setHorseVariant(l); + entityhorse1.setHorseVariant(variant); } - entityhorse1.setHorseType(k); + entityhorse1.setHorseType(type); int d1 = this.getMaxHealth() + ageable.getMaxHealth() + this.getModifiedMaxHealth(); entityhorse1.setMaxHealth(d1 / 3); float d2 = this.getHorseJumpStrength() + entityhorse.getHorseJumpStrength() + this.getModifiedJumpStrength(); @@ -1602,59 +1582,51 @@ public class EntityHorse extends EntityAnimal implements IInvBasic public Object onInitialSpawn(Object livingdata) { livingdata = super.onInitialSpawn(livingdata); - int i = 0; - int j = 0; + int type = 0; + int variant = 0; if (livingdata instanceof EntityHorse.GroupData) { - i = ((EntityHorse.GroupData)livingdata).horseType; - j = ((EntityHorse.GroupData)livingdata).horseVariant & 255 | this.rand.zrange(5) << 8; + type = ((EntityHorse.GroupData)livingdata).horseType; + variant = ((EntityHorse.GroupData)livingdata).horseVariant & 255 | this.rand.zrange(5) << 8; } else { if (this.rand.chance(10)) { - i = 1; + type = 1; } else { int k = this.rand.zrange(7); int l = this.rand.zrange(5); - i = 0; - j = k | l << 8; + type = 0; + variant = k | l << 8; } - livingdata = new EntityHorse.GroupData(i, j); + livingdata = new EntityHorse.GroupData(type, variant); } - this.setHorseType(i); - this.setHorseVariant(j); + this.setHorseType(type); + this.setHorseVariant(variant); if (this.rand.chance(5)) { this.setGrowingAge(-24000); } - if (i != 4 && i != 3) - { - this.setMaxHealth(this.getModifiedMaxHealth()); + this.setMaxHealth(this.getModifiedMaxHealth()); - if (i == 0) - { - this.setSpeedBase(this.getModifiedMovementSpeed()); - } - else - { - this.setSpeedBase(0.17499999701976776f); - } + if (type == 0) + { + this.setSpeedBase(this.getModifiedMovementSpeed()); } else { - this.setMaxHealth(15); - this.setSpeedBase(0.20000000298023224f); + this.setSpeedBase(0.17499999701976776f); } - if (i != 2 && i != 1) + if (type != 2 && type != 1) { this.setHorseJumpStrength(this.getModifiedJumpStrength()); } diff --git a/common/src/main/java/common/entity/animal/EntityMooshroom.java b/common/src/main/java/common/entity/animal/EntityMooshroom.java deleted file mode 100755 index 256f5f16..00000000 --- a/common/src/main/java/common/entity/animal/EntityMooshroom.java +++ /dev/null @@ -1,90 +0,0 @@ -package common.entity.animal; - -import common.entity.item.EntityItem; -import common.entity.npc.EntityNPC; -import common.entity.types.EntityLiving; -import common.init.Blocks; -import common.init.Items; -import common.init.SoundEvent; -import common.item.ItemStack; -import common.item.tool.ItemShears; -import common.util.ParticleType; -import common.world.World; - -public class EntityMooshroom extends EntityCow -{ - public EntityMooshroom(World worldIn) - { - super(worldIn); - this.setSize(0.9F, 1.3F); - this.spawnableBlocks.clear(); - this.spawnableBlocks.add(Blocks.mycelium); - } - - /** - * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig. - */ - public boolean interact(EntityNPC player) - { - ItemStack itemstack = player.inventory.getCurrentItem(); - - if (itemstack != null && itemstack.getItem() == Items.bowl && !this.isChild()) - { - if (itemstack.getSize() == 1) - { - player.inventory.setInventorySlotContents(player.inventory.currentItem, new ItemStack(Items.mushroom_stew)); - return true; - } - - if (player.inventory.addItemStackToInventory(new ItemStack(Items.mushroom_stew))) // && !player.creative) - { - player.inventory.decrStackSize(player.inventory.currentItem, 1); - return true; - } - } - - if (itemstack != null && itemstack.getItem() instanceof ItemShears && !this.isChild()) - { - this.setDead(); - this.worldObj.spawnParticle(ParticleType.EXPLOSION_LARGE, this.posX, this.posY + (double)(this.height / 2.0F), this.posZ, 100); - - if (!this.worldObj.client) - { - EntityCow entitycow = new EntityCow(this.worldObj); - entitycow.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotYaw, this.rotPitch); - entitycow.setHealth(this.getHealth()); - entitycow.yawOffset = this.yawOffset; - - if (this.hasCustomName()) - { - entitycow.setCustomNameTag(this.getCustomNameTag()); - } - - this.worldObj.spawnEntityInWorld(entitycow); - - for (int i = 0; i < 5; ++i) - { - this.worldObj.spawnEntityInWorld(new EntityItem(this.worldObj, this.posX, this.posY + (double)this.height, this.posZ, new ItemStack(Items.red_mushroom))); - } - - itemstack.damage(1, player); - this.playSound(SoundEvent.CUT, 1.0F); - } - - return true; - } - else - { - return super.interact(player); - } - } - - public EntityMooshroom createChild(EntityLiving ageable) - { - return new EntityMooshroom(this.worldObj); - } - - public int getColor() { - return 0x7c4c83; - } -} diff --git a/common/src/main/java/common/entity/animal/EntitySquid.java b/common/src/main/java/common/entity/animal/EntitySquid.java deleted file mode 100755 index c64ba376..00000000 --- a/common/src/main/java/common/entity/animal/EntitySquid.java +++ /dev/null @@ -1,292 +0,0 @@ -package common.entity.animal; - -import common.ai.EntityAIBase; -import common.entity.npc.Alignment; -import common.entity.types.EntityWaterMob; -import common.init.Items; -import common.init.SoundEvent; -import common.item.Item; -import common.item.ItemStack; -import common.util.ExtMath; -import common.world.World; - -public class EntitySquid extends EntityWaterMob -{ - public float squidPitch; - public float prevSquidPitch; - public float squidYaw; - public float prevSquidYaw; - - /** - * appears to be rotation in radians; we already have pitch & yaw, so this completes the triumvirate. - */ - public float squidRotation; - - /** previous squidRotation in radians */ - public float prevSquidRotation; - - /** angle of the tentacles in radians */ - public float tentacleAngle; - - /** the last calculated angle of the tentacles in radians */ - public float lastTentacleAngle; - private float randomMotionSpeed; - - /** change in squidRotation in radians. */ - private float rotationVelocity; - private float field_70871_bB; - private float randomMotionVecX; - private float randomMotionVecY; - private float randomMotionVecZ; - - public EntitySquid(World worldIn) - { - super(worldIn); - this.setSize(0.95F, 0.95F); - this.rand.setSeed((long)(1 + this.getId())); - this.rotationVelocity = 1.0F / (this.rand.floatv() + 1.0F) * 0.2F; - this.tasks.addTask(0, new EntitySquid.AIMoveRandom(this)); - } - - protected void applyEntityAttributes() - { - super.applyEntityAttributes(); - this.setMaxHealth(10); - } - - public float getEyeHeight() - { - return this.height * 0.5F; - } - -// /** -// * Returns the sound this mob makes while it's alive. -// */ -// protected String getLivingSound() -// { -// return null; -// } - - /** - * Returns the sound this mob makes when it is hurt. - */ - protected SoundEvent getHurtSound() - { - return null; - } - - /** - * Returns the sound this mob makes on death. - */ - protected SoundEvent getDeathSound() - { - return null; - } - - /** - * Returns the volume for the sounds this mob makes. - */ - protected float getSoundVolume() - { - return 0.4F; - } - - protected Item getDropItem() - { - return null; - } - - /** - * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to - * prevent them from trampling crops - */ - protected boolean canTriggerWalking() - { - return false; - } - - /** - * Drop 0-2 items of this living's type - * - * @param wasRecentlyHit true if this this entity was recently hit by appropriate entity (generally only if player - * or tameable) - * @param lootingModifier level of enchanment to be applied to this drop - */ - protected void dropFewItems(boolean wasRecentlyHit, int lootingModifier) - { - int i = this.rand.roll(3 + lootingModifier); - - for (int j = 0; j < i; ++j) - { - this.entityDropItem(new ItemStack(Items.ink_sack), 0.0F); - } - } - - /** - * Checks if this entity is inside water (if inWater field is true as a result of handleWaterMovement() returning - * true) - */ - public boolean isInLiquid() - { - return this.worldObj.handleLiquidAcceleration(this.getEntityBoundingBox().expand(0.0D, -0.6000000238418579D, 0.0D), this); - } - - /** - * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons - * use this to react to sunlight and start to burn. - */ - public void onLivingUpdate() - { - super.onLivingUpdate(); - this.prevSquidPitch = this.squidPitch; - this.prevSquidYaw = this.squidYaw; - this.prevSquidRotation = this.squidRotation; - this.lastTentacleAngle = this.tentacleAngle; - this.squidRotation += this.rotationVelocity; - - if ((double)this.squidRotation > (Math.PI * 2D)) - { - if (this.worldObj.client) - { - this.squidRotation = ((float)Math.PI * 2F); - } - else - { - this.squidRotation = (float)((double)this.squidRotation - (Math.PI * 2D)); - - if (this.rand.chance(10)) - { - this.rotationVelocity = 1.0F / (this.rand.floatv() + 1.0F) * 0.2F; - } - - this.worldObj.setEntityState(this, (byte)19); - } - } - - if (this.inLiquid) - { - if (this.squidRotation < (float)Math.PI) - { - float f = this.squidRotation / (float)Math.PI; - this.tentacleAngle = ExtMath.sin(f * f * (float)Math.PI) * (float)Math.PI * 0.25F; - - if ((double)f > 0.75D) - { - this.randomMotionSpeed = 1.0F; - this.field_70871_bB = 1.0F; - } - else - { - this.field_70871_bB *= 0.8F; - } - } - else - { - this.tentacleAngle = 0.0F; - this.randomMotionSpeed *= 0.9F; - this.field_70871_bB *= 0.99F; - } - - if (!this.worldObj.client) - { - this.motionX = (double)(this.randomMotionVecX * this.randomMotionSpeed); - this.motionY = (double)(this.randomMotionVecY * this.randomMotionSpeed); - this.motionZ = (double)(this.randomMotionVecZ * this.randomMotionSpeed); - } - - float f1 = ExtMath.sqrtd(this.motionX * this.motionX + this.motionZ * this.motionZ); - this.yawOffset += (-((float)ExtMath.atan2(this.motionX, this.motionZ)) * 180.0F / (float)Math.PI - this.yawOffset) * 0.1F; - this.rotYaw = this.yawOffset; - this.squidYaw = (float)((double)this.squidYaw + Math.PI * (double)this.field_70871_bB * 1.5D); - this.squidPitch += (-((float)ExtMath.atan2((double)f1, this.motionY)) * 180.0F / (float)Math.PI - this.squidPitch) * 0.1F; - } - else - { - this.tentacleAngle = ExtMath.absf(ExtMath.sin(this.squidRotation)) * (float)Math.PI * 0.25F; - - if (!this.worldObj.client) - { - this.motionX = 0.0D; - this.motionY -= 0.08D; - this.motionY *= 0.9800000190734863D; - this.motionZ = 0.0D; - } - - this.squidPitch = (float)((double)this.squidPitch + (double)(-90.0F - this.squidPitch) * 0.02D); - } - } - - /** - * Moves the entity based on the specified heading. Args: strafe, forward - */ - public void moveEntityWithHeading(float strafe, float forward) - { - this.moveEntity(this.motionX, this.motionY, this.motionZ); - } - - public void handleStatusUpdate(byte id) - { - if (id == 19) - { - this.squidRotation = 0.0F; - } - else - { - super.handleStatusUpdate(id); - } - } - - public void setRandomMotion(float randomMotionVecXIn, float randomMotionVecYIn, float randomMotionVecZIn) - { - this.randomMotionVecX = randomMotionVecXIn; - this.randomMotionVecY = randomMotionVecYIn; - this.randomMotionVecZ = randomMotionVecZIn; - } - - public boolean hasRandomMotion() - { - return this.randomMotionVecX != 0.0F || this.randomMotionVecY != 0.0F || this.randomMotionVecZ != 0.0F; - } - - public int getColor() { - return 0x0000ff; - } - - public Alignment getAlignment() { - return Alignment.CHAOTIC_GOOD; - } - - static class AIMoveRandom extends EntityAIBase - { - private EntitySquid squid; - - public AIMoveRandom(EntitySquid p_i45859_1_) - { - this.squid = p_i45859_1_; - } - - public boolean shouldExecute() - { - return true; - } - - public void updateTask() - { -// int i = this.squid.getAge(); -// -// if (i > 100) -// { -// this.squid.func_175568_b(0.0F, 0.0F, 0.0F); -// } -// else - if (this.squid.getRNG().chance(50) || !this.squid.inLiquid || !this.squid.hasRandomMotion()) - { - float f = this.squid.getRNG().floatv() * (float)Math.PI * 2.0F; - float f1 = ExtMath.cos(f) * 0.2F; - float f2 = -0.1F + this.squid.getRNG().floatv() * 0.2F; - float f3 = ExtMath.sin(f) * 0.2F; - this.squid.setRandomMotion(f1, f2, f3); - } - } - } -} diff --git a/common/src/main/java/common/entity/npc/CharacterInfo.java b/common/src/main/java/common/entity/npc/CharacterInfo.java index 02318a6f..00e759eb 100755 --- a/common/src/main/java/common/entity/npc/CharacterInfo.java +++ b/common/src/main/java/common/entity/npc/CharacterInfo.java @@ -9,14 +9,12 @@ public class CharacterInfo extends NpcInfo { public final int color1; public final int color2; - public CharacterInfo(SpeciesInfo species, Enum type, String name, String skin, String cape, Alignment align, float height, int color1, int color2, boolean spawner) { - super(type, name, skin, cape, align, height, (ItemStack[])null); + public CharacterInfo(SpeciesInfo species, Enum type, String name, String skin, Alignment align, float height, int color1, int color2, boolean spawner) { + super(type, name, skin, align, height, (ItemStack[])null); this.spawner = spawner; this.species = species; this.color1 = color1; this.color2 = color2; SpeciesRegistry.SKINS.put(skin, species.renderer); - if(!cape.isEmpty()) - SpeciesRegistry.CAPES.add(cape); } } diff --git a/common/src/main/java/common/entity/npc/EntityBloodElf.java b/common/src/main/java/common/entity/npc/EntityBloodElf.java index 4870276f..a198077d 100755 --- a/common/src/main/java/common/entity/npc/EntityBloodElf.java +++ b/common/src/main/java/common/entity/npc/EntityBloodElf.java @@ -72,4 +72,8 @@ public class EntityBloodElf extends EntityNPC { protected ItemStack pickItem() { return new ItemStack(this.rand.chance(4) ? this.rand.pick(Items.bow, Items.stone_sword) : Items.iron_sword); } + + public String getCape() { + return "dark"; + } } diff --git a/common/src/main/java/common/entity/npc/EntityHaunter.java b/common/src/main/java/common/entity/npc/EntityHaunter.java index b41f1c51..15242769 100755 --- a/common/src/main/java/common/entity/npc/EntityHaunter.java +++ b/common/src/main/java/common/entity/npc/EntityHaunter.java @@ -21,7 +21,7 @@ public class EntityHaunter extends EntityNPC { public EntityHaunter(World worldIn) { super(worldIn); this.tasks.addTask(2, new EntityAIExplode(this)); -// this.tasks.addTask(3, new EntityAIAvoidEntity(this, EntityOcelot.class, 6.0F, 1.0D, 1.2D)); +// this.tasks.addTask(3, new EntityAIAvoidEntity(this, EntityCat.class, 6.0F, 1.0D, 1.2D)); } protected void applyEntityAttributes() diff --git a/common/src/main/java/common/entity/npc/EntityMerfolk.java b/common/src/main/java/common/entity/npc/EntityMerfolk.java new file mode 100755 index 00000000..935cde6c --- /dev/null +++ b/common/src/main/java/common/entity/npc/EntityMerfolk.java @@ -0,0 +1,34 @@ +package common.entity.npc; + +import common.rng.Random; +import common.world.World; + +public class EntityMerfolk extends EntityWaterNPC { + public EntityMerfolk(World world) { + super(world); + } + + public int getColor() { + return 0x0000ff; + } + + public float getSpeciesBaseSize() { + return 1.95f; + } + + public float getHeightDeviationMin() { + return -0.05f; + } + + public float getHeightDeviationMax() { + return 0.25f; + } + + public int getBaseHealth(Random rand) { + return rand.range(24, 32); + } + + public Alignment getNaturalAlign() { + return Alignment.CHAOTIC; + } +} diff --git a/common/src/main/java/common/entity/npc/EntityNPC.java b/common/src/main/java/common/entity/npc/EntityNPC.java index 2e39e1c4..67b2c210 100755 --- a/common/src/main/java/common/entity/npc/EntityNPC.java +++ b/common/src/main/java/common/entity/npc/EntityNPC.java @@ -15,6 +15,7 @@ import common.ai.EntityAINpcInteract; import common.ai.EntityAINpcMate; import common.ai.EntityAIOpenDoor; import common.ai.EntityAIPlay; +import common.ai.EntityAISwimNavigate; import common.ai.EntityAISwimming; import common.ai.EntityAIWander; import common.ai.EntityAIWatchClosest; @@ -126,12 +127,7 @@ public abstract class EntityNPC extends EntityLiving public static String getSkinTexture(String skin) { - return "textures/entity/" + skin + ".png"; - } - - public static String getCapeTexture(String cape) - { - return "textures/entity/cape_" + cape + ".png"; + return "textures/npc/" + skin + ".png"; } // public static String getSpeciesName(String character) { @@ -260,9 +256,12 @@ public abstract class EntityNPC extends EntityLiving this.setSize(this.getSpeciesBaseSize() * this.species.renderer.width / this.species.renderer.height, this.getSpeciesBaseSize()); // /* 0.6F, */ 1.8F); if(this.getNavigator() instanceof PathNavigateGround) { ((PathNavigateGround)this.getNavigator()).setBreakDoors(true); - ((PathNavigateGround)this.getNavigator()).setAvoidsWater(true); + ((PathNavigateGround)this.getNavigator()).setAvoidsWater(this.canSwim()); } - this.tasks.addTask(0, new EntityAISwimming(this)); + if(this.canSwim()) + this.tasks.addTask(0, new EntityAISwimming(this)); + else + this.tasks.addTask(0, new EntityAISwimNavigate(this)); // this.tasks.addTask(1, new EntityAIAttackOnCollide(this, EntityNPC.class, 0.6D, true, true)); // this.tasks.addTask(1, new EntityAIAttackOnCollide(this, EntityLivingBase.class, 0.6D, true, true)); this.tasks.addTask(1, new EntityAINpcMate(this)); @@ -463,6 +462,14 @@ public abstract class EntityNPC extends EntityLiving return 20; } + public boolean canSwim() { + return true; + } + + public float getVisionBrightness() { + return 0.1f; + } + // public void setScaleForAge() // { // } @@ -518,6 +525,10 @@ public abstract class EntityNPC extends EntityLiving public boolean hasSlimArms() { return false; } + + public String getCape() { + return null; + } public boolean isCharged() { @@ -784,16 +795,6 @@ public abstract class EntityNPC extends EntityLiving return this.dataWatcher.getWatchableObjectString(9); } - public void setCape(String cape) - { - this.dataWatcher.updateObject(17, cape); - } - - public String getCape() - { - return this.dataWatcher.getWatchableObjectString(17); - } - public void setNpcClass(Enum type) { this.dataWatcher.updateObject(10, (byte)(type == null ? -1 : type.ordinal())); @@ -2959,8 +2960,6 @@ public abstract class EntityNPC extends EntityLiving this.dataWatcher.addObject(13, 0); // max mana this.dataWatcher.addObject(14, 0); // mana this.dataWatcher.addObject(15, 0.7f); - - this.dataWatcher.addObject(17, ""); // TODO: remove capes } /** @@ -3317,7 +3316,6 @@ public abstract class EntityNPC extends EntityLiving } // this.setSpecies(tagCompund.getString("Species")); this.setChar(tagCompund.getString("Char")); - this.setCape(tagCompund.getString("Cape")); this.isWilling = tagCompund.getBool("Willing"); this.setMating(tagCompund.getBool("Mating")); Alignment // align; @@ -3458,7 +3456,6 @@ public abstract class EntityNPC extends EntityLiving tagCompound.setList("Equipment", nbttaglist0); // tagCompound.setString("Species", this.getSpecies()); tagCompound.setString("Char", this.getChar()); - tagCompound.setString("Cape", this.getCape()); tagCompound.setBool("Willing", this.isWilling); tagCompound.setBool("Mating", this.isMating()); tagCompound.setString("Align", this.alignment.name); @@ -4295,7 +4292,6 @@ public abstract class EntityNPC extends EntityLiving public void setStats(NpcInfo info) { this.setNpcClass(info.type == null ? this.pickRandomClass() : info.type); this.setChar(info.skin != null ? info.skin : this.pickRandomTexture()); - this.setCape(info.cape != null ? info.cape : this.pickRandomAccessory()); this.setCustomNameTag(info.name.isEmpty() ? this.pickRandomName() : info.name); this.setAlignment(info.align != null ? info.align : this.getNaturalAlign()); this.setHeight(info.height > 0.0f ? info.height : this.getBaseSize()); @@ -4333,10 +4329,6 @@ public abstract class EntityNPC extends EntityLiving return ""; } - public String pickRandomAccessory() { - return ""; - } - public Enum pickRandomClass() { return null; } diff --git a/common/src/main/java/common/entity/npc/EntityWaterNPC.java b/common/src/main/java/common/entity/npc/EntityWaterNPC.java new file mode 100755 index 00000000..89eff044 --- /dev/null +++ b/common/src/main/java/common/entity/npc/EntityWaterNPC.java @@ -0,0 +1,83 @@ +package common.entity.npc; + +import common.entity.DamageSource; +import common.tags.TagObject; +import common.vars.Vars; +import common.world.World; + +public abstract class EntityWaterNPC extends EntityNPC { + public EntityWaterNPC(World world) { + super(world); + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(23, this.getMaxMoisture()); + } + + public int getMaxMoisture() { + return 500; + } + + public int getMoisture() { + return this.dataWatcher.getWatchableObjectInt(23); + } + + public void setMoisture(int moisture) { + this.dataWatcher.updateObject(23, moisture); + } + + public boolean canSpawnInLiquid() { + return true; + } + + public float getVisionBrightness() { + return 0.35f; + } + + public float getArmRotation() { + return 0.5f; + } + + public float getLegRotation() { + return 0.6f; + } + + public void onEntityUpdate() { + super.onEntityUpdate(); + if(!this.worldObj.client && this.isEntityAlive()) { + int moisture = this.getMoisture(); + if(!this.isInLiquid()) { + if(moisture > 0) + this.setMoisture(moisture - 1); + else if(Vars.waterMobDry && this.rand.chance(30)) + this.attackEntityFrom(DamageSource.dry, 2); + } + else if(moisture < this.getMaxMoisture()) { + this.setMoisture(moisture + 1); + } + } + } + + public boolean isPushedByWater() { + return false; + } + + public boolean canSwim() { + return false; + } + + public boolean getCanSpawnHere() { + return this.isPlayer() || this.posY < (double)this.worldObj.getSeaLevel(); + } + + public void writeEntity(TagObject tag) { + super.writeEntity(tag); + tag.setInt("Moisture", this.getMoisture()); + } + + public void readEntity(TagObject tag) { + super.readEntity(tag); + this.setMoisture(tag.getInt("Moisture")); + } +} diff --git a/common/src/main/java/common/entity/npc/NpcInfo.java b/common/src/main/java/common/entity/npc/NpcInfo.java index f0ba67c3..9db84e73 100644 --- a/common/src/main/java/common/entity/npc/NpcInfo.java +++ b/common/src/main/java/common/entity/npc/NpcInfo.java @@ -6,16 +6,14 @@ public class NpcInfo { public final Enum type; public final String name; public final String skin; - public final String cape; public final Alignment align; public final float height; public final ItemStack[] items; - public NpcInfo(Enum type, String name, String skin, String cape, Alignment align, float height, ItemStack ... items) { + public NpcInfo(Enum type, String name, String skin, Alignment align, float height, ItemStack ... items) { this.type = type; this.name = name; this.skin = skin; - this.cape = cape; this.align = align; this.height = height; this.items = items; diff --git a/common/src/main/java/common/entity/npc/SpeciesInfo.java b/common/src/main/java/common/entity/npc/SpeciesInfo.java index 1c9cbad5..9483fe71 100755 --- a/common/src/main/java/common/entity/npc/SpeciesInfo.java +++ b/common/src/main/java/common/entity/npc/SpeciesInfo.java @@ -71,7 +71,7 @@ public class SpeciesInfo { scolor2 = ((Integer)names[++z]).intValue(); } chars.add(new CharacterInfo(this, ctype, tok[0], tok.length > 1 && !tok[1].isEmpty() ? tok[1] : (tok[0].isEmpty() ? this.id : tok[0]).toLowerCase().replace(' ', '_'), - tok.length > 2 ? tok[2] : "", align, height, scolor1, scolor2, names.length > 1)); + align, height, scolor1, scolor2, names.length > 1)); } this.chars = chars.toArray(new CharacterInfo[chars.size()]); SpeciesRegistry.CLASSES.put(this.clazz, this); diff --git a/common/src/main/java/common/entity/types/EntityWaterMob.java b/common/src/main/java/common/entity/types/EntityWaterMob.java deleted file mode 100755 index ae019b09..00000000 --- a/common/src/main/java/common/entity/types/EntityWaterMob.java +++ /dev/null @@ -1,116 +0,0 @@ -package common.entity.types; - -import common.entity.DamageSource; -import common.entity.EntityType; -import common.entity.npc.EntityNPC; -import common.vars.Vars; -import common.world.World; - -public abstract class EntityWaterMob extends EntityLiving -{ - public EntityWaterMob(World worldIn) - { - super(worldIn); - } - -// public boolean canBreatheUnderwater() -// { -// return true; -// } - -// /** -// * Checks if the entity's current position is a valid location to spawn this entity. -// */ -// public boolean getCanSpawnHere() -// { -// return true; -// } - -// /** -// * Checks that the entity is not colliding with any blocks / liquids -// */ -// public boolean isNotColliding() -// { -// return this.worldObj.checkNoEntityCollision(this.getEntityBoundingBox(), this) && -// this.worldObj.getCollidingBoundingBoxes(this, this.getEntityBoundingBox()).isEmpty(); //TODO: check -// } - - public boolean canSpawnInLiquid() { - return true; - } - - /** - * Get number of ticks, at least during which the living entity will be silent. - */ - public int getTalkInterval() - { - return 120; - } - -// /** -// * Determines if an entity can be despawned, used on idle far away entities -// */ -// protected boolean canDespawn() -// { -// return true; -// } - - /** - * Get the experience points the entity currently has. - */ - protected int getExperiencePoints(EntityNPC player) - { - return this.worldObj.rand.roll(3); - } - - /** - * Gets called every tick from main Entity class - */ - public void onEntityUpdate() - { -// int i = this.getAir(); - super.onEntityUpdate(); - - if (this.isEntityAlive() && (this.worldObj.client || Vars.waterMobDry) && !this.isInLiquid() && this.rand.chance(30)) - { -// --i; -// this.setAir(i); -// -// if (this.getAir() == -20) -// { -// this.setAir(0); - this.attackEntityFrom(DamageSource.dry, 2); -// } - } -// else -// { -// this.setAir(300); -// } - } - - public boolean isPushedByWater() - { - return false; - } - - public int getTrackingRange() { - return 64; - } - - public int getUpdateFrequency() { - return 3; - } - - public boolean isSendingVeloUpdates() { - return true; - } - - public boolean getCanSpawnHere() - { - return this.posY > 45.0D && this.posY < (double)this.worldObj.getSeaLevel(); - } - - public EntityType getType() { - return EntityType.ANIMAL; - } -} diff --git a/common/src/main/java/common/init/EntityRegistry.java b/common/src/main/java/common/init/EntityRegistry.java index cdc245f4..01c01fc1 100755 --- a/common/src/main/java/common/init/EntityRegistry.java +++ b/common/src/main/java/common/init/EntityRegistry.java @@ -11,13 +11,11 @@ import common.entity.animal.EntityCow; import common.entity.animal.EntityDragon; import common.entity.animal.EntityFox; import common.entity.animal.EntityHorse; -import common.entity.animal.EntityMooshroom; import common.entity.animal.EntityMouse; -import common.entity.animal.EntityOcelot; +import common.entity.animal.EntityCat; import common.entity.animal.EntityPig; import common.entity.animal.EntityRabbit; import common.entity.animal.EntitySheep; -import common.entity.animal.EntitySquid; import common.entity.animal.EntityWolf; import common.entity.item.EntityBoat; import common.entity.item.EntityChestCart; @@ -221,10 +219,8 @@ public abstract class EntityRegistry { registerEntity("Sheep", EntitySheep.class, "terra", "Schaf", 15198183, 16758197); registerEntity("Cow", EntityCow.class, "terra", "Kuh", 4470310, 10592673); registerEntity("Chicken", EntityChicken.class, "terra", "Huhn", 10592673, 16711680); - registerEntity("Squid", EntitySquid.class, "tbd", "Tintenfisch", 2243405, 7375001); registerEntity("Wolf", EntityWolf.class, "terra", "Wolf", 14144467, 13545366); - registerEntity("Mooshroom", EntityMooshroom.class, "tbd", "Pilzkuh", 10489616, 12040119); - registerEntity("Ocelot", EntityOcelot.class, "terra", "Ozelot", 15720061, 5653556); + registerEntity("Cat", EntityCat.class, "terra", "Ozelot", 15720061, 5653556); registerEntity("Horse", EntityHorse.class, "terra", "Pferd", 12623485, 15656192); registerEntity("Rabbit", EntityRabbit.class, "terra", "Kaninchen", 10051392, 7555121); registerEntity("Mouse", EntityMouse.class, "terra", "Maus", 0x606060, 0xb0b0b0); diff --git a/common/src/main/java/common/init/SpeciesRegistry.java b/common/src/main/java/common/init/SpeciesRegistry.java index 4646e5ff..68c38edd 100755 --- a/common/src/main/java/common/init/SpeciesRegistry.java +++ b/common/src/main/java/common/init/SpeciesRegistry.java @@ -2,11 +2,8 @@ package common.init; import java.util.List; import java.util.Map; -import java.util.Set; - import common.collect.Lists; import common.collect.Maps; -import common.collect.Sets; import common.entity.npc.EntityArachnoid; import common.entity.npc.EntityBloodElf; import common.entity.npc.EntityChaosMarine; @@ -21,6 +18,7 @@ import common.entity.npc.EntityGoblin; import common.entity.npc.EntityHaunter; import common.entity.npc.EntityHuman; import common.entity.npc.EntityMage; +import common.entity.npc.EntityMerfolk; import common.entity.npc.EntityMetalhead; import common.entity.npc.EntityNPC; import common.entity.npc.EntityOrc; @@ -59,7 +57,6 @@ public abstract class SpeciesRegistry { } public static final Map SKINS = Maps.newTreeMap(); - public static final Set CAPES = Sets.newTreeSet(); public static final Map, SpeciesInfo> CLASSES = Maps.newHashMap(); public static final List SPECIMEN = Lists.newArrayList(); @@ -89,7 +86,7 @@ public abstract class SpeciesRegistry { } static void register() { - registerSpecies("Cpu", EntityCpu.class, null, "Test-NSC", 0x202020, 0x8000ff, "Sen", "Troll:trollface", "Hacker", "Herobrine"); + registerSpecies("Cpu", EntityCpu.class, null, "Test-NSC", 0x202020, 0x8000ff, "Test:char", "Troll:trollface", "Hacker"); registerSpecies("Cultivator", EntityCultivator.class, "nienrath", "Kultivator", 0x000000, 0xff0000, "Wei Wuxian", 0x000000, 0xff0000, "Lan Wangji", 0xffffff, 0x80e0ff, "Jiang Cheng", 0x200000, 0xaf00ff, "Shen Qingqiu", 0xffffff, 0x80ff80, "Luo Binghe", 0x600000, 0x000000); @@ -99,7 +96,7 @@ public abstract class SpeciesRegistry { ":metalhead_11", ":metalhead_12", ":metalhead_13", ":metalhead_14"); registerSpecies("Elf", EntityElf.class, "gharoth", "Elbe", 0x054100, 0xd2d2d2, ":highelf", "Thranduil", 0x82888b, 0xeae7bd); registerSpecies("WoodElf", EntityWoodElf.class, "gharoth", "Waldelbe", 0x054100, 0x00bb00); - registerSpecies("BloodElf", EntityBloodElf.class, "kyroth", "Blutelbe", 0x054100, 0x960000, "::bloodelf"); + registerSpecies("BloodElf", EntityBloodElf.class, "kyroth", "Blutelbe", 0x054100, 0x960000); registerSpecies("Human", EntityHuman.class, EntityHuman.ClassType.class, "terra", "NSC", 0x4f7d9a, 0x034c7a, EntityHuman.ClassType.KNIGHT, ":knight_1", ":knight_2", ":knight_3", @@ -136,5 +133,6 @@ public abstract class SpeciesRegistry { registerSpecies("ChaosMarine", EntityChaosMarine.class, EntityChaosMarine.Legion.class, true, "warp", "Chaos Marine", ModelType.SPACE_MARINE, 0x000000, 0xff0000, EntityChaosMarine.Legion.MARINES); registerSpecies("Goblin", EntityGoblin.class, "luna", "Goblin", ModelType.HALFLING, 0x50af50, 0x504050); + registerSpecies("Merfolk", EntityMerfolk.class, "tbd", "Meeresbewohner", 0x3f3fff, 0x0000ff); } } diff --git a/common/src/main/java/common/init/UniverseRegistry.java b/common/src/main/java/common/init/UniverseRegistry.java index b6744d7d..36d0789b 100755 --- a/common/src/main/java/common/init/UniverseRegistry.java +++ b/common/src/main/java/common/init/UniverseRegistry.java @@ -583,7 +583,7 @@ public abstract class UniverseRegistry { .setStarColorSin(25.0f, 0.1f, 0.25f, 0xff00ff, 1, 4).setDeepStarColorSin(25.0f, 0.1f, 0.5f, 0xff00ff, 1, 4)); registerDomain("tianxin", "Tian'Xin"); - registerArea("nienrath", "Ni'enrath", new Area(0x7f00ff, 0x7f00ff, 276.15f, 1) + registerArea("nienrath", "Ni'enrath", new Area(0x7f00ff, 0x7f00ff, 276.15f, 1).setLightColor(0x7f00ff).setBlockColor(0xcf6fff) .setPerlinGen(Blocks.tian.getState(), Blocks.springwater.getState(), 63).setBiome(Biome.TIAN) .setBiomeReplacer(Blocks.tian.getState()).enableLongCaves().enableMobs().enableSnow() .addLake(Blocks.springwater.getState(), Blocks.tian.getState(), Blocks.tian.getState(), 4, 0, 255, false) diff --git a/server/src/main/java/server/biome/BiomeJungle.java b/server/src/main/java/server/biome/BiomeJungle.java index 9030120b..3b22efa3 100755 --- a/server/src/main/java/server/biome/BiomeJungle.java +++ b/server/src/main/java/server/biome/BiomeJungle.java @@ -2,7 +2,7 @@ package server.biome; import common.biome.Biome; import common.entity.animal.EntityChicken; -import common.entity.animal.EntityOcelot; +import common.entity.animal.EntityCat; import common.init.Blocks; import common.init.WoodType; import common.rng.Random; @@ -45,7 +45,7 @@ public class BiomeJungle extends GenBiome if (!edge) { - this.mobs.add(new RngSpawn(EntityOcelot.class, 2, 1, 1)); + this.mobs.add(new RngSpawn(EntityCat.class, 2, 1, 1)); } this.mobs.add(new RngSpawn(EntityChicken.class, 10, 4, 4)); diff --git a/server/src/main/java/server/biome/BiomeMushroom.java b/server/src/main/java/server/biome/BiomeMushroom.java index 1e00da7a..5e9633f3 100755 --- a/server/src/main/java/server/biome/BiomeMushroom.java +++ b/server/src/main/java/server/biome/BiomeMushroom.java @@ -1,24 +1,22 @@ package server.biome; import common.biome.Biome; -import common.entity.animal.EntityMooshroom; +import common.entity.npc.EntityDwarf; import common.init.Blocks; import common.rng.WeightedList; -public class BiomeMushroom extends GenBiome -{ - public BiomeMushroom() - { - super(Biome.MUSHROOMPLAINS); - this.treesPerChunk = -100; - this.flowersPerChunk = -100; - this.grassPerChunk = -100; - this.mushroomsPerChunk = 1; - this.bigMushroomsPerChunk = 1; - this.topBlock = Blocks.mycelium.getState(); - } - - protected void addMobs(WeightedList mobs) { - mobs.add(new RngSpawn(EntityMooshroom.class, 8, 4, 8)); - } +public class BiomeMushroom extends GenBiome { + public BiomeMushroom() { + super(Biome.MUSHROOMPLAINS); + this.treesPerChunk = -100; + this.flowersPerChunk = -100; + this.grassPerChunk = -100; + this.mushroomsPerChunk = 1; + this.bigMushroomsPerChunk = 1; + this.topBlock = Blocks.mycelium.getState(); + } + + protected void addMobs(WeightedList mobs) { + mobs.add(new RngSpawn(EntityDwarf.class, 8, 4, 8)); + } } diff --git a/server/src/main/java/server/biome/BiomeTian.java b/server/src/main/java/server/biome/BiomeTian.java index 0bd9f78e..53857f9d 100755 --- a/server/src/main/java/server/biome/BiomeTian.java +++ b/server/src/main/java/server/biome/BiomeTian.java @@ -6,6 +6,7 @@ import common.entity.animal.EntityBat; import common.entity.animal.EntityMouse; import common.entity.animal.EntityRabbit; import common.entity.npc.EntityCultivator; +import common.entity.npc.EntityMerfolk; import common.init.Blocks; import common.init.WoodType; import common.rng.Random; @@ -42,8 +43,8 @@ public class BiomeTian extends GenBiome } protected void addMobs(WeightedList mobs) { -// mobs.add(new Biome.RngSpawn(EntityHaunter.class, 50, 4, 4)); mobs.add(new RngSpawn(EntityCultivator.class, 50, 1, 1)); + mobs.add(new RngSpawn(EntityMerfolk.class, 10, 4, 4)); mobs.add(new RngSpawn(EntityRabbit.class, 10, 3, 10)); mobs.add(new RngSpawn(EntityBat.class, 10, 8, 8)); mobs.add(new RngSpawn(EntityMouse.class, 10, 8, 8)); diff --git a/server/src/main/java/server/biome/BiomeWater.java b/server/src/main/java/server/biome/BiomeWater.java index 48c853b5..007ecccb 100755 --- a/server/src/main/java/server/biome/BiomeWater.java +++ b/server/src/main/java/server/biome/BiomeWater.java @@ -1,7 +1,7 @@ package server.biome; import common.biome.Biome; -import common.entity.animal.EntitySquid; +import common.entity.npc.EntityMerfolk; import common.rng.WeightedList; public class BiomeWater extends GenBiome { @@ -11,10 +11,11 @@ public class BiomeWater extends GenBiome { super(base); this.river = river; this.disableBeach(); + if(!this.river) + this.mobs.add(new RngSpawn(EntityMerfolk.class, 10, 4, 4)); } protected void addMobs(WeightedList mobs) { - mobs.add(new RngSpawn(EntitySquid.class, 10, 4, 4)); } public Temperature getTempCategory() { diff --git a/server/src/main/java/server/biome/GenBiome.java b/server/src/main/java/server/biome/GenBiome.java index ee4b21cd..a7965dac 100755 --- a/server/src/main/java/server/biome/GenBiome.java +++ b/server/src/main/java/server/biome/GenBiome.java @@ -13,7 +13,6 @@ import common.entity.animal.EntityMouse; import common.entity.animal.EntityPig; import common.entity.animal.EntityRabbit; import common.entity.animal.EntitySheep; -import common.entity.animal.EntitySquid; import common.entity.npc.EntityArachnoid; import common.entity.npc.EntityHaunter; import common.entity.npc.EntityMage; @@ -224,7 +223,6 @@ public abstract class GenBiome implements IBiome { mobs.add(new RngSpawn(EntitySlime.class, 100, 4, 4)); // mobs.add(new Biome.RngSpawn(EntityEnder....class, 10, 1, 4)); mobs.add(new RngSpawn(EntityMage.class, 5, 1, 1)); - mobs.add(new RngSpawn(EntitySquid.class, 10, 4, 4)); mobs.add(new RngSpawn(EntityBat.class, 10, 8, 8)); mobs.add(new RngSpawn(EntityMouse.class, 10, 8, 8)); } diff --git a/server/src/main/java/server/world/Converter.java b/server/src/main/java/server/world/Converter.java index 920205fc..5eb156fb 100644 --- a/server/src/main/java/server/world/Converter.java +++ b/server/src/main/java/server/world/Converter.java @@ -98,12 +98,10 @@ import common.entity.animal.EntityBat; import common.entity.animal.EntityChicken; import common.entity.animal.EntityCow; import common.entity.animal.EntityHorse; -import common.entity.animal.EntityMooshroom; -import common.entity.animal.EntityOcelot; +import common.entity.animal.EntityCat; import common.entity.animal.EntityPig; import common.entity.animal.EntityRabbit; import common.entity.animal.EntitySheep; -import common.entity.animal.EntitySquid; import common.entity.animal.EntityWolf; import common.entity.item.EntityBoat; import common.entity.item.EntityMinecart; @@ -363,12 +361,10 @@ public abstract class Converter { mapEntity(EntityBat.class, "Bat", "bat"); mapEntity(EntityPig.class, "Pig", "pig"); mapEntity(EntitySheep.class, "Sheep", "sheep"); - mapEntity(EntityCow.class, "Cow", "cow"); + mapEntity(EntityCow.class, "Cow", "cow", "MushroomCow", "mooshroom"); mapEntity(EntityChicken.class, "Chicken", "chicken"); - mapEntity(EntitySquid.class, "Squid", "squid"); mapEntity(EntityWolf.class, "Wolf", "wolf"); - mapEntity(EntityMooshroom.class, "MushroomCow", "mooshroom"); - mapEntity(EntityOcelot.class, "Ozelot", "ocelot"); + mapEntity(EntityCat.class, "Ozelot", "ocelot"); mapEntity(EntityHorse.class, "EntityHorse", "horse"); mapEntity(EntityRabbit.class, "Rabbit", "rabbit"); diff --git a/server/src/main/java/server/world/Spawner.java b/server/src/main/java/server/world/Spawner.java index 06e5da65..262c65df 100755 --- a/server/src/main/java/server/world/Spawner.java +++ b/server/src/main/java/server/world/Spawner.java @@ -5,8 +5,8 @@ import java.util.Set; import common.block.Block; import common.collect.Sets; import common.entity.npc.EntityNPC; +import common.entity.npc.EntityWaterNPC; import common.entity.types.EntityLiving; -import common.entity.types.EntityWaterMob; import common.init.Blocks; import common.rng.Random; import common.rng.WeightedList; @@ -121,7 +121,7 @@ public abstract class Spawner { cmax = m + entry.min + world.rand.zrange(1 + entry.max - entry.min); } if(world.canCreatureTypeSpawnHere(entry, mpos) - && canSpawnAt(EntityWaterMob.class.isAssignableFrom(entry.type), world, mpos)) { + && canSpawnAt(EntityWaterNPC.class.isAssignableFrom(entry.type), world, mpos)) { EntityLiving entity; try { entity = entry.type.getConstructor(World.class).newInstance(world); @@ -178,7 +178,7 @@ public abstract class Spawner { boolean flag = false; for(int m = 0; !flag && m < 4; ++m) { BlockPos pos = world.getTopSolidOrLiquidBlock(new BlockPos(mx, 0, mz)); - if(canSpawnAt(EntityWaterMob.class.isAssignableFrom(entry.type), world, pos)) { + if(canSpawnAt(EntityWaterNPC.class.isAssignableFrom(entry.type), world, pos)) { EntityLiving entity; try { entity = entry.type.getConstructor(World.class).newInstance(world);