From 3f4ddeadc1d61fb24f787fab66d3c5d90b6c947f Mon Sep 17 00:00:00 2001 From: Shinare Date: Fri, 30 Aug 2024 00:44:03 +0300 Subject: [PATCH] Frozen Dungeon updates --- dependencies.gradle | 1 + libs/variabletriggers.jar | Bin 0 -> 230527 bytes .../com/zivilon/cinder_loe/CinderLoE.java | 164 ++++--- .../zivilon/cinder_loe/ItemRegistration.java | 19 + .../com/zivilon/cinder_loe/LoEDamage.java | 7 + .../com/zivilon/cinder_loe/Materials.java | 16 +- .../cinder_loe/blocks/ForgingStation.java | 279 +++++++++++ .../zivilon/cinder_loe/blocks/IceCage.java | 27 +- .../cinder_loe/blocks/NexIceCrystal.java | 51 -- .../zivilon/cinder_loe/blocks/ShadowTile.java | 45 +- .../model/blocks/ModelForgingStation.java | 72 +++ .../cinder_loe/client/render/RenderNex.java | 3 +- .../client/render/RenderNexCloud.java | 50 ++ .../client/render/RenderNimveilBolt.java | 136 ++++++ .../client/render/block/RenderIceCage.java | 7 - .../render/block/RenderNexIceCrystal.java | 69 --- .../client/render/item/TrollClubRenderer.java | 59 +++ .../TileEntityForgingStationRenderer.java | 113 +++++ .../coremod/LOTRMaterialTransformer.java | 2 + .../cinder_loe/coremod/LOTRWeaponLinker.java | 2 +- .../com/zivilon/cinder_loe/entity/Nex.java | 330 ++++++++++++- .../zivilon/cinder_loe/entity/NexCloud.java | 180 +++++++ .../zivilon/cinder_loe/entity/NexFire.java | 43 +- .../com/zivilon/cinder_loe/entity/NexIce.java | 44 +- .../cinder_loe/entity/NexMiniboss.java | 152 ++++++ .../zivilon/cinder_loe/entity/NexShadow.java | 99 ++-- .../zivilon/cinder_loe/entity/NexToxin.java | 49 +- .../entity/ai/LoEPreciseAttackOnCollide.java | 97 ++++ .../entity/effect/NimveilLightningBolt.java | 84 ++++ .../entity/projectile/EntityWarDart.java | 14 + .../cinder_loe/items/BlessedHammer.java | 26 + .../zivilon/cinder_loe/items/Celeiniss.java | 26 + .../cinder_loe/items/CinderLoESpawnEgg.java | 2 - .../cinder_loe/items/FirstAgeGlaive.java | 57 --- .../zivilon/cinder_loe/items/IceThawer.java | 27 ++ .../zivilon/cinder_loe/items/LoEArmor.java | 40 ++ .../com/zivilon/cinder_loe/items/LoEBow.java | 43 ++ .../zivilon/cinder_loe/items/LoEHammer.java | 31 ++ .../zivilon/cinder_loe/items/LoEItemMug.java | 69 +++ .../zivilon/cinder_loe/items/LoESpear.java | 31 ++ .../zivilon/cinder_loe/items/LoESword.java | 36 ++ .../com/zivilon/cinder_loe/items/Nimveil.java | 458 ++++++++++++++++++ .../zivilon/cinder_loe/items/NimveilPart.java | 128 +++++ .../com/zivilon/cinder_loe/items/WarDart.java | 8 +- .../cinder_loe/items/WarDartHeads.java | 18 +- .../zivilon/cinder_loe/items/WeaponPart.java | 127 +++++ .../mixins/MixinEnchantmentHelper.java | 27 ++ .../cinder_loe/mixins/MixinEntity.java | 12 + .../cinder_loe/mixins/MixinEntityArrow.java | 305 ++++++++++++ .../mixins/MixinEntityLivingBase.java | 202 ++++++++ .../cinder_loe/mixins/MixinItemBlock.java | 39 -- .../cinder_loe/mixins/MixinItemRenderer.java | 47 +- .../mixins/MixinLOTRArmorModels.java | 4 +- .../mixins/MixinLOTRBrewingRecipes.java | 15 + .../mixins/MixinLOTRClientProxy.java | 6 +- ...REntityAINearestAttackableTargetBasic.java | 35 ++ .../mixins/MixinLOTREntityProjectileBase.java | 259 ++++++++++ .../cinder_loe/mixins/MixinLOTRIntCache.java | 18 +- .../mixins/MixinLOTRItemRendererManager.java | 73 ++- .../mixins/MixinLOTRRenderArmorStand.java | 22 +- .../mixins/MixinLOTRRenderLargeItem.java | 179 +++++++ .../MixinLOTRTileEntityDwarvenForge.java | 13 +- .../mixins/MixinLOTRTradeEntries.java | 2 +- .../MixinLOTRWorldGenMumakSkeleton.java | 8 +- .../cinder_loe/mixins/MixinRenderItem.java | 24 +- .../mixins/MixinRendererLivingEntity.java | 4 + .../cinder_loe/mixins/MixinSlotCrafting.java | 5 + .../overrides/MixinLOTRItemEntDraught.java | 20 +- .../zivilon/cinder_loe/potion/LoEPotions.java | 28 ++ .../cinder_loe/recipe/ForgingRecipe.java | 57 +++ .../cinder_loe/recipe/ForgingRecipes.java | 85 ++++ .../java/com/zivilon/cinder_loe/recipes.java | 7 + .../tileentity/TileEntityForgingStation.java | 127 +++++ .../tileentity/TileEntityNexIceCrystal.java | 7 - .../tileentity/TileEntityShadowTile.java | 37 ++ .../com/zivilon/cinder_loe/util/BlockPos.java | 4 + .../util/LOTREnchantmentExclusions.java | 2 +- .../zivilon/cinder_loe/util/Utilities.java | 97 +++- .../zivilon/cinder_loe/util/VT_additions.java | 11 + .../assets/cinder_loe/lang/en_US.lang | 47 ++ .../resources/assets/cinder_loe/mob/green.png | Bin 0 -> 4549 bytes .../lotr/textures/blocks/forging_station.png | Bin 0 -> 3118 bytes .../lotr/textures/items/blessed_hammer.png | Bin 0 -> 698 bytes .../{firstAgeGlaive.png => celeiniss.png} | Bin .../lotr/textures/items/deceiver_blade.png | Bin 0 -> 919 bytes .../textures/items/deceiver_blade.png.mcmeta | 30 ++ .../textures/items/deceiver_blade_blade.png | Bin 0 -> 6331 bytes .../textures/items/deceiver_blade_guard.png | Bin 0 -> 6355 bytes .../textures/items/deceiver_blade_hilt.png | Bin 0 -> 659 bytes .../lotr/textures/items/demonblood_vial.png | Bin 0 -> 5260 bytes .../assets/lotr/textures/items/ice_thawer.png | Bin 0 -> 7694 bytes .../lotr/textures/items/ice_thawer.png.mcmeta | 3 + .../{firstAgeGlaive.png => celeiniss.png} | Bin .../items/mugDemonicHealthPotion_liquid.png | Bin 0 -> 5055 bytes ...dart_heads_1_alt.png => nimveil_blade.png} | Bin 4495 -> 4536 bytes .../textures/items/nimveil_gem_ancient.png | Bin 0 -> 5811 bytes .../items/nimveil_gem_ancient.png.mcmeta | 76 +++ .../textures/items/nimveil_gem_mortals.png | Bin 0 -> 5626 bytes .../items/nimveil_gem_mortals.png.mcmeta | 76 +++ .../textures/items/nimveil_gem_sauron.png | Bin 0 -> 5840 bytes .../items/nimveil_gem_sauron.png.mcmeta | 76 +++ .../lotr/textures/items/nimveil_gem_udun.png | Bin 0 -> 5523 bytes .../items/nimveil_gem_udun.png.mcmeta | 76 +++ .../lotr/textures/items/nimveil_gem_valar.png | Bin 0 -> 5910 bytes .../items/nimveil_gem_valar.png.mcmeta | 76 +++ .../lotr/textures/items/war_dart_ancient.png | Bin 4383 -> 5824 bytes .../textures/items/war_dart_black_uruk.png | Bin 4392 -> 5562 bytes .../textures/items/war_dart_blue_dwarven.png | Bin 4383 -> 5596 bytes .../lotr/textures/items/war_dart_bronze.png | Bin 4388 -> 5608 bytes .../lotr/textures/items/war_dart_copper.png | Bin 4383 -> 5594 bytes .../lotr/textures/items/war_dart_dwarven.png | Bin 4382 -> 5580 bytes .../lotr/textures/items/war_dart_elven.png | Bin 4367 -> 5518 bytes .../textures/items/war_dart_gilded_iron.png | Bin 4376 -> 5570 bytes .../lotr/textures/items/war_dart_headless.png | Bin 4323 -> 5489 bytes .../lotr/textures/items/war_dart_heads_0.png | Bin 4637 -> 5766 bytes .../items/war_dart_heads_0_morgul.png | Bin 0 -> 7099 bytes .../lotr/textures/items/war_dart_heads_1.png | Bin 4485 -> 5356 bytes .../items/war_dart_heads_1_morgul.png | Bin 0 -> 6751 bytes .../lotr/textures/items/war_dart_heads_2.png | Bin 4519 -> 5631 bytes .../items/war_dart_heads_2_morgul.png | Bin 0 -> 6831 bytes .../lotr/textures/items/war_dart_heads_3.png | Bin 4547 -> 5681 bytes .../items/war_dart_heads_3_morgul.png | Bin 0 -> 6900 bytes .../lotr/textures/items/war_dart_heads_4.png | Bin 4577 -> 5718 bytes .../items/war_dart_heads_4_morgul.png | Bin 0 -> 6987 bytes .../lotr/textures/items/war_dart_heads_5.png | Bin 4608 -> 5748 bytes .../items/war_dart_heads_5_morgul.png | Bin 0 -> 7049 bytes .../lotr/textures/items/war_dart_iron.png | Bin 4382 -> 5512 bytes .../lotr/textures/items/war_dart_mithril.png | Bin 4377 -> 7875 bytes .../items/war_dart_mithril.png.mcmeta | 51 ++ .../lotr/textures/items/war_dart_morgul.png | Bin 0 -> 5646 bytes .../lotr/textures/items/war_dart_orc.png | Bin 4385 -> 5566 bytes .../textures/items/war_dart_red_dwarven.png | Bin 4385 -> 5808 bytes .../lotr/textures/items/war_dart_uruk.png | Bin 4386 -> 5552 bytes src/main/resources/mixins.cinder_loe.json | 10 +- 134 files changed, 5133 insertions(+), 510 deletions(-) create mode 100644 libs/variabletriggers.jar create mode 100644 src/main/java/com/zivilon/cinder_loe/LoEDamage.java create mode 100644 src/main/java/com/zivilon/cinder_loe/blocks/ForgingStation.java delete mode 100644 src/main/java/com/zivilon/cinder_loe/blocks/NexIceCrystal.java create mode 100644 src/main/java/com/zivilon/cinder_loe/client/model/blocks/ModelForgingStation.java create mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/RenderNexCloud.java create mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/RenderNimveilBolt.java delete mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/block/RenderNexIceCrystal.java create mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/item/TrollClubRenderer.java create mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/tileentity/TileEntityForgingStationRenderer.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/NexCloud.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/NexMiniboss.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/ai/LoEPreciseAttackOnCollide.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/effect/NimveilLightningBolt.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/BlessedHammer.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/Celeiniss.java delete mode 100644 src/main/java/com/zivilon/cinder_loe/items/FirstAgeGlaive.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/IceThawer.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/LoEArmor.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/LoEBow.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/LoEHammer.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/LoEItemMug.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/LoESpear.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/LoESword.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/Nimveil.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/NimveilPart.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/WeaponPart.java create mode 100644 src/main/java/com/zivilon/cinder_loe/mixins/MixinEnchantmentHelper.java create mode 100644 src/main/java/com/zivilon/cinder_loe/mixins/MixinEntity.java create mode 100644 src/main/java/com/zivilon/cinder_loe/mixins/MixinEntityArrow.java create mode 100644 src/main/java/com/zivilon/cinder_loe/mixins/MixinEntityLivingBase.java delete mode 100644 src/main/java/com/zivilon/cinder_loe/mixins/MixinItemBlock.java create mode 100644 src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRBrewingRecipes.java create mode 100644 src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityAINearestAttackableTargetBasic.java create mode 100644 src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityProjectileBase.java create mode 100644 src/main/java/com/zivilon/cinder_loe/potion/LoEPotions.java create mode 100644 src/main/java/com/zivilon/cinder_loe/recipe/ForgingRecipe.java create mode 100644 src/main/java/com/zivilon/cinder_loe/recipe/ForgingRecipes.java create mode 100644 src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityForgingStation.java delete mode 100644 src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityNexIceCrystal.java create mode 100644 src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityShadowTile.java create mode 100644 src/main/java/com/zivilon/cinder_loe/util/VT_additions.java create mode 100644 src/main/resources/assets/cinder_loe/mob/green.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/forging_station.png create mode 100644 src/main/resources/assets/lotr/textures/items/blessed_hammer.png rename src/main/resources/assets/lotr/textures/items/{firstAgeGlaive.png => celeiniss.png} (100%) create mode 100644 src/main/resources/assets/lotr/textures/items/deceiver_blade.png create mode 100644 src/main/resources/assets/lotr/textures/items/deceiver_blade.png.mcmeta create mode 100644 src/main/resources/assets/lotr/textures/items/deceiver_blade_blade.png create mode 100644 src/main/resources/assets/lotr/textures/items/deceiver_blade_guard.png create mode 100644 src/main/resources/assets/lotr/textures/items/deceiver_blade_hilt.png create mode 100644 src/main/resources/assets/lotr/textures/items/demonblood_vial.png create mode 100644 src/main/resources/assets/lotr/textures/items/ice_thawer.png create mode 100644 src/main/resources/assets/lotr/textures/items/ice_thawer.png.mcmeta rename src/main/resources/assets/lotr/textures/items/large/{firstAgeGlaive.png => celeiniss.png} (100%) create mode 100644 src/main/resources/assets/lotr/textures/items/mugDemonicHealthPotion_liquid.png rename src/main/resources/assets/lotr/textures/items/{war_dart_heads_1_alt.png => nimveil_blade.png} (69%) create mode 100644 src/main/resources/assets/lotr/textures/items/nimveil_gem_ancient.png create mode 100644 src/main/resources/assets/lotr/textures/items/nimveil_gem_ancient.png.mcmeta create mode 100644 src/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png create mode 100644 src/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png.mcmeta create mode 100644 src/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png create mode 100644 src/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png.mcmeta create mode 100644 src/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png create mode 100644 src/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png.mcmeta create mode 100644 src/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png create mode 100644 src/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png.mcmeta create mode 100644 src/main/resources/assets/lotr/textures/items/war_dart_heads_0_morgul.png create mode 100644 src/main/resources/assets/lotr/textures/items/war_dart_heads_1_morgul.png create mode 100644 src/main/resources/assets/lotr/textures/items/war_dart_heads_2_morgul.png create mode 100644 src/main/resources/assets/lotr/textures/items/war_dart_heads_3_morgul.png create mode 100644 src/main/resources/assets/lotr/textures/items/war_dart_heads_4_morgul.png create mode 100644 src/main/resources/assets/lotr/textures/items/war_dart_heads_5_morgul.png create mode 100644 src/main/resources/assets/lotr/textures/items/war_dart_mithril.png.mcmeta create mode 100644 src/main/resources/assets/lotr/textures/items/war_dart_morgul.png diff --git a/dependencies.gradle b/dependencies.gradle index de4256b..5651b6f 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -37,4 +37,5 @@ dependencies { implementation files('libs/cindercore.jar') implementation files('libs/lotr.jar') implementation files('libs/optifine.jar') + implementation files('libs/variabletriggers.jar') } diff --git a/libs/variabletriggers.jar b/libs/variabletriggers.jar new file mode 100644 index 0000000000000000000000000000000000000000..61c16446ec506537188600daa796b84477f0e18c GIT binary patch literal 230527 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 DW@6Y- literal 0 HcmV?d00001 diff --git a/src/main/java/com/zivilon/cinder_loe/CinderLoE.java b/src/main/java/com/zivilon/cinder_loe/CinderLoE.java index 2bd23f8..c88e46b 100644 --- a/src/main/java/com/zivilon/cinder_loe/CinderLoE.java +++ b/src/main/java/com/zivilon/cinder_loe/CinderLoE.java @@ -5,18 +5,18 @@ import com.zivilon.cinder_loe.character.CharacterEventListener; import com.zivilon.cinder_loe.character.CharacterRoleAPI; import com.zivilon.cinder_loe.client.render.*; import com.zivilon.cinder_loe.client.render.block.*; -import com.zivilon.cinder_loe.client.render.projectile.*; import com.zivilon.cinder_loe.client.render.corrupt.*; +import com.zivilon.cinder_loe.client.render.projectile.*; +import com.zivilon.cinder_loe.client.render.tileentity.*; import com.zivilon.cinder_loe.command.CommandCinderCharacter; import com.zivilon.cinder_loe.entity.*; -import com.zivilon.cinder_loe.entity.projectile.*; import com.zivilon.cinder_loe.entity.corrupt.*; +import com.zivilon.cinder_loe.entity.effect.*; import com.zivilon.cinder_loe.entity.npc.*; -import com.zivilon.cinder_loe.entity.trader.BladorthinSmith; -import com.zivilon.cinder_loe.entity.trader.LimwaithFishmonger; -import com.zivilon.cinder_loe.entity.trader.LimwaithShaman; -import com.zivilon.cinder_loe.entity.trader.RedDwarfSmith; +import com.zivilon.cinder_loe.entity.projectile.*; +import com.zivilon.cinder_loe.entity.trader.*; import com.zivilon.cinder_loe.items.*; +import com.zivilon.cinder_loe.potion.LoEPotions; import com.zivilon.cinder_loe.tileentity.*; import com.zivilon.cinder_loe.util.Utilities; import com.zivilon.cindercore.CinderCore; @@ -40,6 +40,7 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.registry.EntityRegistry; +import cpw.mods.fml.common.registry.FMLControlledNamespacedRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -67,6 +68,7 @@ import lotr.common.world.spawning.LOTRSpawnList; import net.minecraft.block.Block; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.entity.RenderLightningBolt; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.passive.EntityWolf; import net.minecraft.init.Blocks; @@ -114,6 +116,8 @@ public class CinderLoE { public static LOTRMaterial MATERIAL_NEX_FIRE; public static LOTRMaterial MATERIAL_NEX_TOXIN; public static LOTRMaterial MATERIAL_NEX_SHADOW; + public static LOTRMaterial MATERIAL_NIMVEIL; + public static LOTRMaterial MATERIAL_FROZEN; // Blocks @@ -143,7 +147,7 @@ public class CinderLoE { public static Block entityBarrier; public static Block iceCage; public static Block enchantedIce; - public static Block nexIceCrystal; + public static Block forgingStation; //public static Block verticalWeaponRack; @@ -160,6 +164,7 @@ public class CinderLoE { public static Item spice; public static Item spicedHam; public static Item lightStew; + public static Item chocolatebar; public static Item fruitsalad; public static Item flour; @@ -206,10 +211,19 @@ public class CinderLoE { public static Item bodyNexShadow; public static Item legsNexShadow; public static Item bootsNexShadow; - public static Item firstAgeGlaive; + public static Item celeiniss; + public static Item nimveil; + public static Item nimveilPart; + public static Item blessedHammer; public static Item toxicCore; - - + public static Item iceThawer; + public static Item demonbloodVial; + public static Item mugDemonicHealthPotion; + public static Item deceiverBlade; + public static Item anaroreBow; + public static Item trollChieftainClub; + public static Item glaechirSpear; + public static Item weaponPart; // Misc @@ -308,16 +322,18 @@ public class CinderLoE { public static LOTRSpawnList LIMWAITH; public static LOTRSpawnList Rhudaur; - private static CinderEventHandler modEventHandler; + public static CinderEventHandler modEventHandler; + @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { CinderLoE_Config.init(event); Materials.registerMaterials(); + registerBlocks(); registerItems(); ItemRegistration.registerItems(); - registerBlocks(); registerEntities(); modEventHandler = new CinderEventHandler(); + LoEPotions.registerPotions(); } @Mod.EventHandler @@ -347,8 +363,8 @@ public class CinderLoE { recipes.registerRecipes(); // Register recipes at com.zivilon.cinder_loe.recipes.java setupTradeEntries(); LOTRWeaponStats.registerMeleeReach(Whip.class, 1.5F); - LOTRWeaponStats.registerMeleeReach(FirstAgeGlaive.class, 1.8F); - LOTRWeaponStats.registerMeleeSpeed(FirstAgeGlaive.class, 1.0F); + LOTRWeaponStats.registerMeleeReach(Celeiniss.class, 1.8F); + LOTRWeaponStats.registerMeleeSpeed(Celeiniss.class, 1.0F); LoECreativeTabs.setupIcons(); } @@ -359,8 +375,10 @@ public class CinderLoE { event.registerServerCommand(new CommandCinderCharacter()); } - public void registerEntities() { // Last ID added: 49 + public void registerEntities() { // Last ID added: 51 ///GameRegistry.registerTileEntity(TileEntityMistBlock.class, "TileEntityMistBlock"); + GameRegistry.registerTileEntity(TileEntityShadowTile.class, "TileEntityShadowTile"); + GameRegistry.registerTileEntity(TileEntityForgingStation.class, "TileEntityForgingStation"); ///.registerBlock(TileEntityRustedSword, "TileEntityRustedSword"); int entityID = 7320; // Always increment entityID by 1 over the last entity to ensure unique IDs @@ -433,6 +451,8 @@ public class CinderLoE { EntityRegistry.registerModEntity(NexIce.class, "NexIce", (entityID + 47), this, 64, 1, true); EntityRegistry.registerModEntity(NexFire.class, "NexFire", (entityID + 48), this, 64, 1, true); EntityRegistry.registerModEntity(NexToxin.class, "NexToxin", (entityID + 49), this, 64, 1, true); + EntityRegistry.registerModEntity(NexCloud.class, "NexCloud", (entityID + 50), this, 64, 1, true); + EntityRegistry.registerModEntity(NimveilLightningBolt.class, "NimveilLightningBolt", (entityID + 51), this, 64, 1, true); } public void registerBlocks() { @@ -510,9 +530,8 @@ public class CinderLoE { GameRegistry.registerBlock(iceCage, "ice_cage"); enchantedIce = (new EnchantedIce()); GameRegistry.registerBlock(enchantedIce, "enchanted_ice"); - nexIceCrystal = (new NexIceCrystal()); - GameRegistry.registerBlock(nexIceCrystal, "nex_ice_crystal"); - GameRegistry.registerTileEntity(TileEntityNexIceCrystal.class, "tileEntityNexIceCrystal"); + forgingStation = (new ForgingStation()); + GameRegistry.registerBlock(forgingStation, "forging_station"); // Building Blocks cutDrystone = (new cutDrystone()); @@ -579,7 +598,7 @@ public class CinderLoE { * Item Registation, add up the "last ID added" upon adding a new item * Weapons will need to be linked */ - // Last ID added: 117 + // Last ID added: 127 // ==Food Items== ItemRegistration.registerItem(onion, "onion", 58); @@ -622,6 +641,8 @@ public class CinderLoE { MATERIAL_NEX_FIRE = getLOTRMaterialByName("NEX_FIRE"); MATERIAL_NEX_TOXIN = getLOTRMaterialByName("NEX_TOXIN"); MATERIAL_NEX_SHADOW = getLOTRMaterialByName("NEX_SHADOW"); + MATERIAL_NIMVEIL = getLOTRMaterialByName("NIMVEIL"); + MATERIAL_FROZEN = getLOTRMaterialByName("FROZEN"); frostblade = (new LOTRItemSword(EVENT)).setUnlocalizedName("lotr:frostblade").setTextureName("lotr:frostblade"); daggervoid = (new VoidDagger(EVENT)).addWeaponDamage(5.0F).setUnlocalizedName("lotr:daggerVoid").setTextureName("lotr:daggerVoid").setCreativeTab(null); @@ -634,45 +655,69 @@ public class CinderLoE { legsJade = (new LOTRItemArmor(MATERIAL_JADE, 2,"leggings")).setUnlocalizedName("lotr:legsJade").setTextureName("lotr:legsJade").setCreativeTab(null); bootsJade = (new LOTRItemArmor(MATERIAL_JADE, 3)).setUnlocalizedName("lotr:bootsJade").setTextureName("lotr:bootsJade").setCreativeTab(null); - helmetNexIce = (new LOTRItemArmor(MATERIAL_NEX_ICE, 0)).setUnlocalizedName("lotr:helmetNexIce").setTextureName("lotr:helmetNexIce").setCreativeTab(LoECreativeTabs.tabCombatLoE); - bodyNexIce = (new LOTRItemArmor(MATERIAL_NEX_ICE, 1)).setUnlocalizedName("lotr:bodyNexIce").setTextureName("lotr:bodyNexIce").setCreativeTab(LoECreativeTabs.tabCombatLoE); - legsNexIce = (new LOTRItemArmor(MATERIAL_NEX_ICE, 2)).setUnlocalizedName("lotr:legsNexIce").setTextureName("lotr:legsNexIce").setCreativeTab(LoECreativeTabs.tabCombatLoE); - bootsNexIce = (new LOTRItemArmor(MATERIAL_NEX_ICE, 3)).setUnlocalizedName("lotr:bootsNexIce").setTextureName("lotr:bootsNexIce").setCreativeTab(LoECreativeTabs.tabCombatLoE); - helmetNexFire = (new LOTRItemArmor(MATERIAL_NEX_FIRE, 0)).setUnlocalizedName("lotr:helmetNexFire").setTextureName("lotr:helmetNexFire").setCreativeTab(LoECreativeTabs.tabCombatLoE); - bodyNexFire = (new LOTRItemArmor(MATERIAL_NEX_FIRE, 1)).setUnlocalizedName("lotr:bodyNexFire").setTextureName("lotr:bodyNexFire").setCreativeTab(LoECreativeTabs.tabCombatLoE); - legsNexFire = (new LOTRItemArmor(MATERIAL_NEX_FIRE, 2)).setUnlocalizedName("lotr:legsNexFire").setTextureName("lotr:legsNexFire").setCreativeTab(LoECreativeTabs.tabCombatLoE); - bootsNexFire = (new LOTRItemArmor(MATERIAL_NEX_FIRE, 3)).setUnlocalizedName("lotr:bootsNexFire").setTextureName("lotr:bootsNexFire").setCreativeTab(LoECreativeTabs.tabCombatLoE); - helmetNexToxin = (new LOTRItemArmor(MATERIAL_NEX_TOXIN, 0)).setUnlocalizedName("lotr:helmetNexToxin").setTextureName("lotr:helmetNexToxin").setCreativeTab(LoECreativeTabs.tabCombatLoE); - bodyNexToxin = (new LOTRItemArmor(MATERIAL_NEX_TOXIN, 1)).setUnlocalizedName("lotr:bodyNexToxin").setTextureName("lotr:bodyNexToxin").setCreativeTab(LoECreativeTabs.tabCombatLoE); - legsNexToxin = (new LOTRItemArmor(MATERIAL_NEX_TOXIN, 2)).setUnlocalizedName("lotr:legsNexToxin").setTextureName("lotr:legsNexToxin").setCreativeTab(LoECreativeTabs.tabCombatLoE); - bootsNexToxin = (new LOTRItemArmor(MATERIAL_NEX_TOXIN, 3)).setUnlocalizedName("lotr:bootsNexToxin").setTextureName("lotr:bootsNexToxin").setCreativeTab(LoECreativeTabs.tabCombatLoE); - helmetNexShadow = (new LOTRItemArmor(MATERIAL_NEX_SHADOW, 0)).setUnlocalizedName("lotr:helmetNexShadow").setTextureName("lotr:helmetNexShadow").setCreativeTab(LoECreativeTabs.tabCombatLoE); - bodyNexShadow = (new LOTRItemArmor(MATERIAL_NEX_SHADOW, 1)).setUnlocalizedName("lotr:bodyNexShadow").setTextureName("lotr:bodyNexShadow").setCreativeTab(LoECreativeTabs.tabCombatLoE); - legsNexShadow = (new LOTRItemArmor(MATERIAL_NEX_SHADOW, 2)).setUnlocalizedName("lotr:legsNexShadow").setTextureName("lotr:legsNexShadow").setCreativeTab(null); - bootsNexShadow = (new LOTRItemArmor(MATERIAL_NEX_SHADOW, 3)).setUnlocalizedName("lotr:bootsNexShadow").setTextureName("lotr:bootsNexShadow").setCreativeTab(LoECreativeTabs.tabCombatLoE); - firstAgeGlaive = (new FirstAgeGlaive()).setCreativeTab(LoECreativeTabs.tabCombatLoE); + helmetNexIce = (new LoEArmor(MATERIAL_NEX_ICE, 0, enchantedIce)).setUnlocalizedName("lotr:helmetNexIce").setTextureName("lotr:helmetNexIce"); + bodyNexIce = (new LoEArmor(MATERIAL_NEX_ICE, 1, enchantedIce)).setUnlocalizedName("lotr:bodyNexIce").setTextureName("lotr:bodyNexIce"); + legsNexIce = (new LoEArmor(MATERIAL_NEX_ICE, 2, enchantedIce)).setUnlocalizedName("lotr:legsNexIce").setTextureName("lotr:legsNexIce"); + bootsNexIce = (new LoEArmor(MATERIAL_NEX_ICE, 3, enchantedIce)).setUnlocalizedName("lotr:bootsNexIce").setTextureName("lotr:bootsNexIce"); + helmetNexFire = (new LoEArmor(MATERIAL_NEX_FIRE, 0, enchantedIce)).setUnlocalizedName("lotr:helmetNexFire").setTextureName("lotr:helmetNexFire"); + bodyNexFire = (new LoEArmor(MATERIAL_NEX_FIRE, 1, enchantedIce)).setUnlocalizedName("lotr:bodyNexFire").setTextureName("lotr:bodyNexFire"); + legsNexFire = (new LoEArmor(MATERIAL_NEX_FIRE, 2, enchantedIce)).setUnlocalizedName("lotr:legsNexFire").setTextureName("lotr:legsNexFire"); + bootsNexFire = (new LoEArmor(MATERIAL_NEX_FIRE, 3, enchantedIce)).setUnlocalizedName("lotr:bootsNexFire").setTextureName("lotr:bootsNexFire"); + helmetNexToxin = (new LoEArmor(MATERIAL_NEX_TOXIN, 0, enchantedIce)).setUnlocalizedName("lotr:helmetNexToxin").setTextureName("lotr:helmetNexToxin"); + bodyNexToxin = (new LoEArmor(MATERIAL_NEX_TOXIN, 1, enchantedIce)).setUnlocalizedName("lotr:bodyNexToxin").setTextureName("lotr:bodyNexToxin"); + legsNexToxin = (new LoEArmor(MATERIAL_NEX_TOXIN, 2, enchantedIce)).setUnlocalizedName("lotr:legsNexToxin").setTextureName("lotr:legsNexToxin"); + bootsNexToxin = (new LoEArmor(MATERIAL_NEX_TOXIN, 3, enchantedIce)).setUnlocalizedName("lotr:bootsNexToxin").setTextureName("lotr:bootsNexToxin"); + helmetNexShadow = (new LoEArmor(MATERIAL_NEX_SHADOW, 0, enchantedIce)).setUnlocalizedName("lotr:helmetNexShadow").setTextureName("lotr:helmetNexShadow"); + bodyNexShadow = (new LoEArmor(MATERIAL_NEX_SHADOW, 1, enchantedIce)).setUnlocalizedName("lotr:bodyNexShadow").setTextureName("lotr:bodyNexShadow"); + legsNexShadow = (new LoEArmor(MATERIAL_NEX_SHADOW, 2, enchantedIce)).setUnlocalizedName("lotr:legsNexShadow").setTextureName("lotr:legsNexShadow"); + bootsNexShadow = (new LoEArmor(MATERIAL_NEX_SHADOW, 3, enchantedIce)).setUnlocalizedName("lotr:bootsNexShadow").setTextureName("lotr:bootsNexShadow"); + celeiniss = (new Celeiniss()); + blessedHammer = (new BlessedHammer()); + nimveil = (new Nimveil()); + nimveilPart = (new NimveilPart()); toxicCore = (new ToxicCore()); - - linkLOTRWeapon(firstAgeGlaive, "firstAgeGlaive"); - - ItemRegistration.registerItem(helmetNexIce,"helmetNexIce",99); - ItemRegistration.registerItem(bodyNexIce,"bodyNexIce",100); - ItemRegistration.registerItem(legsNexIce,"legsNexIce",101); - ItemRegistration.registerItem(bootsNexIce,"bootsNexIce",102); - ItemRegistration.registerItem(helmetNexFire,"helmetNexFire",103); - ItemRegistration.registerItem(bodyNexFire,"bodyNexFire",104); - ItemRegistration.registerItem(legsNexFire,"legsNexFire",105); - ItemRegistration.registerItem(bootsNexFire,"bootsNexFire",106); - ItemRegistration.registerItem(helmetNexToxin,"helmetNexToxin",107); - ItemRegistration.registerItem(bodyNexToxin,"bodyNexToxin",108); - ItemRegistration.registerItem(legsNexToxin,"legsNexToxin",109); - ItemRegistration.registerItem(bootsNexToxin,"bootsNexToxin",110); - ItemRegistration.registerItem(helmetNexShadow,"helmetNexShadow",111); - ItemRegistration.registerItem(bodyNexShadow,"bodyNexShadow",112); - ItemRegistration.registerItem(legsNexShadow,"legsNexShadow",113); - ItemRegistration.registerItem(bootsNexShadow,"bootsNexShadow",114); - ItemRegistration.registerItem(firstAgeGlaive, "firstAgeGlaive",115); - ItemRegistration.registerItem(toxicCore,"toxicCore",116); + iceThawer = (new IceThawer()); + demonbloodVial = (new Item()).setUnlocalizedName("lotr:demonbloodVial").setCreativeTab(LoECreativeTabs.tabMiscLoE).setTextureName("lotr:demonbloodVial"); + mugDemonicHealthPotion = (new LoEItemMug(0.0F)).setDrinkStats(20, 1.0F).addPotionEffect(Potion.field_76434_w.id, 28800).setUnlocalizedName("lotr:mugDemonicHealthPotion"); + ((LoEItemMug)mugDemonicHealthPotion).setTextureNameFromUnlocalizedName(); + deceiverBlade = (new LoESword(LOTRMaterial.MORGUL, enchantedIce).setWeaponDamage(8.0F)).setUnlocalizedName("deceiver_blade").setTextureName("lotr:deceiver_blade").setMaxDamage(1000); + anaroreBow = (new LoEBow(MATERIAL_FROZEN, enchantedIce, 2.0D).setDrawTime(16)).setUnlocalizedName("anarore_bow").setTextureName("lotr:anarore_bow").setMaxDamage(1000); + trollChieftainClub = (new LoEHammer(MATERIAL_FROZEN, enchantedIce)).setUnlocalizedName("troll_chieftain_club").setTextureName("lotr:troll_chieftain_club").setMaxDamage(1000); + glaechirSpear = (new LoESpear(MATERIAL_FROZEN, enchantedIce)).setUnlocalizedName("glaechir_spear").setTextureName("lotr:glaechir_spear").setMaxDamage(1000); + weaponPart = (new WeaponPart()); + + linkLOTRWeapon(celeiniss, "celeiniss"); + linkLOTRWeapon(nimveil, "nimveil"); + + ItemRegistration.register(helmetNexIce,"helmetNexIce",7200); + ItemRegistration.register(bodyNexIce,"bodyNexIce",7201); + ItemRegistration.register(legsNexIce,"legsNexIce",7202); + ItemRegistration.register(bootsNexIce,"bootsNexIce",7203); + ItemRegistration.register(helmetNexFire,"helmetNexFire",7204); + ItemRegistration.register(bodyNexFire,"bodyNexFire",7205); + ItemRegistration.register(legsNexFire,"legsNexFire",7206); + ItemRegistration.register(bootsNexFire,"bootsNexFire",7207); + ItemRegistration.register(helmetNexToxin,"helmetNexToxin",7208); + ItemRegistration.register(bodyNexToxin,"bodyNexToxin",7209); + ItemRegistration.register(legsNexToxin,"legsNexToxin",7210); + ItemRegistration.register(bootsNexToxin,"bootsNexToxin",7211); + ItemRegistration.register(helmetNexShadow,"helmetNexShadow",7212); + ItemRegistration.register(bodyNexShadow,"bodyNexShadow",7213); + ItemRegistration.register(legsNexShadow,"legsNexShadow",7214); + ItemRegistration.register(bootsNexShadow,"bootsNexShadow",7215); + ItemRegistration.register(celeiniss, "celeiniss",7220); + ItemRegistration.register(nimveil, "nimveil",7221); + ItemRegistration.register(nimveilPart, "nimveilPart",7222); + ItemRegistration.register(blessedHammer, "blessedHammer",7223); + ItemRegistration.register(deceiverBlade, "deceiverBlade",7224); + ItemRegistration.register(anaroreBow, "anaroreBow",7225); + ItemRegistration.register(trollChieftainClub, "trollChieftainClub",7226); + ItemRegistration.register(glaechirSpear, "glaechirSpear",7227); + ItemRegistration.register(weaponPart, "weaponPart", 7228); + ItemRegistration.register(toxicCore,"toxicCore",7229); + ItemRegistration.register(iceThawer, "iceThawer",7230); + ItemRegistration.register(demonbloodVial, "demonbloodVial",7231); + ItemRegistration.register(mugDemonicHealthPotion, "mugDemonicHealthPotion",7232); ItemRegistration.registerItem(frostblade, "frostblade", 4); ItemRegistration.registerItem(daggervoid, "daggerVoid", 65); @@ -963,10 +1008,9 @@ public class CinderLoE { // RenderingRegistry.registerEntityRenderingHandler(HaradLevy.class, new LOTRRenderNearHaradrim()); // RenderingRegistry.registerEntityRenderingHandler(DwarfLevy.class, new LOTRRenderDwarf()); RenderingRegistry.registerBlockHandler(new RenderIceCage()); - RenderingRegistry.registerBlockHandler(new RenderNexIceCrystal()); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNexIceCrystal.class, new RenderNexIceCrystal()); RenderingRegistry.registerEntityRenderingHandler(EntityWarDart.class, new RenderWarDart()); + RenderingRegistry.registerEntityRenderingHandler(NimveilLightningBolt.class, new RenderNimveilBolt()); RenderingRegistry.registerEntityRenderingHandler(BladorthinSmith.class, new LOTRRenderDorwinionElfVintner()); RenderingRegistry.registerEntityRenderingHandler(DarkSpider.class, new RenderDarkSpider()); RenderingRegistry.registerEntityRenderingHandler(CorruptDwarf.class, new RenderCorruptDwarf()); @@ -1022,7 +1066,9 @@ public class CinderLoE { RenderingRegistry.registerEntityRenderingHandler(NexIce.class, new RenderNexMiniboss()); RenderingRegistry.registerEntityRenderingHandler(NexFire.class, new RenderNexMiniboss()); RenderingRegistry.registerEntityRenderingHandler(NexToxin.class, new RenderNexMiniboss()); + RenderingRegistry.registerEntityRenderingHandler(NexCloud.class, new RenderNexCloud()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMistBlock.class, (TileEntitySpecialRenderer)new LOTRRenderUtumnoPortal()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityForgingStation.class, (TileEntitySpecialRenderer)new TileEntityForgingStationRenderer()); } } diff --git a/src/main/java/com/zivilon/cinder_loe/ItemRegistration.java b/src/main/java/com/zivilon/cinder_loe/ItemRegistration.java index aade39f..8d75f32 100644 --- a/src/main/java/com/zivilon/cinder_loe/ItemRegistration.java +++ b/src/main/java/com/zivilon/cinder_loe/ItemRegistration.java @@ -3,12 +3,24 @@ package com.zivilon.cinder_loe; import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.List; +import net.minecraft.block.Block; import net.minecraft.item.Item; +import cpw.mods.fml.common.registry.GameData; import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.FMLControlledNamespacedRegistry; public class ItemRegistration { + public static FMLControlledNamespacedRegistry block_registry; + public static FMLControlledNamespacedRegistry item_registry; + + static { + block_registry = GameData.getBlockRegistry(); + item_registry = GameData.getItemRegistry(); + } + public static List> list = new ArrayList<>(); + @Deprecated public static void registerItem(Item item, String item_name, int ordinal) { while (list.size() <= ordinal) { list.add(new SimpleEntry<>(null, null)); @@ -29,4 +41,11 @@ public class ItemRegistration { GameRegistry.registerItem(entry.getKey(), entry.getValue()); } } + + public static void register(Item item, String item_name, int id) { + item_registry.addObject(id, item_name, item); + } + public static void register(Block block, String item_name, int id) { + block_registry.addObject(id, item_name, block); + } } diff --git a/src/main/java/com/zivilon/cinder_loe/LoEDamage.java b/src/main/java/com/zivilon/cinder_loe/LoEDamage.java new file mode 100644 index 0000000..d148063 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/LoEDamage.java @@ -0,0 +1,7 @@ +package com.zivilon.cinder_loe; + +import net.minecraft.util.DamageSource; + +public class LoEDamage { + public static DamageSource shadow = (new DamageSource("cinder_loe.shadow")).setDamageBypassesArmor().setMagicDamage(); +} diff --git a/src/main/java/com/zivilon/cinder_loe/Materials.java b/src/main/java/com/zivilon/cinder_loe/Materials.java index 4990c3a..8cc5e7a 100644 --- a/src/main/java/com/zivilon/cinder_loe/Materials.java +++ b/src/main/java/com/zivilon/cinder_loe/Materials.java @@ -21,14 +21,16 @@ public class Materials { modifyMaterial("RHUDAUR", 300, 2.5F, 0.6F, 2, 6.0F, 10, LOTRMod.fur); modifyMaterial("BATTLENUN", 300, 3F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); modifyMaterial("ASH", 2000, 0.0F, 0.6F, 2, 7.0F, 10, CinderLoE.ingotAsh); - modifyMaterial("SERPENT", 650,2.0F, 0.6F, 2, 6.0F, 10, LOTRMod.bronze); - modifyMaterial("USURPER",650,2.0F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); - modifyMaterial("WARLORD", 650,2.0F, 0.6F, 2, 6.0F, 10, LOTRMod.bronze); + modifyMaterial("SERPENT", 650, 2.0F, 0.6F, 2, 6.0F, 10, LOTRMod.bronze); + modifyMaterial("USURPER",650, 2.0F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); + modifyMaterial("WARLORD", 650, 2.0F, 0.6F, 2, 6.0F, 10, LOTRMod.bronze); modifyMaterial("JADE",2400, 5.0F, 0.8F, 0, 9.0F, 10, LOTRMod.emerald); - modifyMaterial("NEX_ICE",1500, 0.0F, 0.8F, 0, 9.0F, 10, null); - modifyMaterial("NEX_FIRE",1500, 0.0F, 0.8F, 0, 9.0F, 10, null); - modifyMaterial("NEX_TOXIN",1500, 0.0F, 0.8F, 0, 9.0F, 10, null); - modifyMaterial("NEX_SHADOW",1500, 0.0F, 0.8F, 0, 9.0F, 10, null); + modifyMaterial("NEX_ICE",1500, 0.0F, 0.8F, 0, 9.0F, 10, Item.getItemFromBlock(CinderLoE.enchantedIce)); + modifyMaterial("NEX_FIRE",1500, 0.0F, 0.8F, 0, 9.0F, 10, Item.getItemFromBlock(CinderLoE.enchantedIce)); + modifyMaterial("NEX_TOXIN",1500, 0.0F, 0.8F, 0, 9.0F, 10, Item.getItemFromBlock(CinderLoE.enchantedIce)); + modifyMaterial("NEX_SHADOW",1500, 0.0F, 0.8F, 0, 9.0F, 10, Item.getItemFromBlock(CinderLoE.enchantedIce)); + modifyMaterial("NIMVEIL",300, 6.0F, 0.0F, 0, 0.0F, 10, Item.getItemFromBlock(CinderLoE.enchantedIce)); + modifyMaterial("FROZEN",1000, 5.0F, 0.0F, 0, 0.0F, 10, Item.getItemFromBlock(CinderLoE.enchantedIce)); } public static void modifyMaterial(String fieldName, int uses, float weapon_damage, float protection, int harvest_level, float speed, int enchantability, Item crafting_item) { diff --git a/src/main/java/com/zivilon/cinder_loe/blocks/ForgingStation.java b/src/main/java/com/zivilon/cinder_loe/blocks/ForgingStation.java new file mode 100644 index 0000000..4fc74d6 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/blocks/ForgingStation.java @@ -0,0 +1,279 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.items.NimveilPart; +import com.zivilon.cinder_loe.items.Nimveil; +import com.zivilon.cinder_loe.recipe.ForgingRecipe; +import com.zivilon.cinder_loe.recipe.ForgingRecipes; +import com.zivilon.cinder_loe.tileentity.TileEntityForgingStation; + +import lotr.common.item.LOTRItemHammer; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class ForgingStation extends BlockContainer { + + public ForgingStation() { + super(Material.anvil); + setHardness(10.0F); + setResistance(10.0F); + setBlockName("forging_station"); + setCreativeTab(LoECreativeTabs.tabDecoLoE); + setBlockBounds(0, 0, 0, 1, 1, 1); // Set the block bounds to cover 1x1x1 for each individual part + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public int getRenderType() { + return -1; // Use custom renderer + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityForgingStation(); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase placer, ItemStack itemStack) { + int direction = MathHelper.floor_double((double)(placer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + + // Middle part (placed block) + world.setBlockMetadataWithNotify(x, y, z, (direction << 2) | 1, 2); + + // Right and right parts based on orientation + if (direction == 0) { // South + world.setBlock(x - 1, y, z, this, (direction << 2) | 0, 2); // Right part + world.setBlock(x + 1, y, z, this, (direction << 2) | 2, 2); // Left part + } else if (direction == 1) { // West + world.setBlock(x, y, z - 1, this, (direction << 2) | 0, 2); // Right part + world.setBlock(x, y, z + 1, this, (direction << 2) | 2, 2); // Left part + } else if (direction == 2) { // North + world.setBlock(x + 1, y, z, this, (direction << 2) | 0, 2); // Right part + world.setBlock(x - 1, y, z, this, (direction << 2) | 2, 2); // Left part + } else if (direction == 3) { // East + world.setBlock(x, y, z + 1, this, (direction << 2) | 0, 2); // Right part + world.setBlock(x, y, z - 1, this, (direction << 2) | 2, 2); // Left part + } + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + int direction = meta >> 2; + int part = meta & 3; + + if (direction == 0) { // South + if (part == 1) { // Middle + world.setBlockToAir(x - 1, y, z); // Right part + world.setBlockToAir(x + 1, y, z); // Left part + } else if (part == 0) { // Right + world.setBlockToAir(x + 1, y, z); // Middle part + world.setBlockToAir(x + 2, y, z); // Left part + } else if (part == 2) { // Left + world.setBlockToAir(x - 1, y, z); // Middle part + world.setBlockToAir(x - 2, y, z); // Right part + } + } else if (direction == 1) { // West + if (part == 1) { // Middle + world.setBlockToAir(x, y, z - 1); // Right part + world.setBlockToAir(x, y, z + 1); // Left part + } else if (part == 0) { // Right + world.setBlockToAir(x, y, z + 1); // Middle part + world.setBlockToAir(x, y, z + 2); // Left part + } else if (part == 2) { // Left + world.setBlockToAir(x, y, z - 1); // Middle part + world.setBlockToAir(x, y, z - 2); // Right part + } + } else if (direction == 2) { // North + if (part == 1) { // Middle + world.setBlockToAir(x + 1, y, z); // Right part + world.setBlockToAir(x - 1, y, z); // Left part + } else if (part == 0) { // Right + world.setBlockToAir(x - 1, y, z); // Middle part + world.setBlockToAir(x - 2, y, z); // Left part + } else if (part == 2) { // Left + world.setBlockToAir(x + 1, y, z); // Middle part + world.setBlockToAir(x + 2, y, z); // Right part + } + } else if (direction == 3) { // East + if (part == 1) { // Middle + world.setBlockToAir(x, y, z + 1); // Right part + world.setBlockToAir(x, y, z - 1); // Left part + } else if (part == 0) { // Right + world.setBlockToAir(x, y, z - 1); // Middle part + world.setBlockToAir(x, y, z - 2); // Left part + } else if (part == 2) { // Left + world.setBlockToAir(x, y, z + 1); // Middle part + world.setBlockToAir(x, y, z + 2); // Right part + } + } + + super.breakBlock(world, x, y, z, block, meta); + } + + public TileEntityForgingStation getCentralTileEntity(World world, int x, int y, int z) { + int meta = world.getBlockMetadata(x, y, z); + int direction = meta >> 2; // Extract the direction + int part = meta & 3; // Extract the part (0, 1, 2) + + int centralX = x, centralZ = z; + + switch (direction) { + case 0: // South + if (part == 0) { + centralX = x + 1; // Right part, middle is to the left + } else if (part == 2) { + centralX = x - 1; // Left part, middle is to the right + } + break; + case 1: // West + if (part == 0) { + centralZ = z + 1; // Right part, middle is to the front + } else if (part == 2) { + centralZ = z - 1; // Left part, middle is to the back + } + break; + case 2: // North + if (part == 0) { + centralX = x - 1; // Right part, middle is to the right + } else if (part == 2) { + centralX = x + 1; // Left part, middle is to the left + } + break; + case 3: // East + if (part == 0) { + centralZ = z - 1; // Right part, middle is to the back + } else if (part == 2) { + centralZ = z + 1; // Left part, middle is to the front + } + break; + } + + TileEntity tileEntity = world.getTileEntity(centralX, y, centralZ); + return (tileEntity instanceof TileEntityForgingStation) ? (TileEntityForgingStation) tileEntity : null; + } + + @Override + public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player) { + ItemStack heldStack = player.getHeldItem(); + if (heldStack == null) return; + + boolean isBlessedHammer = heldStack.getItem() == CinderLoE.blessedHammer; + boolean isRegularHammer = heldStack.getItem() instanceof LOTRItemHammer; + + if (!isBlessedHammer && !isRegularHammer) return; + + TileEntityForgingStation tileentity = getCentralTileEntity(world, x, y, z); + if (tileentity == null) return; + + ItemStack left = tileentity.getLeftItem(); + ItemStack middle = tileentity.getMiddleItem(); + ItemStack right = tileentity.getRightItem(); + + // Iterate through available recipes and find a match + for (ForgingRecipe recipe : ForgingRecipes.getAllRecipes()) { + + if (recipe.matches(left, middle, right, isBlessedHammer)) { + // Clear the inputs if the recipe matches + tileentity.setLeftItem(null); + tileentity.setRightItem(null); + tileentity.setMiddleItem(recipe.getOutput()); + + // Damage the hammer by 1 + if (heldStack.attemptDamageItem(1, player.getRNG())) { + player.inventory.setInventorySlotContents(player.inventory.currentItem, null); + } else { + player.inventory.markDirty(); + } + return; + } + } + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + if (!world.isRemote) { + TileEntityForgingStation tileentity = getCentralTileEntity(world, x, y, z); + if (tileentity == null) return true; + + int meta = world.getBlockMetadata(x, y, z); + int part = meta & 3; + + ItemStack stack = null; + if (part == 0) stack = tileentity.getRightItem(); + else if (part == 1) stack = tileentity.getMiddleItem(); + else if (part == 2) stack = tileentity.getLeftItem(); + + if (stack != null) { + // Try to pick up the item + boolean hasSpace = player.inventory.addItemStackToInventory(stack); + if (hasSpace) { + if (part == 0) tileentity.setRightItem(null); + else if (part == 1) tileentity.setMiddleItem(null); + else if (part == 2) tileentity.setLeftItem(null); + + if (player instanceof EntityPlayerMP) { + ((EntityPlayerMP) player).sendContainerToPlayer(player.inventoryContainer); + } + } else { + player.addChatMessage(new ChatComponentText("You need more inventory space")); + } + } else { + // Try to place an item + ItemStack heldStack = player.getHeldItem(); + if (heldStack == null) return true; + + boolean itemPlaced = false; + + // Check all recipes to see if the held item matches any input slot + for (ForgingRecipe recipe : ForgingRecipes.getAllRecipes()) { + if (part == 0 && recipe.matchesItem(recipe.rightInput, heldStack)) { + tileentity.setRightItem(heldStack.splitStack(1)); + itemPlaced = true; + } else if (part == 1 && recipe.matchesItem(recipe.middleInput, heldStack)) { + tileentity.setMiddleItem(heldStack.splitStack(1)); + itemPlaced = true; + } else if (part == 2 && recipe.matchesItem(recipe.leftInput, heldStack)) { + tileentity.setLeftItem(heldStack.splitStack(1)); + itemPlaced = true; + } + + if (itemPlaced) { + tileentity.markDirty(); + if (heldStack.stackSize <= 0) { + player.inventory.setInventorySlotContents(player.inventory.currentItem, null); + } + player.inventory.markDirty(); + break; + } + } + + if (!itemPlaced) { + player.addChatMessage(new ChatComponentText("This item does not fit here.")); + } + } + } + return true; + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/blocks/IceCage.java b/src/main/java/com/zivilon/cinder_loe/blocks/IceCage.java index a5cc3d5..75a2bf5 100644 --- a/src/main/java/com/zivilon/cinder_loe/blocks/IceCage.java +++ b/src/main/java/com/zivilon/cinder_loe/blocks/IceCage.java @@ -1,5 +1,7 @@ package com.zivilon.cinder_loe.blocks; +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.LoECreativeTabs; import com.zivilon.cinder_loe.util.Utilities; import com.zivilon.cinder_loe.client.render.block.RenderIceCage; @@ -38,6 +40,7 @@ public class IceCage extends Block { setBlockName(Utilities.toSnakeCase("lotr:iceCage")); setLightOpacity(5); // Semi-transparent setCreativeTab(CreativeTabs.tabBlock); + setCreativeTab(LoECreativeTabs.tabDecoLoE); } @Override @@ -71,9 +74,9 @@ public class IceCage extends Block { @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { - if ((meta == 0 && side == 1) || (meta == 1 && side == 0)) { - return this.emptyIcon; - } +/* if ((meta == 0 && side == 1) || (meta == 1 && side == 0)) { + return this.blockIcon; + }*/ return this.blockIcon; } @@ -170,6 +173,24 @@ public class IceCage extends Block { world.setBlock(x, y + 1, z, this, 1, 2); // Upper part } + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_) { + if (player.getHeldItem() != null && player.getHeldItem().getItem() == CinderLoE.iceThawer) { + if (!player.capabilities.isCreativeMode) { + player.getHeldItem().stackSize--; + if (player.getHeldItem().stackSize <= 0) { + player.inventory.setInventorySlotContents(player.inventory.currentItem, null); + } + } + + world.func_147480_a(x, y, z, false); + + return true; + } + return false; + } + + @Override public void onNeighborBlockChange(World world, int x, int y, int z, Block neighbor) { int meta = world.getBlockMetadata(x, y, z); diff --git a/src/main/java/com/zivilon/cinder_loe/blocks/NexIceCrystal.java b/src/main/java/com/zivilon/cinder_loe/blocks/NexIceCrystal.java deleted file mode 100644 index 55662fc..0000000 --- a/src/main/java/com/zivilon/cinder_loe/blocks/NexIceCrystal.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.zivilon.cinder_loe.blocks; - -import com.zivilon.cinder_loe.LoECreativeTabs; -import com.zivilon.cinder_loe.tileentity.TileEntityNexIceCrystal; -import com.zivilon.cinder_loe.util.Utilities; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -public class NexIceCrystal extends Block { - - public NexIceCrystal() { - super(Material.ice); // Choose the appropriate material - // Set other properties like hardness, resistance, name, etc. - setCreativeTab(LoECreativeTabs.tabDecoLoE); - setHardness(100.0F); - setResistance(100.0F); - setBlockTextureName(Utilities.toSnakeCase("lotr:nexIceCrystal")); - setBlockName("lotr:NexIceCrystal"); - } - - @Override - public boolean hasTileEntity(int metadata) { - return true; - } - - @Override - public TileEntity createTileEntity(World world, int metadata) { - return new TileEntityNexIceCrystal(); - } - - @Override - public int getRenderType() { - return -1; // Custom render ID - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } -} diff --git a/src/main/java/com/zivilon/cinder_loe/blocks/ShadowTile.java b/src/main/java/com/zivilon/cinder_loe/blocks/ShadowTile.java index 7ad60e4..9ada9e9 100644 --- a/src/main/java/com/zivilon/cinder_loe/blocks/ShadowTile.java +++ b/src/main/java/com/zivilon/cinder_loe/blocks/ShadowTile.java @@ -11,32 +11,59 @@ import net.minecraft.block.BlockPressurePlate; import net.minecraft.potion.PotionEffect; import net.minecraft.util.DamageSource; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.LoEDamage; +import com.zivilon.cinder_loe.tileentity.TileEntityShadowTile; import java.lang.reflect.Field; +import java.util.Random; public class ShadowTile extends BlockPressurePlate { + public int ticksLived = 0; public ShadowTile() { super("lotr:shadow_tile", Material.rock, BlockPressurePlate.Sensitivity.players); - try { - Field tabField = LOTRCreativeTabs.class.getDeclaredField("tabMisc"); // Stupid workaround because ForgeGradle tries to obfuscate field LOTRCreativeTabs.tabBlock when it's not supposed to - LOTRCreativeTabs tab = (LOTRCreativeTabs)tabField.get(null); - setCreativeTab((CreativeTabs)tab); - } catch (NoSuchFieldException | IllegalAccessException e) { - e.printStackTrace(); - } + this.setCreativeTab(LoECreativeTabs.tabMiscLoE); setBlockTextureName("lotr:shadow_tile"); setBlockName("lotr:shadowTile"); + this.isBlockContainer = true; + } + + @Override + public boolean hasTileEntity(int metadata) { + return true; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) { + return new TileEntityShadowTile(); + } + + @Override + public void onBlockAdded(World world, int x, int y, int z) { + super.onBlockAdded(world, x, y, z); + + // Manually create and initialize the tile entity + if (!world.isRemote) { + world.setTileEntity(x, y, z, createTileEntity(world, world.getBlockMetadata(x, y, z))); + } + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + super.breakBlock(world, x, y, z, block, meta); + world.removeTileEntity(x, y, z); // Clean up the tile entity } @Override public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { - if (entity instanceof EntityPlayer) { + if (entity instanceof EntityPlayer && !world.isRemote) { EntityPlayer player = (EntityPlayer)entity; - player.attackEntityFrom(new DamageSource("shadow"), 10.0F); + player.attackEntityFrom(LoEDamage.shadow, 10.0F); player.addPotionEffect(new PotionEffect(15, 6*20, 0, false)); world.setBlockToAir(x, y, z); } diff --git a/src/main/java/com/zivilon/cinder_loe/client/model/blocks/ModelForgingStation.java b/src/main/java/com/zivilon/cinder_loe/client/model/blocks/ModelForgingStation.java new file mode 100644 index 0000000..98afa2d --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/model/blocks/ModelForgingStation.java @@ -0,0 +1,72 @@ +package com.zivilon.cinder_loe.client.model.blocks; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * forging_station - Shinare + * Created using Tabula 4.1.1 + */ +public class ModelForgingStation extends ModelBase { + public ModelRenderer middle_block; + public ModelRenderer left_block; + public ModelRenderer right_block; + public ModelRenderer left_leg; + public ModelRenderer left_leg_top; + public ModelRenderer left_leg_base; + public ModelRenderer right_leg_front; + public ModelRenderer right_leg_back; + + public ModelForgingStation() { + this.textureWidth = 128; + this.textureHeight = 64; + this.right_leg_back = new ModelRenderer(this, 0, 0); + this.right_leg_back.setRotationPoint(4.0F, 10.0F, 0.0F); + this.right_leg_back.addBox(0.0F, 0.0F, -2.0F, 2, 2, 16, 0.0F); + this.setRotateAngle(right_leg_back, 0.7853981633974483F, 0.0F, 0.0F); + this.left_leg = new ModelRenderer(this, 0, 32); + this.left_leg.setRotationPoint(6.0F, 2.0F, 6.0F); + this.left_leg.addBox(0.0F, 0.0F, 0.0F, 4, 14, 4, 0.0F); + this.left_leg_top = new ModelRenderer(this, 0, 32); + this.left_leg_top.setRotationPoint(-1.0F, 0.0F, -1.0F); + this.left_leg_top.addBox(0.0F, 0.0F, 0.0F, 6, 2, 6, 0.0F); + this.left_block = new ModelRenderer(this, 64, 32); + this.left_block.setRotationPoint(16.0F, 0.0F, 0.0F); + this.left_block.addBox(0.0F, 0.0F, 0.0F, 16, 2, 16, 0.0F); + this.setRotateAngle(left_block, 0.0F, 3.141592653589793F, 0.0F); + this.right_leg_front = new ModelRenderer(this, 0, 0); + this.right_leg_front.setRotationPoint(11.0F, 10.0F, 0.0F); + this.right_leg_front.addBox(0.0F, 0.0F, -2.0F, 2, 2, 16, 0.0F); + this.setRotateAngle(right_leg_front, 0.7853981633974483F, 0.0F, 0.0F); + this.left_leg_base = new ModelRenderer(this, 0, 32); + this.left_leg_base.setRotationPoint(-1.0F, 12.0F, -1.0F); + this.left_leg_base.addBox(0.0F, 0.0F, 0.0F, 6, 2, 6, 0.0F); + this.right_block = new ModelRenderer(this, 64, 0); + this.right_block.setRotationPoint(0.0F, 0.0F, 16.0F); + this.right_block.addBox(0.0F, 0.0F, 0.0F, 16, 2, 16, 0.0F); + this.middle_block = new ModelRenderer(this, 0, 0); + this.middle_block.setRotationPoint(-8.0F, 8.0F, -8.0F); + this.middle_block.addBox(0.0F, 0.0F, 0.0F, 16, 16, 16, 0.0F); + this.right_block.addChild(this.right_leg_back); + this.left_block.addChild(this.left_leg); + this.left_leg.addChild(this.left_leg_top); + this.middle_block.addChild(this.left_block); + this.right_block.addChild(this.right_leg_front); + this.left_leg.addChild(this.left_leg_base); + this.middle_block.addChild(this.right_block); + } + + public void render(float f5) { + this.middle_block.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/RenderNex.java b/src/main/java/com/zivilon/cinder_loe/client/render/RenderNex.java index 286829b..ce0eeb8 100644 --- a/src/main/java/com/zivilon/cinder_loe/client/render/RenderNex.java +++ b/src/main/java/com/zivilon/cinder_loe/client/render/RenderNex.java @@ -1,9 +1,10 @@ -package lotr.client.render.entity; +package com.zivilon.cinder_loe.client.render; import com.zivilon.cinder_loe.client.model.ModelNex; import com.zivilon.cinder_loe.entity.Nex; import lotr.common.entity.LOTRRandomSkinEntity; import lotr.common.entity.npc.LOTREntityBalrog; +import lotr.client.render.entity.LOTRRandomSkins; import net.minecraft.client.model.ModelBase; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.entity.RenderLiving; diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/RenderNexCloud.java b/src/main/java/com/zivilon/cinder_loe/client/render/RenderNexCloud.java new file mode 100644 index 0000000..e6644ae --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/render/RenderNexCloud.java @@ -0,0 +1,50 @@ +package com.zivilon.cinder_loe.client.render; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +import com.zivilon.cinder_loe.entity.NexCloud; + +public class RenderNexCloud extends Render { + + public static ResourceLocation GREEN_PIXEL_TEXTURE = new ResourceLocation("cinder_loe:mob/green.png"); + public ModelBase model = new ModelBase() {}; // Create an empty ModelBase instance + public ModelRenderer cube; + + public RenderNexCloud() { + this.cube = new ModelRenderer(this.model, 0, 0); + this.cube.addBox(-8F, -8F, -8F, 16, 16, 16); // Define a cube of 16x16x16 pixels + } + + @Override + protected ResourceLocation getEntityTexture(Entity entity) { + return GREEN_PIXEL_TEXTURE; + } + + @Override + public void doRender(Entity entity, double x, double y, double z, float entityYaw, float partialTicks) { + GL11.glPushMatrix(); + GL11.glTranslatef((float) x, (float) y + entity.height / 2, (float) z); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_CULL_FACE); // Disable face culling + + this.bindEntityTexture(entity); // Bind the single-pixel texture + + NexCloud nexCloud = (NexCloud) entity; + GL11.glColor4f(1.0F, 1.0F, 1.0F, nexCloud.opacity); // Use the opacity from the entity + + // Render the cube model + GL11.glScalef(entity.width, entity.height, entity.width); + this.cube.render(0.0625F); // Render the cube with a scaling factor + + GL11.glEnable(GL11.GL_CULL_FACE); // Re-enable face culling + GL11.glDisable(GL11.GL_BLEND); + GL11.glPopMatrix(); + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/RenderNimveilBolt.java b/src/main/java/com/zivilon/cinder_loe/client/render/RenderNimveilBolt.java new file mode 100644 index 0000000..5ab2cec --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/render/RenderNimveilBolt.java @@ -0,0 +1,136 @@ +package com.zivilon.cinder_loe.client.render; + +import com.zivilon.cinder_loe.entity.effect.NimveilLightningBolt; + +import net.minecraft.client.renderer.entity.RenderLightningBolt; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.Random; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderNimveilBolt extends RenderLightningBolt { + + public void doRender(NimveilLightningBolt p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_) { + Tessellator tessellator = Tessellator.instance; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + double[] adouble = new double[8]; + double[] adouble1 = new double[8]; + double d3 = 0.0D; + double d4 = 0.0D; + Random random = new Random(p_76986_1_.boltVertex); + + for (int i = 7; i >= 0; --i) { + adouble[i] = d3; + adouble1[i] = d4; + d3 += (double)(random.nextInt(11) - 5); + d4 += (double)(random.nextInt(11) - 5); + } + + for (int k1 = 0; k1 < 4; ++k1) { + Random random1 = new Random(p_76986_1_.boltVertex); + + for (int j = 0; j < 3; ++j) { + int k = 7; + int l = 0; + + if (j > 0) { + k = 7 - j; + } + + if (j > 0) { + l = k - 2; + } + + double d5 = adouble[k] - d3; + double d6 = adouble1[k] - d4; + + for (int i1 = k; i1 >= l; --i1) { + double d7 = d5; + double d8 = d6; + + if (j == 0) { + d5 += (double)(random1.nextInt(11) - 5); + d6 += (double)(random1.nextInt(11) - 5); + } else { + d5 += (double)(random1.nextInt(31) - 15); + d6 += (double)(random1.nextInt(31) - 15); + } + + tessellator.startDrawing(5); + float f2 = 0.5F; + tessellator.setColorRGBA_F(0.9F * f2, 0.9F * f2, 1.0F * f2, 0.3F); + double d9 = 0.1D + (double)k1 * 0.2D; + + if (j == 0) { + d9 *= (double)i1 * 0.1D + 1.0D; + } + + double d10 = 0.1D + (double)k1 * 0.2D; + + if (j == 0) { + d10 *= (double)(i1 - 1) * 0.1D + 1.0D; + } + + for (int j1 = 0; j1 < 5; ++j1) { + double d11 = p_76986_2_ + 0.5D - d9; + double d12 = p_76986_6_ + 0.5D - d9; + + if (j1 == 1 || j1 == 2) { + d11 += d9 * 2.0D; + } + + if (j1 == 2 || j1 == 3) { + d12 += d9 * 2.0D; + } + + double d13 = p_76986_2_ + 0.5D - d10; + double d14 = p_76986_6_ + 0.5D - d10; + + if (j1 == 1 || j1 == 2) { + d13 += d10 * 2.0D; + } + + if (j1 == 2 || j1 == 3) { + d14 += d10 * 2.0D; + } + + tessellator.addVertex(d13 + d5, p_76986_4_ + (double)(i1 * 16), d14 + d6); + tessellator.addVertex(d11 + d7, p_76986_4_ + (double)((i1 + 1) * 16), d12 + d8); + } + + tessellator.draw(); + } + } + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + public ResourceLocation getEntityTexture(NimveilLightningBolt p_110775_1_) { + return null; + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + public ResourceLocation getEntityTexture(Entity p_110775_1_) { + return this.getEntityTexture((NimveilLightningBolt)p_110775_1_); + } + + public void doRender(Entity p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_) + { + this.doRender((NimveilLightningBolt)p_76986_1_, p_76986_2_, p_76986_4_, p_76986_6_, p_76986_8_, p_76986_9_); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/block/RenderIceCage.java b/src/main/java/com/zivilon/cinder_loe/client/render/block/RenderIceCage.java index a52b040..bfb8b72 100644 --- a/src/main/java/com/zivilon/cinder_loe/client/render/block/RenderIceCage.java +++ b/src/main/java/com/zivilon/cinder_loe/client/render/block/RenderIceCage.java @@ -29,10 +29,6 @@ public class RenderIceCage implements ISimpleBlockRenderingHandler { int meta = world.getBlockMetadata(x, y, z); float thickness = 0.0625F; // 1/16th of a block thickness - GL11.glPushMatrix(); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - // Render the bounding boxes as defined in the block class if (meta == 0) { // Lower part renderer.setRenderBounds(0, 0, 0, thickness, 1, 1); // Left wall @@ -58,9 +54,6 @@ public class RenderIceCage implements ISimpleBlockRenderingHandler { renderer.renderStandardBlock(block, x, y, z); } - GL11.glDisable(GL11.GL_BLEND); - GL11.glPopMatrix(); - return true; } diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/block/RenderNexIceCrystal.java b/src/main/java/com/zivilon/cinder_loe/client/render/block/RenderNexIceCrystal.java deleted file mode 100644 index 1e66de9..0000000 --- a/src/main/java/com/zivilon/cinder_loe/client/render/block/RenderNexIceCrystal.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.zivilon.cinder_loe.client.render.block; - -import com.zivilon.cinder_loe.client.model.ModelNexIceCrystal; -import com.zivilon.cinder_loe.tileentity.TileEntityNexIceCrystal; -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.IBlockAccess; -import org.lwjgl.opengl.GL11; - -public class RenderNexIceCrystal extends TileEntitySpecialRenderer implements ISimpleBlockRenderingHandler { - public static final int renderID = RenderingRegistry.getNextAvailableRenderId(); - private static final ResourceLocation texture = new ResourceLocation("lotr:textures/blocks/nex_ice_crystal.png"); - private final ModelNexIceCrystal model = new ModelNexIceCrystal(); - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTicks) { - if (tileEntity instanceof TileEntityNexIceCrystal) { - GL11.glPushMatrix(); - GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F); // Center the model - GL11.glScalef(0.5F, 0.5F, 0.5F); // Scale down the model - this.bindTexture(texture); - this.model.render(null, 0, 0, 0, 0, 0, 0.0625F); - GL11.glPopMatrix(); - } - } - - @Override - public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { - if (modelId == renderID) { - GL11.glPushMatrix(); - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); // Center the model in inventory - GL11.glScalef(0.5F, 0.5F, 0.5F); // Scale down the model - this.bindTexture(texture); - this.model.render(null, 0, 0, 0, 0, 0, 0.0625F); - GL11.glPopMatrix(); - } - } - - @Override - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - if (modelId == renderID) { - GL11.glPushMatrix(); - GL11.glTranslatef(x + 0.5F, y + 0.5F, z + 0.5F); // Center the model in the world - GL11.glScalef(0.5F, 0.5F, 0.5F); // Scale down the model - this.bindTexture(texture); - this.model.render(null, 0, 0, 0, 0, 0, 0.0625F); - GL11.glPopMatrix(); - return true; - } - return false; - } - - @Override - public boolean shouldRender3DInInventory(int modelId) { - return true; - } - - @Override - public int getRenderId() { - return renderID; - } -} diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/item/TrollClubRenderer.java b/src/main/java/com/zivilon/cinder_loe/client/render/item/TrollClubRenderer.java new file mode 100644 index 0000000..6067895 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/render/item/TrollClubRenderer.java @@ -0,0 +1,59 @@ +package com.zivilon.cinder_loe.client.render.item; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer; +import org.lwjgl.opengl.GL11; +import net.minecraft.client.model.ModelBase; + +public class TrollClubRenderer implements IItemRenderer { + + public static ResourceLocation texture = new ResourceLocation("lotr", "textures/items/troll_chieftain_club.png"); + + public ModelBase model; +/* public ModelTrollChieftainClub model; + + public TrollClubRenderer(ModelTrollChieftainClub model) { + this.model = model; + }*/ + public TrollClubRenderer() { + this.model = null; + } + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return false; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + GL11.glPushMatrix(); + + // Position the model correctly + if (type == ItemRenderType.EQUIPPED_FIRST_PERSON) { + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } else { + GL11.glTranslatef(0.7F, 0.4F, 0.5F); + } + + // Rotate and scale the model as needed + GL11.glScalef(1.0F, 1.0F, 1.0F); + + // Bind the texture + RenderManager.instance.renderEngine.bindTexture(texture); + + // Render the model + model.render(null, 0, 0, 0, 0, 0, 0.0625F); + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/tileentity/TileEntityForgingStationRenderer.java b/src/main/java/com/zivilon/cinder_loe/client/render/tileentity/TileEntityForgingStationRenderer.java new file mode 100644 index 0000000..38d2291 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/render/tileentity/TileEntityForgingStationRenderer.java @@ -0,0 +1,113 @@ +package com.zivilon.cinder_loe.client.render.tileentity; + +import com.zivilon.cinder_loe.client.model.blocks.ModelForgingStation; +import com.zivilon.cinder_loe.tileentity.TileEntityForgingStation; +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import net.minecraft.util.ChatComponentText; + +public class TileEntityForgingStationRenderer extends TileEntitySpecialRenderer { + public ModelForgingStation model = new ModelForgingStation(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) { + + if (tileEntity instanceof TileEntityForgingStation) { + TileEntityForgingStation tile = (TileEntityForgingStation) tileEntity; + + // Get the metadata to determine if this is the middle part + int meta = tile.getBlockMetadata(); + int direction = meta >> 2; + int part = meta & 3; + float rotation = 270F; + if (part != 1) return; + + rotation = direction * 90F - 90F; + + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + GL11.glRotatef(rotation, 0F, 1F, 0F); // Adjust rotation as needed + bindTexture(new ResourceLocation("lotr:textures/blocks/forging_station.png")); + this.model.render(0.0625F); // Render the model + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPopMatrix(); + + + // Render the items above each part of the Forging Station + float offset = 0F; + switch (direction) { + case 1: + case 3: + offset -= 180F; + break; + } + renderStoredItems(tile, x, y, z, direction * 90F + offset); + } + } + + public void renderStoredItems(TileEntityForgingStation tile, double x, double y, double z, float rotation) { + GL11.glPushMatrix(); + GL11.glTranslatef((float) x + 0.5F, (float) y + 1.0F, (float) z + 0.5F); // Adjust the position + GL11.glRotatef(rotation, 0F, 1F, 0F); // Rotate to match the block's orientation + + ItemStack left = tile.getLeftItem(); + ItemStack middle = tile.getMiddleItem(); + ItemStack right = tile.getRightItem(); + + // Render left item + if (left != null) { + renderItemInWorld(left, 1.0, 0.0, 0.0); + } + + // Render middle item + if (middle != null) { + renderItemInWorld(middle, 0.0, 0.0, 0.0); + } + + // Render right item + if (right != null) { + renderItemInWorld(right, -1.0, 0.0, 0.0); + } + + GL11.glPopMatrix(); + } + + public void renderItemInWorld(ItemStack stack, double x, double y, double z) { + if (stack != null) { + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + GL11.glScalef(1.0F, 1.0F, 1.0F); // Adjust the item size + + // Bind the item texture + Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationItemsTexture); + IIcon icon = stack.getIconIndex(); + Tessellator tessellator = Tessellator.instance; + + // Set up the item rendering parameters + float minU = icon.getMinU(); + float maxU = icon.getMaxU(); + float minV = icon.getMinV(); + float maxV = icon.getMaxV(); + + // Render the item in 2D + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(-0.25F, -0.25F, 0.0F); + GL11.glScalef(0.5F, 0.5F, 0.5F); + + RenderHelper.customRenderItemIn2D(tessellator, maxU, minV, minU, maxV, icon.getIconWidth(), icon.getIconHeight(), 0.0625F, false); + + GL11.glPopMatrix(); + } + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java b/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java index abd5c93..63aa60c 100644 --- a/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java +++ b/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java @@ -71,6 +71,8 @@ public class LOTRMaterialTransformer implements IClassTransformer { addMaterial("NEX_FIRE",classNode); addMaterial("NEX_TOXIN",classNode); addMaterial("NEX_SHADOW",classNode); + addMaterial("NIMVEIL",classNode); + addMaterial("FROZEN",classNode); // Protection Conversion diff --git a/src/main/java/com/zivilon/cinder_loe/coremod/LOTRWeaponLinker.java b/src/main/java/com/zivilon/cinder_loe/coremod/LOTRWeaponLinker.java index 8a31da6..5c9d186 100644 --- a/src/main/java/com/zivilon/cinder_loe/coremod/LOTRWeaponLinker.java +++ b/src/main/java/com/zivilon/cinder_loe/coremod/LOTRWeaponLinker.java @@ -26,7 +26,7 @@ public class LOTRWeaponLinker implements IClassTransformer { "swordBree", "maceArnor", "daggerAsh","bowAsh","hammerAsh","pikeAsh","battleaxeAsh","swordAsh","spearAsh", "staffAsh", - "firstAgeGlaive"); + "firstAgeGlaive", "nimveil"); } return basicClass; } diff --git a/src/main/java/com/zivilon/cinder_loe/entity/Nex.java b/src/main/java/com/zivilon/cinder_loe/entity/Nex.java index 431f2db..dd69289 100644 --- a/src/main/java/com/zivilon/cinder_loe/entity/Nex.java +++ b/src/main/java/com/zivilon/cinder_loe/entity/Nex.java @@ -1,16 +1,18 @@ package com.zivilon.cinder_loe.entity; -import java.util.UUID; +import lotr.common.LOTRDamage; import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; import lotr.common.entity.npc.LOTREntityNPC; import lotr.common.fac.LOTRFaction; +import net.minecraft.block.Block; import net.minecraft.entity.EnumCreatureAttribute; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.ai.EntityAIBase; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.ai.EntityAIWander; @@ -19,29 +21,73 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.entity.ai.LoEPreciseAttackOnCollide; +import com.zivilon.cinder_loe.util.BlockPos; +import com.zivilon.cinder_loe.util.Utilities; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; public class Nex extends LOTREntityNPC { + public EntityAIBase normal_attack_ai; + public EntityAIBase desperate_attack_ai; + public static double normal_attack_damage = 30.0D; + public static double desperate_attack_damage = 50.0D; + public static int normal_attack_speed = 20; + public static int desperate_attack_speed = 10; + + public static List> nex_instances = new ArrayList<>(); + public AxisAlignedBB collisionBox; public AxisAlignedBB hitbox; - public int phase = 1; + public int phase = 0; public ChunkCoordinates currentFlightTarget; public EntityPlayer playerTarget; + public int tickCounter = 0; public Nex(World world) { super(world); setSize(1.5F, 3.0F); - ((EntityLiving) this).tasks.addTask(2, (EntityAIBase) new LOTREntityAIAttackOnCollide(this, 1.3D, false)); - ((EntityLiving) this).tasks.addTask(5, (EntityAIBase) new EntityAIWander(this, 1.0D)); - ((EntityLiving) this).tasks.addTask(9, (EntityAIBase) new EntityAILookIdle((EntityLiving) this)); + normal_attack_ai = (EntityAIBase) new LoEPreciseAttackOnCollide(this, 1.3D, 3.0D, normal_attack_speed, false); + desperate_attack_ai = (EntityAIBase) new LoEPreciseAttackOnCollide(this, 1.3D, 3.0D, desperate_attack_speed, false); + ((EntityLiving) this).tasks.addTask(2, normal_attack_ai); + ((EntityLiving) this).tasks.addTask(2, (EntityAIBase) new EntityAIWander(this, 1.0D)); + ((EntityLiving) this).tasks.addTask(3, (EntityAIBase) new EntityAILookIdle((EntityLiving) this)); addTargetTasks(true); + store_nex_instance(); + clear_shadow_tiles(); + } + + public void clear_shadow_tiles() { + if (!this.worldObj.isRemote) { + int xz_range = 100; + int y_range = 10; + int i = MathHelper.floor_double(this.posX); + int j = MathHelper.floor_double(this.posY); + int k = MathHelper.floor_double(this.posZ); + for (int i1 = i - xz_range; i1 <= i + xz_range; i1++) { + for (int j1 = j - y_range; j1 <= j + y_range; j1++) { + for (int k1 = k - xz_range; k1 <= k + xz_range; k1++) { + Block block = this.worldObj.getBlock(i1, j1, k1); + if (block == CinderLoE.shadowTile) + this.worldObj.setBlockToAir(i1, j1, k1); + } + } + } + } } protected void entityInit() { @@ -51,15 +97,45 @@ public class Nex extends LOTREntityNPC { protected void applyEntityAttributes() { super.applyEntityAttributes(); - getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(1000.0D); + getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(5000.0D); getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D); + getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(1.0D); + getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(100.0D); + getEntityAttribute(npcAttackDamage).setBaseValue(normal_attack_damage); } public int getPhase() { - return this.dataWatcher.getWatchableObjectInt(31); + phase = this.dataWatcher.getWatchableObjectInt(31); + return phase; } public void setPhase(int i) { - this.dataWatcher.updateObject(31, Integer.valueOf(i)); + phase = i; + this.dataWatcher.updateObject(31, Integer.valueOf(phase)); + } + + public void next_phase() { + Utilities.setInvulnerable((Entity)this, false); + phase = getPhase(); + switch(phase) { + case 0: // Move to Toxic phase + clear_shadow_tiles(); + setPhase(phase + 1); + return; + case 1: // Move to Ice phase + setPhase(phase + 1); + return; + case 2: // Move to Fire phase + setPhase(phase + 1); + return; + case 3: // Move to Desperation phase + setPhase(phase + 1); + this.tasks.removeTask(normal_attack_ai); + this.tasks.addTask(2, desperate_attack_ai); + getEntityAttribute(npcAttackDamage).setBaseValue(desperate_attack_damage); + return; + default: + System.out.println("[CinderLoE] Nex phase shift past phase 4???"); + } } public LOTRFaction getFaction() { @@ -88,10 +164,183 @@ public class Nex extends LOTREntityNPC { return false; } - public void onLivingUpdate() { - super.onLivingUpdate(); - if (rand.nextBoolean()) - ((Entity)this).worldObj.spawnParticle("chill", ((Entity)this).posX + (rand.nextDouble() - 0.5D) * ((Entity)this).width, ((Entity)this).posY + rand.nextDouble() * ((Entity)this).height, ((Entity)this).posZ + (rand.nextDouble() - 0.5D) * ((Entity)this).width, 0.0D, 0.0D, 0.0D); + // Phase 0 - Shadow + // Phase 1 - Toxin + // Phase 2 - Ice + // Phase 3 - Fire + // Phase 4 - Desperation + + public void release_miniboss() { + Utilities.setInvulnerable((Entity)this, true); + System.out.println("Set Nex invulnerable: " + this.isEntityInvulnerable()); + Class phaseClass = null; + switch (phase) { + case 0: + phaseClass = NexShadow.class; + break; + case 1: + phaseClass = NexToxin.class; + break; + case 2: + phaseClass = NexIce.class; + break; + case 3: + phaseClass = NexFire.class; + break; + default: + this.setDead(); + System.out.println("ERROR! Invalid Nex phase change: " + phase); + return; + } + + System.out.println("Miniboss class: " + phaseClass.getSimpleName()); + List entityList = this.worldObj.getEntitiesWithinAABB(NexMiniboss.class, this.boundingBox.expand(100, 10, 100)); + for (Entity entity : entityList) { + if (phaseClass.isInstance(entity)) { + System.out.println("Found correct miniboss class"); + NexMiniboss miniboss = (NexMiniboss) entity; + miniboss.unbind(); + return; + } + } + System.out.println("ERROR! Nex is missing miniboss of type " + phaseClass.getSimpleName()); + } + + @Override + public void onUpdate() { + super.onUpdate(); + tickCounter++; + + switch (phase) { + case 0: + runShadowTasks(); + break; + case 1: + runToxinTasks(); + break; + case 2: + runIceTasks(); + break; + case 3: + runFireTasks(); + break; + default: + break; + } + } + + public void runShadowTasks() { + if (tickCounter >= 100) { // 5 seconds (100 ticks) + tickCounter = 0; + + // Find air blocks with solid blocks underneath and place ShadowTile + placeShadowTiles(); + } + } + public void runToxinTasks() { + if (tickCounter >= 200) { + tickCounter = 0; + spawnToxicCloud(); + } + } + public void runIceTasks() {} + public void runFireTasks() {} + + public List getValidPositions() { + int radius = 64; // Radius to search for valid blocks + + List validPositions = new ArrayList<>(); + + // Iterate over blocks in a specific area + for (int x = -radius; x <= radius; x++) { + for (int y = -4; y <= 4; y++) { + for (int z = -radius; z <= radius; z++) { + BlockPos pos = new BlockPos(MathHelper.floor_double(this.posX) + x, MathHelper.floor_double(this.posY) + y, MathHelper.floor_double(this.posZ) + z); + BlockPos below = pos.down(); + + if (worldObj.isAirBlock(pos.x, pos.y, pos.z) && worldObj.getBlock(below.x, below.y, below.z).isOpaqueCube()) { + validPositions.add(pos); + } + } + } + } + return validPositions; + } + + public void spawnToxicCloud() { + if (this.worldObj.isRemote) return; + int toxicCloudsToPlace = 4; + if (countToxicClouds() >= toxicCloudsToPlace) return; + + List validPositions = getValidPositions(); + + // Place NexCloud in 2 random valid positions + for (int i = 0; i < toxicCloudsToPlace && !validPositions.isEmpty(); i++) { + int randomIndex = worldObj.rand.nextInt(validPositions.size()); + BlockPos pos = validPositions.remove(randomIndex); + + NexCloud cloud = new NexCloud(this.worldObj); + cloud.setPosition(pos.x + 0.5, pos.y + 1.5, pos.z + 0.5); + this.worldObj.spawnEntityInWorld(cloud); + } + } + + public boolean attackEntityAsMob(Entity entity) { + if (super.attackEntityAsMob(entity)) { + if (entity instanceof EntityPlayerMP) + LOTRDamage.doFrostDamage((EntityPlayerMP)entity); + if (entity instanceof EntityLivingBase) { + int difficulty = this.worldObj.difficultySetting.getDifficultyId(); + int duration = difficulty * (difficulty + 5) / 2; + if (duration > 0) + ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, duration * 20, 0)); + } + return true; + } + return false; + } + + public int countToxicClouds() { + List clouds = worldObj.getEntitiesWithinAABB(NexCloud.class, this.boundingBox.expand(100.0, 10.0, 100.0)); + return clouds.size(); + } + + public void placeShadowTiles() { + if (this.worldObj.isRemote) return; + int shadowTilesToPlace = 8; // Number of shadow tiles to place + + List validPositions = getValidPositions(); + + // Place ShadowTile in 4 random valid positions + for (int i = 0; i < shadowTilesToPlace && !validPositions.isEmpty(); i++) { + int randomIndex = worldObj.rand.nextInt(validPositions.size()); + BlockPos pos = validPositions.remove(randomIndex); + worldObj.setBlock(pos.x, pos.y, pos.z, CinderLoE.shadowTile); + } + } + + @Override + public boolean attackEntityFrom(DamageSource source, float dmg) { + super.attackEntityFrom(source, dmg); + int current_phase = (int) (this.getHealth() + dmg) / 1000; + int new_phase = (int) this.getHealth() / 1000; + System.out.println("Damage received: " + dmg + "while at health " + this.getHealth()); + if (phase == 3) { + if (source instanceof EntityDamageSource) { + Entity attacker = ((EntityDamageSource)source).getEntity(); + if (Utilities.has_fire_weapon(attacker)) { + attacker.attackEntityFrom(DamageSource.causeMobDamage(this), dmg); + attacker.setFire(10); + return false; + } + } + } + if (current_phase != new_phase && current_phase != 5) { + System.out.println("New phase should occur. Current phase health: " + current_phase + " and new phase health: " + new_phase); + if (phase != 4) + release_miniboss(); + } + return true; } protected void dropFewItems(boolean flag, int i) { @@ -106,12 +355,59 @@ public class Nex extends LOTREntityNPC { return "lotr:wight.death"; } - public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) { - // Do nothing - } + @Override + public void heal(float amount) {} + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) {} @Override public ItemStack getPickedResult(MovingObjectPosition target) { return null; } + + // Scripting data methods, VT hooks into these. See util.VT_additions + public void store_nex_instance() { + cleanup_instances(); + nex_instances.add(new WeakReference<>(this)); + } + public static Nex get_nex_instance() { + cleanup_instances(); + if (!nex_instances.isEmpty()) { + return nex_instances.get(0).get(); + } + return null; // or handle this scenario accordingly + } + public static int get_nex_phase() { + Nex nex = get_nex_instance(); + if (nex == null) { + return -404; + } + return nex.phase; + } + public static int get_nex_health() { + Nex nex = get_nex_instance(); + if (nex == null) { + return -404; + } + return (int)nex.getHealth(); + } + public static void cleanup_instances() { + for (int i = nex_instances.size() - 1; i >= 0; i--) { + WeakReference weakRef = nex_instances.get(i); + Nex listed_instance = weakRef.get(); + if (listed_instance == null || !listed_instance.isEntityAlive()) { + nex_instances.remove(i); + } + } + } + + public static boolean is_nex_fire_phase_nearby(EntityLivingBase entity) { + List entityList = entity.worldObj.getEntitiesWithinAABB(Nex.class, entity.boundingBox.expand(100, 10, 100)); + for (Nex nex : entityList) { // We don't actually need to iterate, checking the first object is enough + if (nex.phase == 3) return true; + return false; + } + return false; + } } diff --git a/src/main/java/com/zivilon/cinder_loe/entity/NexCloud.java b/src/main/java/com/zivilon/cinder_loe/entity/NexCloud.java new file mode 100644 index 0000000..209574e --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/NexCloud.java @@ -0,0 +1,180 @@ +package com.zivilon.cinder_loe.entity; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.fac.LOTRFaction; +import net.minecraft.util.AxisAlignedBB; + +import java.util.List; + +public class NexCloud extends Entity { + public int tickCounter = 0; + public float opacity = 0.0F; + public boolean unbound = false; + + public NexCloud(World world) { + super(world); + this.setSize(5.0F, 3.0F); // Set the size of the cloud + this.noClip = true; // Disable hitbox + } + + @Override + protected void entityInit() { + this.dataWatcher.addObject(20, 0.0F); // Index 20, initial opacity + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) { + // Load entity data from NBT + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) { + // Save entity data to NBT + } + + public void syncOpacityToClient() { + this.dataWatcher.updateObject(20, this.opacity); + } + + @Override + public void onUpdate() { + super.onUpdate(); + this.noClip = true; + if (worldObj.isRemote) { + this.opacity = this.dataWatcher.getWatchableObjectFloat(20); + // Update the client's position to match the server's position + this.setPosition(this.posX, this.posY, this.posZ); + return; + } + syncOpacityToClient(); + tickCounter++; + + if (tickCounter <= 100) { + // Increase opacity from 0.0F to 0.5F over the first 100 ticks + opacity = 0.5F * (tickCounter / 100.0F); + } else if (tickCounter <= 200) { + // Maintain opacity at 0.5F for the next 100 ticks + opacity = 0.5F; + } + + if (unbound) { + followNearestPlayer(); + // Apply the motion to the entity's position + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + + this.setPosition(this.posX, this.posY, this.posZ); // Update the entity's position + } + + if (tickCounter % 10 == 0) { + if (tickCounter > 60 && tickCounter < 240) + applyPoisonEffect(); + unbound = isMinibossUnbound(); +/* if (unbound && tickCounter > 100) { + tickCounter = 100; + return; + }*/ + } + +/* if (unbound) { + return; + }*/ + + if (tickCounter <= 300 && tickCounter > 200) { + // Decrease opacity from 0.5F to 0.0F over the next 100 ticks + opacity = 0.5F * ((300 - tickCounter) / 100.0F); + return; + } + if (tickCounter > 300) { + // Set the entity as dead after 300 ticks + System.out.println("Setting cloud dead. Ticks: " + tickCounter + " and unbound state: " + unbound); + this.setDead(); + return; + } + + } + + @Override + public void moveEntity(double x, double y, double z) { + if (this.noClip) { + this.setPosition(this.posX + x, this.posY + y, this.posZ + z); + } else { + super.moveEntity(x, y, z); + } + } + + + public boolean isMinibossUnbound() { + List entities = worldObj.getEntitiesWithinAABB(Entity.class, this.boundingBox.expand(100.0, 10.0, 100.0)); + for (Entity entity : entities) { + if (entity instanceof NexToxin) { + NexToxin miniboss = (NexToxin) entity; +// System.out.println("Found miniboss. Is unbound: " + !miniboss.bound); + return !miniboss.bound; + } + } +// System.out.println("Miniboss not found"); + return false; + } + + public void applyPoisonEffect() { + List entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, this.boundingBox); + for (Entity entity : entities) { + if (entity != this && !(entity instanceof LOTREntityNPC && ((LOTREntityNPC) entity).getFaction() == LOTRFaction.UTUMNO)) { + if (entity instanceof EntityLivingBase) { + EntityLivingBase livingEntity = (EntityLivingBase) entity; + livingEntity.attackEntityFrom(DamageSource.magic, 2.0F); + livingEntity.addPotionEffect(new PotionEffect(Potion.poison.id, 200, 1)); // 10 seconds of poison (200 ticks) + } + } + } + } + + @Override + public AxisAlignedBB getBoundingBox() { + return null; + } + + + public void followNearestPlayer() { + List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, this.boundingBox.expand(100.0, 4.0, 100.0)); + if (!players.isEmpty()) { + EntityPlayer nearestPlayer = players.get(0); + double minDistance = this.getDistanceToEntity(nearestPlayer); + for (EntityPlayer player : players) { + double distance = this.getDistanceToEntity(player); + if (distance < minDistance) { + nearestPlayer = player; + minDistance = distance; + } + } + double speed = 0.01; + this.motionX = (nearestPlayer.posX - this.posX) * speed; + this.motionY = (nearestPlayer.posY - this.posY) * speed; + this.motionZ = (nearestPlayer.posZ - this.posZ) * speed; + } else { + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; + } + } + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + public boolean canBePushed() { + return false; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/NexFire.java b/src/main/java/com/zivilon/cinder_loe/entity/NexFire.java index 124a280..b748259 100644 --- a/src/main/java/com/zivilon/cinder_loe/entity/NexFire.java +++ b/src/main/java/com/zivilon/cinder_loe/entity/NexFire.java @@ -1,15 +1,48 @@ package com.zivilon.cinder_loe.entity; +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.util.Utilities; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; +import lotr.common.LOTRMod; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.enchant.LOTREnchantment; +import net.minecraft.item.ItemStack; -public class NexFire extends NexShadow { +public class NexFire extends NexMiniboss { public String entity_name = "§4Naira"; public NexFire(World world) { super(world); } + @Override + public void setupEquipment() { + ItemStack weapon = new ItemStack(LOTRMod.hammerUtumno, 0); + ItemStack boots = new ItemStack(CinderLoE.bootsNexFire, 0); + ItemStack legs = new ItemStack(CinderLoE.legsNexFire, 0); + ItemStack body = new ItemStack(CinderLoE.bodyNexFire, 0); + ItemStack helmet = new ItemStack(CinderLoE.helmetNexFire, 0); + Utilities.setAppliedRandomEnchants(weapon); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong2); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong1); + Utilities.setLOTREnchant(weapon, LOTREnchantment.meleeReach1); + Utilities.setLOTREnchant(weapon, LOTREnchantment.meleeSpeed1); + Utilities.setLOTREnchant(weapon, LOTREnchantment.fire); + + this.npcItemsInv.setIdleItem(weapon); + this.npcItemsInv.setMeleeWeapon(weapon); + setCurrentItemOrArmor(0, weapon); + setCurrentItemOrArmor(1, boots); + setCurrentItemOrArmor(2, legs); + setCurrentItemOrArmor(3, body); + setCurrentItemOrArmor(4, helmet); + } + @Override public String getNPCName() { return entity_name; @@ -23,4 +56,12 @@ public class NexFire extends NexShadow { public String getSpeechBank(EntityPlayer entityplayer) { return "nex/fire"; } + + @Override + public void onBoundUpdate(int x, int y, int z) { + } + + @Override + public void onUnboundUpdate() { + } } diff --git a/src/main/java/com/zivilon/cinder_loe/entity/NexIce.java b/src/main/java/com/zivilon/cinder_loe/entity/NexIce.java index d6b8baa..da3a7c1 100644 --- a/src/main/java/com/zivilon/cinder_loe/entity/NexIce.java +++ b/src/main/java/com/zivilon/cinder_loe/entity/NexIce.java @@ -1,15 +1,49 @@ package com.zivilon.cinder_loe.entity; +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.util.Utilities; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; +import lotr.common.LOTRMod; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.enchant.LOTREnchantment; +import net.minecraft.item.ItemStack; + -public class NexIce extends NexShadow { +public class NexIce extends NexMiniboss { public String entity_name = "§bNinquë"; public NexIce(World world) { super(world); } + @Override + public void setupEquipment() { + ItemStack weapon = new ItemStack(LOTRMod.spearUtumno, 0); + ItemStack boots = new ItemStack(CinderLoE.bootsNexIce, 0); + ItemStack legs = new ItemStack(CinderLoE.legsNexIce, 0); + ItemStack body = new ItemStack(CinderLoE.bodyNexIce, 0); + ItemStack helmet = new ItemStack(CinderLoE.helmetNexIce, 0); + Utilities.setAppliedRandomEnchants(weapon); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong3); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong1); + Utilities.setLOTREnchant(weapon, LOTREnchantment.meleeReach1); + Utilities.setLOTREnchant(weapon, LOTREnchantment.meleeSpeed1); + Utilities.setLOTREnchant(weapon, LOTREnchantment.chill); + + this.npcItemsInv.setIdleItem(weapon); + this.npcItemsInv.setMeleeWeapon(weapon); + setCurrentItemOrArmor(0, weapon); + setCurrentItemOrArmor(1, boots); + setCurrentItemOrArmor(2, legs); + setCurrentItemOrArmor(3, body); + setCurrentItemOrArmor(4, helmet); + } + @Override public String getNPCName() { return entity_name; @@ -23,4 +57,12 @@ public class NexIce extends NexShadow { public String getSpeechBank(EntityPlayer entityplayer) { return "nex/ice"; } + + @Override + public void onBoundUpdate(int x, int y, int z) { + } + + @Override + public void onUnboundUpdate() { + } } diff --git a/src/main/java/com/zivilon/cinder_loe/entity/NexMiniboss.java b/src/main/java/com/zivilon/cinder_loe/entity/NexMiniboss.java new file mode 100644 index 0000000..4a1868d --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/NexMiniboss.java @@ -0,0 +1,152 @@ +package com.zivilon.cinder_loe.entity; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.util.Utilities; +import com.zivilon.cinder_loe.entity.Nex; +import com.zivilon.cinder_loe.entity.ai.LoEPreciseAttackOnCollide; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +import lotr.common.entity.npc.LOTREntityMan; +import lotr.common.fac.LOTRFaction; + +import java.util.List; + +public abstract class NexMiniboss extends LOTREntityMan { + public String entity_name = "UNDEFINED"; + public boolean bound = true; + + public NexMiniboss(World world) { + super(world); + setSize(0.6F, 1.8F); + ((EntityLiving) this).tasks.addTask(2, (EntityAIBase) new LoEPreciseAttackOnCollide(this, 1.3D, 1.0D, 40, false)); + ((EntityLiving) this).tasks.addTask(8, (EntityAIBase) new EntityAIWatchClosest((EntityLiving) this, Nex.class, 8.0F, 0.02F)); + addTargetTasks(true); + setupEquipment(); + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) { + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(200.0D); + getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.225D); + getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(1.0D); + getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(100.0D); + } + + @Override + public LOTRFaction getFaction() { + return LOTRFaction.UTUMNO; + } + + @Override + protected boolean canDespawn() { + return false; + } + + @Override + public String getNPCName() { + return entity_name; + } + @Override + public String getNPCFormattedName(String npcName, String entityName) { + return entity_name; + } + + @Override + protected void dropFewItems(boolean flag, int i) { + } + + @Override + public boolean getCanSpawnHere() { + return false; + } + + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + return "nex/undefined"; + } + + @Override + public void setupNPCName() { + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return null; + } + + @Override + public void onDeath(DamageSource source) { + List entityList = this.worldObj.getEntitiesWithinAABB(Nex.class, this.boundingBox.expand(100, 10, 100)); + for (Nex nex : entityList) { + nex.next_phase(); + return; + } + } + + public void unbind() { + System.out.println("Unbinding " + this.getClass().getSimpleName()); + + int x = MathHelper.floor_double(this.posX); + int y = MathHelper.floor_double(this.posY); + int z = MathHelper.floor_double(this.posZ); + + Block blockAtFeet = this.worldObj.getBlock(x, y, z); + Block blockAtHead = this.worldObj.getBlock(x, y + 1, z); + if (blockAtFeet == CinderLoE.iceCage) { + this.worldObj.setBlock(x, y, z, Blocks.air); + } + if (blockAtHead == CinderLoE.iceCage) { + this.worldObj.setBlock(x, y, z, Blocks.air); + } + bound = false; + } + + @Override + public void onUpdate() { + super.onUpdate(); + checkInsideIceCage(); + } + + public void checkInsideIceCage() { + int x = MathHelper.floor_double(this.posX); + int y = MathHelper.floor_double(this.posY); + int z = MathHelper.floor_double(this.posZ); + + + Block blockAtFeet = this.worldObj.getBlock(x, y, z); + Block blockAtHead = this.worldObj.getBlock(x, y + 1, z); + + if (blockAtFeet == CinderLoE.iceCage || blockAtHead == CinderLoE.iceCage) { + onBoundUpdate(x, y, z); + Utilities.setInvulnerable((Entity)this, true); +// System.out.println("Nex Miniboss vulnerable: " + this.isEntityInvulnerable()); + } else { + onUnboundUpdate(); + Utilities.setInvulnerable((Entity)this, false); +// System.out.println("Nex Miniboss vulnerable: " + this.isEntityInvulnerable()); + } + } + + public abstract void onBoundUpdate(int x, int y, int z); + public abstract void onUnboundUpdate(); + public abstract void setupEquipment(); +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/NexShadow.java b/src/main/java/com/zivilon/cinder_loe/entity/NexShadow.java index f11fb8a..6c2c430 100644 --- a/src/main/java/com/zivilon/cinder_loe/entity/NexShadow.java +++ b/src/main/java/com/zivilon/cinder_loe/entity/NexShadow.java @@ -2,53 +2,49 @@ package com.zivilon.cinder_loe.entity; import com.zivilon.cinder_loe.CinderLoE; import com.zivilon.cinder_loe.util.Utilities; -import com.zivilon.cinder_loe.entity.Nex; -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.entity.ai.EntityAIWatchClosest; +import lotr.common.LOTRMod; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.enchant.LOTREnchantment; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; -import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; -import lotr.common.entity.npc.LOTREntityMan; -import lotr.common.fac.LOTRFaction; - import java.util.List; -public class NexShadow extends LOTREntityMan { +public class NexShadow extends NexMiniboss { public String entity_name = "§7Fuinë"; public NexShadow(World world) { super(world); - setSize(0.6F, 1.8F); - ((EntityLiving) this).tasks.addTask(2, (EntityAIBase) new LOTREntityAIAttackOnCollide(this, 1.3D, false)); - ((EntityLiving) this).tasks.addTask(8, (EntityAIBase) new EntityAIWatchClosest((EntityLiving) this, Nex.class, 8.0F, 0.02F)); - addTargetTasks(true); - } - - @Override - public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) { - } - - @Override - protected void applyEntityAttributes() { - super.applyEntityAttributes(); - getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(200.0D); - getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D); } @Override - public LOTRFaction getFaction() { - return LOTRFaction.UTUMNO; + public void setupEquipment() { + ItemStack weapon = new ItemStack(LOTRMod.swordUtumno, 0); + ItemStack boots = new ItemStack(CinderLoE.bootsNexShadow, 0); + ItemStack legs = new ItemStack(CinderLoE.legsNexShadow, 0); + ItemStack body = new ItemStack(CinderLoE.bodyNexShadow, 0); + ItemStack helmet = new ItemStack(CinderLoE.helmetNexShadow, 0); + Utilities.setAppliedRandomEnchants(weapon); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong1); + Utilities.setLOTREnchant(weapon, LOTREnchantment.meleeReach1); + Utilities.setLOTREnchant(weapon, LOTREnchantment.meleeSpeed1); + + this.npcItemsInv.setIdleItem(weapon); + this.npcItemsInv.setMeleeWeapon(weapon); + setCurrentItemOrArmor(0, weapon); + setCurrentItemOrArmor(1, boots); + setCurrentItemOrArmor(2, legs); + setCurrentItemOrArmor(3, body); + setCurrentItemOrArmor(4, helmet); } @Override @@ -60,54 +56,12 @@ public class NexShadow extends LOTREntityMan { return entity_name; } - @Override - protected void dropFewItems(boolean flag, int i) { - } - - @Override - public boolean getCanSpawnHere() { - return false; - } - @Override public String getSpeechBank(EntityPlayer entityplayer) { return "nex/shadow"; } @Override - public void setupNPCName() { - } - - @Override - public ItemStack getPickedResult(MovingObjectPosition target) { - return null; - } - - @Override - public void onUpdate() { - super.onUpdate(); - checkInsideIceCage(); - } - - public void checkInsideIceCage() { - int x = MathHelper.floor_double(this.posX); - int y = MathHelper.floor_double(this.posY); - int z = MathHelper.floor_double(this.posZ); - - Block blockAtFeet = this.worldObj.getBlock(x, y, z); - Block blockAtHead = this.worldObj.getBlock(x, y + 1, z); - - if (blockAtFeet == CinderLoE.iceCage || blockAtHead == CinderLoE.iceCage) { - onBoundUpdate(x, y, z); - Utilities.setEntityInvulnerable(this, true); - System.out.println("Nex Shadow vulnerable: " + this.isEntityInvulnerable()); - } else { - onUnboundUpdate(); - Utilities.setEntityInvulnerable(this, false); - System.out.println("Nex Shadow vulnerable: " + this.isEntityInvulnerable()); - } - } - public void onBoundUpdate(int x, int y, int z) { this.motionX = 0; this.motionY = 0; @@ -115,6 +69,7 @@ public class NexShadow extends LOTREntityMan { this.setPosition(x + 0.5, y, z + 0.5); } + @Override public void onUnboundUpdate() { List players = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, this.boundingBox.expand(100.0D, 100.0D, 100.0D)); diff --git a/src/main/java/com/zivilon/cinder_loe/entity/NexToxin.java b/src/main/java/com/zivilon/cinder_loe/entity/NexToxin.java index 80e3e03..0964ec8 100644 --- a/src/main/java/com/zivilon/cinder_loe/entity/NexToxin.java +++ b/src/main/java/com/zivilon/cinder_loe/entity/NexToxin.java @@ -1,15 +1,54 @@ package com.zivilon.cinder_loe.entity; +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.util.Utilities; + +import lotr.common.LOTRMod; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.enchant.LOTREnchantment; +import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; -public class NexToxin extends NexShadow { +public class NexToxin extends NexMiniboss { public String entity_name = "§2Hloirë"; public NexToxin(World world) { super(world); } + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(200.0D); + getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.25D); + } + + @Override + public void setupEquipment() { + ItemStack weapon = new ItemStack(LOTRMod.daggerUtumnoPoisoned, 0); + ItemStack boots = new ItemStack(CinderLoE.bootsNexToxin, 0); + ItemStack legs = new ItemStack(CinderLoE.legsNexToxin, 0); + ItemStack body = new ItemStack(CinderLoE.bodyNexToxin, 0); + ItemStack helmet = new ItemStack(CinderLoE.helmetNexToxin, 0); + Utilities.setAppliedRandomEnchants(weapon); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong4); + Utilities.setLOTREnchant(weapon, LOTREnchantment.strong1); + Utilities.setLOTREnchant(weapon, LOTREnchantment.meleeReach1); + Utilities.setLOTREnchant(weapon, LOTREnchantment.meleeSpeed1); + + this.npcItemsInv.setIdleItem(weapon); + this.npcItemsInv.setMeleeWeapon(weapon); + setCurrentItemOrArmor(0, weapon); + setCurrentItemOrArmor(1, boots); + setCurrentItemOrArmor(2, legs); + setCurrentItemOrArmor(3, body); + setCurrentItemOrArmor(4, helmet); + } + @Override public String getNPCName() { return entity_name; @@ -23,4 +62,12 @@ public class NexToxin extends NexShadow { public String getSpeechBank(EntityPlayer entityplayer) { return "nex/toxin"; } + + @Override + public void onBoundUpdate(int x, int y, int z) { + } + + @Override + public void onUnboundUpdate() { + } } diff --git a/src/main/java/com/zivilon/cinder_loe/entity/ai/LoEPreciseAttackOnCollide.java b/src/main/java/com/zivilon/cinder_loe/entity/ai/LoEPreciseAttackOnCollide.java new file mode 100644 index 0000000..693fc7a --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/ai/LoEPreciseAttackOnCollide.java @@ -0,0 +1,97 @@ +package com.zivilon.cinder_loe.entity.ai; + +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.projectile.LOTREntitySpear; +import lotr.common.item.LOTRItemSpear; +import lotr.common.item.LOTRWeaponStats; +import net.minecraft.item.ItemStack; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EntityLiving; +import net.minecraft.pathfinding.PathEntity; + +import java.util.List; + +public class LoEPreciseAttackOnCollide extends LOTREntityAIAttackOnCollide { + public double attack_range; + public int attack_cooldown; + + public LoEPreciseAttackOnCollide(EntityCreature entity, double speed, double reach, int delay, boolean flag) { + super(entity, speed, flag); + attack_range = reach; + attack_cooldown = delay; + } + + @Override + public void updateTask() { + updateLookAndPathing(); + if (this.attackTick > 0) + this.attackTick--; + ItemStack weapon = this.theOwner.getHeldItem(); + + // Throw a throwing spear if available + if (weapon != null && weapon.getItem() instanceof LOTRItemSpear && this.attackTick <= 0 && this.theOwner instanceof LOTREntityNPC) { + LOTREntityNPC theNPC = (LOTREntityNPC)this.theOwner; + ItemStack spearBackup = theNPC.npcItemsInv.getSpearBackup(); + + if (spearBackup != null) { + LOTRItemSpear spearItem = (LOTRItemSpear)weapon.getItem(); + double d = this.theOwner.getDistanceToEntity((Entity)this.attackTarget); + double range = this.theOwner.getNavigator().getPathSearchRange(); + if (d > 5.0D && d < range * 0.75D) { + LOTREntitySpear spear = new LOTREntitySpear(this.worldObj, (EntityLivingBase)this.theOwner, this.attackTarget, weapon.copy(), 0.75F + (float)d * 0.025F, 0.5F); + this.worldObj.playSoundAtEntity((Entity)this.theOwner, "random.bow", 1.0F, 1.0F / (this.worldObj.rand.nextFloat() * 0.4F + 1.2F) + 0.25F); + this.worldObj.spawnEntityInWorld((Entity)spear); + this.attackTick = 30 + this.theOwner.getRNG().nextInt(20); + if (ItemStack.areItemStacksEqual(theNPC.npcItemsInv.getIdleItem(), theNPC.npcItemsInv.getMeleeWeapon())) + theNPC.npcItemsInv.setIdleItem(spearBackup); + theNPC.npcItemsInv.setMeleeWeapon(spearBackup); + theNPC.npcItemsInv.setSpearBackup(null); + return; + } + } + } + float weaponReach = 1.0F; + if (this.theOwner.ridingEntity != null) + weaponReach = LOTREntityNPC.MOUNT_RANGE_BONUS; + if (weapon == null) { + weaponReach = (float)attack_range; + } else { + weaponReach *= LOTRWeaponStats.getMeleeReachFactor(weapon); + } + + float meleeRange = (float)this.theOwner.boundingBox.getAverageEdgeLength() + weaponReach; + double distanceSq = this.theOwner.getDistanceSqToEntity((Entity)this.attackTarget); + + if (distanceSq <= (meleeRange * meleeRange) || this.theOwner.boundingBox.intersectsWith(this.attackTarget.boundingBox)) { + if (this.attackTick <= 0) { + this.attackTick = (weapon == null) ? attack_cooldown : LOTRWeaponStats.getAttackTimeMob(weapon); // Apply cooldown here + this.theOwner.attackEntityAsMob((Entity)this.attackTarget); + this.theOwner.swingItem(); + } + } + } + + @Override + protected void updateLookAndPathing() { + this.theOwner.getLookHelper().setLookPositionWithEntity((Entity)this.attackTarget, 30.0F, 30.0F); + if (this.theOwner.riddenByEntity != null && this.theOwner.riddenByEntity instanceof EntityLiving) { + ((EntityLiving)this.theOwner.riddenByEntity).rotationYaw = this.theOwner.rotationYaw; + ((EntityLiving)this.theOwner.riddenByEntity).rotationYawHead = this.theOwner.rotationYawHead; + } + if ((this.sightNotRequired || this.theOwner.getEntitySenses().canSee((Entity)this.attackTarget)) && --this.pathCheckTimer <= 0) { + this.pathCheckTimer = 2; + PathEntity path = getPathEntity(); + if (path != null) + this.theOwner.getNavigator().setPath(path, this.moveSpeed); + } + } + + public PathEntity getPathEntity() { + if (this.theOwner.ridingEntity != null) + return this.worldObj.getPathEntityToEntity((Entity)this.theOwner, (Entity)this.attackTarget, this.theOwner.getNavigator().getPathSearchRange(), true, this.theOwner.getNavigator().getCanBreakDoors(), this.theOwner.getNavigator().getAvoidsWater(), false); + return this.theOwner.getNavigator().getPathToEntityLiving((Entity)this.attackTarget); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/effect/NimveilLightningBolt.java b/src/main/java/com/zivilon/cinder_loe/entity/effect/NimveilLightningBolt.java new file mode 100644 index 0000000..a716f48 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/effect/NimveilLightningBolt.java @@ -0,0 +1,84 @@ +package com.zivilon.cinder_loe.entity.effect; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.effect.EntityWeatherEffect; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +import java.util.List; + +public class NimveilLightningBolt extends EntityWeatherEffect { + /** Declares which state the lightning bolt is in. Whether it's in the air, hit the ground, etc. */ + public int lightningState; + /** A random long that is used to change the vertex of the lightning rendered in RenderLightningBolt */ + public long boltVertex; + /** Determines the time before the NimveilLightningBolt is destroyed. It is a random integer decremented over time. */ + public int boltLivingTime; + + public NimveilLightningBolt(World world, double x, double y, double z) { + super(world); + this.setLocationAndAngles(x, y, z, 0.0F, 0.0F); + this.lightningState = 2; + this.boltVertex = this.rand.nextLong(); + this.boltLivingTime = this.rand.nextInt(3) + 1; + } + public NimveilLightningBolt(World world) { + this(world, 0, 0, 0);// Summon line of custom lightning bolts + // Must not place fire or affect any non-EntityLivingBase targets + // Probably the most work of all of these + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() { + super.onUpdate(); + + if (this.lightningState == 2) { + this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "ambient.weather.thunder", 10000.0F, 0.8F + this.rand.nextFloat() * 0.2F); + this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "random.explode", 2.0F, 0.5F + this.rand.nextFloat() * 0.2F); + } + + --this.lightningState; + + if (this.lightningState < 0) { + if (this.boltLivingTime == 0) { + this.setDead(); + } else if (this.lightningState < -this.rand.nextInt(10)) { + --this.boltLivingTime; + this.lightningState = 1; + this.boltVertex = this.rand.nextLong(); + } + } + + if (this.lightningState >= 0) { + if (this.worldObj.isRemote) { + this.worldObj.lastLightningBolt = 2; + } else { + double d0 = 3.0D; + List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getBoundingBox(this.posX - d0, this.posY - d0, this.posZ - d0, this.posX + d0, this.posY + 6.0D + d0, this.posZ + d0)); + list.removeIf(entity -> !(entity instanceof EntityLivingBase)); + list.removeIf(entity -> (entity instanceof EntityPig)); + list.removeIf(entity -> (entity instanceof EntityCreeper)); + + for (int l = 0; l < list.size(); ++l) { + Entity entity = (Entity)list.get(l); + if (entity.isImmuneToFire() == false) { + entity.attackEntityFrom(DamageSource.inFire, 20.0F); + entity.setFire(8); + } + System.out.println("Striking " + entity.getCommandSenderName()); + } + } + } + } + + public void entityInit() {} + public void readEntityFromNBT(NBTTagCompound p_70037_1_) {} + public void writeEntityToNBT(NBTTagCompound p_70014_1_) {} +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/projectile/EntityWarDart.java b/src/main/java/com/zivilon/cinder_loe/entity/projectile/EntityWarDart.java index adcbc38..bddd76b 100644 --- a/src/main/java/com/zivilon/cinder_loe/entity/projectile/EntityWarDart.java +++ b/src/main/java/com/zivilon/cinder_loe/entity/projectile/EntityWarDart.java @@ -13,6 +13,8 @@ import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; public class EntityWarDart extends LOTREntityProjectileBase { @@ -34,6 +36,7 @@ public class EntityWarDart extends LOTREntityProjectileBase { public ItemStack item; public int damage; + public int dart_type; public EntityWarDart(World world) { super(world); @@ -44,6 +47,7 @@ public class EntityWarDart extends LOTREntityProjectileBase { this.item = item.copy(); // Store a copy of the item stack this.item.stackSize = 1; this.damage = WarDart.getDamageFromMeta(item.getItemDamage()); + this.dart_type = item.getItemDamage(); } @Override @@ -104,6 +108,15 @@ public class EntityWarDart extends LOTREntityProjectileBase { } } + @Override + protected void onCollideWithTarget(Entity entity) { + super.onCollideWithTarget(entity); + if (entity instanceof EntityLivingBase) + if (this.dart_type == 14) { + ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(Potion.wither.id, 160)); + } + } + @Override public float getBaseImpactDamage(Entity entity, ItemStack itemStack) { return this.damage; @@ -144,6 +157,7 @@ public class EntityWarDart extends LOTREntityProjectileBase { this.item = ItemStack.loadItemStackFromNBT(tagCompound.getCompoundTag("Item")); if (this.item != null) { this.damage = WarDart.getDamageFromMeta(this.item.getItemDamage()); + this.dart_type = this.item.getItemDamage(); this.dataWatcher.updateObject(ITEMSTACK_WATCHER_ID, this.item); // Ensure DataWatcher is updated with the deserialized ItemStack } } diff --git a/src/main/java/com/zivilon/cinder_loe/items/BlessedHammer.java b/src/main/java/com/zivilon/cinder_loe/items/BlessedHammer.java new file mode 100644 index 0000000..a8e0ad1 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/BlessedHammer.java @@ -0,0 +1,26 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.CinderLoE; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import java.util.List; + +public class BlessedHammer extends LoEHammer { + public BlessedHammer() { + super(CinderLoE.MATERIAL_NIMVEIL, CinderLoE.enchantedIce); + this.setTextureName("lotr:blessed_hammer"); + } + + @Override + public String getUnlocalizedName(ItemStack item) { + return "item.blessed_hammer"; + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean advanced) { + list.add(EnumChatFormatting.GRAY + "This blacksmith hammer is brimming with power"); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/Celeiniss.java b/src/main/java/com/zivilon/cinder_loe/items/Celeiniss.java new file mode 100644 index 0000000..4205d76 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/Celeiniss.java @@ -0,0 +1,26 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.LoECreativeTabs; + +import lotr.common.item.LOTRItemPolearm; +import lotr.common.item.LOTRWeaponStats; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class Celeiniss extends LOTRItemPolearm { + public Celeiniss() { + super(CinderLoE.MATERIAL_NEX_ICE); + this.lotrWeaponDamage = 11.5F; + this.setUnlocalizedName("lotr:firstAgeGlaive"); + this.setTextureName("lotr:firstAgeGlaive"); + this.setCreativeTab(LoECreativeTabs.tabCombatLoE); + LOTRWeaponStats.registerMeleeReach(Celeiniss.class, 1.8F); + LOTRWeaponStats.registerMeleeSpeed(Celeiniss.class, 1.0F); + } + + public boolean getIsRepairable(ItemStack itemstack, ItemStack repairItem) { + return (repairItem.getItem() == Item.getItemFromBlock(CinderLoE.enchantedIce)); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/CinderLoESpawnEgg.java b/src/main/java/com/zivilon/cinder_loe/items/CinderLoESpawnEgg.java index 0f5247b..b59dd56 100644 --- a/src/main/java/com/zivilon/cinder_loe/items/CinderLoESpawnEgg.java +++ b/src/main/java/com/zivilon/cinder_loe/items/CinderLoESpawnEgg.java @@ -120,7 +120,6 @@ public class CinderLoESpawnEgg extends Item { @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { if (!world.isRemote) { - // Perform a ray trace to find the block the player is looking at MovingObjectPosition target = getMovingObjectPositionFromPlayer(world, player, true); if (target != null && target.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { @@ -128,7 +127,6 @@ public class CinderLoESpawnEgg extends Item { int y = target.blockY; int z = target.blockZ; - // Adjust the y coordinate to spawn the entity on top of the block clicked y += 1; try { diff --git a/src/main/java/com/zivilon/cinder_loe/items/FirstAgeGlaive.java b/src/main/java/com/zivilon/cinder_loe/items/FirstAgeGlaive.java deleted file mode 100644 index 7d36235..0000000 --- a/src/main/java/com/zivilon/cinder_loe/items/FirstAgeGlaive.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.zivilon.cinder_loe.items; - -import com.zivilon.cinder_loe.CinderLoE; -import com.zivilon.cinder_loe.LoECreativeTabs; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import lotr.common.LOTRBannerProtection; -import lotr.common.LOTRMod; -import lotr.common.enchant.LOTREnchantment; -import lotr.common.enchant.LOTREnchantmentHelper; -import lotr.common.item.LOTRItemSword; -import lotr.common.item.LOTRItemPolearm; -import lotr.common.item.LOTRMaterial; -import lotr.common.item.LOTRWeaponStats; - -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.EnumAction; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.DamageSource; -import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -public class FirstAgeGlaive extends LOTRItemPolearm { - public FirstAgeGlaive() { - super(CinderLoE.MATERIAL_NEX_ICE); - this.lotrWeaponDamage = 11.5F; - this.setUnlocalizedName("lotr:firstAgeGlaive"); - this.setTextureName("lotr:firstAgeGlaive"); - this.setCreativeTab(LoECreativeTabs.tabCombatLoE); - LOTRWeaponStats.registerMeleeReach(FirstAgeGlaive.class, 1.8F); - LOTRWeaponStats.registerMeleeSpeed(FirstAgeGlaive.class, 1.0F); - } - - public boolean getIsRepairable(ItemStack itemstack, ItemStack repairItem) { - return (repairItem.getItem() == Item.getItemFromBlock(CinderLoE.enchantedIce)); - } - -// private void checkIncompatibleModifiers(ItemStack itemstack) {} - - public static UUID accessWeaponDamageModifier() { - return null; - } -} diff --git a/src/main/java/com/zivilon/cinder_loe/items/IceThawer.java b/src/main/java/com/zivilon/cinder_loe/items/IceThawer.java new file mode 100644 index 0000000..0cf0b9a --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/IceThawer.java @@ -0,0 +1,27 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.LoECreativeTabs; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.entity.player.EntityPlayer; + +import java.util.List; + +public class IceThawer extends Item { + + public IceThawer() { + this.setUnlocalizedName("ice_thawer"); + this.setTextureName("lotr:ice_thawer"); + setCreativeTab(LoECreativeTabs.tabMiscLoE); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean advanced) { + list.add(EnumChatFormatting.DARK_PURPLE + "You feel like if you held this"); + list.add(EnumChatFormatting.DARK_PURPLE + "against a frozen body, it might melt."); + list.add(EnumChatFormatting.DARK_PURPLE + "But why would you need such thing?"); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/LoEArmor.java b/src/main/java/com/zivilon/cinder_loe/items/LoEArmor.java new file mode 100644 index 0000000..087e536 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/LoEArmor.java @@ -0,0 +1,40 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRItemArmor; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class LoEArmor extends LOTRItemArmor { + public Item repair_item; + + public LoEArmor(LOTRMaterial material, int slotType) { + this(material, slotType, ""); + } + public LoEArmor(LOTRMaterial material, int slotType, String s) { + this(material, slotType, s, (Item) null); + } + public LoEArmor(LOTRMaterial material, int slotType, Item item) { + this(material, slotType, "", item); + } + public LoEArmor(LOTRMaterial material, int slotType, Block block) { + this(material, slotType, "", block); + } + public LoEArmor(LOTRMaterial material, int slotType, String s, Block block) { + this(material, slotType, s, Item.getItemFromBlock(block)); + } + public LoEArmor(LOTRMaterial material, int slotType, String s, Item item) { + super(material, slotType, s); + repair_item = item; + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + @Override + public boolean getIsRepairable(ItemStack item, ItemStack repair_material) { + if (repair_material.getItem() == repair_item) + return true; + return false; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/LoEBow.java b/src/main/java/com/zivilon/cinder_loe/items/LoEBow.java new file mode 100644 index 0000000..c412569 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/LoEBow.java @@ -0,0 +1,43 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRItemBow; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class LoEBow extends LOTRItemBow { + public Item repair_item; + + public LoEBow(LOTRMaterial material) { + this(material, (Item) null, 1.0D); + } + public LoEBow(LOTRMaterial material, Block repair_block) { + this(material, Item.getItemFromBlock(repair_block), 1.0D); + } + public LoEBow(LOTRMaterial material, Block repair_block, double damage) { + this(material, Item.getItemFromBlock(repair_block), damage); + } + public LoEBow(LOTRMaterial material, double damage, Block repair_block) { + this(material, Item.getItemFromBlock(repair_block), damage); + } + public LoEBow(LOTRMaterial material, double damage) { + this(material, (Item) null, damage); + } + public LoEBow(LOTRMaterial material, double damage, Item item) { + this(material, item, damage); + } + public LoEBow(LOTRMaterial material, Item item, double damage) { + super(material, damage); + repair_item = item; + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + @Override + public boolean getIsRepairable(ItemStack item, ItemStack repair_material) { + if (repair_material.getItem() == repair_item) + return true; + return false; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/LoEHammer.java b/src/main/java/com/zivilon/cinder_loe/items/LoEHammer.java new file mode 100644 index 0000000..a035da6 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/LoEHammer.java @@ -0,0 +1,31 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRItemHammer; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class LoEHammer extends LOTRItemHammer { + public Item repair_item; + + public LoEHammer(LOTRMaterial material) { + this(material, (Item) null); + } + public LoEHammer(LOTRMaterial material, Block repair_block) { + this(material, Item.getItemFromBlock(repair_block)); + } + public LoEHammer(LOTRMaterial material, Item item) { + super(material); + repair_item = item; + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + @Override + public boolean getIsRepairable(ItemStack item, ItemStack repair_material) { + if (repair_material.getItem() == repair_item) + return true; + return false; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/LoEItemMug.java b/src/main/java/com/zivilon/cinder_loe/items/LoEItemMug.java new file mode 100644 index 0000000..26fc1bc --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/LoEItemMug.java @@ -0,0 +1,69 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.LoECreativeTabs; + +import lotr.common.item.LOTRItemMug; +import lotr.common.item.LOTRItemMug.Vessel; +import lotr.client.render.LOTRDrinkIcons; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class LoEItemMug extends LOTRItemMug { + @SideOnly(Side.CLIENT) + public IIcon[] drinkIcons; + + @SideOnly(Side.CLIENT) + public IIcon liquidIcon; + + public LoEItemMug(boolean full, boolean food) { + super(full, food, false, 0.0F); + } + + public LoEItemMug(float alc) { + this(true, false, true, alc); + } + + public LoEItemMug(boolean full, boolean food, boolean brew, float alc) { + super(full, food, brew, alc); + setCreativeTab(LoECreativeTabs.tabFoodLoE); + } + + public void setTextureNameFromUnlocalizedName() { + String textureName = getUnlocalizedName().substring("item.".length()); // Strip the "item." prefix + this.setTextureName(textureName); + } + + + public void registerIcons(IIconRegister iconregister) { + if (this.isFullMug) { + this.drinkIcons = new IIcon[(Vessel.values()).length]; + for (int i = 0; i < (Vessel.values()).length; i++) { + this.drinkIcons[i] = LOTRDrinkIcons.registerDrinkIcon(iconregister, this, getIconString(), (Vessel.values()[i]).name); + } + this.liquidIcon = LOTRDrinkIcons.registerLiquidIcon(iconregister, this, getIconString()); + barrelGui_emptyBucketSlotIcon = iconregister.registerIcon("lotr:barrel_emptyBucketSlot"); + barrelGui_emptyMugSlotIcon = iconregister.registerIcon("lotr:barrel_emptyMugSlot"); + } else { + super.registerIcons(iconregister); + } + } + + public IIcon getIconFromDamage(int i) { + if (this.isFullMug) { + if (i == -1) + return this.liquidIcon; + int vessel = (getVessel(i)).id; + return this.drinkIcons[vessel]; + } + return super.getIconFromDamage(i); + } + + public static Vessel getVessel(int damage) { + int i = damage / vesselMeta; + return Vessel.forMeta(i); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/LoESpear.java b/src/main/java/com/zivilon/cinder_loe/items/LoESpear.java new file mode 100644 index 0000000..e875371 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/LoESpear.java @@ -0,0 +1,31 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRItemSpear; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class LoESpear extends LOTRItemSpear { + public Item repair_item; + + public LoESpear(LOTRMaterial material) { + this(material, (Item) null); + } + public LoESpear(LOTRMaterial material, Block repair_block) { + this(material, Item.getItemFromBlock(repair_block)); + } + public LoESpear(LOTRMaterial material, Item item) { + super(material); + repair_item = item; + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + @Override + public boolean getIsRepairable(ItemStack item, ItemStack repair_material) { + if (repair_material.getItem() == repair_item) + return true; + return false; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/LoESword.java b/src/main/java/com/zivilon/cinder_loe/items/LoESword.java new file mode 100644 index 0000000..395f37a --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/LoESword.java @@ -0,0 +1,36 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRItemSword; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class LoESword extends LOTRItemSword { + public Item repair_item; + + public LoESword(LOTRMaterial material) { + this(material, (Item) null); + } + public LoESword(LOTRMaterial material, Block repair_block) { + this(material, Item.getItemFromBlock(repair_block)); + } + public LoESword(LOTRMaterial material, Item item) { + super(material); + repair_item = item; + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + public LoESword setWeaponDamage(float damage) { + this.lotrWeaponDamage = damage; + return this; + } + + @Override + public boolean getIsRepairable(ItemStack item, ItemStack repair_material) { + if (repair_material.getItem() == repair_item) + return true; + return false; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/Nimveil.java b/src/main/java/com/zivilon/cinder_loe/items/Nimveil.java new file mode 100644 index 0000000..654f408 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/Nimveil.java @@ -0,0 +1,458 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.entity.effect.NimveilLightningBolt; +import com.zivilon.cinder_loe.potion.LoEPotions; +import com.zivilon.cinder_loe.util.Utilities; + +import lotr.common.LOTRLevelData; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.fac.LOTRFaction; +import lotr.common.item.LOTRItemSword; +import lotr.common.item.LOTRMaterial; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import java.util.List; + +public class Nimveil extends LOTRItemSword { + public static String NBT_STATE = "NimveilState"; + public static String NBT_VARIANT = "NimveilVariant"; + public static String NBT_TICK = "Tick"; + public IIcon[] icons; + + public Nimveil() { + super(CinderLoE.MATERIAL_NIMVEIL); + this.setHasSubtypes(true); + this.canRepair = false; + this.setMaxDamage(300); + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + public boolean getIsRepairable(ItemStack nimveil, ItemStack repair_material) { + if (repair_material.getItem() == Item.getItemFromBlock(CinderLoE.enchantedIce)) + return true; + return false; + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return true; // Always show the durability bar + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + int state = get_state(stack); + + // No charges found, show recharge meter + if (state == 0) { + double damage = ((double) stack.getItemDamage() / (double) stack.getMaxDamage()); + return damage; + } + + // The only variant where state is > 1 is "ancient". So we skip an NBT read here. + if (state > 1) { + double ancient_charges = 1.0D - (10.0D - (double)state) / 10.0D; + return 1.0D - ancient_charges; + } + + // If variant is not "ancient", then it can't have more than 1 charge. We already checked that there is charge, so it's at max + String variant = get_variant(stack); + if (!variant.equals("ancient")) + return 0.0D; + + // If variant is "ancient" and state is 1, we know the bar is at 0.9. + return 0.9D; + } + + /** + * Nimveil state handling + */ + public static byte get_state(ItemStack stack) { + if (stack.hasTagCompound()) { + NBTTagCompound tag = stack.getTagCompound(); + return tag.getByte(NBT_STATE); + } + return 0; + } + public static void set_state(ItemStack stack, byte state) { + NBTTagCompound tag = stack.getTagCompound(); + if (tag == null) { + tag = new NBTTagCompound(); + stack.setTagCompound(tag); + } + tag.setByte(NBT_STATE, state); + } + public static boolean decrement_state(ItemStack stack) { + NBTTagCompound tag = stack.getTagCompound(); + if (tag == null) { + return false; + } + byte state = tag.getByte(NBT_STATE); + if (state > 0) { + if (state == 1) + stack.setItemDamage(300); + tag.setByte(NBT_STATE, --state); + return true; + } + return false; + } + public static int tick(ItemStack stack) { + NBTTagCompound tag = stack.getTagCompound(); + if (tag == null) { + tag = new NBTTagCompound(); + stack.setTagCompound(tag); + } + int tick = tag.getInteger(NBT_TICK); + if (tick >= 20) { + tick = 0; + } else { + tick++; + } + tag.setInteger(NBT_TICK, tick); + return tick; + } + + /** + * Methods to put all variants under one item type + */ + public IIcon getIconIndex(ItemStack stack) + { + int icon_index = 0; + if (get_state(stack) != 0) + icon_index += 5; + switch(get_variant(stack)) { + case "valar": + break; + case "mortals": + icon_index += 1; + break; + case "udun": + icon_index += 2; + break; + case "sauron": + icon_index += 3; + break; + case "ancient": + icon_index += 4; + break; + default: + break; + } + return icons[icon_index]; + } + @Override + public void registerIcons(IIconRegister iconRegister) { + this.icons = new IIcon[10]; + this.icons[0] = iconRegister.registerIcon("lotr:nimveil_valar"); + this.icons[1] = iconRegister.registerIcon("lotr:nimveil_mortals"); + this.icons[2] = iconRegister.registerIcon("lotr:nimveil_udun"); + this.icons[3] = iconRegister.registerIcon("lotr:nimveil_sauron"); + this.icons[4] = iconRegister.registerIcon("lotr:nimveil_ancient"); + this.icons[5] = iconRegister.registerIcon("lotr:nimveil_valar_glow"); + this.icons[6] = iconRegister.registerIcon("lotr:nimveil_mortals_glow"); + this.icons[7] = iconRegister.registerIcon("lotr:nimveil_udun_glow"); + this.icons[8] = iconRegister.registerIcon("lotr:nimveil_sauron_glow"); + this.icons[9] = iconRegister.registerIcon("lotr:nimveil_ancient_glow"); + } + + + + @Override + public String getUnlocalizedName(ItemStack item) { +// return "item.nimveil_" + get_variant(item); + return "lotr:nimveil"; + } + public static String get_variant(ItemStack stack) { + if (stack.hasTagCompound()) { + NBTTagCompound tag = stack.getTagCompound(); + return tag.getString(NBT_VARIANT); + } + return "invalid"; + } + public static ItemStack init_variant(ItemStack stack, String variant) { + NBTTagCompound tag = stack.getTagCompound(); + if (tag == null) { + tag = new NBTTagCompound(); + stack.setTagCompound(tag); + } + tag.setString(NBT_VARIANT, variant); + tag.setByte(NBT_STATE, (byte)0); + return stack; + } + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean advanced) { + switch(get_variant(stack)) { + case "valar": + list.add(EnumChatFormatting.AQUA + "Valar"); + list.add(""); + list.add(EnumChatFormatting.GOLD + "Special Attack:"); + list.add(EnumChatFormatting.YELLOW + " Cast a line of lightning strikes"); + return; + case "mortals": + list.add(EnumChatFormatting.DARK_GREEN + "Mortals"); + list.add(""); + list.add(EnumChatFormatting.GOLD + "Special Attack:"); + list.add(EnumChatFormatting.YELLOW + " Deal 25% of your missing health as damage"); + return; + case "udun": + list.add(EnumChatFormatting.DARK_RED + "Udûn"); + list.add(""); + list.add(EnumChatFormatting.GOLD + "Special Attack:"); + list.add(EnumChatFormatting.YELLOW + " +20% Attack Damage"); + list.add(EnumChatFormatting.YELLOW + " Reverse Knockback"); + return; + case "sauron": + list.add(EnumChatFormatting.DARK_PURPLE + "Sauron"); + list.add(EnumChatFormatting.GOLD + "Special Attack:"); + list.add(EnumChatFormatting.YELLOW + " Apply Corrupting effect for 60 seconds"); + list.add(EnumChatFormatting.YELLOW + " Causes all NPCs to be hostile"); + return; + case "ancient": + list.add(EnumChatFormatting.DARK_AQUA + "Ancient"); + list.add(EnumChatFormatting.GOLD + "Special Attack:"); + list.add(EnumChatFormatting.YELLOW + " For each outnumbering non-allied NPC nearby"); + list.add(EnumChatFormatting.YELLOW + " +5% damage vs NPCs"); + list.add(EnumChatFormatting.YELLOW + " +1.25% damage vs players"); + return; + default: + list.add(EnumChatFormatting.GRAY + "Invalid"); + return; + } + } + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + list.add(init_variant(new ItemStack(item, 1), "ancient")); + list.add(init_variant(new ItemStack(item, 1), "valar")); + list.add(init_variant(new ItemStack(item, 1), "mortals")); + list.add(init_variant(new ItemStack(item, 1), "udun")); + list.add(init_variant(new ItemStack(item, 1), "sauron")); + } + + /** + * Modify sword mechanics to those unique to Nimveil + */ + @Override + public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { + if (attacker.worldObj.isRemote) return false; + if (stack.getItemDamage() != 0) return false; + + if (decrement_state(stack)) { + special_damage(stack, target, attacker); + } + return false; + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if (world.isRemote) return stack; + if (stack.getItemDamage() != 0) return stack; + + byte state = get_state(stack); + if (state == 0) { + special_action(stack, world, player); + } + return stack; + } + + + /** + * Unused but here to remind they exist for later + */ + @Override + public EnumAction getItemUseAction(ItemStack p_77661_1_) { + return EnumAction.none; // might be modified later, it's here so I remember it exists, + } + + /** + * Recharging durability (special attack) bar + */ + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) { + super.onUpdate(stack, world, entity, itemSlot, isSelected); + + // Only run on the server-side to prevent conflicts with client-side rendering + if (!world.isRemote && get_state(stack) == 0) { + int tick = tick(stack); + if (tick == 20 && stack.getItemDamage() > 0) { + stack.setItemDamage(stack.getItemDamage() - 1); + } + } + } + + /** + * Generic redirects for Nimveil special actions + */ + public void special_action(ItemStack stack, World world, EntityPlayer player) { + String variant = get_variant(stack); + switch(variant) { + case "valar": + special_action_valar(stack, world, player); + return; + case "mortals": + special_action_mortals(stack, world, player); + return; + case "udun": + special_action_udun(stack, world, player); + return; + case "sauron": + special_action_sauron(stack, world, player); + return; + case "ancient": + special_action_ancient(stack, world, player); + return; + default: + return; + } + } + public void special_damage(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { + String variant = get_variant(stack); + switch(variant) { + case "mortals": + special_damage_mortals(stack, target, attacker); + return; + case "udun": + special_damage_udun(stack, target, attacker); + return; + case "sauron": + special_damage_sauron(stack, target, attacker); + return; + case "ancient": + special_damage_ancient(stack, target, attacker); + return; + case "valar": + special_damage_valar(stack, target, attacker); + return; + default: + return; + } + } + + /** + * Valar Nimveil special actions + */ + public void special_action_valar(ItemStack stack, World world, EntityPlayer player) { + // No charges because this triggers immediately. Set damage to max + stack.setItemDamage(stack.getMaxDamage()); + System.out.println("Triggering Valar action. Also max damage is " + stack.getMaxDamage()); + summon_lightning_line(world, player); + } + public void special_damage_valar(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { + // Do nothing, this method should never run but exists for consistency and extensibility + } + public void summon_lightning_line(World world, EntityPlayer player) { + // Get the player's facing direction + float yaw = player.rotationYaw; + + // Calculate the initial position, 4 blocks in front + double x = player.posX - Math.sin(Math.toRadians(yaw)) * 7; + double z = player.posZ + Math.cos(Math.toRadians(yaw)) * 7; + double y = player.posY; + + // Summon the first lightning bolt + world.spawnEntityInWorld(new NimveilLightningBolt(world, x, y, z)); + + // Summon 6 more lightning bolts, each 3 blocks apart + for (int i = 1; i < 7; i++) { + x -= Math.sin(Math.toRadians(yaw)) * 5; + z += Math.cos(Math.toRadians(yaw)) * 5; + world.spawnEntityInWorld(new NimveilLightningBolt(world, x, y, z)); + } + } + + /** + * Udûn Nimveil special actions + */ + public void special_action_udun(ItemStack stack, World world, EntityPlayer player) { + // Set 1 charge + set_state(stack, (byte)1); + } + public void special_damage_udun(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { + double damage = Utilities.calculate_melee_damage_on_entity(target, attacker); + target.attackEntityFrom(DamageSource.causeMobDamage(attacker), 0.2F * (float)damage); + Utilities.knockback(target, attacker, -3.0D); + target.worldObj.playSoundAtEntity(target, "lotr:item.maceSauron", 1.0F, 1.3F); + } + + /** + * Mortals Nimveil special actions + */ + public void special_action_mortals(ItemStack stack, World world, EntityPlayer player) { + // Set 1 charge + set_state(stack, (byte)1); + } + public void special_damage_mortals(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { + // Set 1 charge + float max_health = attacker.getMaxHealth(); + float current_health = attacker.getHealth(); + target.attackEntityFrom(DamageSource.causeMobDamage(attacker).setDamageBypassesArmor(), 0.25F * (max_health - current_health)); + } + + /** + * Sauron Nimveil special actions + */ + public void special_action_sauron(ItemStack stack, World world, EntityPlayer player) { + // Set 1 charge + set_state(stack, (byte)1); + } + public void special_damage_sauron(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { + // Check if the target is an instance of EntityPlayer + if (target instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) target; + + // Apply the Corrupting potion effect + player.addPotionEffect(new PotionEffect(LoEPotions.corrupting.id, 1200, 0)); // 60 seconds duration (20 ticks per second) + } + } + + /** + * Ancient Nimveil special actions + */ + public void special_action_ancient(ItemStack stack, World world, EntityPlayer player) { + // Set 10 charges + this.set_state(stack, ((byte)10)); + } + public void special_damage_ancient(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { + if (!(attacker instanceof EntityPlayer)) return; + LOTRFaction pledged_faction = LOTRLevelData.getData(((EntityPlayer)attacker)).getPledgeFaction(); + if (pledged_faction == null) { + ((EntityPlayer)attacker).addChatMessage(new ChatComponentText("You need to be pledged to a faction to use this")); + return; + } + List entity_list = attacker.worldObj.getEntitiesWithinAABB(LOTREntityNPC.class, attacker.boundingBox.expand(100, 10, 100)); + int friendly_count = 0; + int total_count = entity_list.size(); + double damage = 0.0D; + for (LOTREntityNPC npc : entity_list) { + if (npc.getFaction().isGoodRelation(pledged_faction)) + friendly_count++; + } + int outnumber_count = Math.min(total_count - friendly_count * 2, 20); + if (outnumber_count > 0) + damage = Utilities.calculate_melee_damage_on_entity(target, attacker); + float final_damage = 0.0F; + if (!(target instanceof EntityPlayer)) { + final_damage = 0.05F * (float)outnumber_count * (float)damage; + target.attackEntityFrom(DamageSource.causeMobDamage(attacker), final_damage); + return; + } + final_damage = 0.0125F * ((float)outnumber_count) * ((float)damage); + target.attackEntityFrom(DamageSource.causeMobDamage(attacker), final_damage); + return; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/NimveilPart.java b/src/main/java/com/zivilon/cinder_loe/items/NimveilPart.java new file mode 100644 index 0000000..c902139 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/NimveilPart.java @@ -0,0 +1,128 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.entity.projectile.EntityWarDart; +import com.zivilon.cinder_loe.LoECreativeTabs; + +import lotr.common.dispenser.LOTRDispenseThrowingAxe; +import lotr.common.enchant.LOTREnchantment; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.entity.projectile.LOTREntityThrowingAxe; +import lotr.common.item.LOTRMaterial; +import lotr.common.recipe.LOTRRecipes; +import net.minecraft.block.BlockDispenser; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.creativetab.CreativeTabs; +import java.util.List; + +public class NimveilPart extends Item { + public IIcon[] icons; + + public NimveilPart() { + this.setHasSubtypes(true); + setCreativeTab(LoECreativeTabs.tabMiscLoE); + } + + @Override + public IIcon getIconFromDamage(int damage) { + if (damage < 0 || damage >= icons.length) { + damage = 0; + } + return this.icons[damage]; + } + + @Override + public void registerIcons(IIconRegister iconRegister) { + this.icons = new IIcon[7]; + this.icons[0] = iconRegister.registerIcon("lotr:nimveil_hilt"); + this.icons[1] = iconRegister.registerIcon("lotr:nimveil_blade"); + this.icons[2] = iconRegister.registerIcon("lotr:nimveil_gem_valar"); + this.icons[3] = iconRegister.registerIcon("lotr:nimveil_gem_mortals"); + this.icons[4] = iconRegister.registerIcon("lotr:nimveil_gem_udun"); + this.icons[5] = iconRegister.registerIcon("lotr:nimveil_gem_sauron"); + this.icons[6] = iconRegister.registerIcon("lotr:nimveil_gem_ancient"); + } + + public static String get_part_type(ItemStack item) { + switch(item.getItemDamage()) { + case 0: + return "hilt"; + case 1: + return "blade"; + case 2: + case 3: + case 4: + case 5: + case 6: + return "gem"; + default: + return "hilt"; + } + } + + public static String get_gem_type(ItemStack item) { + switch(item.getItemDamage()) { + case 0: + case 1: + return "invalid"; + case 2: + return "valar"; + case 3: + return "mortals"; + case 4: + return "udun"; + case 5: + return "sauron"; + case 6: + return "ancient"; + default: + return "invalid"; + } + } + + @Override + public String getUnlocalizedName(ItemStack item) { + return "item.nimveil_" + get_part_type(item); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean advanced) { + switch(get_gem_type(stack)) { + case "valar": + list.add(EnumChatFormatting.AQUA + "Valar"); + return; + case "mortals": + list.add(EnumChatFormatting.DARK_GREEN + "Mortals"); + return; + case "udun": + list.add(EnumChatFormatting.DARK_RED + "Udûn"); + return; + case "sauron": + list.add(EnumChatFormatting.DARK_PURPLE + "Sauron"); + return; + case "ancient": + list.add(EnumChatFormatting.DARK_AQUA + "Ancient"); + return; + default: + return; + } + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < icons.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/WarDart.java b/src/main/java/com/zivilon/cinder_loe/items/WarDart.java index 16a9421..0595ef3 100644 --- a/src/main/java/com/zivilon/cinder_loe/items/WarDart.java +++ b/src/main/java/com/zivilon/cinder_loe/items/WarDart.java @@ -1,8 +1,8 @@ package com.zivilon.cinder_loe.items; import com.zivilon.cinder_loe.entity.projectile.EntityWarDart; - import com.zivilon.cinder_loe.LoECreativeTabs; + import lotr.common.dispenser.LOTRDispenseThrowingAxe; import lotr.common.enchant.LOTREnchantment; import lotr.common.enchant.LOTREnchantmentHelper; @@ -62,7 +62,7 @@ public class WarDart extends Item { @Override public void registerIcons(IIconRegister iconRegister) { - this.icons = new IIcon[14]; + this.icons = new IIcon[15]; this.icons[0] = iconRegister.registerIcon("lotr:war_dart_headless"); this.icons[1] = iconRegister.registerIcon("lotr:war_dart_copper"); this.icons[2] = iconRegister.registerIcon("lotr:war_dart_bronze"); @@ -77,6 +77,7 @@ public class WarDart extends Item { this.icons[11] = iconRegister.registerIcon("lotr:war_dart_red_dwarven"); this.icons[12] = iconRegister.registerIcon("lotr:war_dart_mithril"); this.icons[13] = iconRegister.registerIcon("lotr:war_dart_ancient"); + this.icons[14] = iconRegister.registerIcon("lotr:war_dart_morgul"); } public static String getDartMaterial(ItemStack item) { @@ -107,6 +108,8 @@ public class WarDart extends Item { return "mithril"; case 13: return "ancient"; + case 14: + return "morgul"; default: return "headless"; } @@ -137,6 +140,7 @@ public class WarDart extends Item { case 11: return 6; // Red Dwarven case 12: return 10; // Mithril case 13: return 12; // Ancient + case 14: return 6; // Morgul default: return 0; } } diff --git a/src/main/java/com/zivilon/cinder_loe/items/WarDartHeads.java b/src/main/java/com/zivilon/cinder_loe/items/WarDartHeads.java index b08ba43..fac06ae 100644 --- a/src/main/java/com/zivilon/cinder_loe/items/WarDartHeads.java +++ b/src/main/java/com/zivilon/cinder_loe/items/WarDartHeads.java @@ -22,10 +22,13 @@ public class WarDartHeads extends Item { @Override public void registerIcons(IIconRegister iconRegister) { - icons = new IIcon[6]; - for (int i = 0; i < icons.length; i++) { + icons = new IIcon[12]; + for (int i = 0; i < 6; i++) { icons[i] = iconRegister.registerIcon("lotr:war_dart_heads_" + i); } + for (int i = 0; i < 6; i++) { + icons[i + 6] = iconRegister.registerIcon("lotr:war_dart_heads_" + i + "_morgul"); + } } @Override @@ -50,7 +53,8 @@ public class WarDartHeads extends Item { case 10: return 0xFFFFB0; // Gilded Iron case 11: return 0xFFC48B; // Red dwarven case 12: return 0xAFB3D3; // Mithril - case 13: return 0x033346; // Ancient + case 13: return 0x335753; // Ancient + case 14: return 16777215; // Morgul default: return 0xFFFFFF; // Blank } } @@ -63,16 +67,22 @@ public class WarDartHeads extends Item { @Override public IIcon getIcon(ItemStack stack, int renderPass) { int count = stack.stackSize; + int dmg = stack.getItemDamage(); + if (count > 5 || count < 1) { + if (dmg == 14) + return icons[6]; return icons[0]; } else { + if (dmg == 14) + return icons[count + 6]; return icons[count]; } } @Override public void getSubItems(Item item, CreativeTabs tab, List list) { - for (int i = 1; i < 14; i++) { + for (int i = 1; i < 15; i++) { list.add(new ItemStack(item, 1, i)); } } diff --git a/src/main/java/com/zivilon/cinder_loe/items/WeaponPart.java b/src/main/java/com/zivilon/cinder_loe/items/WeaponPart.java new file mode 100644 index 0000000..d047f44 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/WeaponPart.java @@ -0,0 +1,127 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.entity.projectile.EntityWarDart; +import com.zivilon.cinder_loe.LoECreativeTabs; + +import lotr.common.dispenser.LOTRDispenseThrowingAxe; +import lotr.common.enchant.LOTREnchantment; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.entity.projectile.LOTREntityThrowingAxe; +import lotr.common.item.LOTRMaterial; +import lotr.common.recipe.LOTRRecipes; +import net.minecraft.block.BlockDispenser; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.creativetab.CreativeTabs; +import java.util.List; + +public class WeaponPart extends Item { + public IIcon[] icons; + + public WeaponPart() { + this.setHasSubtypes(true); + setCreativeTab(LoECreativeTabs.tabMiscLoE); + } + + @Override + public IIcon getIconFromDamage(int damage) { + if (damage < 0 || damage >= icons.length) { + damage = 0; + } + return this.icons[damage]; + } + + @Override + public void registerIcons(IIconRegister iconRegister) { + this.icons = new IIcon[12]; + this.icons[0] = iconRegister.registerIcon("lotr:deceiver_blade_blade"); + this.icons[1] = iconRegister.registerIcon("lotr:deceiver_blade_guard"); + this.icons[2] = iconRegister.registerIcon("lotr:deceiver_blade_hilt"); + this.icons[3] = iconRegister.registerIcon("lotr:anarore_bow_top"); + this.icons[4] = iconRegister.registerIcon("lotr:anarore_bow_bottom"); + this.icons[5] = iconRegister.registerIcon("lotr:anarore_bow_bowstring"); + this.icons[6] = iconRegister.registerIcon("lotr:chieftain_club_???"); + this.icons[7] = iconRegister.registerIcon("lotr:chieftain_club_???"); + this.icons[8] = iconRegister.registerIcon("lotr:chieftain_club_???"); + this.icons[9] = iconRegister.registerIcon("lotr:glaechir_spear_tip"); + this.icons[10] = iconRegister.registerIcon("lotr:glaechir_spear_shaft"); + this.icons[11] = iconRegister.registerIcon("lotr:glaechir_spear_???"); + } + + public static String get_part(ItemStack item) { + switch(item.getItemDamage()) { + case 0: + return "blade"; + case 1: + return "guard"; + case 2: + return "hilt"; + case 3: + return "top"; + case 4: + return "bottom"; + case 5: + return "bowstring"; + case 6: + return "club"; + case 7: + return "spikes"; + case 8: + return "???"; + case 9: + return "tip"; + case 10: + return "shaft"; + case 11: + return "???"; + default: + return "invalid"; + } + } + + public static String get_weapon(ItemStack item) { + switch(item.getItemDamage()) { + case 0: + case 1: + case 2: + return "deceiver_blade"; + case 3: + case 4: + case 5: + return "anarore_bow"; + case 6: + case 7: + case 8: + return "troll_chieftain_club"; + case 9: + case 10: + case 11: + return "glaechir_spear"; + default: + return "invalid"; + } + } + + @Override + public String getUnlocalizedName(ItemStack item) { + return "item." + get_weapon(item) + "_" + get_part(item); + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < icons.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinEnchantmentHelper.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinEnchantmentHelper.java new file mode 100644 index 0000000..230f580 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinEnchantmentHelper.java @@ -0,0 +1,27 @@ +package com.zivilon.cinder_loe.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import lotr.common.item.LOTRWeaponStats; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantment; +import lotr.common.enchant.LOTREnchantmentHelper; + +@Mixin(EnchantmentHelper.class) +public class MixinEnchantmentHelper { + + /** + * @author Shinare + * @reason Having full knockbackResistance attribute now negates bonus knockback as well + */ + @Overwrite + public static int getKnockbackModifier(EntityLivingBase attacker, EntityLivingBase target) { + int vanilla_ench_level = EnchantmentHelper.getEnchantmentLevel(Enchantment.knockback.effectId, attacker.getHeldItem()); + int base_extra_knockback = LOTRWeaponStats.getBaseExtraKnockback(attacker.getHeldItem()); + int modifier_extra_knockback = LOTREnchantmentHelper.calcExtraKnockback(attacker.getHeldItem()); + if (target.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).getAttributeValue() == 1.0D) return 0; + return vanilla_ench_level + base_extra_knockback + modifier_extra_knockback; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinEntity.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinEntity.java new file mode 100644 index 0000000..a1e4e4c --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinEntity.java @@ -0,0 +1,12 @@ +package com.zivilon.cinder_loe.mixins; + +import net.minecraft.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(Entity.class) +public interface MixinEntity { + + @Accessor("invulnerable") + void setInvulnerable(boolean invulnerable); +} diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinEntityArrow.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinEntityArrow.java new file mode 100644 index 0000000..bda8bc1 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinEntityArrow.java @@ -0,0 +1,305 @@ +package com.zivilon.cinder_loe.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; +import lotr.common.item.LOTRWeaponStats; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantment; +import lotr.common.enchant.LOTREnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.play.server.S2BPacketChangeGameState; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import java.util.List; +import net.minecraft.entity.monster.EntityEnderman; + +@Mixin(EntityArrow.class) +public abstract class MixinEntityArrow extends Entity { + + public MixinEntityArrow(World world) { + super(world); + } + + @Shadow + public abstract void setIsCritical(boolean p_70243_1_); + @Shadow + public abstract boolean getIsCritical(); + + @Shadow + private Block field_145790_g; + @Shadow + private int field_145791_d; + @Shadow + private int field_145792_e; + @Shadow + private int field_145789_f; + @Shadow + private boolean inGround; + @Shadow + public int arrowShake; + @Shadow + private int inData; + @Shadow + private int ticksInGround; + @Shadow + private int ticksInAir; + @Shadow + public Entity shootingEntity; + @Shadow + private int knockbackStrength; + @Shadow + private double damage; + + /** + * @author Shinare + * @reason Having full knockbackResistance attribute now negates bonus knockback as well + */ + @Overwrite + public void onUpdate() { + super.onUpdate(); + + EntityArrow arrow = (EntityArrow)(Object)this; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) { + float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f) * 180.0D / Math.PI); + } + + Block block = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f); + + if (block.getMaterial() != Material.air) { + block.setBlockBoundsBasedOnState(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f); + AxisAlignedBB axisalignedbb = block.getCollisionBoundingBoxFromPool(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f); + + if (axisalignedbb != null && axisalignedbb.isVecInside(Vec3.createVectorHelper(this.posX, this.posY, this.posZ))) { + this.inGround = true; + } + } + + if (this.arrowShake > 0) { + --this.arrowShake; + } + + if (this.inGround) { + int j = this.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f); + + if (block == this.field_145790_g && j == this.inData) { + ++this.ticksInGround; + + if (this.ticksInGround == 1200) { + this.setDead(); + } + } else { + this.inGround = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.ticksInGround = 0; + this.ticksInAir = 0; + } + } else { + ++this.ticksInAir; + Vec3 vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + Vec3 vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition movingobjectposition = this.worldObj.func_147447_a(vec31, vec3, false, true, false); + vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (movingobjectposition != null) { + vec3 = Vec3.createVectorHelper(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord); + } + + Entity entity = null; + List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double d0 = 0.0D; + int i; + float f1; + + for (i = 0; i < list.size(); ++i) { + Entity entity1 = (Entity)list.get(i); + + if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) { + f1 = 0.3F; + AxisAlignedBB axisalignedbb1 = entity1.boundingBox.expand((double)f1, (double)f1, (double)f1); + MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3); + + if (movingobjectposition1 != null) { + double d1 = vec31.distanceTo(movingobjectposition1.hitVec); + + if (d1 < d0 || d0 == 0.0D) { + entity = entity1; + d0 = d1; + } + } + } + } + + if (entity != null) { + movingobjectposition = new MovingObjectPosition(entity); + } + + if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer) { + EntityPlayer entityplayer = (EntityPlayer)movingobjectposition.entityHit; + + if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer)) { + movingobjectposition = null; + } + } + + float f2; + float f4; + + if (movingobjectposition != null) { + if (movingobjectposition.entityHit != null) { + f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + int k = MathHelper.ceiling_double_int((double)f2 * this.damage); + + if (this.getIsCritical()) { + k += this.rand.nextInt(k / 2 + 2); + } + + DamageSource damagesource = null; + + if (this.shootingEntity == null) { + damagesource = DamageSource.causeArrowDamage(arrow, this); + } else { + damagesource = DamageSource.causeArrowDamage(arrow, this.shootingEntity); + } + + if (arrow.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman)) { + movingobjectposition.entityHit.setFire(5); + } + + if (movingobjectposition.entityHit.attackEntityFrom(damagesource, (float)k)) { + if (movingobjectposition.entityHit instanceof EntityLivingBase) { + EntityLivingBase entitylivingbase = (EntityLivingBase)movingobjectposition.entityHit; + + if (!this.worldObj.isRemote) { + entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1); + } + + + double knockback_resistance = entitylivingbase.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).getAttributeValue(); + if (this.knockbackStrength > 0 && knockback_resistance < 1.0D) { + f4 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (f4 > 0.0F) { + entitylivingbase.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4); + } + } + + if (this.shootingEntity != null && this.shootingEntity instanceof EntityLivingBase) { + EnchantmentHelper.func_151384_a(entitylivingbase, this.shootingEntity); + EnchantmentHelper.func_151385_b((EntityLivingBase)this.shootingEntity, entitylivingbase); + } + + if (this.shootingEntity != null && entitylivingbase != this.shootingEntity && entitylivingbase instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP) { + ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(6, 0.0F)); + } + } + + arrow.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + + if (!(movingobjectposition.entityHit instanceof EntityEnderman)) { + arrow.setDead(); + } + } else { + this.motionX *= -0.10000000149011612D; + this.motionY *= -0.10000000149011612D; + this.motionZ *= -0.10000000149011612D; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + } + } else { + this.field_145791_d = movingobjectposition.blockX; + this.field_145792_e = movingobjectposition.blockY; + this.field_145789_f = movingobjectposition.blockZ; + this.field_145790_g = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f); + this.inData = arrow.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f); + this.motionX = (double)((float)(movingobjectposition.hitVec.xCoord - this.posX)); + this.motionY = (double)((float)(movingobjectposition.hitVec.yCoord - this.posY)); + this.motionZ = (double)((float)(movingobjectposition.hitVec.zCoord - this.posZ)); + f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / (double)f2 * 0.05000000074505806D; + this.posY -= this.motionY / (double)f2 * 0.05000000074505806D; + this.posZ -= this.motionZ / (double)f2 * 0.05000000074505806D; + this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.arrowShake = 7; + this.setIsCritical(false); + + if (this.field_145790_g.getMaterial() != Material.air) { + this.field_145790_g.onEntityCollidedWithBlock(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f, this); + } + } + } + + if (arrow.getIsCritical()) { + for (i = 0; i < 4; ++i) { + arrow.worldObj.spawnParticle("crit", arrow.posX + arrow.motionX * (double)i / 4.0D, arrow.posY + arrow.motionY * (double)i / 4.0D, arrow.posZ + arrow.motionZ * (double)i / 4.0D, -arrow.motionX, -arrow.motionY + 0.2D, -arrow.motionZ); + } + } + + arrow.posX += arrow.motionX; + arrow.posY += arrow.motionY; + arrow.posZ += arrow.motionZ; + f2 = MathHelper.sqrt_double(arrow.motionX * arrow.motionX + arrow.motionZ * arrow.motionZ); + arrow.rotationYaw = (float)(Math.atan2(arrow.motionX, arrow.motionZ) * 180.0D / Math.PI); + + for (arrow.rotationPitch = (float)(Math.atan2(arrow.motionY, (double)f2) * 180.0D / Math.PI); arrow.rotationPitch - arrow.prevRotationPitch < -180.0F; arrow.prevRotationPitch -= 360.0F) { + ; + } + + while (arrow.rotationPitch - arrow.prevRotationPitch >= 180.0F) { + arrow.prevRotationPitch += 360.0F; + } + + while (arrow.rotationYaw - arrow.prevRotationYaw < -180.0F) { + arrow.prevRotationYaw -= 360.0F; + } + + while (arrow.rotationYaw - arrow.prevRotationYaw >= 180.0F) { + arrow.prevRotationYaw += 360.0F; + } + + arrow.rotationPitch = arrow.prevRotationPitch + (arrow.rotationPitch - arrow.prevRotationPitch) * 0.2F; + arrow.rotationYaw = arrow.prevRotationYaw + (arrow.rotationYaw - arrow.prevRotationYaw) * 0.2F; + float f3 = 0.99F; + f1 = 0.05F; + + if (arrow.isInWater()) { + for (int l = 0; l < 4; ++l) { + f4 = 0.25F; + arrow.worldObj.spawnParticle("bubble", arrow.posX - arrow.motionX * (double)f4, arrow.posY - arrow.motionY * (double)f4, arrow.posZ - arrow.motionZ * (double)f4, arrow.motionX, arrow.motionY, arrow.motionZ); + } + + f3 = 0.8F; + } + + if (arrow.isWet()) { + arrow.extinguish(); + } + + arrow.motionX *= (double)f3; + arrow.motionY *= (double)f3; + arrow.motionZ *= (double)f3; + arrow.motionY -= (double)f1; + arrow.setPosition(arrow.posX, arrow.posY, arrow.posZ); + this.func_145775_I(); + } + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinEntityLivingBase.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinEntityLivingBase.java new file mode 100644 index 0000000..2bec3e5 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinEntityLivingBase.java @@ -0,0 +1,202 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.entity.Nex; +import com.zivilon.cinder_loe.entity.NexMiniboss; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; + +import net.minecraft.potion.Potion; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import net.minecraft.entity.effect.EntityLightningBolt; + +import net.minecraftforge.common.ForgeHooks; + +import java.util.List; + +@Mixin(EntityLivingBase.class) +public abstract class MixinEntityLivingBase extends Entity { + @Shadow + protected int entityAge; + @Shadow + public int maxHurtTime; + @Shadow + public float attackedAtYaw; + @Shadow + protected EntityPlayer attackingPlayer; + @Shadow + protected int recentlyHit; + @Shadow + public int hurtTime; + @Shadow + public float prevHealth; + @Shadow + protected float lastDamage; + @Shadow + public int maxHurtResistantTime; + @Shadow + public float limbSwingAmount; + + @Shadow + protected abstract float getSoundPitch(); + @Shadow + protected abstract float getSoundVolume(); + @Shadow + protected abstract String getHurtSound(); + @Shadow + public abstract void onDeath(DamageSource p_70645_1_); + @Shadow + protected abstract String getDeathSound(); + @Shadow + public abstract float getHealth(); + @Shadow + public abstract void knockBack(Entity p_70653_1_, float p_70653_2_, double p_70653_3_, double p_70653_5_); + @Shadow + public abstract void setRevengeTarget(EntityLivingBase p_70604_1_); + @Shadow + protected abstract void damageEntity(DamageSource p_70665_1_, float p_70665_2_); + @Shadow + public abstract ItemStack getEquipmentInSlot(int p_71124_1_); + @Shadow + public abstract boolean isPotionActive(int p_82165_1_); + @Shadow + public abstract boolean isPotionActive(Potion p_70644_1_); + + public MixinEntityLivingBase(World world) { + super(world); + } + + /** + * @author Shinare + * @reason Adding Nex fire damage modifiers + */ + @Overwrite + public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_) { + System.out.println(this.getCommandSenderName() + " received " + p_70097_2_ + " damage"); + if (ForgeHooks.onLivingAttack((EntityLivingBase)(Object)this, p_70097_1_, p_70097_2_)) return false; + if (this.isEntityInvulnerable()) { + return false; + } else if (this.worldObj.isRemote) { + return false; + } else { + this.entityAge = 0; + + if (this.getHealth() <= 0.0F) { + return false; + } else if (p_70097_1_.isFireDamage()) { + if ((EntityLivingBase)(Object)this instanceof Nex || (EntityLivingBase)(Object)this instanceof NexMiniboss) return false; + boolean fire_phase = Nex.is_nex_fire_phase_nearby((EntityLivingBase)(Object)this); + if (this.isPotionActive(Potion.fireResistance)) { + if (!fire_phase) return false; + p_70097_2_ *= 0.5F; + } + if (fire_phase) { + p_70097_2_ *= 3.0F; + List list = this.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, this.boundingBox.expand(5, 5, 5)); + for (EntityLivingBase entity : list) { + if (!(entity instanceof Nex || entity instanceof NexMiniboss)) { + entity.setFire(10); + } + } + } + } + if ((p_70097_1_ == DamageSource.anvil || p_70097_1_ == DamageSource.fallingBlock) && this.getEquipmentInSlot(4) != null) { + this.getEquipmentInSlot(4).damageItem((int)(p_70097_2_ * 4.0F + this.rand.nextFloat() * p_70097_2_ * 2.0F), (EntityLivingBase)(Object)this); + p_70097_2_ *= 0.75F; + } + + this.limbSwingAmount = 1.5F; + boolean flag = true; + + if ((float)this.hurtResistantTime > (float)this.maxHurtResistantTime / 2.0F) { + if (p_70097_2_ <= this.lastDamage) { + return false; + } + + this.damageEntity(p_70097_1_, p_70097_2_ - this.lastDamage); + this.lastDamage = p_70097_2_; + flag = false; + } else { + this.lastDamage = p_70097_2_; + this.prevHealth = this.getHealth(); + this.hurtResistantTime = this.maxHurtResistantTime; + this.damageEntity(p_70097_1_, p_70097_2_); + this.hurtTime = this.maxHurtTime = 10; + } + + this.attackedAtYaw = 0.0F; + Entity entity = p_70097_1_.getEntity(); + + if (entity != null) { + if (entity instanceof EntityLivingBase) { + this.setRevengeTarget((EntityLivingBase)entity); + } + + if (entity instanceof EntityPlayer) { + this.recentlyHit = 100; + this.attackingPlayer = (EntityPlayer)entity; + } else if (entity instanceof net.minecraft.entity.passive.EntityTameable) { + net.minecraft.entity.passive.EntityTameable entitywolf = (net.minecraft.entity.passive.EntityTameable)entity; + + if (entitywolf.isTamed()) { + this.recentlyHit = 100; + this.attackingPlayer = null; + } + } + } + + if (flag) { + this.worldObj.setEntityState(this, (byte)2); + + if (p_70097_1_ != DamageSource.drown) { + this.setBeenAttacked(); + } + + if (entity != null) { + double d1 = entity.posX - this.posX; + double d0; + + for (d0 = entity.posZ - this.posZ; d1 * d1 + d0 * d0 < 1.0E-4D; d0 = (Math.random() - Math.random()) * 0.01D) { + d1 = (Math.random() - Math.random()) * 0.01D; + } + + this.attackedAtYaw = (float)(Math.atan2(d0, d1) * 180.0D / Math.PI) - this.rotationYaw; + this.knockBack(entity, p_70097_2_, d1, d0); + } else { + this.attackedAtYaw = (float)((int)(Math.random() * 2.0D) * 180); + } + } + + String s; + + if (this.getHealth() <= 0.0F) { + s = this.getDeathSound(); + + if (flag && s != null) { + this.playSound(s, this.getSoundVolume(), this.getSoundPitch()); + } + + this.onDeath(p_70097_1_); + } else { + s = this.getHurtSound(); + + if (flag && s != null) { + this.playSound(s, this.getSoundVolume(), this.getSoundPitch()); + } + } + + return true; + } + } + + public void onStruckByLightning(EntityLightningBolt lightning) { + super.onStruckByLightning(lightning); + System.out.println(this.getCommandSenderName() + " was struck by lightning!"); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinItemBlock.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinItemBlock.java deleted file mode 100644 index ef530a7..0000000 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinItemBlock.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.zivilon.cinder_loe.mixins; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -@Mixin(ItemBlock.class) -public abstract class MixinItemBlock { - - @Shadow - public final Block field_150939_a; - - public MixinItemBlock(Block block) { - this.field_150939_a = block; - } - - @Overwrite(remap = false) - public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) { - - System.out.println("Placing block with metadata " + metadata); - if (!world.setBlock(x, y, z, field_150939_a, metadata, 3)) { - return false; - } - - if (world.getBlock(x, y, z) == field_150939_a) { - field_150939_a.onBlockPlacedBy(world, x, y, z, player, stack); - field_150939_a.onPostBlockPlaced(world, x, y, z, metadata); - } - - return true; - } -} diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinItemRenderer.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinItemRenderer.java index 70fdd28..741a262 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinItemRenderer.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinItemRenderer.java @@ -1,11 +1,14 @@ package com.zivilon.cinder_loe.mixins; +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.CinderLoE_Config; import com.zivilon.cinder_loe.client.render.item.RenderHelper; import com.zivilon.cinder_loe.util.Utilities; -import com.zivilon.cinder_loe.CinderLoE_Config; + import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; + import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; @@ -62,13 +65,26 @@ public abstract class MixinItemRenderer { @Shadow private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png"); - + @Shadow + private ItemStack itemToRender; + @Shadow + private float equippedProgress; + @Shadow + private float prevEquippedProgress; @Shadow private RenderBlocks renderBlocksIr; - @Shadow private Minecraft mc; + /** + * Reimplements the default behavior of the renderItem method. + * + * @author Shinare + * @reason Added support for semi-transparent item textures + * @param p_78443_1_ Don't ask me it's default parameter + * @param p_78443_2_ Don't ask me it's default parameter + * @param type Don't ask me it's default parameter + */ @Overwrite(remap = false) public void renderItem(EntityLivingBase p_78443_1_, ItemStack p_78443_2_, int p_78443_3_, ItemRenderType type) { GL11.glPushMatrix(); @@ -256,20 +272,29 @@ public abstract class MixinItemRenderer { if (!enchant) GL11.glPopMatrix(); // Restore the saved OpenGL state } + /** + * @author Shinare + * @reason Failsafe in case some @Redirect fails + */ @Overwrite public static void renderItemIn2D(Tessellator p_78439_0_, float p_78439_1_, float p_78439_2_, float p_78439_3_, float p_78439_4_, int p_78439_5_, int p_78439_6_, float p_78439_7_) { // Redirect to new custom renderer. This should not be necessary but works as failsafe RenderHelper.customRenderItemIn2D(p_78439_0_, p_78439_1_, p_78439_2_, p_78439_3_, p_78439_4_, p_78439_5_, p_78439_6_, p_78439_7_, false); + } -/* DEBUG - System.out.println("Printing stacktrace from original render method"); - Utilities.writeLog("Printing stacktrace from original render method"); - StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); - for (StackTraceElement element : stackTraceElements) { - Utilities.writeLog(element.toString()); + /** + * Making recharging Nimveil not be constantly in the item change animation + */ + @Inject(method = "renderItemInFirstPerson", at = @At("HEAD"), cancellable = true) + public void inject(float f, CallbackInfo ci) { + if (itemToRender != null && itemToRender.getItem() == CinderLoE.nimveil) { + EntityClientPlayerMP entityclientplayermp = this.mc.thePlayer; + ItemStack itemstack = entityclientplayermp.inventory.getCurrentItem(); + equippedProgress = 1.0F; + prevEquippedProgress = 1.0F; + itemToRender = itemstack; } - Utilities.writeLog(""); -*/ } + } diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRArmorModels.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRArmorModels.java index 4d71ca6..46bd3d1 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRArmorModels.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRArmorModels.java @@ -47,10 +47,10 @@ import net.minecraft.item.Item; @Mixin(LOTRArmorModels.class) public class MixinLOTRArmorModels { - @Shadow + @Shadow(remap = false) private Map> specialArmorModels; - @Shadow + @Shadow(remap = false) public void copyModelRotations(ModelBiped target, ModelBiped src) { } diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRBrewingRecipes.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRBrewingRecipes.java new file mode 100644 index 0000000..d82b743 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRBrewingRecipes.java @@ -0,0 +1,15 @@ +package com.zivilon.cinder_loe.mixins; + +import lotr.common.recipe.LOTRBrewingRecipes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; +import net.minecraft.item.ItemStack; + +@Mixin(LOTRBrewingRecipes.class) +public interface MixinLOTRBrewingRecipes { + + @Invoker(value = "addBrewingRecipe", remap = false) + static void addRecipe(ItemStack result, Object... ingredients) { + throw new UnsupportedOperationException(); // This is just to satisfy the compiler; it won't be used. + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRClientProxy.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRClientProxy.java index a81f479..15bf487 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRClientProxy.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRClientProxy.java @@ -18,9 +18,13 @@ import net.minecraft.util.ResourceLocation; @Mixin(LOTRClientProxy.class) public abstract class MixinLOTRClientProxy { - @Shadow + @Shadow(remap = false) public static final ResourceLocation enchantmentTexture = new ResourceLocation("textures/misc/enchanted_item_glint.png"); + /** + * @author Shinare + * @reason Added support for semi-transparent item textures + */ @Overwrite(remap = false) public static void renderEnchantmentEffect() { Tessellator tessellator = Tessellator.instance; diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityAINearestAttackableTargetBasic.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityAINearestAttackableTargetBasic.java new file mode 100644 index 0000000..c351181 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityAINearestAttackableTargetBasic.java @@ -0,0 +1,35 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.potion.LoEPotions; // Needs to be implemented + +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAINearestAttackableTargetBasic; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.ai.EntityAITarget; +import net.minecraft.entity.player.EntityPlayer; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +@Mixin(LOTREntityAINearestAttackableTargetBasic.class) +public abstract class MixinLOTREntityAINearestAttackableTargetBasic extends EntityAITarget { + + public MixinLOTREntityAINearestAttackableTargetBasic(EntityCreature p_i1669_1_, boolean p_i1669_2_) { + super(p_i1669_1_, p_i1669_2_); + } + + /** + * @author Shinare + * @reason Added corrupting potion effect that makes all NPCs hostile + */ + @Overwrite(remap = false) + protected boolean isPlayerSuitableAlignmentTarget(EntityPlayer entityplayer) { + float alignment = LOTRLevelData.getData(entityplayer).getAlignment(LOTRMod.getNPCFaction((Entity)this.taskOwner)); + if (entityplayer == null || LoEPotions.corrupting == null) return alignment < 0.0F; + boolean corrupting = entityplayer.isPotionActive(LoEPotions.corrupting); // Needs to be implemented + return (alignment < 0.0F || corrupting); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityProjectileBase.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityProjectileBase.java new file mode 100644 index 0000000..329c8f4 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityProjectileBase.java @@ -0,0 +1,259 @@ +package com.zivilon.cinder_loe.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; +import lotr.common.item.LOTRWeaponStats; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.entity.projectile.LOTREntityProjectileBase; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S2BPacketChangeGameState; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import java.util.List; + +@Mixin(LOTREntityProjectileBase.class) +public abstract class MixinLOTREntityProjectileBase extends Entity { + + public MixinLOTREntityProjectileBase(World world) { + super(world); + } + + @Shadow(remap = false) + public abstract void setIsCritical(boolean p_70243_1_); + @Shadow(remap = false) + public abstract boolean getIsCritical(); + @Shadow(remap = false) + public abstract float getSpeedReduction(); + @Shadow(remap = false) + public abstract String getImpactSound(); + @Shadow(remap = false) + protected abstract void onCollideWithTarget(Entity entity); + @Shadow(remap = false) + protected abstract float getKnockbackFactor(); + @Shadow(remap = false) + public abstract ItemStack getProjectileItem(); + @Shadow(remap = false) + public abstract DamageSource getDamageSource(); + @Shadow(remap = false) + public abstract int maxTicksInGround(); + @Shadow(remap = false) + public abstract float getBaseImpactDamage(Entity paramEntity, ItemStack paramItemStack); + + @Shadow(remap = false) + private int xTile = -1; + @Shadow(remap = false) + private int yTile = -1; + @Shadow(remap = false) + private int zTile = -1; + @Shadow(remap = false) + private Block inTile; + @Shadow(remap = false) + private int inData; + @Shadow(remap = false) + private boolean inGround; + @Shadow(remap = false) + public int shake; + @Shadow(remap = false) + public Entity shootingEntity; + @Shadow(remap = false) + private int ticksInGround; + @Shadow(remap = false) + private int ticksInAir; + @Shadow(remap = false) + private int knockbackStrength; + + + /** + * @author Shinare + * @reason Having full knockbackResistance attribute now negates bonus knockback as well + */ + @Overwrite(remap = false) + public void func_70071_h_() { + super.onUpdate(); + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) { + float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, f) * 180.0D / Math.PI); + } + Block block = this.worldObj.getBlock(this.xTile, this.yTile, this.zTile); + if (block != Blocks.air) { + block.setBlockBoundsBasedOnState((IBlockAccess)this.worldObj, this.xTile, this.yTile, this.zTile); + AxisAlignedBB axisalignedbb = block.getCollisionBoundingBoxFromPool(this.worldObj, this.xTile, this.yTile, this.zTile); + if (axisalignedbb != null && axisalignedbb.isVecInside(Vec3.createVectorHelper(this.posX, this.posY, this.posZ))) + this.inGround = true; + } + if (this.shake > 0) + this.shake--; + if (this.inGround) { + Block j = this.worldObj.getBlock(this.xTile, this.yTile, this.zTile); + int k = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile); + if (j == this.inTile && k == this.inData) { + this.ticksInGround++; + if (this.ticksInGround >= maxTicksInGround()) + setDead(); + } else { + this.inGround = false; + this.motionX *= (this.rand.nextFloat() * 0.2F); + this.motionY *= (this.rand.nextFloat() * 0.2F); + this.motionZ *= (this.rand.nextFloat() * 0.2F); + this.ticksInGround = 0; + this.ticksInAir = 0; + } + } else { + this.ticksInAir++; + Vec3 vec3d = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + Vec3 vec3d1 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition movingobjectposition = this.worldObj.func_147447_a(vec3d, vec3d1, false, true, false); + vec3d = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + vec3d1 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if (movingobjectposition != null) + vec3d1 = Vec3.createVectorHelper(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord); + Entity entity = null; + List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double d = 0.0D; + int l; + for (l = 0; l < list.size(); l++) { + Entity entity1 = list.get(l); + if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) { + float f5 = 0.3F; + AxisAlignedBB axisalignedbb1 = entity1.boundingBox.expand(f5, f5, f5); + MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec3d, vec3d1); + if (movingobjectposition1 != null) { + double d1 = vec3d.distanceTo(movingobjectposition1.hitVec); + if (d1 < d || d == 0.0D) { + entity = entity1; + d = d1; + } + } + } + } + if (entity != null) + movingobjectposition = new MovingObjectPosition(entity); + if (movingobjectposition != null && movingobjectposition.entityHit instanceof EntityPlayer) { + EntityPlayer entityplayer = (EntityPlayer)movingobjectposition.entityHit; + if (entityplayer.capabilities.disableDamage || (this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer))) + movingobjectposition = null; + } + if (movingobjectposition != null) { + Entity hitEntity = movingobjectposition.entityHit; + if (hitEntity != null) { + ItemStack itemstack = getProjectileItem(); + int damageInt = MathHelper.ceiling_double_int(getBaseImpactDamage(hitEntity, itemstack)); + int fireAspect = 0; + if (itemstack != null) + if (this.shootingEntity instanceof EntityLivingBase && hitEntity instanceof EntityLivingBase) { + this.knockbackStrength += EnchantmentHelper.getKnockbackModifier((EntityLivingBase)this.shootingEntity, (EntityLivingBase)hitEntity); + } else { + this.knockbackStrength += LOTRWeaponStats.getTotalKnockback(itemstack); + } + if (getIsCritical()) + damageInt += this.rand.nextInt(damageInt / 2 + 2); + double[] prevMotion = { hitEntity.motionX, hitEntity.motionY, hitEntity.motionZ }; + DamageSource damagesource = getDamageSource(); + if (hitEntity.attackEntityFrom(damagesource, damageInt)) { + double[] newMotion = { hitEntity.motionX, hitEntity.motionY, hitEntity.motionZ }; + float kbf = getKnockbackFactor(); + hitEntity.motionX = prevMotion[0] + (newMotion[0] - prevMotion[0]) * kbf; + hitEntity.motionY = prevMotion[1] + (newMotion[1] - prevMotion[1]) * kbf; + hitEntity.motionZ = prevMotion[2] + (newMotion[2] - prevMotion[2]) * kbf; + if (isBurning()) + hitEntity.setFire(5); + if (hitEntity instanceof EntityLivingBase) { + EntityLivingBase hitEntityLiving = (EntityLivingBase)hitEntity; + double knockback_resistance = hitEntityLiving.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).getAttributeValue(); + if (this.knockbackStrength > 0 && knockback_resistance < 1.0D) { + float knockback = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + if (knockback > 0.0F) + hitEntityLiving.addVelocity(this.motionX * this.knockbackStrength * 0.6D / knockback, 0.1D, this.motionZ * this.knockbackStrength * 0.6D / knockback); + } + if (fireAspect > 0) + hitEntityLiving.setFire(fireAspect * 4); + if (this.shootingEntity instanceof EntityLivingBase) { + EnchantmentHelper.func_151384_a(hitEntityLiving, this.shootingEntity); + EnchantmentHelper.func_151385_b((EntityLivingBase)this.shootingEntity, (Entity)hitEntityLiving); + } + if (this.shootingEntity instanceof EntityPlayerMP && hitEntityLiving instanceof EntityPlayer) + ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacket((Packet)new S2BPacketChangeGameState(6, 0.0F)); + } + this.worldObj.playSoundAtEntity(this, getImpactSound(), 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + onCollideWithTarget(hitEntity); + } else { + this.motionX *= -0.1D; + this.motionY *= -0.1D; + this.motionZ *= -0.1D; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + } + } else { + this.xTile = movingobjectposition.blockX; + this.yTile = movingobjectposition.blockY; + this.zTile = movingobjectposition.blockZ; + this.inTile = this.worldObj.getBlock(this.xTile, this.yTile, this.zTile); + this.inData = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile); + this.motionX = (float)(movingobjectposition.hitVec.xCoord - this.posX); + this.motionY = (float)(movingobjectposition.hitVec.yCoord - this.posY); + this.motionZ = (float)(movingobjectposition.hitVec.zCoord - this.posZ); + float f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / f2 * 0.05D; + this.posY -= this.motionY / f2 * 0.05D; + this.posZ -= this.motionZ / f2 * 0.05D; + this.worldObj.playSoundAtEntity(this, getImpactSound(), 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.shake = 7; + setIsCritical(false); + if (this.inTile.getMaterial() != Material.air) + this.inTile.onEntityCollidedWithBlock(this.worldObj, this.xTile, this.yTile, this.zTile, this); + } + } + if (getIsCritical()) + for (l = 0; l < 4; l++) + this.worldObj.spawnParticle("crit", this.posX + this.motionX * l / 4.0D, this.posY + this.motionY * l / 4.0D, this.posZ + this.motionZ * l / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ); + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float f3 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); + for (this.rotationPitch = (float)(Math.atan2(this.motionY, f3) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F); + for (; this.rotationPitch - this.prevRotationPitch >= 180.0F; this.prevRotationPitch += 360.0F); + for (; this.rotationYaw - this.prevRotationYaw < -180.0F; this.prevRotationYaw -= 360.0F); + for (; this.rotationYaw - this.prevRotationYaw >= 180.0F; this.prevRotationYaw += 360.0F); + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + float f4 = getSpeedReduction(); + if (isInWater()) { + for (int k1 = 0; k1 < 4; k1++) { + float f7 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * f7, this.posY - this.motionY * f7, this.posZ - this.motionZ * f7, this.motionX, this.motionY, this.motionZ); + } + f4 = 0.8F; + } + this.motionX *= f4; + this.motionY *= f4; + this.motionZ *= f4; + this.motionY -= 0.05000000074505806D; + setPosition(this.posX, this.posY, this.posZ); + func_145775_I(); + } + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRIntCache.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRIntCache.java index bcb9aef..eca9684 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRIntCache.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRIntCache.java @@ -11,21 +11,25 @@ import java.util.List; @Mixin(LOTRIntCache.class) public abstract class MixinLOTRIntCache { - @Shadow + @Shadow(remap = false) private static LOTRIntCache SERVER; - @Shadow + @Shadow(remap = false) private static LOTRIntCache CLIENT; - @Shadow + @Shadow(remap = false) private int intCacheSize = 256; - @Shadow + @Shadow(remap = false) private List freeSmallArrays; - @Shadow + @Shadow(remap = false) private List inUseSmallArrays; - @Shadow + @Shadow(remap = false) private List freeLargeArrays; - @Shadow + @Shadow(remap = false) private List inUseLargeArrays; + /** + * @author Shinare + * @reason Unsuccessfully trying to patch a crash bug + */ @Overwrite(remap = false) public int[] getIntArray(int size) { try { diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRItemRendererManager.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRItemRendererManager.java index 4e1403b..c9d1d5f 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRItemRendererManager.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRItemRendererManager.java @@ -1,22 +1,28 @@ package com.zivilon.cinder_loe.mixins; -import lotr.client.LOTRItemRendererManager; -import lotr.client.render.item.LOTRRenderLargeItem; - -import net.minecraft.client.resources.IResourceManager; -import net.minecraft.item.Item; - -import java.lang.reflect.Field; +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import com.zivilon.cinder_loe.items.Nimveil; -import org.objectweb.asm.Opcodes; - -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import lotr.client.render.item.LOTRRenderLargeItem; +import lotr.client.LOTRItemRendererManager; + +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.StringUtils; + +import net.minecraftforge.client.IItemRenderer; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import java.lang.reflect.Field; @@ -48,43 +54,24 @@ import net.minecraftforge.common.MinecraftForge; @Mixin(LOTRItemRendererManager.class) public abstract class MixinLOTRItemRendererManager { - -/* @Inject(method = "func_110549_a(Lnet/minecraft/client/resources/IResourceManager;)V", - at = @At(value = "JUMP", opcode = Opcodes.IFEQ, ordinal = 0, shift = At.Shift.BEFORE), - locals = LocalCapture.CAPTURE_FAILSOFT, - remap = false) - private void afterIsLargeSet(IResourceManager resourceManager, CallbackInfo ci, int i, Field[] fields, Field field, Item item, LOTRRenderLargeItem largeItemRenderer, boolean isLarge) { - System.out.println("\u001B[35mVerifying item in renderer manager..."); - System.out.println("Name of item is " + item.getUnlocalizedName()); - System.out.println("Is crossbow: " + (item instanceof lotr.common.item.LOTRItemCrossbow)); - System.out.println("Is bow: " + (item instanceof lotr.common.item.LOTRItemBow)); - System.out.println("Is sword: " + (item instanceof lotr.common.item.LOTRItemSword)); - System.out.println("Is large: " + isLarge); - }*/ - @Shadow + @Shadow(remap = false) private static List largeItemRenderers; - @Overwrite - public void onResourceManagerReload(IResourceManager resourceManager) { + /** + * @author Shinare + * @reason testing + */ + @Overwrite(remap = false) + public void func_110549_a(IResourceManager resourceManager) { largeItemRenderers.clear(); try { for (Field field : LOTRMod.class.getFields()) { - System.out.println("Found field " + field.getName() + " of type " + field.getType().getName()); - if (field.getName().equals("spearRedDwarf")) { - System.out.println("Found spearRedDwarf"); - System.out.println("Is type Item: " + (field.get(null) instanceof Item)); - } if (field.get(null) instanceof Item) { Item item = (Item)field.get(null); + if (item instanceof Nimveil) System.out.println("Processing Nimveil!"); MinecraftForgeClient.registerItemRenderer(item, null); LOTRRenderLargeItem largeItemRenderer = LOTRRenderLargeItem.getRendererIfLarge(item); boolean isLarge = (largeItemRenderer != null); - System.out.println("\u001B[35mVerifying item in renderer manager..."); - System.out.println("Name of item is " + item.getUnlocalizedName()); - System.out.println("Is crossbow: " + (item instanceof lotr.common.item.LOTRItemCrossbow)); - System.out.println("Is bow: " + (item instanceof lotr.common.item.LOTRItemBow)); - System.out.println("Is sword: " + (item instanceof lotr.common.item.LOTRItemSword)); - System.out.println("Is large: " + isLarge); if (item instanceof lotr.common.item.LOTRItemCrossbow) { MinecraftForgeClient.registerItemRenderer(item, (IItemRenderer)new LOTRRenderCrossbow()); } else if (item instanceof lotr.common.item.LOTRItemBow) { @@ -95,10 +82,14 @@ public abstract class MixinLOTRItemRendererManager { d = 40.0D; MinecraftForgeClient.registerItemRenderer(item, (IItemRenderer)new LOTRRenderElvenBlade(d, largeItemRenderer)); } else if (isLarge) { + if (item instanceof Nimveil) System.out.println("Nimveil is large!"); MinecraftForgeClient.registerItemRenderer(item, (IItemRenderer)largeItemRenderer); } - if (largeItemRenderer != null) + if (largeItemRenderer != null) { + if (item instanceof Nimveil) System.out.println("Adding Nimveil large renderer!"); largeItemRenderers.add(largeItemRenderer); + } + if (item instanceof Nimveil) System.out.println("Nimveil processing ending!"); } } } catch (Exception e) { diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderArmorStand.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderArmorStand.java index 0d3960f..aab91db 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderArmorStand.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderArmorStand.java @@ -29,24 +29,28 @@ import net.minecraftforge.client.ForgeHooksClient; @Mixin(LOTRRenderArmorStand.class) public abstract class MixinLOTRRenderArmorStand extends TileEntitySpecialRenderer { - @Shadow + @Shadow(remap = false) private static ModelBase standModel; - @Shadow + @Shadow(remap = false) private static ResourceLocation standTexture; - - @Shadow + @Shadow(remap = false) private static ModelBiped modelBipedMain; - @Shadow + @Shadow(remap = false) private static ModelBiped modelBiped1; - @Shadow + @Shadow(remap = false) private static ModelBiped modelBiped2; - @Shadow + @Shadow(remap = false) private static float BIPED_ARM_ROTATION; - @Shadow + @Shadow(remap = false) private static float BIPED_TICKS_EXISTED; + + /** + * @author Shinare + * @reason Added support configurable enchantment colour + */ @Overwrite(remap = false) - public void renderTileEntityAt(TileEntity tileentity, double d, double d1, double d2, float f) { + public void func_147500_a(TileEntity tileentity, double d, double d1, double d2, float f) { LOTRTileEntityArmorStand armorStand = (LOTRTileEntityArmorStand)tileentity; FakeArmorStandEntity fakeArmorStandEntity = FakeArmorStandEntity.INSTANCE; GL11.glPushMatrix(); diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderLargeItem.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderLargeItem.java index f19a2dc..8c3a220 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderLargeItem.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderLargeItem.java @@ -1,21 +1,200 @@ package com.zivilon.cinder_loe.mixins; import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import com.zivilon.cinder_loe.items.Nimveil; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import lotr.client.render.item.LOTRRenderLargeItem; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.resources.IResource; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StringUtils; + +import net.minecraftforge.client.IItemRenderer; + +import java.io.IOException; +import java.util.Map; @Mixin(LOTRRenderLargeItem.class) public abstract class MixinLOTRRenderLargeItem { + private static IIcon[] nimveil_icons; + + @Shadow(remap = false) + private Item theItem; + @Shadow(remap = false) + private IIcon largeIcon; + @Shadow(remap = false) + private String folderName; + @Shadow(remap = false) + private static Map sizeFolders; + + @Shadow(remap = false) + private static ResourceLocation getLargeTexturePath(Item item, String folder) { + return null; + }; + + /** + * @author Shinare + * @reason Added support for transparent textures + */ @Redirect(method = "renderLargeItem(Lnet/minecraft/util/IIcon;)V", remap = false, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); } +/* + @Inject(method = "registerLargeIcon", at = @At("HEAD"), cancellable = true, remap = false) + public void temp(IIconRegister register, String extra, CallbackInfoReturnable ci) { + System.out.println("Registering icon with folder " + this.folderName); + }*/ + + /** + * @author Shinare + * @reason Added support for NBT based subtyping for Nimveil + */ + @Overwrite(remap = false) + private IIcon registerLargeIcon(IIconRegister register, String extra) { + String prefix = "lotr:"; + if (this.theItem instanceof Nimveil) { + String itemName = "lotr:nimveil"; + itemName = itemName.substring(itemName.indexOf(prefix) + prefix.length()); + String path = prefix + this.folderName + "/" + itemName; + nimveil_icons = new IIcon[10]; + nimveil_icons[0] = register.registerIcon(path + "_valar"); + nimveil_icons[1] = register.registerIcon(path + "_mortals"); + nimveil_icons[2] = register.registerIcon(path + "_udun"); + nimveil_icons[3] = register.registerIcon(path + "_sauron"); + nimveil_icons[4] = register.registerIcon(path + "_ancient"); + nimveil_icons[5] = register.registerIcon(path + "_valar_glow"); + nimveil_icons[6] = register.registerIcon(path + "_mortals_glow"); + nimveil_icons[7] = register.registerIcon(path + "_udun_glow"); + nimveil_icons[8] = register.registerIcon(path + "_sauron_glow"); + nimveil_icons[9] = register.registerIcon(path + "_ancient_glow"); + System.out.println("Registering large icon for " + this.theItem.getClass().getSimpleName() + " at " + path); + return nimveil_icons[0]; + } else { + String itemName = this.theItem.getUnlocalizedName(); + itemName = itemName.substring(itemName.indexOf(prefix) + prefix.length()); + String path = prefix + this.folderName + "/" + itemName; + if (!StringUtils.isNullOrEmpty(extra)) + path = path + "_" + extra; + System.out.println("Registering large icon for " + this.theItem.getClass().getSimpleName() + " at " + path); + return register.registerIcon(path); + } + } + + /** + * @author Shinare + * @reason Added support for NBT based subtyping for Nimveil + */ + @Overwrite(remap = false) + public static LOTRRenderLargeItem getRendererIfLarge(Item item) { + if (item instanceof Nimveil) + return new LOTRRenderLargeItem(item, "large", 2.0F); + for (String folder : sizeFolders.keySet()) { + float iconScale = ((Float)sizeFolders.get(folder)).floatValue(); + try { + ResourceLocation resLoc = getLargeTexturePath(item, folder); + IResource res = Minecraft.getMinecraft().getResourceManager().getResource(resLoc); + if (res != null) + return new LOTRRenderLargeItem(item, folder, iconScale); + } catch (IOException iOException) {} + } + return null; + } + + + /** + * @author Shinare + * @reason Added support for NBT based subtyping for Nimveil + */ + @Inject(method = "renderItem", + at = @At(value = "HEAD"), + cancellable = true, remap = false) + public void getNimveilIcon(IItemRenderer.ItemRenderType type, ItemStack itemstack, Object[] data, CallbackInfo ci) { + if (itemstack.getItem() instanceof Nimveil) { + int icon_index = 0; + if (Nimveil.get_state(itemstack) != 0) + icon_index += 5; + switch(Nimveil.get_variant(itemstack)) { + case "valar": + break; + case "mortals": + icon_index += 1; + break; + case "udun": + icon_index += 2; + break; + case "sauron": + icon_index += 3; + break; + case "ancient": + icon_index += 4; + break; + default: + this.largeIcon = nimveil_icons[0]; + break; + } + this.largeIcon = nimveil_icons[icon_index]; + } + } } +/* + + public void renderItem(IItemRenderer.ItemRenderType type, ItemStack itemstack, Object... data) { + GL11.glPushMatrix(); + Entity holder = (Entity)data[1]; + boolean isFirstPerson = (holder == (Minecraft.getMinecraft()).thePlayer && (Minecraft.getMinecraft()).gameSettings.thirdPersonView == 0); + Item item = itemstack.getItem(); + if (item instanceof lotr.common.item.LOTRItemSpear && holder instanceof EntityPlayer && ((EntityPlayer)holder).getItemInUse() == itemstack) { + GL11.glRotatef(260.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-1.0F, 0.0F, 0.0F); + } + if (item instanceof lotr.common.item.LOTRItemPike && holder instanceof EntityLivingBase) { + EntityLivingBase entityliving = (EntityLivingBase)holder; + if (entityliving.getHeldItem() == itemstack && entityliving.swingProgress <= 0.0F) + if (entityliving.isSneaking()) { + if (isFirstPerson) { + GL11.glRotatef(270.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-1.0F, 0.0F, 0.0F); + } else { + GL11.glTranslatef(0.0F, -0.1F, 0.0F); + GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F); + } + } else if (!isFirstPerson) { + GL11.glTranslatef(0.0F, -0.3F, 0.0F); + GL11.glRotatef(40.0F, 0.0F, 0.0F, 1.0F); + } + } + if (item instanceof lotr.common.item.LOTRItemLance && holder instanceof EntityLivingBase) { + EntityLivingBase entityliving = (EntityLivingBase)holder; + if (entityliving.getHeldItem() == itemstack) + if (isFirstPerson) { + GL11.glRotatef(260.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-1.0F, 0.0F, 0.0F); + } else { + GL11.glTranslatef(0.7F, 0.0F, 0.0F); + GL11.glRotatef(-30.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-1.0F, 0.0F, 0.0F); + } + } + renderLargeItem(); + if (itemstack != null && itemstack.hasEffect(0)) + LOTRClientProxy.renderEnchantmentEffect(); + GL11.glPopMatrix(); + }*/ diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTileEntityDwarvenForge.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTileEntityDwarvenForge.java index 1b86f7f..280162a 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTileEntityDwarvenForge.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTileEntityDwarvenForge.java @@ -38,13 +38,12 @@ public abstract class MixinLOTRTileEntityDwarvenForge { protected boolean isCoal(ItemStack itemstack) { return (itemstack.getItem() == Items.coal); } - @Unique - protected boolean cinderLoE_Git$isMithril(ItemStack itemstack) { + + protected boolean isMithril(ItemStack itemstack) { return itemstack.getItem() == Item.getItemFromBlock(LOTRMod.oreMithril) || itemstack.getItem() == LOTRMod.mithril; } - @Unique - protected boolean cinderLoE_Git$isCoalBlock(ItemStack itemstack) { + protected boolean isCoalBlock(ItemStack itemstack) { return itemstack.getItem() == Item.getItemFromBlock(Blocks.coal_block); } @@ -52,6 +51,10 @@ public abstract class MixinLOTRTileEntityDwarvenForge { return (itemstack.getItem() == Items.gold_nugget); } + /** + * @author Shinare + * @reason Added recipe for CinderLoE.ingotAsh and CinderLoE.redDwarfSteel + */ @Overwrite(remap = false) protected ItemStack getAlloySmeltingResult(ItemStack itemstack, ItemStack alloyItem) { if (isIron(itemstack) && isCoal(alloyItem)) @@ -64,7 +67,7 @@ public abstract class MixinLOTRTileEntityDwarvenForge { return new ItemStack(CinderLoE.redDwarfSteel); if ((isCopper(itemstack) && isTin(alloyItem)) || (isTin(itemstack) && isCopper(alloyItem))) return new ItemStack(LOTRMod.bronze, 2); - if (this.cinderLoE_Git$isMithril(itemstack) && this.cinderLoE_Git$isCoalBlock(alloyItem)) + if (this.isMithril(itemstack) && this.isCoalBlock(alloyItem)) return new ItemStack(CinderLoE.ingotAsh, 1); return null; } diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTradeEntries.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTradeEntries.java index a056974..580d433 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTradeEntries.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTradeEntries.java @@ -9,6 +9,6 @@ import lotr.common.LOTRFoods; @Mixin(LOTRTradeEntries.class) public interface MixinLOTRTradeEntries { - @Invoker("setVessels") + @Invoker(value = "setVessels", remap = false) public abstract LOTRTradeEntries vessels(LOTRFoods foods); } diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRWorldGenMumakSkeleton.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRWorldGenMumakSkeleton.java index 76786c0..89e5633 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRWorldGenMumakSkeleton.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRWorldGenMumakSkeleton.java @@ -15,12 +15,16 @@ import com.zivilon.cinder_loe.CinderLoE; @Mixin(LOTRWorldGenMumakSkeleton.class) public class MixinLOTRWorldGenMumakSkeleton { - @Shadow + @Shadow(remap = false) protected Block boneBlock; - @Shadow + @Shadow(remap = false) protected int boneMeta; + /** + * @author Shinare + * @reason Replaces bone blocks with ivory blocks to make these structures unique + */ @Overwrite(remap = false) protected void setupRandomBlocks(Random random) { this.boneBlock = CinderLoE.ivoryBlock; diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinRenderItem.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinRenderItem.java index 396b349..2abbc2e 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinRenderItem.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinRenderItem.java @@ -57,17 +57,17 @@ public abstract class MixinRenderItem extends Render { @Shadow public static boolean renderInFrame; - @Shadow + @Shadow(remap = false) public byte getMiniBlockCount(ItemStack stack, byte original) { return 0; } - @Shadow + @Shadow(remap = false) public byte getMiniItemCount(ItemStack stack, byte original) { return 0; } - @Shadow + @Shadow(remap = false) public boolean shouldSpreadItems() { return false; } @@ -75,6 +75,20 @@ public abstract class MixinRenderItem extends Render { @Shadow private void renderGlint(int p_77018_1_, int p_77018_2_, int p_77018_3_, int p_77018_4_, int p_77018_5_) {} + /** + * Reimplements the default behavior of the renderDroppedItem method. + * + * @author Shinare + * @reason Added support for semi-transparent item textures + * @param p_77020_1_ Don't ask me it's default parameter + * @param p_77020_2_ Don't ask me it's default parameter + * @param p_77020_3_ Don't ask me it's default parameter + * @param p_77020_4_ Don't ask me it's default parameter + * @param p_77020_5_ Don't ask me it's default parameter + * @param p_77020_6_ Don't ask me it's default parameter + * @param p_77020_7_ Don't ask me it's default parameter + * @param pass Don't ask me it's default parameter + */ @Overwrite(remap = false) private void renderDroppedItem(EntityItem p_77020_1_, IIcon p_77020_2_, int p_77020_3_, float p_77020_4_, float p_77020_5_, float p_77020_6_, float p_77020_7_, int pass) { Tessellator tessellator = Tessellator.instance; @@ -209,6 +223,10 @@ public abstract class MixinRenderItem extends Render { } } + /** + * @author Shinare + * @reason Added support for semi-transparent item textures + */ @Overwrite(remap = false) public void renderEffect(TextureManager manager, int x, int y) { GL11.glDepthFunc(GL11.GL_EQUAL); diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinRendererLivingEntity.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinRendererLivingEntity.java index 9c31081..03b56fc 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinRendererLivingEntity.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinRendererLivingEntity.java @@ -85,6 +85,10 @@ public abstract class MixinRendererLivingEntity extends Render { return 0.0F; } + /** + * @author Shinare + * @reason Added support for configurable enchantment colour + */ @Overwrite public void doRender(EntityLivingBase p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_) { diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinSlotCrafting.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinSlotCrafting.java index 891d0e6..2ebd594 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinSlotCrafting.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/MixinSlotCrafting.java @@ -30,6 +30,11 @@ public abstract class MixinSlotCrafting { craftMatrix = null; } + /** + * @author Shinare + * @reason Added support for crafting with item durability. To register items for durability crafting, refer to com.zivilon.cinder_loe.util.DurableItemCrafter + */ + @Overwrite public void onPickupFromSlot(EntityPlayer p_82870_1_, ItemStack p_82870_2_) { FMLCommonHandler.instance().firePlayerCraftingEvent(p_82870_1_, p_82870_2_, craftMatrix); diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRItemEntDraught.java b/src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRItemEntDraught.java index 7eac88c..d361b78 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRItemEntDraught.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRItemEntDraught.java @@ -46,11 +46,11 @@ public abstract class MixinLOTRItemEntDraught { /** - * @author - * @reason - */ - @Overwrite - public ItemStack onEaten(ItemStack itemstack, World world, EntityPlayer entityplayer) { + * @author KeyLime17 + * @reason ??? + */ + @Overwrite(remap = false) + public ItemStack func_77654_b(ItemStack itemstack, World world, EntityPlayer entityplayer) { final Random rand = new Random(); int chance = rand.nextInt(100); @@ -83,11 +83,11 @@ public abstract class MixinLOTRItemEntDraught { } /** - * @author - * @reason - */ - @Overwrite - public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int side, float f, float f1, float f2) { + * @author KeyLime17 + * @reason ??? + */ + @Overwrite(remap = false) + public boolean func_77648_a(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int side, float f, float f1, float f2) { if (this.getDraughtInfo((ItemStack)itemstack).name.equals("gold")) { if (LOTRLevelData.getData(entityplayer).getAlignment(LOTRFaction.FANGORN) < 500.0f) { if (!world.isRemote) { diff --git a/src/main/java/com/zivilon/cinder_loe/potion/LoEPotions.java b/src/main/java/com/zivilon/cinder_loe/potion/LoEPotions.java new file mode 100644 index 0000000..34339c3 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/potion/LoEPotions.java @@ -0,0 +1,28 @@ +package com.zivilon.cinder_loe.potion; + +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.entity.EntityLivingBase; + +public class LoEPotions { + public static Potion corrupting; + + public static void registerPotions() { + corrupting = new PotionCorrupting(31, false, 0x7F0000).setPotionName("potion.corrupting"); + } +} + +class PotionCorrupting extends Potion { + public PotionCorrupting(int id, boolean isBadEffect, int liquidColor) { + super(id, isBadEffect, liquidColor); + } + + @Override + public void performEffect(EntityLivingBase entity, int amplifier) { + } + + @Override + public boolean isReady(int duration, int amplifier) { + return false; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/recipe/ForgingRecipe.java b/src/main/java/com/zivilon/cinder_loe/recipe/ForgingRecipe.java new file mode 100644 index 0000000..3680377 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/recipe/ForgingRecipe.java @@ -0,0 +1,57 @@ +package com.zivilon.cinder_loe.recipe; + +import net.minecraft.item.ItemStack; + +public class ForgingRecipe { + + public boolean isBlessed; + public ItemStack leftInput; + public ItemStack middleInput; + public ItemStack rightInput; + public ItemStack output; + + public ForgingRecipe(ItemStack leftInput, ItemStack middleInput, ItemStack rightInput, ItemStack output, boolean isBlessed) { + this.leftInput = leftInput; + this.middleInput = middleInput; + this.rightInput = rightInput; + this.output = output; + this.isBlessed = isBlessed; + } + + public boolean matches(ItemStack left, ItemStack middle, ItemStack right, boolean isBlessedHammer) { + if (this.isBlessed && !isBlessedHammer) { + return false; + } + + return matchesItem(leftInput, left) && + matchesItem(middleInput, middle) && + matchesItem(rightInput, right); + } + + public boolean matchesItem(ItemStack recipeInput, ItemStack stationInput) { + if (recipeInput == null && stationInput == null) { + return true; + } + if (recipeInput == null || stationInput == null) { + return false; + } + return recipeInput.getItem() == stationInput.getItem() && + recipeInput.getItemDamage() == stationInput.getItemDamage(); + } + + public ItemStack getOutput() { + return output.copy(); + } + + public static String getSafeName(ItemStack stack) { + if (stack == null) return "null"; + return stack.getUnlocalizedName(); + } + + public static void printRecipeDetails(ForgingRecipe recipe) { + System.out.println("Left: " + getSafeName(recipe.leftInput)); + System.out.println("Middle: " + getSafeName(recipe.middleInput)); + System.out.println("Right: " + getSafeName(recipe.rightInput)); + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/recipe/ForgingRecipes.java b/src/main/java/com/zivilon/cinder_loe/recipe/ForgingRecipes.java new file mode 100644 index 0000000..bcac2bd --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/recipe/ForgingRecipes.java @@ -0,0 +1,85 @@ +package com.zivilon.cinder_loe.recipe; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.items.Nimveil; +import com.zivilon.cinder_loe.util.Utilities; + +import lotr.common.enchant.LOTREnchantment; + +import net.minecraft.item.ItemStack; + +import java.util.ArrayList; +import java.util.List; + +public class ForgingRecipes { + public static List recipes = new ArrayList(); + + public static void register_recipe(ForgingRecipe recipe) { + recipes.add(recipe); + } + + public static void register_recipes() { + register_recipe(new ForgingRecipe( + new ItemStack(CinderLoE.nimveilPart, 1, 2), + new ItemStack(CinderLoE.nimveilPart, 1, 1), + new ItemStack(CinderLoE.nimveilPart, 1, 0), + Nimveil.init_variant(new ItemStack(CinderLoE.nimveil, 1), "valar"), + true + )); + register_recipe(new ForgingRecipe( + new ItemStack(CinderLoE.nimveilPart, 1, 3), + new ItemStack(CinderLoE.nimveilPart, 1, 1), + new ItemStack(CinderLoE.nimveilPart, 1, 0), + Nimveil.init_variant(new ItemStack(CinderLoE.nimveil, 1), "mortals"), + true + )); + register_recipe(new ForgingRecipe( + new ItemStack(CinderLoE.nimveilPart, 1, 4), + new ItemStack(CinderLoE.nimveilPart, 1, 1), + new ItemStack(CinderLoE.nimveilPart, 1, 0), + Nimveil.init_variant(new ItemStack(CinderLoE.nimveil, 1), "udun"), + true + )); + register_recipe(new ForgingRecipe( + new ItemStack(CinderLoE.nimveilPart, 1, 5), + new ItemStack(CinderLoE.nimveilPart, 1, 1), + new ItemStack(CinderLoE.nimveilPart, 1, 0), + Nimveil.init_variant(new ItemStack(CinderLoE.nimveil, 1), "sauron"), + true + )); + register_recipe(new ForgingRecipe( + new ItemStack(CinderLoE.nimveilPart, 1, 6), + new ItemStack(CinderLoE.nimveilPart, 1, 1), + new ItemStack(CinderLoE.nimveilPart, 1, 0), + Nimveil.init_variant(new ItemStack(CinderLoE.nimveil, 1), "ancient"), + true + )); + register_recipe(new ForgingRecipe( + null, + new ItemStack(CinderLoE.nimveil, 1), + null, + new ItemStack(CinderLoE.nimveilPart, 1, 1), + true + )); + register_recipe(new ForgingRecipe( + new ItemStack(CinderLoE.weaponPart, 1, 0), + new ItemStack(CinderLoE.weaponPart, 1, 1), + new ItemStack(CinderLoE.weaponPart, 1, 2), + deceiver_blade(), + false + )); + } + + public static ItemStack deceiver_blade() { + ItemStack blade = new ItemStack(CinderLoE.deceiverBlade, 1); + Utilities.setAppliedRandomEnchants(blade); + Utilities.setLOTREnchant(blade, LOTREnchantment.strong4); + Utilities.setLOTREnchant(blade, LOTREnchantment.meleeSpeed1); + Utilities.setLOTREnchant(blade, LOTREnchantment.meleeReach1); + return blade; + } + + public static List getAllRecipes() { + return recipes; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/recipes.java b/src/main/java/com/zivilon/cinder_loe/recipes.java index 3dc590c..94c86ad 100644 --- a/src/main/java/com/zivilon/cinder_loe/recipes.java +++ b/src/main/java/com/zivilon/cinder_loe/recipes.java @@ -6,6 +6,7 @@ import lotr.common.recipe.LOTRRecipePoisonWeapon; import lotr.common.recipe.LOTRRecipes; import com.zivilon.cinder_loe.CinderLoE; import com.zivilon.cinder_loe.recipe.*; +import com.zivilon.cinder_loe.mixins.MixinLOTRBrewingRecipes; import lotr.common.item.LOTRItemFood; import net.minecraft.init.Blocks; @@ -30,6 +31,8 @@ public class recipes { registerBreeRecipes(); registerArnorRecipes(); registerAngmarRecipes(); + ForgingRecipes.register_recipes(); + registerBrewingRecipes(); } public static void registerGeneralRecipes() { @@ -104,6 +107,7 @@ public class recipes { GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 11), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 11))); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 12), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 12))); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 13), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 13))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 14), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 14))); OreDictionary.registerOre("vegetable1", CinderLoE.onion); OreDictionary.registerOre("vegetable1", LOTRMod.leek); @@ -319,4 +323,7 @@ public class recipes { LOTRRecipes.rangerRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.maceArnor), " XX", " XX", "Y ", Character.valueOf('X'), Items.iron_ingot, Character.valueOf('Y'), "stickWood")); } + public static void registerBrewingRecipes() { + MixinLOTRBrewingRecipes.addRecipe(new ItemStack(CinderLoE.mugDemonicHealthPotion, 2), new Object[] { CinderLoE.demonbloodVial, new ItemStack(LOTRMod.tallGrass, 1, 4), new ItemStack(LOTRMod.tallGrass, 1, 4), new ItemStack(LOTRMod.tallGrass, 1, 4), CinderLoE.chocolatebar, CinderLoE.chocolatebar }); + } } diff --git a/src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityForgingStation.java b/src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityForgingStation.java new file mode 100644 index 0000000..c7313c5 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityForgingStation.java @@ -0,0 +1,127 @@ +package com.zivilon.cinder_loe.tileentity; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.util.AxisAlignedBB; + +public class TileEntityForgingStation extends TileEntity { + + public ItemStack leftItem; + public ItemStack middleItem; + public ItemStack rightItem; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return AxisAlignedBB.getBoundingBox( + xCoord - 1, yCoord, zCoord - 1, + xCoord + 2, yCoord + 1, zCoord + 2 + ); + } + + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound tag = new NBTTagCompound(); + writeToNBT(tag); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, tag); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + readFromNBT(pkt.func_148857_g()); + } + + + // Getters and Setters for the items + public ItemStack getLeftItem() { + return leftItem; + } + + public void setLeftItem(ItemStack leftItem) { + this.leftItem = leftItem; + markDirty(); // Mark the tile entity as dirty to ensure the world saves the changes + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public ItemStack getMiddleItem() { + return middleItem; + } + + public void setMiddleItem(ItemStack middleItem) { + this.middleItem = middleItem; + markDirty(); // Mark the tile entity as dirty to ensure the world saves the changes + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public ItemStack getRightItem() { + return rightItem; + } + + public void setRightItem(ItemStack rightItem) { + this.rightItem = rightItem; + markDirty(); // Mark the tile entity as dirty to ensure the world saves the changes + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + // Method to write data to NBT + @Override + public void writeToNBT(NBTTagCompound compound) { + super.writeToNBT(compound); + + if (leftItem != null) { + NBTTagCompound leftTag = new NBTTagCompound(); + leftItem.writeToNBT(leftTag); + compound.setTag("LeftItem", leftTag); + } else { + compound.removeTag("LeftItem"); + } + + if (middleItem != null) { + NBTTagCompound middleTag = new NBTTagCompound(); + middleItem.writeToNBT(middleTag); + compound.setTag("MiddleItem", middleTag); + } else { + compound.removeTag("MiddleItem"); + } + + if (rightItem != null) { + NBTTagCompound rightTag = new NBTTagCompound(); + rightItem.writeToNBT(rightTag); + compound.setTag("RightItem", rightTag); + } else { + compound.removeTag("RightItem"); + } + } + + + // Method to read data from NBT + @Override + public void readFromNBT(NBTTagCompound compound) { + super.readFromNBT(compound); + + if (compound.hasKey("LeftItem")) { + NBTTagCompound leftTag = compound.getCompoundTag("LeftItem"); + leftItem = ItemStack.loadItemStackFromNBT(leftTag); + } else { + leftItem = null; + } + + if (compound.hasKey("MiddleItem")) { + NBTTagCompound middleTag = compound.getCompoundTag("MiddleItem"); + middleItem = ItemStack.loadItemStackFromNBT(middleTag); + } else { + middleItem = null; + } + + if (compound.hasKey("RightItem")) { + NBTTagCompound rightTag = compound.getCompoundTag("RightItem"); + rightItem = ItemStack.loadItemStackFromNBT(rightTag); + } else { + rightItem = null; + } + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityNexIceCrystal.java b/src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityNexIceCrystal.java deleted file mode 100644 index 20fcbc9..0000000 --- a/src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityNexIceCrystal.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.zivilon.cinder_loe.tileentity; - -import net.minecraft.tileentity.TileEntity; - -public class TileEntityNexIceCrystal extends TileEntity { - // Add any data or logic specific to the tile entity here -} diff --git a/src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityShadowTile.java b/src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityShadowTile.java new file mode 100644 index 0000000..c66a0b2 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/tileentity/TileEntityShadowTile.java @@ -0,0 +1,37 @@ +package com.zivilon.cinder_loe.tileentity; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; + +public class TileEntityShadowTile extends TileEntity { + public long spawnTime; + public static long REMOVAL_DELAY_MS = 15000; + + @Override + public void updateEntity() { + if (!worldObj.isRemote) { + if (spawnTime == 0) { + spawnTime = System.currentTimeMillis(); + } + + long currentTime = System.currentTimeMillis(); + if (currentTime >= spawnTime + REMOVAL_DELAY_MS) { + worldObj.setBlockToAir(xCoord, yCoord, zCoord); + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); // Force the client to update + worldObj.removeTileEntity(xCoord, yCoord, zCoord); // Clean up the tile entity + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setLong("spawnTime", spawnTime); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + spawnTime = nbt.getLong("spawnTime"); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/util/BlockPos.java b/src/main/java/com/zivilon/cinder_loe/util/BlockPos.java index 61c6ac9..e6558a9 100644 --- a/src/main/java/com/zivilon/cinder_loe/util/BlockPos.java +++ b/src/main/java/com/zivilon/cinder_loe/util/BlockPos.java @@ -17,6 +17,10 @@ public class BlockPos { this.z = z; } + public BlockPos down() { + return new BlockPos(x, y - 1, z); + } + public static BlockPos findSafeSpawnLocation(World world, EntityPlayer entityPlayer) { Random rand = new Random(); ArrayList validPositions = new ArrayList(); diff --git a/src/main/java/com/zivilon/cinder_loe/util/LOTREnchantmentExclusions.java b/src/main/java/com/zivilon/cinder_loe/util/LOTREnchantmentExclusions.java index 8327caf..dcf9277 100644 --- a/src/main/java/com/zivilon/cinder_loe/util/LOTREnchantmentExclusions.java +++ b/src/main/java/com/zivilon/cinder_loe/util/LOTREnchantmentExclusions.java @@ -10,6 +10,6 @@ import com.zivilon.cinder_loe.CinderLoE; public class LOTREnchantmentExclusions { public static List exclusions = new ArrayList<>(); static { - exclusions.add(CinderLoE.firstAgeGlaive); + exclusions.add(CinderLoE.celeiniss); } } diff --git a/src/main/java/com/zivilon/cinder_loe/util/Utilities.java b/src/main/java/com/zivilon/cinder_loe/util/Utilities.java index 85c9fcb..92b95a1 100644 --- a/src/main/java/com/zivilon/cinder_loe/util/Utilities.java +++ b/src/main/java/com/zivilon/cinder_loe/util/Utilities.java @@ -1,7 +1,8 @@ package com.zivilon.cinder_loe.util; -import com.zivilon.cinder_loe.client.render.item.RenderHelper; import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import com.zivilon.cinder_loe.mixins.MixinEntity; import java.io.BufferedWriter; import java.io.FileOutputStream; @@ -23,13 +24,24 @@ import lotr.common.enchant.LOTREnchantment; import lotr.common.enchant.LOTREnchantmentHelper; import net.minecraft.client.renderer.Tessellator; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; + public class Utilities { public static int[] LOTRIntCache = null; @@ -162,6 +174,12 @@ public class Utilities { return has_fire; } + public static boolean has_fire_weapon(Entity entity) { + if (!(entity instanceof EntityLivingBase)) return false; + ItemStack held_item = ((EntityLivingBase)entity).getHeldItem(); + return LOTREnchantmentHelper.hasEnchant(held_item, LOTREnchantment.fire); + } + public static int[] countNexArmour(String player_name) { EntityPlayer player = getPlayerByName(player_name); int[] nexPieces = new int[4]; @@ -194,6 +212,26 @@ public class Utilities { return nexPieces; } + public static double calculate_melee_damage_on_entity(EntityLivingBase target, EntityLivingBase attacker) { + if (attacker == null) return 0.0D; + if (attacker.getEntityAttribute(SharedMonsterAttributes.attackDamage) == null) return 0.0D; + + double attribute = attacker.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); + double enchantments = EnchantmentHelper.getEnchantmentModifierLiving(attacker, target); + boolean is_critical = !attacker.onGround && attacker.motionY < 0.0D && !attacker.isInWater() && !attacker.isRiding(); + double critical = 0.0D; + if (is_critical) { + PotionEffect strength_effect = attacker.getActivePotionEffect(Potion.damageBoost); + if (strength_effect == null) { + critical = Math.min((attribute + enchantments) * 1.5D, 7.0D); + } else { + int level = strength_effect.getAmplifier() + 1; + critical = Math.min((attribute + enchantments) * 1.5D, 7.0D * (1.0D + 0.5D * level)); + } + } + return attribute + enchantments + critical; + } + public static boolean isArrayEmpty(int[] array) { for (int value : array) { if (value != 0) return false; @@ -201,10 +239,57 @@ public class Utilities { return true; } - public static void setEntityInvulnerable(EntityLiving entity, boolean invulnerable) { - NBTTagCompound nbt = new NBTTagCompound(); - entity.writeToNBT(nbt); - nbt.setBoolean("Invulnerable", invulnerable); - entity.readFromNBT(nbt); + public static void setInvulnerable(Entity entity, boolean invulnerable) { + ((MixinEntity)entity).setInvulnerable(invulnerable); + } + + public static void setLOTREnchant(ItemStack itemstack, LOTREnchantment ench) { + NBTTagList tags = getItemEnchantTags(itemstack, true); + if (tags != null) { + String enchName = ench.enchantName; + tags.appendTag((NBTBase)new NBTTagString(enchName)); + } + } + + public static NBTTagList getItemEnchantTags(ItemStack itemstack, boolean create) { + NBTTagCompound itemData = itemstack.getTagCompound(); + NBTTagList tags = null; + if (itemData != null && itemData.hasKey("LOTREnch")) { + tags = itemData.getTagList("LOTREnch", 8); + } else if (create) { + if (itemData == null) { + itemData = new NBTTagCompound(); + itemstack.setTagCompound(itemData); + } + tags = new NBTTagList(); + itemData.setTag("LOTREnch", (NBTBase)tags); + } + return tags; + } + + public static void setAppliedRandomEnchants(ItemStack itemstack) { + if (!itemstack.hasTagCompound()) + itemstack.setTagCompound(new NBTTagCompound()); + itemstack.getTagCompound().setBoolean("LOTRRandomEnch", true); + } + + public static void knockback(EntityLivingBase target, EntityLivingBase attacker, double knockback_strength) { + // Calculate direction of knockback + double dx = attacker.posX - target.posX; + double dz = attacker.posZ - target.posZ; + + // Normalize the direction vector + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance != 0) { + dx /= distance; + dz /= distance; + } + + // Apply knockback manually + target.motionX -= dx * knockback_strength; + target.motionZ -= dz * knockback_strength; + + // Ensure the motion is applied + target.velocityChanged = true; } } diff --git a/src/main/java/com/zivilon/cinder_loe/util/VT_additions.java b/src/main/java/com/zivilon/cinder_loe/util/VT_additions.java new file mode 100644 index 0000000..5929228 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/util/VT_additions.java @@ -0,0 +1,11 @@ +package com.zivilon.cinder_loe.util; + +import com.zivilon.cinder_loe.entity.Nex; + +public class VT_additions { + public static String applyCustomPlaceholders(String scriptLine) { + scriptLine = scriptLine.replace("", String.valueOf(Nex.get_nex_phase())); + scriptLine = scriptLine.replace("", String.valueOf(Nex.get_nex_health())); + return scriptLine; + } +} diff --git a/src/main/resources/assets/cinder_loe/lang/en_US.lang b/src/main/resources/assets/cinder_loe/lang/en_US.lang index 2f8da6d..c8c4b34 100644 --- a/src/main/resources/assets/cinder_loe/lang/en_US.lang +++ b/src/main/resources/assets/cinder_loe/lang/en_US.lang @@ -19,6 +19,9 @@ tile.lotr:plaster.name=Plaster tile.lotr:voidblock.name=Void tile.lotr:cindercobble.0.name=Cobbled Drystone tile.lotr:cindercobble.1.name=Cobbled Mordor Rock +tile.lotr:enchantedIce.name=Enchanted Ice +tile.lotr:iceCage.name=Ice Cage +tile.forging_station.name=Forging Station item.lotr:spearUnnamed.name=Drannach Oriour item.lotr:frostblade.name=Frostblade @@ -114,6 +117,7 @@ item.war_dart_gilded_iron.name=Gilded Iron Dart item.war_dart_red_dwarven.name=Red Dwarven Dart item.war_dart_mithril.name=Mithril Dart item.war_dart_ancient.name=Ancient Dart +item.war_dart_morgul.name=Morgul Dart item.war_dart_heads_headless.name=??? Dart Heads item.war_dart_heads_copper.name=Copper Dart Heads @@ -129,6 +133,49 @@ item.war_dart_heads_gilded_iron.name=Gilded Iron Dart Heads item.war_dart_heads_red_dwarven.name=Red Dwarven Dart Heads item.war_dart_heads_mithril.name=Mithril Dart Heads item.war_dart_heads_ancient.name=Ancient Dart Heads +item.war_dart_heads_morgul.name=Morgul Dart Heads + +item.lotr.toxicCore.name=Toxic Core +item.lotr:celeiniss.name=Celeiniss +lotr:nimveil.name=Nimveil +item.nimveil_gem.name=Nimveil Gem +item.nimveil_blade.name=Nimveil Blade +item.nimveil_hilt.name=Nimveil Hilt +item.blessed_hammer.name=Hammer of Aulendur +item.ice_thawer.name=Ice Thawer +item.deceiver_blade.name=Deceiver's Blade +item.anarore_bow.name=Anarórë's Bow +item.troll_chieftain_club.name=Troll Chieftain Club +item.glaechir_spear.name=Glaechír's Spear +item.deceiver_blade_blade.name=Cursed Blade +item.deceiver_blade_guard.name=Deceiver's Guard +item.deceiver_blade_hilt.name=Dark Hilt +item.anarore_bow_top.name=Anarórë's Bow Top +item.anarore_bow_bottom.name=Anarórë's Bow Bottom +item.anarore_bow_bowstring.name=Blessed Bowstring +item.troll_chieftain_club_club.name=Troll Club +item.troll_chieftain_club_spikes.name=Serrated Spikes +item.troll_chieftain_club_???.name=??? +item.glaechir_spear_tip.name=Fine Bronze Spear Tip +item.glaechir_spear_shaft.name=Heraldic Spear Shaft +item.glaechir_spear_???.name=??? + +item.lotr:helmetNexShadow=Ancient Shadow Hood +item.lotr:bodyNexShadow=Ancient Shadow Robe Top +item.lotr:legsNexShadow=Ancient Shadow Robe Bottom +item.lotr:bootsNexShadow=Ancient Shadow Boots +item.lotr:helmetNexToxic=Ancient Toxic Hood +item.lotr:bodyNexToxic=Ancient Toxic Robe Top +item.lotr:legsNexToxic=Ancient Toxic Robe Bottom +item.lotr:bootsNexToxic=Ancient Toxic Boots +item.lotr:helmetNexFire=Ancient Fire Hood +item.lotr:bodyNexFire=Ancient Fire Robe Top +item.lotr:legsNexFire=Ancient Fire Robe Bottom +item.lotr:bootsNexFire=Ancient Fire Boots +item.lotr:helmetNexIce=Ancient Ice Hood +item.lotr:bodyNexIce=Ancient Ice Robe Top +item.lotr:legsNexIce=Ancient Ice Robe Bottom +item.lotr:bootsNexIce=Ancient Ice Boots item.spawn_egg_FangornAuroch.name=Spawn Fangorn Auroch item.spawn_egg_FangornBear.name=Spawn Fangorn Bear diff --git a/src/main/resources/assets/cinder_loe/mob/green.png b/src/main/resources/assets/cinder_loe/mob/green.png new file mode 100644 index 0000000000000000000000000000000000000000..afd0c263b9465950d2de5ba7aef18af9c3ef4a4e GIT binary patch literal 4549 zcmeHLYitx%6rQct)*=-viXzG|L;+=Xp1V6ccEPf{ZCBY^%L@~_+6-aF@h z=ey^A_uR9cu54{-8e2252E(wivF1n{^wmzQJ^_CBp1gY%hIz)LWK4_2&Ua_VfZ=$| zQ^I+Mj4M3HVaI`e9kg0c1y%?BCTMkFckoV|=&5x3$6$O`Y5X*dr(3L;Nq71%B7s<1P`=XYqHErapGWBGIRN;CIzj{yEAJsfV0g~PaM8JeC( z7*@Fd`n93vS1y{=cXj*L=moXit>4`FkoaLVI;r!t+gqpXt9e4)bmi}r@rmokPiWfn z%z*>1$?xy!TezTVLBqI1*tOkeo4vN~$j0$k^cKvI@5ujpPQD*oy5o(+j%l7p??q}` zY|6%~Pg}9Q`k~2Egdv!Dn@{cI>tFjIv}DN(tA3is(zJ2YHf58&XZ3RT z-TijYX5r;G*3DVcQZKz*xpMMO@2*3y?)>7Z&8f!KY3)H_&dd$ZCBK*F`x6KCgPR_{ zW<&owJGYsi9^5wn+illh`sd4LL;J$7#J8rmC41{4)puUjRC#&ww)Y-eD-+>AVkaMY z^z#XO&t3m`MdO;veOu;OhYl?LVORSO!S~I1H?O~_e^qAbYR{glw!Ht;cm2x#>;u^H z)Pak?{jD>;=$G|BH#V(0+jHaom-@Pz*8jTf&9fK%7Tb8z-nA9{;XdMr8yY{`P<2ao z`EK8{&;By2W%9C_U3cyF)YdNlu?}s&?)eM%eX{?>)JKO8W5zw!R_e=pYa#dA^+eK6 z#^;KPk?~5ZAtP@gW4h;9Kf7Q`N++^$8Kv}Wi0I$-B7y5_h*;o@({VG5I`rnn7Mi!X zC7~?tRDvoodsa<-K?H&fvL(EbNoR9nAw;;mB8(j~Mc^*P?hFx0$hNRyA)NQ}UYd*+ z^lp}zRfE@CswTEY8cP)L6e2oo+Y~7(pU->qoY$~Y6cY>vDVn8NmIMTu>&ec${Agjf}-6hYfl|Yp(G!Sqv^A1A~?A-+eDjpXjhSKGP7mI`lXMIsM6kQeF zVNeceeqLZmO_Dg0*Cc_Ikk3a3IY#gWIgM2i8bTGz=4>geAcqRby*ls+YLJ&X6_I{U zVn|+=X;NTRhV;okHNXTpnF}&QC@!^h$Vw?aG%ANm1u8}1q=2eOB&})?jUp?gjA)jm z{Tk2k9L>{#pi8AHVxwVYBsfkzBc%{!W>fBjBe>Ym8VeDummajVrX^bghY&GW&vq3C zClY!F&9fy(O(wu{Tp-A?G{*#4e=%m4Z$7eekckebTVY*y=U7D83C0QC0mL>RR_{?wN4CF>kDX3q>JG@ba6w~wVr=NJC_Hq2Rs~k zv!1gJtH(7JZ`3?=ZSkr2nAY8^gyZg|5GAF!g`CulR5woGDo!aKQZ|L4dX&<2z^?y8 zD)=-hAovxQGK}7;7t3jIcNh}@o`-ijV49(6<7HUX=j-VB!r~5sIPj?S$ z#&C4L139Mvf|0a9GIW9oh`jUlRuYUl_FGi_h~;R%LTbDpQj`wxq)bDK%0fU>1z8n> ziZDFr|FlKs?>SN0Vm;-Q#eqYur;a-IB49`z1!;;lsLxRDsdBw9Y35YcWB4hh+c8`L zs7DtWk-npHjmkA51x5rO&8|_oMx?-qz@ypqzsXfI_{NB`@P}R=-UpAI(wBy}$rI#D znj+W?%!dWG-(lYXmJ`k9g*goKPIa26uyuAf7_019JX-a2^_Y_;O&@d3PjkU^rX5Y% zVI$+bcwk5UTVcWS+6e$UJr-$5objHb-j?{|on=)tGY)$t?7`Md^Q@UT<>{LMfyJUN KktgRYTJaa2P3+A8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/forging_station.png b/src/main/resources/assets/lotr/textures/blocks/forging_station.png new file mode 100644 index 0000000000000000000000000000000000000000..837e3d1421897aca058f56b7a9cd283895f661cd GIT binary patch literal 3118 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/firstAgeGlaive.png b/src/main/resources/assets/lotr/textures/items/celeiniss.png similarity index 100% rename from src/main/resources/assets/lotr/textures/items/firstAgeGlaive.png rename to src/main/resources/assets/lotr/textures/items/celeiniss.png diff --git a/src/main/resources/assets/lotr/textures/items/deceiver_blade.png b/src/main/resources/assets/lotr/textures/items/deceiver_blade.png new file mode 100644 index 0000000000000000000000000000000000000000..e11f7f5f6efe04e709be8d5b21183b0cf68801c7 GIT binary patch literal 919 zcmV;I18Dq-P)EX>4Tx04R}tkv&MmKpe$iQ>8^J9qdrVAwzYti;C2(RIvyaN?V~-2a`*`ph-)T z;^HW{799LotU9+0Yt2!bCV&JIqBE>hzEl0u6Z503ls?%w0>9U!!8Of?4LfU22# zCYccPg;mk_3O~XKVh%Bh8I4qSF$dT2bq^0;@1i`*{oJ2pSScC|@QB25*3eDj4dU5N zv%z_vIK(QFLVQj)w;UFi_N1vRtP*h9s7dLK-4uG*LwjCZe=zq!`H1e!|5+YWvgVlF3yC zBgX>jP$AiV@IUz7tx=kua*_fGVDQDVKE?sxF3@RN*7vbxbxr{9GjOH#{Pi{v`y{>9 z(;`Pea2vR|?rHKKaJd77pBj=b*^-y0P$~iMXY@@4VB{7UT622q?&I_U$Wd3zH^9Lm zFj1!Lb(eSh`+NKMOt-%uO=)ueOa$qo00006VoOIv0RI600RN!9r;`8x010qNS#tmY z4#5Bb4#5Gqk!$S$000McNliru=m;4A0Xp=xh-d%+02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00C7=L_t(o!|j;QYQjJehkqM1m(tx$1;xS|LQg&QCiFG( zCccUf(%0}2dXy3nq_if13R>*+(uhfH{;Y-4I&=i_ zS+(Co{Pcoo9tqI~)_xE1^*b<25zQmfcngQHUUYM7PE&Y!`vJY^?n}?sMN@e2=#=16 z1dJ| zieK}=W-_z`O<<@$9q-Qw`+$AGKKS!K__6uGY3qZ{WSBdht$eTyT?`(!?V4EkRk9D* z2ke70yf1|A3G>01iR^vw4a`1ZAFvP3?7k4XC(H*GCSo7357-C%|A2k)FMaR{8~(03 t{STOy0000EWmrjOO-%qQ00008000000002eQdly z7OnffVOvD2xD*wzP^HqUSnQKl+(0pas3@Sko1lp2^_+J+wf^OtGntw1e)o63@AoZp zGs}X5rrFxK*sxeETWNq_D7e}i&whQu?}*keg2l4*N)M0Jg%WzUTBDLH5*fBGP0g^G zRE3(3|9cC{aGt&P2nV9{D7J2womUy@3M+?S%UJ&cy@ty1SLEle& z@$5uVvAS8lq16T2X^#!_epc#i@%x>eAJ<|&-`tl^w9=>RW&Ch+x7O;jQJ>#aoGA2j z9(4+)8Chf7;0j*HlbAR>*YzVRIB(nG0oE6-qxwFak8`IVe99g4wC~(erRIJa1`E%x$gl#IzstX)6Yc%VYL(tV6`;hzF+Vipu zkwsG&OpQER;;&cQJvr;xGHcz^n={0=5uXIxICMS`_a8%6T`3RSHRH>bBl|mK)<07Z zgJZZJzKTKkTr<6;K^=N?ywrUi#nzVklQvG5S87x_mN9J#a#nkdHEj?~Nbc3Vmn zB^Y|$Vf4Zcqn+urZ})Dgw-v65xO^bKYVU5THv7*-OYF(|4dlu}r?OmpSNuXQuPHsb zuTPfzE01wO3uR$p0r2cVx7eo_zT4QMJGXG7zLse_aonqM?oqD?MO)`D=S59fRu<@9 zq*=TC`Hm$n2d;#-PPPhcX#T?W#?mi_HT7r{=T%{hOykYsW5O8% v zDs`H>smQhU9S$mP`^4I((Rb$TG5FruoHnm4>cO|$5T^~F{5JWz<@GO~l_1du-idJy zwX*r{U2RL^@8@>BXmTiifn9<<(uRhmX62tz-7XxtY&G2!HryZ$L)_;Lr%*e?Im`Bj zak{*&!P)WJk1O&T(tHIK1IA}|T2_Q{4AF5(_P_PU+|N9K(gn7~K)`Vx3&#h~x%cCV%9p+!W3!l0vOmU>E7FRtv zxbwQK>w@=H?ctcBiX*#oEWC9GGjWeAd0AL~%8uI?tGgC&T=GcVuwSwxu5rWg&}+vd zR^`?D-%C04WcBur;n+4!98N7}*5oWBfDfvv8#Bo7?;Y14Mk z^UwdYg^F}@8PL46bZ&K(tj@NsMpk$xZHu_nJ$K6dAkTf5`Yan!#GTlAt|+naw7@r= zEBJUA$MO6Ek2d%~y?e`mxqczSpN2fNo3Qby_`s2|_iI-d^MfzXJTzwyzGU=Q*;8CN zG#cV>J9hiw_?=GWRiB+L^NH`cbSt+aqR*%w&F=+|tof|j=jru>AzyFSW-q zV0W{o*hjKHF}EC@qO|Gv4L2W|m50naFFJi@BtK+#V{)Fpqhnr2+l-^dBV-EAi-)Zi zO)S<&zbHUskCe@jP%0&tpj9NpO;xHv<7crveNxo~mB8rOBonJh^5Qg|DCV#gv=?WV zP{x<3eVI5#K)QwrOAiXC(i140=J>{Ml9l2(%H#WCSZz`aq-tzxust=jToURx^(6#&^5VqlbZQBYr`PMbdI49Z ziRHmKj`R2k4?!TH0cq2cbVMqYq#b31=*IA4w3J4n)+tm;Y$GN?s*-hH91a*~zp_uM zmdSeHle8~c0DSOL2{jMq@_9-nulEeC&OZf!yfo-9XK2I0`;iyQXjRD?it$fjl60eb zL(o*ue08!W(c}(I@t8zL2~@RURrrl1r%7eOJu{3H#440((=0&t8=5+W{54r`*k&9t zxzpPaFue!&4eeLHo0Nf;OeXPDQOQR0q<&r;MJZ^B=@!A{LKGIz5Qfq?gkrD= z5;I~1q6KoA!bk!YFjOxnX_8h)BvFhJ3V?GJ00+hpxg5nX2t{cWLSYn#a5+jq7>>zN zloIjz;@%J+YZM?WiNxMk8KGzZg^Mu^X9NTUi!m5N5rP8Nka7qmVL8HQ2pB~flQlFY znX1w#2@p<&l89w^>ZDlHfRS*?Tzg3DXfq zK4B4p3QZzR4NhR~@r z;VM<47sqH6+c>jlSOyA;CUk@!p<@6jA3-I2u>?WG5xxW!N5=gu@~UA~KT2`{&(bFcQIVxey{4+*mFm0myZd zf-qVv1dWs-Q3`+4+`sRhSi%=dgz)=tPlV!piXp`if#M#Z1gE9DQ_^?|OpV&JWmKV;WC zqs!*?cN!)M{JGMDuP_<@$D_a(oWA7rX?`qM)+pA9ob1>tAhA{l%+|74c4v&I*|D62 z2S8}0lgj+9>iapfpg~XJ>7GE8D)pNjE|F9#4YlZO})Hjdr7e(xI09GJXc+FpfutOYjMF_BWaOvZ8t_x-?W TJbn#ZZM;bRgZ#dk60`8XBG3+E literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/deceiver_blade_guard.png b/src/main/resources/assets/lotr/textures/items/deceiver_blade_guard.png new file mode 100644 index 0000000000000000000000000000000000000000..1d40b0f763fd50071e569ad05362f984da67bb11 GIT binary patch literal 6355 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/deceiver_blade_hilt.png b/src/main/resources/assets/lotr/textures/items/deceiver_blade_hilt.png new file mode 100644 index 0000000000000000000000000000000000000000..e3c8ce9c8fce5e7d857686620de896d35175eade GIT binary patch literal 659 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 S*L@09H?EV1Nb~h100|7D3jo0A%84iD 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/ice_thawer.png.mcmeta b/src/main/resources/assets/lotr/textures/items/ice_thawer.png.mcmeta new file mode 100644 index 0000000..30601d0 --- /dev/null +++ b/src/main/resources/assets/lotr/textures/items/ice_thawer.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation":{"frametime":3} +} diff --git a/src/main/resources/assets/lotr/textures/items/large/firstAgeGlaive.png b/src/main/resources/assets/lotr/textures/items/large/celeiniss.png similarity index 100% rename from src/main/resources/assets/lotr/textures/items/large/firstAgeGlaive.png rename to src/main/resources/assets/lotr/textures/items/large/celeiniss.png diff --git a/src/main/resources/assets/lotr/textures/items/mugDemonicHealthPotion_liquid.png b/src/main/resources/assets/lotr/textures/items/mugDemonicHealthPotion_liquid.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1f593d8451844055097e259cd35e78620faa49 GIT binary patch literal 5055 zcmeHLdsGuw8lUhGe@h!G0x}}G%v?z#xh^&IzgRW4~`lz;4Wd&*rdndeid(IxuuK$sooBQ2+zx%u2 z_xry4C6ny%(4cV+E)Ea`jgtq(F};h7~jp^aY@yKz0WG=b%xW z`pzl`GX1i*yc?__Xc8C=^g(h(I1}X{Fo!1s`(YH5z#<6>GhvorrQ{&@iuCVp{#jdKkLVhD4tXo57G-d z8}7HffetMr_ua~auzLdD$)ovKi?^f~+karS+A3o2vg!i2WB1F-e|Gx*aa=)s_k}mc zaYeRU8H^lJ#h;oyT9}2+CF2_2R5>l#6VqmFTbt+L_VL5>Z7-%j&b?~&_ig#j_1;MP zf_cg38ZVzpT2s|jg~T*@t*T8sWoT(T74z&=-0XIE#r36o{uVlai}RFoHe*@NHzWKe z3))OS9*wQNp59pF+xDxw!Rz7Y8*&H+KVfH_Z5g4>}CL{Ci#mmV-QLi^#ow>T}%1%Y|?u?QwrIXqB zh_24szjQ(GK4Ix=X{hUldDrHoThEwbMYz|k?0h=^rnGc@YsuqI>w@iuQr^bwbr3ZE zLn=Df6suS)A#@rJuF@$^(S?y&PSWHSKWi90^V1?eF zOrV0-8OW%0q0z*;L_(}$`T96`nwDclZvYDIf)a^c(btJB-n3dXgJS8gNTR;F3wC2B;drsmO>U=^Hn=gQg&!(&#O_0NEonO_X|wtP!@+D;9T#8v?cu;*QWB z@ZF*ev=j=7Oh+Ws=E-GJ7Ja@%r6VYn#3CvMI3Gg)o;2Jl8cGGA#5^SrR|+vU9}}zC7$HR10GniEIG?9R#X?vt#w}1PLK3JmXmAit zN`uFfT)j5lvOp6q@e7wrStth{nh8(BO=_?~%34fmlg&d5(UgXaGT}6vh!DjP1QUq` zFaliR4=F7n4MvcOG^V9?T2|<=NPshdSe(vN0AQI1zDWEHByQ3fqIJ3?DQmFm4lXOe zbyDFbT!x!S06JKQqX+8nTp+-G=F@Nror+SY{Wop;@-V%DJ_va*Wd!G^S*H4KR1~?k zZ`3zTqAXX5$+TPw2~PC6V8l~MmBmhg)we_>;M#Z+RFD329hj&7AQdnXPpl@yIGYp- zg&=<5hAUAO&K3)RlY~GifHC1nbfZpfO2rMNUp(Lua0SxS@(soGv;@j)q;_foNk;(? z#)d^~L>vtZC5TAEgZl~NzIzwNLJ}A8F@jAXY7xkG1YwH_0mkO3)HqLoqXK~d9clFc z;vx$FdrtJb=*^|e;y_Tnx&IONK80a*6j0MQ2kJ8@_uRpH-_IFcS>NHSKi%Hp2>^QZ zkhkJ@l&(>_-im>@QXb8&QM%rWfwxi~&946&T@FJ}jHDL)&`Sl+g8^9)C&07h80DfM z859OBf+a(0Gw8bgB6UH;7s&fL ze+i!8*?R2e4;@opP4Y<2*qQJXb^ME?s~q`Mt4B|P+x?1k&J_9jM=c(=e6F$biZ_3k z9U{BOIpX!oHRogbt8pO#xs0vzZIC5jo3g$wbDKYJeJwL=nj`Q;`60-rSBbgvy;IIQN7v!n0xaKdPlkZahKQ2G_}`h|MQCq((5s| zu0rLGqPs_Yg3eXq!Hu&%+FdF5YRp%yPoIBT7WyEWv+}TUNA=j6{j$?j(8kWaZ%fji2T7^HXAbwm%H0+*$PJI%Qqb#!TVK z>Z(?BX|?mSl47L3DL*GY=)&SX$c)^rXMdZTb>vlJ?ye_ej?BnR?S4#VxZHBci}TR@ zs&iUW>n_Wj6u2pR!pTQZqz#pu^J1z$?BLEi+GX?Y*lRVO)zMDr{?Xsw^R-jC{^2Q|7MemUmNdk^@9%PO3{6n`q*%XL~jE#=BFXS@28 z+QJipnxX~K=G>s-v#FbYpHSqp@Y%98$WJj2WxJ|xwh)IDhV2i${IY*`i6~zGaZ961 y^9h@nJB-N6-;M2A-NrkYrfvwSzA@&OORu%A{+|ahP8a=`8YB-0m7Q6*I^$nd?+g|I literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_heads_1_alt.png b/src/main/resources/assets/lotr/textures/items/nimveil_blade.png similarity index 69% rename from src/main/resources/assets/lotr/textures/items/war_dart_heads_1_alt.png rename to src/main/resources/assets/lotr/textures/items/nimveil_blade.png index aba15a1d763fad2495514ae0872e250bed847daa..d567bf91b7b75cac58a18cd21613baa6da497e6f 100644 GIT binary patch delta 902 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/nimveil_gem_ancient.png.mcmeta b/src/main/resources/assets/lotr/textures/items/nimveil_gem_ancient.png.mcmeta new file mode 100644 index 0000000..7533019 --- /dev/null +++ b/src/main/resources/assets/lotr/textures/items/nimveil_gem_ancient.png.mcmeta @@ -0,0 +1,76 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 12, + 12, + 13, + 13, + 13, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png b/src/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png new file mode 100644 index 0000000000000000000000000000000000000000..f52aeefbaf5f5451ee457b33f53d585c00549a8d GIT binary patch literal 5626 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png.mcmeta b/src/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png.mcmeta new file mode 100644 index 0000000..7533019 --- /dev/null +++ b/src/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png.mcmeta @@ -0,0 +1,76 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 12, + 12, + 13, + 13, + 13, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png b/src/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png new file mode 100644 index 0000000000000000000000000000000000000000..053a811ae69d16e6b4b8dea00d7f07e2761e3244 GIT binary patch literal 5840 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 W*X?6vCW0>w1e4+Cb9g~S%6|a|$)~yi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png.mcmeta b/src/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png.mcmeta new file mode 100644 index 0000000..7533019 --- /dev/null +++ b/src/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png.mcmeta @@ -0,0 +1,76 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 12, + 12, + 13, + 13, + 13, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png b/src/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png new file mode 100644 index 0000000000000000000000000000000000000000..3b278cd4592fee6bf93835fdefeb12b7c63835a2 GIT binary patch literal 5523 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 SvsIw)LE`ARsM^Wt^Zx@{9Pm&8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png.mcmeta b/src/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png.mcmeta new file mode 100644 index 0000000..7533019 --- /dev/null +++ b/src/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png.mcmeta @@ -0,0 +1,76 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 12, + 12, + 13, + 13, + 13, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png b/src/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png new file mode 100644 index 0000000000000000000000000000000000000000..25a3d13e6942e01cf094b2d18c5fb61f66f3441c GIT binary patch literal 5910 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 C5xiFb literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png.mcmeta b/src/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png.mcmeta new file mode 100644 index 0000000..7533019 --- /dev/null +++ b/src/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png.mcmeta @@ -0,0 +1,76 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 12, + 12, + 13, + 13, + 13, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_ancient.png b/src/main/resources/assets/lotr/textures/items/war_dart_ancient.png index ace2df4fc9f3dcfcacc7fb29bd86d1745fb75fbf..643a812f3ca4c06e34992eae6dda85ef0ddd6843 100644 GIT binary patch delta 2195 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 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_blue_dwarven.png b/src/main/resources/assets/lotr/textures/items/war_dart_blue_dwarven.png index 31ec4682422f539a0441d4c24536b7e6ca153f25..f2147b8564c7b0979fbc24778fe9300074402000 100644 GIT binary patch delta 2238 zcmV;v2toIsBHSyGBYy;WdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxw&N%a z{AU%j1cVTXbm#86yU~%~5 zlglvF?jx@&S--C5#@>vFesc{tbTL}qw;Im;TR+(cPn2QFoqr>(XP`U|B!B$t7e^-$ zPecwzJC4$E#BLAJagg_G*^o5eze4G|ZMQek{WbGa`|@q+MEiR0BiL(#PIj&{x^ZPb z0C;}A;S59f6%%RMglU;QyMqLTJmcv)5)h3E)jyr|pvq;@^M3PHE$_}0{z7uN+Nb@7 z% zNR>tK?fiO7T^S0>WO*);1Y*l}QH1`h1iXZ1Ocb(X zBm$8Nfij?D0l5MNNW?XObe=gt8>}RR#v_r|R3{GI2K^{zP(nCxgf@vY#PVK{KhZ04 zC<}`hk$)gjRFdSt!3PN;#4w9ujvT#-5<`qpV~SZ>y^02ns+u$>ml#D;Qb;jrN-1Z= z%~VJB2zO6=8PvO9;XCI zXg4*pO5VGv+|+9$1f zHGlA1?Ie9##Uqa{G$k*qLnYhY?(TxQb=8l@rpuDHrx3sykCZ@iC8B{F%kV%`!095Z%e_HdNMrG`PcBaP3;N~Y1 z^J6HdHFu#~xS1i}xEajt*W?^-{v@J1Btlo|b2qDpxT|2Qt+ugkOhED5dqL0GuYc+) zwHOinUHGux?$*qh<*LEduflsPh9jjD89#$Kw;Q~!Tu0a=g_H3kmwnrO)uFwAwk4UD z6GowTKpCKV1clxB>+`<@>(gE2P`DuWqA7EBE~PIG4~XcCsKU;wV)tf`!snXw|{w(m!a@kfgXc3a$kQe-^6_F3!3-xC(;c4~VmalcI~1 z_+3(H5#t@lJ-qk5FL&PoLbJ+Lvu6TOHOojR;$kkpDh6H=r0GW#qY^XqWM(l7&+&B+ zAK&j{Jj=W8&(W_GOa_1WMB+K78y4{f@yw>BbKWNov$CWRpA(N8bV1@ruFEdJaV|M5 z@XWB0P0tgDiN#VE%U#UMhDtn598pw_@`aqs3g<1(YPHVV_v9}O6||KM*J+I)fh8o7 zf(RLPR8WP580{JNRA);4}O35)+|mS!q;QbXc>N0zv{LVK6mhGdVdiEo5b8FfBANVr4BkGBr0XGdVaiV>f1EWn(d8 zll%l9BxN%*Win-DH7zn>W;87{F*7$UIX7fxEi_>`GGR1gGB!3eWRpJyCnPjwI5RY5 zW@9ZlF=8_Me1cXN}@1sEqYF*P+Z zGBh$YH8wahA_^cNAV*0}P&!s+a&u{KZapG0E-^4JGcc14244a(IFoJ$ECMk&lbi;M zBr`TKWnyADI4v<|Vq`5eVPi2ZVr4KnEjMB}V_{)5H8nFiVv|Y-QwlLTD=;%UFfbx7 zlf(vMBsXFD00(qQO+^Rj2nZGp zEL_^14FCWD?ny*JR5;7MlQC<;U=W7igbE!T9Ae4v2^#E>*s%~?Tl@i~i*v!f;GfA4 zaQC1~rwnrLLbJGi;1ZNB*H(Y%bWU~X(tO|0cRYA_pF6k!o*4`?{rWy4^Z^IMOwH{* z03dLMv%3d~2)64N>~}VBGPr69uHQ?1h@5AQ4f53J$aGL{ERL5E_B-3$K2ME4KaREE zZL9OO^VI0m%Nxiyu%#5JeH@vnfWV16sYo9zOrPbVx=-TGus_B*A<( z#W?Gs+*mA@ug&*m=Cf+Q+g4`QqA1ksNnGLZH(XT};y8wPh{#F(1d0`J>i{zypa1{> M07*qoM6N<$f+R)Zg8%>k delta 1150 zcmcbkJzr^pay`R^)CkWsPfsld4h9AWE(Qih76wKjO8|%&k=RU(%nZyxu{IzU0>oIda&kwKn@6SfZ1SM;uw;h?*E&{qd$HAgdgpdo?ci#9z}~UBdGey}DL?ivxuA5d`ElKz z-QRaqvvYhky1Ztc#DbUGW_let>QffVvqz~R@JphM;LONlb5v9>7S`N7eEj-ujq|T+ z-kra={+SNj50^(0#y+#_E1E0PE}L1r7jBOT4C_4KsqV8&;iK|((f<1u;xS?sX(xP^ zKkIZplC-dQs#%(Au<|@LzSXn*emWgXp88oVeQiwY+3HW?Y{kD$8C}opQ)qP6actsX z4V@Cu)~m7BN>eOoi~Rcs@@0R8c8U~DJ#b=U1DDB(b@G4s>&mmAE?3*Tq&`9BMP1>X zenW)~+$LFlpKIS(^a>yN&lB@fw|*(#nYu}F*_jWO6B49%?8wVJC0DSMna5UgljiP8 z^OsFH&-_09i*IDY2eB8ipR2OpJ^sSz5gdL}`oRN%4iSy&y@z*K->Uxo-DmTD`3F)( zmzGN9eqmtXt;h_CD2ed(u}aR*)l1y$!DhvzVriaeoMdF0sB2=GXsByqVrZgknPQx( zn`oM1Vr*z;Vq|G%HhCF`yo!lovVn<#iK%W{qOql}NwS57E|8I?Yiyiinv|THW|Wj{ zGWjKkx{9GmO0uPqMY3*cvZ1-IiJ@Vtu7$a=iLQ~MNvg47njsLGPd4GS*Ye5CE3HuC zQczF;B{Qp#%-q!AlEmBsTO~ttBO?1N!w!n^BVpYJa@@Y(asM81fepXU>@b%h1J6IdBsj<^OY@Hp$F z1&3@aZ~q*A`JTFk=jLD4_p^lsqqApsPClf+f5H;URhGTZE{k6IYy0QmdKI;Vst00akx0RR91 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_bronze.png b/src/main/resources/assets/lotr/textures/items/war_dart_bronze.png index 9bcaa1a8eb6a8961cfa823148ebc868a56427e35..12ac24837ac7f53dcd02be182b20110e04136696 100644 GIT binary patch delta 2264 zcmV;}2q*WXBIqlSBYy;ddQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxlIti8 z{bv<-2}t6(9G+FPgIWGPJnT-KOeWoFyJ87}rGpL#N40FN(ICKHsgKDg+d#$}?3 zoS+1~t~8&d&3x{LK9oDVIy)F9ft1w@ZjV3gr0+aYf@W_Vg@3X;@_k1%+kdz?+JR&s zVkmVxirbO!>Y(i)t!Zf&gTI|ZZcEl5c$7AMYueGSZR3%>YGD-SCNSeEvH{5W z86^oySWgTjiO@wXo+P}HAR*84bY2mN`haSl4!UFI)abcgUD-0chsY(#?vzjMitKY% zX6kPuo3J&$w}0b(zYtxrKYqQ}(C3^ni)0*9?e?UOsZ0&yGD3{dK>?bBPlq)WAjchX z2dwIXrBHRz8F!&b47xfQs+6cxo3c;=M8i$7hr(P~rZI@;$VCQ!X57@-gUJeJS<0l{ z2%lJJhK;(Y87&}kB@AVPGtmD1TYdM1-p5uT(&5Y%aDOq6WCO-vZagszj8NZ6wKKuT zeZ2;+0tW5K^4KB~iOtJJw)9mAWD+eHXd%}gBwx1!qzIucz>t6euts9Zk@n1<2#E|J zC;>V)5N9wz)^Y_%HX;t(U?(9oUhy=CvSpYR>?men!ip0QZm`!tmN6FV$D4pPl&n}| zt##JhV1J`cPMmSpIp^Idiph&N%3JTe_rXV>f&>$6aKVQVVn~srplI6YqK_fQm=a

wsn7=P$b)?oGia6zM-*ufbHV`T`8`#}K~ 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 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_copper.png b/src/main/resources/assets/lotr/textures/items/war_dart_copper.png index be81a2aea46a78dbb61f28b9cd150ad5190b00e4..56abf01ff92cbe1824b8d0d0439b642297f94cc1 100644 GIT binary patch delta 2242 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 delta 1175 zcmX@3Jx^(Zay`R^)CkWsPfsld4h9AWE(Qih76wKjO8|%&k=RU(%nZyxu{IzU0>oIda&kwKn@6SfZ>S|f?5t2wl%JNFlghwQF{gH-t;b;pnWOQ+OBadOvs-s?q^*!WqNnvJVs$_Z z*TS%js|TN4($BawVaW~)u63;J_F}8~^v>i3KmW&Gb5Q)Tb#y1}>8m>*W9N*Og~KU9PrwNqvIMi@L%& z{e}t~xJ|P9KG(jn=oLQjpC{&}Zv9feGj)^VvNInlCnQMk*pZicO0HlhGmow0Ce7WG z<}aIYp80+H7vIQ)4`MH3KUZbHd;EpbBRKq|^n(Wi9U>aldk^ofzE%DEyU*tR@(-kn zE-jVH{ldV&Tag(OQ4-TEhewv zjADl-!O5Il>TtF>SC>knNotyjX_B$7v89Qnu1TUnny!VZk%_K3(86TPRC5c%B$LS} zxHTs8a;xz|3^CF+Ft#!<*euVJ!69}$vAhtNj@gpD-CY=%82&Rb*h=5|G+pr`Q4r_jv*GOuTD1PI^-bW`rnOJJDd46V;N_}$w|dGDj2H|T6g$*B`S)a zaAZr`z&o3Hh4_RV+b~U$BROmS{FVM!Z*ZVraA8A~i5T5hY_5a@YTRS_}ZasXY^^pGl2~SyfSvEVnI9{Fa YG$$|QpOU~qpg$NqUHx3vIVCg!0R9AxRsaA1 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_elven.png b/src/main/resources/assets/lotr/textures/items/war_dart_elven.png index c9e7012f4ebd237f01ad191c1f0ea1d130d585ef..2880d85f2e53b5385817068d972abeca71367700 100644 GIT binary patch delta 2165 zcmV-*2#WWQB91GNBYy-)dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O=0(vg;@e z{AU%j1SAlGZliyqo43|Ug)?*C2|LG_D6p1n{d4C8L%WgQH8&<>E-v}{OGAE$7%Ro8PSasAA=l{RBr+M~Tbdj)${;B?H*!Hv6f z8-N=>Z(N2E*Bu?nCDWzv9RgIc7M;CpR7^21)Q_P8z!=@=IBuz1;lrzT6 zh@A0uMu(gaKHT9CF-JJ`h(|hdLHZP5q=cd+mQ-@(>MHh+8miV+Jiq77uI28}9t!KWv_FJ)WZx#<+F;uiX{BUP)UqX$kn zDmhG(Bqx*Xe)Xp{b)1>x&9q~mk*!rpr&Y>w;+ytJIMp^h_0;s(m~ifCmHA{O0A8OK z)g6F-SesV|j?*838dF=KSYO}21%c z9PA(>lA(68AS&W0RV;#q(pG5I!Q|3EXws0RxHt-~1qXi?s}3&Cx;nTDg5VE`vxAeO ziS} zbq^ok?_xa5yYA1?uM|uMfA~b=Ii?#H@dokCrloVNujUa&~ zB$0v$8Ff@pg@qXH8Yw2ybRPHc4?F%8xny!xz{s(H8dOM*AN&t~fA`ibPEEQ=p*Ya{ zV%r~MKwuYWHEjF)*tT0Ifd3h|(mMWH6PW!Zz0uJkN5H@~aBV>lA~G&9FfKDNlMM!41U5P`IFoJ$Dg-t< zF*uW)28tvzHZf&lVmLT0F=k?9Ei_?cF)dD00(qQ zO+^Rj2nZJ{EQj4iUjP6A(Md!>R5;7MldTHEU=)U5hjGEM!NP>G=1-ShfLCCdi-I5~ zK?Ji`u?vt@4`MJW$mxpi0u~1j!>}Kd28(}wpWxe{_Xp0YKvVPCSOB1+3r10dBuUia z+clH(k>zP*s2J=wYb-{66h)!FxzliE&~1xno3C^wc+v~RvrYLaSquJeG7$+gi%N3! z36^CE%d#*XhG@Ap(BXpYdjEK61`$b~=kR?W(_x69S;y{_VY%9Vzn7U`RXy7jW|k>9 rjz#N9RAJ*CPSX^Q<3L+Pq*VO@F#B-!F?93_00000NkvXXu0mjfUw*ST delta 1140 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 delta 1140 zcmX@4Jws`Nay`R^)CkWsPfsld4h9AWE(Qih76wKjO8|%&k=RU(%nZyxu{IzU0>oIda&kwKn@6SfZxlq%ts6%&DDd>v7mY=4gEI(nX^6?A9F|X)9!p=xIHQSRK&9 zwJ>cJq*)c5pR4VDH%6Jb6*~lpp(-Tu{2!{J3t< z?(aLQ**U%%U0$jIL+)DKxt3I5u&x zhE54+>(y9mr70G)MgIK*`Le%4J4K479yqbFfy?B?I{82Rb>-Plm#ghvQlB96qONdG zzoEhgZj-FO&$VwXdW8@C=ZSf#Tfda=Ox>io?97MC2?^3WcI0KAk}KHB%wsFLNptt4 z`O7ApXMUgl#WynHgV>AM&sEv)9)Dr<2o66f{osK>hlob?-ov}AZ&m;P?z4Hn`~#_? zOG~A4zc4WHR%C`mltlRYSS9D@>LqUWV6$RUF-|fxPBBk5*R@DAPtr9pOEJ;4OtnnZ zHBK=|wlpy{N;5S#n!JodUM1PU%*ZU+FikhfBsEdj#MC4Sqy@+|Ha4|1FfcPsHZq_5 zl0#i3F)htF)zHvX*TT}kSl7f7WTHhfP_?Cnp@msuVw!of*<=$=drhCrywVCKE(HYz zP%^U$$;?d+E=kNSuvIcNH!?CYGP5)@v#_u*x0pPSQ;N}I@=nfpCIhp{Qd~M9%7d#* zIWaLc*}}}gK-bVB$wb%0$RtJA!oqO-1+2y${*y;@8b^_(Mdb&7oC<&#B@xEbTFz((emMD>A^JZ~Wb@{HEm|L~% z%Om6Nf8T0m%q?gt?Z>_Qy!))DD@vr=XNF#tza~+2`Jm~nxj-K8yL9^v@@YS#*8l#^M-C>n0(<47 zv7h2=xZ4|VpPy{f0R4rX($veklyJ8MuDQp(uc2RK#y6oO@1F!$%OdzG%b)RG ztxL9Q>bz5Vyq>SbU~^p1_H5sv>2-!kvxu~O{T zr(bL{rN}SO!?7ag+;Bc+Y5P2%s{vRG|F|Lm`LRQDOB_+4s}){O$?~g-b2RXSa&pry z`5j+TS}A*Ci1(~&cI$8tC<#k<@eLRYf9n2uVtJtXsWCZn{wMVNi?!*q@%XXI=I&ut z1D;A?O*s0?yb?mm^%=@MX`^vwnqG7l zg{2R+zp-mklQ3&(j=F+PysvU)y?b1DbdH$Z!wi~#oJ0LwyFT#F{q+8=-dwcj z1nG8+{pG~xWQdiEA$+KER*Xhe#$t$y;F*#aqIYlsFRYQ9v%DBha^s1!Hm_xS*IjQ-BVPrK zV(r`=c_!e3?ph|Q^Z2m>hnPFZBS(HD7fYEqncVw3j>HzS3=hblM4TRW9ddb32+3Q^ z^a#B38#{y9+Wnq-%x{$9gq~03>9+(uxVy(g=*FehJ(E8_sQ7L8kI#RiaL<*W&$9m8 zn_d)n@*PiDuwmJ@pm;cy{PZFd!!^s6O8IH^4Lh@t`S9a{)WMd~__fcCkK?x17YoZm z(iawAK6GAr?Y>@_muY2)-xju9>soi*$WMg9gp#-vimL;K^1rp=%L_^HtW}fW-Ed5& zYJ5TJlwGyJ_)(ZK zXtdZ{ljG8_kaD5RT}5!bwh($)gq~`NlB{n>ihQ%MQE)q%9(E|HZ#LL+n&{)Q>WTzYH!H#&aRFc9d^0zP(mD7 zhsL!T)-)9kK4^XY)xBf-=eE_FhDck!3i+F;*1DwFXN6Zh zR@NrNV6r~ko$;@~Buo)T(J^=?76bt_lf}lMaTth&22Js1Xe>xHWtg!c76V}LH$}Bk zY&I4{pc75eSb%PZ#u3>JGz4NmGzeh{I0A-c3IQy>wU|B%$0A~JtQ|}QAS@b(!+~fB z!a-;=h8c#iV;~TT5ISF-{21@`j1RQ|D=}01xNIM4?SCSVi z{1i7Nn5<)J3}B407``l=Dq}{%0#pD;!V^dUkskuz`+t`rcp3^z09X)2B%%Q}#6;uh z3;+$WcG8+bW(+zVhsR?R975sD@DP(lgwRYTNc^QB zpy>pVjm8n^5R;83000r#Q5gK&BO0M4Nu&ZG2@8@;!TK8rj<|BSt6BpL27^ORcD67b zm;y|)Wfg10N6903;wt)@j4E@39bD>Qdyq;LFleeiZGIjfcn53V^O(RscU+)A91}#0 zxDr>OWE-=^uK>F}Q{tX4H^g)#%WP+9fZvK03w&tmR%g~akvck$T?^IQVN&ymyN@ut zP0w+EJ)LZcZogh$-uVmB{?rrHEIbxT*83bKPg!`UYnRzpbQ{_8efwFC?zVq#{!($} x@S)r6eG$*StNrNN+1W^|){s{<@u-_3Ff!76OZ8Uo^_{pdhu;p{R@=}L{tN4Ls%ZcK delta 1121 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 delta 973 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_heads_1.png b/src/main/resources/assets/lotr/textures/items/war_dart_heads_1.png index 08e37135ec7ed7757059e58f0d94a90077f84bf4..0ebaca0fea59f2c259233fbe93dd6842f440abcf 100644 GIT binary patch delta 1649 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 OC2>zzKbLh*2~7YuuSin> diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_heads_1_morgul.png b/src/main/resources/assets/lotr/textures/items/war_dart_heads_1_morgul.png new file mode 100644 index 0000000000000000000000000000000000000000..9da8ab55451eab9fb7c94a523164c4c78190b113 GIT binary patch literal 6751 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 NEQON`wv8)q{0A*cuuuR1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_heads_2.png b/src/main/resources/assets/lotr/textures/items/war_dart_heads_2.png index 418bae5748eac68d0c8a08e6a4bbcd0edf839717..ca8804a75a933fadedbc62bf18da4125af5470eb 100644 GIT binary patch delta 1882 zcmV-g2c`I@BmXOqBYy-ddQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+QnB}lIu7K z{bv=k1OY-q%h9vy?qHTb$d;YNNxD0IKgKQ#f-oF$B-{=C-#-KXv5Q=C;3aBEAvn8y z@`h>#dBRap0>xVm(2Rob-WF|Jr`%ewa|FENbh=kcRxql0!bxoAViR4#&y#!i` zcp@TG+6t6bAf|l+SAe`P%Y~%zehH=TvK=eY{ed~uzQuO9vR!}sXw_?CMkeZPW*eCo z0G^Kr&Zg)-(r(Ty9Bm}Vg~ST-s!r#X4AGcS{Y$3@R!$9H+u_QVr{%(zB8OAHv;)d( zR<_dLW%jx>dVjRHvWEh9ss4P%Xganv+bXgTR_d@8bu4Am%&%CAnOec(1sClR3lXqfh0I4QiaB!h5G95fqsA1ovU(K_8dWuEPL$Z1rlgQ!(v(up zmNQ%AY;R|C$hlDA;)_5DB^E8IlkyXHL<3n#@hkTp~LaLIzSMXALJ~#-Q&=GVtIIXlHaX_gB0@^bfqzZ<&Kh-G|IQ z^Y)6hHa|mkV{AW#v#5^k^x1sZOq%D%?n%PCiBIL<1?u(02#1OP5*2*>;_xMJy0fl) zz<;oweFe+^DEDfjboa_>HJbB@gfEUAe@)jPO90@uKy!AU_ zloKMxw}22n1oQ$}4>Kyfh3mtO+aFL0zox9Vhe>$lE$Q%1r>1pj?zMz>6Q|^MF0Hhq zLW$*(5(gIpTE|&h4Oi!{Bz)n3Jso_9et+0zQ``%{?S9#?tA(Fx!KGXm>5nSbak~4Z z!4FE)&e-}C`^*b3Uaax31$v5=_#JCEbWflPzXkB*19xeAJ_^|-oF(;Ntd;bjSmA6R zF8%hHZAJ*^iT1~KlYW43{VQO%6%3c*n|=MB)D|A<0GE8v^)3EK_~6d^EsEQ=wL$Ox zD)(4h9#G@8m?^(KfT!i@AcFhkWWEmCW@6ZPL41qmr}AS&?~uXAjptR+F$T2xkL`c4 zX2M#HUugUQ00D)Q0Rb2zKp2MKrb>%c9PA(>lA(68AS&W0RV;#q(pG5I!Q|3EXws0A zJOLYj_+3(H5#t@lJ-qk5FL&PoLbJ+Lvu6TOHOojR;$kkpDh6H=r0GW#qY^XqWM(l7 z&+&B+AK&j{Jj=W8&(W_GOa}Nw;yI=p7V!r0%%-Jt-X{*TvZN576OS8oLE=ZQ%Pzlh zE;%gl%&?J7&l87<#Zni`UChdcN<2**QB;k8@`aqs3g<1(YPHVV_v9}O6||KM*J+I) zfh8o7f(RLPR8WP580{JNRA);4}SO7EKW_jNufB< z`(oQ4V?baRXf(d0egat9cC(j`MZ zawI=3p;!do&*+=-z~C*=x90Y(eU8%yAWOYkz5xynfoO@c*FD}H?C#sYHSPZW0Bw(Q zrNR~;Jpcd?JhPDkiUK1!V>L2kGcq$RF<~)eEi^VbFfBPXHexL>H8eG1V>dHqW@D2+ z1&aq)X>Me1cXN}@1sEqYF*Y?YHaRykGdMLkA_^cNAV*0}P&!s+a&u{KZapG0E-^4J zGcc1423-Ut zH!@){Ha9UclPw4+2UlrsWN&wKlUfKK3OH0UFgi6iIy5=6hzMv17GUKP@&Et;24YJ` zL;xZH695Xl_cJV$1`!~C2>>}UB;mS*0001dNkl*!h7GXwSCM>oIc(CSuKn@6SfZ;hN z1_ogu4@SFt`UWT%=@}a68Cw7iFfcN)GO(~RFjO!!w=yuZ0tzxRFfKqi31rd-7gvy9 zS|-P^NYn?2wE71xb&ZmFqwr|L!qQFMUWIEyHJn-lw70xU_;krW)7^x65h=SJMOjj?K-J7j;jmh!4sTeB65cx5fK;hpWFcI_*AYQmnw4u`4y@vZi5t zgedcRjzjGRLLDd1J&!*pN{>D@KbP9hI#1HD=w{_3j*SuTl9%>J9=*_!-m!SqvfzCa z$|IldIU2dzH1hkrKdlQF?b~#wH0rTOvY___1t&-0&?^awe!Km;I(6nQxA~LY7q2wk zX`PmYrC2~a+s%*7{}0x`zd38^OHFglDNJnfIlqBsy=?Y+;} zZ*RQme<|8lw~B=)pIQ96t?x}{z4C^O%iD5J^gUUwI>qb2Z^_zVMv0xQZP)JXEInWN zi{VK|*i7jM4+Lgt1b^Fge0THT;@{hsTkn_OzOU$zCSUbg1_r+9%#etZh|Ql^TbY!N z4N^^0($b7{jg69%bxjORl65UDjVyF6Qxj8C43bSO4J{|n;^=1e$;>OQn5@Go!E0n{ zWN2hyU|?)!YGg1ukW-S;VsbWTEDI>gC!gWe0y8%M;>=}KNis1vHcYcj)J;uGOwu(m zO-$CcNJ=r(O*1!4O)*L_GBGzvoSes_G5G?Qg0O|Ifnf+F?U)#78yH&|7;HYulfhA+ zyX?nTVA^3z@^*J&&}1-WFkjzaQU?^_Ebxdd2KwhP2s0kfUy%Y7WH0gbb!C6S!N|v^ zalOuVE>I}Z)5S5w;`G}I8+i{HaIoB;)}Fu?b?i&dmNO6J0w-H_O|qC4qt49qxr+#AyUke9bpF-A?ByLvtn~+wPe4;jf5%b~WH3A>`w7nK8V#YxF}=|W_837@n3cjY4Ng*|jlu|6U-n3k zM_`I%AXktCw&-J$ljvxYlPD)SjR#rY<*yi-^j`9iUOZ$e3Ct?dwoBeB8o-tCJ^p6= z6p}Ns(pd=$i2;IJ{B5KhQKqLW($ka*g(4$EsmfAkXJuw)-7skIK=rWv!r{a63kozh z>Ps}*(ZvM?I?Kq>7*3L8VTsLdB}(;1k`O^;85tQ_nOS++*?B}!K@rjKE4~lORf;~z zWm+U9S0>Mu#SbEd;Afglx)N02IYpkDmab4{s4_ueSB@Adc}l80EiE+_X6L~?lA4<~ zs0c4hA6!c-w6oO2qLq&-i^uQSKcw#E&u%m_fyEiB>#oncA%Db8CAyKLNR!!OwNd32 zj>-vD&WTf9)27!qG~U8;yt}DcxIGw}-4>3t&-wM8cinx@lBLm(`&a$;fz_Q4J`{Uw z-TDn1H$A@j$(>K_diwXf_v}6J{J}#n96s{Lqp$q=)z@Bs0kNp=ag8n(MLs+mi^dN0gLbw`7rXD?FKZns_5o4dcHKq!U9srRua4Q> zFC+EEIKMHi_*pRu4p*Z4DKxMhdarP4cHLXZ8GAU!2HE;b+OL=P)cG* zPA$7y>m3$$3S5?$H)UNx~ zwGQN}A(Bu(cCUz^MDCma_&)eKzf&kLuW^=_Yy1J9Tk!A*5?M2ErM>F;aRrBNyLJ8g z=>>n+XgeRJPC6U~EkmL;MX##1Qk^rtO{>oDP+vb`|E^P~4l}RqKh#*Ss4vU8gv@I5 z*M(LNimz7Raxmim%Zl(f!^7v11v`(rc9zICJ;ZZ$&Z5<~4OzThS+s1-L3|WGb?x9o zWa;5I>~rTnd+!&c&j%MQpTB-4v9Bbjq|@7QaOgqf!w(#5Uu!*jv}63-$))s(w55f6 z^v_&+Vb2FotZl0NjmP~v>%`Hk_BMRVOgFnu3#U6{x34;Xe9spDyQjBI|J#;%Q?4AS zD!aAu4E0j(x+j*5Sdyc8Y`JRl6PvcH$ht{f^VoCm6}DZ{?%@K{_8r-=FyB?RyztV% z`Qeu9Hs18kx~f5E=k54p1+Lkh`BeVXm*;uj-a1(GS=J0;*n+JYFV63H_iXcy;+Zpt z?%w@r^M&F5J@PF3xsD=R-NFseHKe|K{OrRQ_MJj=eigi<<^20!%8u04pBsAWR8F3u z_UpZepDBOm*~@oqc;~MJAG;9P+t{-A3VfXn6I>0UhU!Ta>uc51oR8u4kygL-1}hyK z@zZPzAJQ;*$fzAAP5vR&|teaL`P6>uvmmhU{vryHX!&z zg3qfFF=@s(J7m{tVP2E;uhm~&-3{*zc0~c=VTjOv1Fpvmt*wUM7Qv9C4M4ga`c8|W ztKH8V>iD2?oR1YaN)mY+ z!{L~jK^ddjgpwRZVBo zC25vKZBSIGg&<4>M)MqF?hP>|AV5{pp59)GP#i#+%!Cy;Sk z>6vf|t^CvwEk+Z!5Jtj=nMe}DEM}{%M`=1A2tp-_n9>PDni11N0T~D^E!HUjNaMhT zDi82<$QN+=d>*^D`)txZT@BlbqeFBB9pVAB`?TUpo>p$gj1-n|Uxcgnae}-3`?ST) zqbUV_NO_eIg!S8{p~Q}w%FjwXB_2J3w3Rd(X;V-%o1hS++jvg$6R;9fY%}d`;^Eh$ zt6Y=g!grJcP4aHi#28VdjkG~2U~bfEB1qH%sbg)t#fmdzU-Y2Q9SYL{zN`u22(g0l zl+JM)os_7NeYL~QyqEZd?BksaYaJHjJqAOsApPr(Trb&i&TTqU`q1rLtiZZl~ z2C^m-Lz`_F!zC)GJAhYD(TZX~(L!Ms3b+1z6s?%aY&N@jl)y2_qS0nXX_n()Q(A2n zg2v4joamdE|4gx7@N&Lz@W12{NLpP4Mwu*dQrG?r88mYi+(f%E)a^ELD9MlvY9)Cb z#R<0s!*I9BWTt;8z3(ehD~e;uT}}4QV5vcTu_d=F~_S2YF^WWe)clO6VL;$Tn_a#lMO zXO*fT-PKFO}uX zSLVI6`1QK11s6N>-aK}B=I%S**B3V)tAAzM#p8w}@wJ}#)O8Os3y-(On6eYMs5TZ& zy3;cqCgZDDEL}8Z;fm1pbLYlae*Ve*Z)ABsnvY!?y^0$*r9!>&zEWU Q;0)q)Os?2Ae&*tT0)&mYQUCw| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_heads_3.png b/src/main/resources/assets/lotr/textures/items/war_dart_heads_3.png index 0a0b7f9e270a0491193b9d969d6c25f1805b4280..b9705f81e58046f28f1338ab00a42fd55b910d4c 100644 GIT binary patch delta 1933 zcmV;82XgqsBe5)yBYy-cdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+QnB{cI-F^ z{bv=u1OYI@WTAf|N!XMnUW%eWZ)`x0_nW!+X1)(6H=+7jE~%y#^3y;iS^8kwlEnssEJ z0C+qWIH?lWkydkJVW%Uqn@F@ES9RL2sEGQ2YA>BWSlKnaw!@JvOVfo9MRvQqv;)dD zD@*C$GTSgU`hT?7yoLgEsQ!3*uc0q%)>S0ywA5}cYFo;psbAIFThPoE)s;|#p}z9?hNmy|K8^yS34eR76c^Dbw!#?9jZxi{5$v<5 zvJ`l`kJsRpl|dO*9!Df~QhsG0m zL@i`cf|5el14LOFKoP16k}R`RZo=qeNni1}xRQ{XLG9Yil!WzIGWWS4yoIp$P!`xINGxZ+DFv7}0stM-rTs;{BOni@9UO3gND zuK5;PY^m#3>kQp?>8|@8dhBUuZPI$WAFzg#HGf)|8jgNvO|9NE z3`bN{dt+>>whNp?0z$D&ic!5;OH=W-$xT z@pTU$-|u2P%e(H+(XSLt2KYqcIi?#H@dokCrloVY~g`CR@=Pk}^wa(i2oSOnhB=$rDu;4RR%=Ju_9j?)JqOTAjY0S*pDJc?%TgL?f(4$ZI5!L z!WJJr000j>vylRd0wiKIWH2~mWHK!`F=aI^G&VM5En#J5F)d^`W-w$kIbMe1cXN}@1sEqYF*YB~lEj2VXWi2!{VlypbF=aC?IXGft zVr4fpVr67ylPw4+2UlrsWN&wKlUfKK3OH0UFgi6hIx#o1hzMv17MCRcBme*a24YJ` zL;xZH695Xl_cJV$1`!~C2>>_|29&D}00025NklkB64!G)&k@ZLi4r2QRtk@UDvU$>*c_2SMr{N_nu{0I8xkxqzzU6&HH!(2#-q! T;&;Bb00000NkvXXu0mjf<9=jf delta 1047 zcmdm}b69zTay`R^)CkWsPfsld4h9AWE(Qih76wKjO8|%&k=RU(%nZyxu{IzU0>oIda&kwKn@6SfZ;hN z1_ogu4@SFt`UWT%=@}a68Cw7iFfcN)GO(~RFjO!!w=yuZGO+}j!MFh7B#=pej{E@H z!q}4O>>S|f?5t2wl%JNFlghwQF{gH-t;gX2kyiiUrLIx+GH(BaR|%gk*=Jmuv}A_`*E&}Ada>1fdgpdo?ci#9z~8aCdGey}DHZWS8G?^nkN>uK zKksn$cSfh($4rV9I5T#ord-xEjE@jyUe9r;-9V`0Y;jI?_89uUZzoZ$f$G(>+HcSDQwDpZBMA;i7$;&Xh(y_DB}=o}l35 zC>(kvLD6rwUstEj+~qcZlKbM7raP_ElCTsDXlJ|mvHAbO_cv!PeW_`#SwDq|Ek5VB zG8;=-qu=Rm`}=cu7c>2s->AL!`TFgRH~lX~+v--a@Z>X#U$^zW$*fo2aB+EC&WXM! z%T=d%9r!I-8_X!NleO*Iot>rU3x6>@$q1V%{osMX42|G#yN>T}{#*Qe`*Q33^4s?n z9n$2hKFh$s7o8arQ4-Cu=Q}N@`N7fr*)AqONJGftjv}p{b#6QfgwF zZc4I|L28PrX{w=x<>Xl$U0Obwd8HLfTnY*bphRI6l9`(tT#}euV5?+kZe(O?WN2h) zU}0opYGye(fK!suVsaK|EDI=!Og_!21!ipi$(hTjVrrCXW^8I=rkj{zmZ)ozXlbTv zX=s_MYnYm1U~Fh&nQCE_HaV9^WAb?}1z`(a1H%wVS~E4!HZZm_FxY&ACxfHDK`MC` zFs-pAdAqwXXfl{Gn6K|IsRN2|7I;J!1O0j!gc*Eak-ar*7Vjl9f;Jj^fM+dlB*-K=&z|Jd+K7Mt#asCZ5f8P@+V|9d%Y@sO<0 zC~xzqS}VHNw8zlS=D2-GTIgQ!?j`S|-rqI;`(tZi`dU`OpR4}dYVF`YaF$0Y$fGLF zPuS(U!SThBe@@5W;J0|LGoACE;KZb~fU7IMPAFiS_r{WC$4koOaf$ySZoX zJ?D4M@0@#Q=E6hMr%g$eXUGu*NwgIgmO-B+G+8YCW_{UBBZw@8FSj{twy}r|#z0dN zjYxX*B>m(li4>8-`2EmQKo)d_mLZ7|`z0Wc=#iU2R`=)#Hn=1TNrZkiGy>!_=r=-h zJ`ncxPmo`OCKLaTL?K8j+(r5+wvy>eLW5%(oeAtQf}}7Lg=0#br1UtY!@$2}OM>tIaS=tk?keS$i^00n9BvE0^V!^gYenl{VD;#_GvF;8e zY3gL#WN;)T2!6WXL#&7_Ha0FcMiv(r7auQ^E7B4b2?>hfDXBx#MrLH)Fft=EQ#neL zt5l84$;?z6^TuH~Ns?K)W{Zi)*XT$>0FlJU$14&P>4}NyM0RF2G3cv%H!nk?zwk7PldF%t0#Q-S*^X>?3%oGf0R01D4137L{cMN4C1qN8DU0n8)O$uTL} zctLDxDIKSpn?~HT{7G5Pq^)~~mA(G?C>`T%ikDw^efsc>(PMJed1Fbv!Dup5*21F6 zQ;Ka5YHe_T2L?{C)e5w!QoIA9$(#y0?dDz zeR<)lufMr?>05!9z%z1%nSF;>GVqFuj+REp3A`jx4Fd7x=$LFgHl?66j-H#UBJPo; zO~CO`e~&)6huyUhJvBJgP@%#SBL)e@P*Q%D9ezbdb9eH^uAE=#y7`r9~6>^ zvUF2Wy~%epHxwMJP*Cbn+p_XARS-_oPlO{HFZos-YUv;NkPSg~s}64kfJ5J%i~0_t zi15fNb!gq<$H4pH{_{VK-d`gk4_O6S9Q8iXZ|*8qhl1OD%^&LVGx^(~_M6teZH7Qw*ML`K5KTHMs9u+ItMKy=$k(gmC!PSzuZC_i&j++EgFuRS zm9`3z!NOehiy4NMQAX<(A@o6EhFo zaohU!vob$Zs#>0;ju#bWRu2nK&wf+>EY))Rw=pFdE7Go?vgi4Zj&|m)JqIdg$IUKC zx{S=N_mugUr*yAOyLErS^Zv4iZ*FKfk2G#OXy2AAX!uDPxJ95c&cKj}Q#61ubb{LvlHcs@M&%&bqJ zS#ZnMy~PE$Rh*#?C$HP`;OGaFlxvsDH*RU&EGNru=Bg%~J&{#^S+#@n&fNX-)0Ge&Kg)3C_Jrp$UbwQL=DlZAm7gnacaCg)HvZ7U6(4q1 zZOxf8XTAH@a&K(EN53_o68n$*i|0=;nB{=yLNY=Nq_X+Rek={12z6C=U?2VQaU+{YPP-vEAd$QDrfP0FF#}cG&?)Lnl*E(3FGDY z0SW+Wc|WZT)YiCsRKTJVaVe06VXaCjs`#rds&e=ev%0;!lGKnI3@r*c>j~9(xia6& zIjFM2$vqHoXHix8{T@oIZD?rFH0U&LZ>1JDo6TB`&=Ld+8mMoc%TEVTmoG_?>Q-Qoy7ccb(s&Qo+135?`&Sq@)+#vJz89YX=`h>{Vja{qIv-7 z3FrqceD--BUR%cd+;v`-FRJHV{+#|09NTN}sq@x|bU0Sa*YLHV>I1L%0GGlyYp;cn zf=XwtN3?=u576{G9ev3f5SuU~(&--vnD^oi(2j5yl|iedger8ibwYTyLW@f9PjPP6 z$x))nn;8zr3=GQX40@F0SR=|11|D^ojV#V#4uWR+eo!`-&riEpUVs8{jT3MmZPbely*Xt2JK={2<9 z0R|S;%}!Tcpl`zNtmS9;X(5}qkz}s#G&wxn!(Qv--T~$oZ?neD#cAf(QKH4kFMuAF;2h= zPq9_BtCEMON6&JNj5~i|DZol_ka|Xk>dd4WC27oon)C#T8liNonKznnh8&3Qb36PE zw3jcaggip7V0nsXJf&JJRNg@ChALjD0wfH@jHnK`<9Z4sD3a(&nD)1)sH16;p&dq) zBX9yGG2VnSw3!C7dObrM%oxL&2L}DiDVk6WC>kluNa3d6kD|%UaV!ZtSWoJCRIDe1 z^E%XQVpxVZk_^v+0`UDu!8wo;l&o&migN6ZQQUzzc(Q)?(i7A zVc~_X?R{hSta>QNZ+Z1RFn&uHO64^tgUauTV20e zy5xOle%=M2>J4zBr!%a(;ok#dnVY5*B6)}&F>YSwUkD@dp5h80f(+RwG)cR=m4m@J zzpbPwu2UvY(2ZN$x$qbaZL}2@*iEmpbJ8m&7TtDwSMY^{jT}CPA-fW~x>wF@zS5od z2bp#0^7O+^ZC9~_HXUqa6bC+u;S*1H z?^5}zt!gGepKIFy85Q(H|7?lN~O}pP0P+ShITGG=cb33 z-v3eCXC@YLQx`8@%{ld6?&jfwpNp$UA6j&{E^YnZJrbnVKe1w1hfMh2BE(iSt#H$% HIZgisYC{qe literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_heads_4.png b/src/main/resources/assets/lotr/textures/items/war_dart_heads_4.png index 6e26dcac86eaf73971da259499594937dd5a391b..b114491e3f426c07c5732ec73c0c014e1a8e0642 100644 GIT binary patch delta 1969 zcmV;i2Tu6mBi1aCBYy-hdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+ND=plEWwr z{MRY=2uR|29G+EsgFXH>w(%rRGLy`hvXO->HEIM2_5c1I^bamE$&hs+`sBUAWs^;k zAw;uZd3&<4+w*uaOSse1IUrCedfi{6KkS#D&7CLCklc-ZlnzHK`v4yf@;)u&Qw+CLD1GnSnn~PmnvdEy--eH9*LNF`z2=})k*-kVsd@m= zd0Wy9A?{Dv)ma@{hUr3rggndBc_knk6RLe`bjQjm@pC<0*|Kt&=q1Vi?4Rn1-E&s9 z)Zaw5@sQ+R-+#*Pip(YZ^B$wcvCSE?$krp({+QI7$|k|CAjAwE3I4nZxE)-CttGUG zRb8ZpD+U>JdUKgEy1f@ zugR-|K{vBJOC%w&Wp_~=f9(Xi5v?$E==U1r&<+Pk5kfnFVFd$Vjn%Pd6GQ?t5*a~I z26PmV6fnTfNdri+svg|LxsPRh5_mHeCr}gg*v!C$Q?CKsB+VepT8H%$Y{VMMC_U?( z^DemPl7Guyz4gv}AN<@DbI@QZxZpzwF{F^AMjKu9F~k^C%t?}B({#zFkYY+HXT;3# zobh#rLC!^r7F!$@UqXo`m0YoWs;#d28fvVm<|a)W_K)UUXtAZ1J9jLlZoBKghaP+C zd0?pxrD2B~euNQ68u?`Hp!K1Bz#1Q{$;Q+)41XtU(1x&F@Z3(^9Ws3iggS`7Luasr!(*N8X;X z*5)x(H^%lVoJlo`>ce=CSz?}t-9t~W20rco=BU>bBQ2Hw5fy#>;jkrdGEUOGq&mo7 z(SQCD8kxU93QLz2KeX85*G$0Sa7dh%lwIQ~8{_t#<9M**y{9F--G8~~=2n2te;NC(r|%57r+>w_?@Kp##XSMqZl+C#So9$mTFP~jc4e`S z)792S6q7bVGT>?<-u3dSFD}r9zhj-1>nJkZo~Gx64{+UQ)<7NtHeby z#dG^G>6c};7cCCQHE!2(bA5p@{X1Y^GZ=>Q59|6hsm%c9PA(>lA(68AS&W0RV;#q(pG5I!Q|3E zXws0AJOLYj_+3(H5#t@lJ-qk5FL&PoLbJ+Lvu6TOHOojR;$kkpDh6H=r0GW#qY^Xq zWM(l7&+&B+AK&j{Jj=W8&(W_GOa}Nw;yI=p7V!r0%%-Jt-X{*TvZN576OS8oLE=ZQ z%PzlhE;%gl%&?J7&l87<#Zni`UChdcN<2**QB;k8@`aqs3g<1(YPHVV_v9}O6||KM z*J+I)fh8o7f(RLPR8WP580{JNRA);4}SO7EKW_j zNufB<`(oQ4V?baRXf(d0egat9cC z(j`MZawI=3p;!do&*+=-z~C*=x90Y(eU8%yAWOYkz5xynfoO@c*FD}H?C#sYHSPZW z0Bw(QrNR~;Jpcd?JhPDkiUK4zHaKQvWMyJ4H(@X{Ei^Y|I4xpjHDWC^GdE&5H)LWs zVl^<6KLv^hS7~l!Z+CN(&IK4JGch(aIWsjmF*!IeF(L{eARtFcO;9>kWpZ>@EN!#W^0002bNklR$r$JXb*S-VZgY29m#z+X^ z?MUQ~Ifh|4Ew?@+8)IHXw{1Ihudn7G$MMPWDtcYITWbj+uq+FC`?uDps+4O29(VCu z?zKQk6p_?*-Ej}6sP3FLfcKt#-zifx?*y_`iLb;Dg$`%Jrq{LG00000NkvXXu0mjf Dr7nc* delta 986 zcmcbn^H6z$ay`R^)CkWsPfsld4h9AWE(Qih76wKjO8|%&k=RU(%nZyxu{IzU0>oIc(CSuKn@6SfZ;hN z1_ogu4@SFt`UWT%=@}a68Cw7iFfcN)GO(~RFjO!!w=yuZGPMAj!MFh7B#=pLl@4cs z4s4m6z#^d>Akyj|ywo*H=8eLm2@6X%b$b=A3Dt0F4ba~5D&f;5`;1GICeLP(uCIs> z$`E|qdi=M=`+0|}zcV`RK4wy^z?rctHRZCVVSI!r^Lma$?FK>}C(q=Z@eE>{_qEi2 zZ%BFJyr*}+r?*~Rbdq7d$D9=2!%FuQ{Bojr&;33k7&bBVQSl?sW<8HTCrXb#H9wcy z&N@%hu;^yxBaV#`?~<4HM;^V0U*)w1CFeG|$fpYAytx!N@H`@BD`3m5I%bfz@w zu}89?_XGteN8!*b35tHZ{kl4J<}SDSliU}tG~H>PmV~8PKs(#bkInxNzP~wZ=}S#> z%_&T5@j1Vh*;vXN{Z4P&-=Dj?nCZv-M(w@N*KcpU>3=EOR=0|UC!bmTx~=a`X1(%; zi_6<`PT2H4S*|+8>%ecx+F(YBovdxw?(8f*U-*mRNk-UA=?4!4W@rR|+jV?*^WWm% z+m~DKm*2jx=#VB~^;rf6zUa*#S-Y52Qqz)*3=-24bqx(u40KJ*l1+6jO-u}RO_L3h z3=IuZjVuzACeP>SV)e<)E3KGpz$u|_WNKt+WN2w-YHDC`R! zTP0}3PtNCzWdTL@)(C{*+ek5W^|54{JXGt<}@GS;dx z2nebx85n1+eR*TS_jzt7YSyf}&ntZOoMrWs_=|>ux(jW-*S0t7N%!nxs0k1d{O^*S wX>iX<`OZa;<+{%p*{3SEmPbQ zhn}dL93&DWVi^ka>=c``zYV@fpz_839Z7)9fl3@2#~K@$|LFIwN_5tt(3 z$PL7gE%+GVBsd!2B*+0y86b;0{1qY-+D-1)jfW`6kC`LbcF3Oz25|X(Z-2l291?x+ z7~>dNNC*(z+CM@v5lLuhSZIhOEG#TMTq2E(kBW?lh`cj4u5bLngh6)=Oh`(S4OR}5 z$x~C3k`%h(sTfX@L@*(nUy_e zY>x5Xg2MYJO)i=;)x`1U;u6aYr)yS)yK?rNrH?Fo^s(hDJk@_&^Y~_ zpx?3e@p=?nWD2hbx!B_Mcn{wKv>)QDTCbwA z5Ar2Lv|yLvQEZg|7(a3Js!Uks_{h=cOT3=%`tH!rQFv?XKm+-e=Ce*2=}~M}3pgpy z0mM^nuYq?<#eF=A9UI=&1NYkXzXBn^cfnxYG{swhQsjvl08lS1(S7cxPWchcLi#S& zdOh`{yW?aCuKgB*&yUTpqEQFIxtLZBaol$LBFHTU@y!?qToS|jBXaK9s_?#4|H*iW z!p^*FZ9|0+1yFvOZos~K@5d4{`m=P1_d%>{+N$y)%u7#p7KEUCGtE~G+7hp)Itnt> zuqyQkz}0?N1tHw30MbZr+DWfxxa3{ob{WiCoBv8p^%Z{ALx7gr8>E2l=O9!E!T#%W z%Mbym-@9-B01@YZISmeiM=Y6{dB)64ncZPCTS|EZseEewYD3PE(Md-ieqht4Nl9PI zQ+;7QFN%G?(oA42M!P9X^$+Tnd z8RpH~zp^d$vU6e8f=$zjgTtbS)mV#~5}VXdKJn)4r>Wz|t25?}Ph(DotQgdw+;{zz zhEM9AE*|rjQuDv4dsEjm7JbD|(iUE@T&VHRSaZ3#VVnKzg>93**fxK{jl((V4@~)# zej{dM-SQ#Jqh%Yaq+9E1cS_0paa_r$OXmkwT$eX+j{6V3x@%EFVNTVc>wOovXZC+~ z=$VZ?(-ZgZ{i>w( zE_;JG(r~FdS)adX^MRt^v&}6}wjMl(MnB}7JM;3#--=$%pL{9t+_~rhs)<(`kL}Am zv;W7ro6r2G?}k=KHJ z^2HXbL4JAP0lCb=8RU~Sxmd0}lP|I4%yIAqbH*2%=FBwdIr*rO(zHq%0Lpk5BdaVc zwL0lagWQKpgDecIwm823wvnwqXgnXn_mgeBhbbi*D4hVQM z$V*%43$CAPuZKs70f?`XV-Dd^C z?xE?jn7e}2!#82ZN2j|ZVBU$_Lp#9Trwm%TxpbDzG)r*Lm}QU)>(iXgWZ`I^$m>}S z$FwZUsl zQz*;m86d0Cu#8rZv7ElA)3;8MLNTDIqcI(gQ-2;s*kvroa*#Hy217|RqefYZ#ZZjF zG!#X0IIbmbmf~cKm9x2>zmi8FNfiC5JD%S!S3Ag7=aUw{cBSI4$v(<7i80IqOW{0&% zq!Hx6{qB|_F!Zr8E4`3rg-FspV z$)|>-kCP-Oj;h(^SvIshyZks~t~?-GFm1QWcxA|?HxrF-*z*^k+Os_3#+B&%W=x&7 zQn@s?^>y{Ut4KdZ{|#cK_+s6-;In5lm5 zrA*rV(sOSl?5My`iBi5;B#m!7BbKg=t9pCH$Q9qeH>&kOqxd7m^a^9s)!{%FF=mg? K+L1AR$^QUzXES>M literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_heads_5.png b/src/main/resources/assets/lotr/textures/items/war_dart_heads_5.png index 50a1bb197e4e6c09aa93b73c830cdcdef16ba024..c5deb819074ab7f7e36f5da06ef1c96b835de7da 100644 GIT binary patch delta 1994 zcmV;*2Q~PBB=jthBYy-idQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+ND=pcEczP z{nsjH2}mFw%i(#>>|mBZ7u&drle9@|jzJN!bkRl7QvdJYLI29+zB_ z3?Z8R$y?9HZT<1XEa6U1=Y&9IG1~oS^oRY@v$^xc8Is;OihuQ(DEAY|9sc9R(Gkc_ zL;|55j?&@C%09t|gS;=x_!PtK5=!64wpJ4Nmu6S{=G*WQ?fTmVWUncdR-{{~(OY`} zu=90fGlaPJva2(U0(!M;Nl3`EJe^MhqA{Vmr$%?IoDx6R)0HhJhl#x;*`MQ6J+VG# zWlQ}{WET%f?tk^I?5@aMvOnK3S{&P&v5M?GQtgjLt)*-d>Oh)z05fFM%EZpvtbB&pzzt(%R91e$=vK=21a-sN!2aE zt6iVTs|ABPvph>AA+cq5QIx+<0=p4yVW=4Q8syLp2S^b@E5NV?17MAau@1e(@ zdLGzn!_sg=haX|Ykw!jQJ7|4qAF##;YqBvl4S&PQ8nhuS7d(#>ot%L%A;(}mObW1} zWpZXBJ13L5$(c!ls!#z)ot!nEjDbPdS#>fsXHSy{AH%Gmm7-^~OA5qcA9}ZXYCgUc}OR9tX z6@Tq7p^^Cuq_A|^;twr$_-iKMayTSTOUl}K%EstEavTpwTyNqTCnX<4UJiuI7p(~(|He2uo9 zODk<?3IC2iD`pevRBYkJUJ%25}eP6nHD((re?Pl3@h{ZnS!j^Jfq+406 z<1}}>MDL`goxbCP?-iGxeOSZNd3o@a>?_tzbdR8leFfmbhHk_5yb{^fpDA_UtX1No znBsYSnDoms+lv;L`AZw?lY|=FRbQL@$uh#|O_-r(;l? z|JeQycl^SL>162C0004nlK}x3BS092-=<27R2=LeB9ftYvLGtrC{-+ih0<1N)xqS_ zKWNgBlRN<%fB0QeXc6Nb$349Fy)Sp)0YbCNRI_ISP&La)C*oo*zbXb^5v1uy6r&O| z^<-u-3(xU&4BbKWNov$CWRpA(N8bV1@r zuFEdJaV|M5@XWB0P0tgDiN#VE%U#UMhDtn598pw_fAWQ#%L?Z$&T6&J+V|uy3>CDM z4A*ImAb}+$k%9;rbyQG=g&6G`DJIf%9{2DMJN^{8WO7x&$gzMLR7j2={11Nj)+|m< zx=Eop(EDQBA7emZ7icwX`}^3oTPJ}38Mx9q{#p~5{Up87(IQ8{z&3Dk-O=Pd;Bp5T zdeS9BJ#r*JEumNh-p}Zp^1$FN(6{FHt$mKu2OvwmTD}1e4uNQive!M{9qjJgzcuat z{Qzx`a;3r+A3Xp74?MGx0*V48F=RC{Ff%q}EjMLiVl6Z>VP-91VP-ZhG&o^6G-Wh0 zGBY+glRpKD2UlrsWN&wKlgV>l zA~G&9FfKDNlMM!60x>s}ZU!s@F*mcE25kW(GhtygVqs=CEo3q=GA%SPWjHNjVL4$f zG+{M0VqrEpFk)mmlPw5T0XUPN2WliWHZ?IfVKFr=V=*{6Ei`3fH!V0aVPP#aH8f#3 zIbvgGH)1lAEeI$FS7~l!Z+CN(S_mErI8-t)Ix{yqH8it`2xtfvT%3)O00006VoOIv z03rYr01CYKGc1z^5g>mF03|kD@^X3r008VsL_t(I%e|Amjf5}|g`Zc%79oLS0*lPf zT*6d9ArwO)Qv#XY02MfP19Qn?0SkM#(%wxtn)l7mvw=^Cb55Ld^4t36oanj^)>;4% z07xmRw*btn0EqV<{907*qoM6N<$g4fBG8~^|S delta 1007 zcmeyO)1Wdzxt`%dYJ_K+r>7PJ2Ll5G7Xt$$3j-sNB>=>XNNgrXW(H=USQ`)v0ofom zAS}hm3Z{F2Y-uQa3XrV~ab`P9JXrHSAO{3E!0;Rs z1A{P-2cz9ReFGGX^b8I3j4gl$7#NvY8CX~u7%CW=TNwb6CD07U1qdgBOe*ygs|Gr- zWpW~mgmQpLtAFrP*C?4c3Xdi%EZx-YRk$Wp!>Khud&{eYPnYa7E=`&|hef)+B0eZX z@Nw($-xlxZ9j^Y)=(PKoNwETF#;(+q%bJGq5u(iNIS#cO2z8u1lXJ#1h;822Qvban z<%RQ}-u<55dUerBhWQ?IQg{z5-Ba+(iQ+x?`-ouJ#L!2@k35_8JpP<0J^IxATxvV( zJW0c%o0X3^Hb%TlUfLgd^g>5^$KqAXg6sE9D35%)=V;_=)5!1h{eQLL+~!YmU%b+Er*&EqmSO?zY&SnP|3CQt=B%YJHO)1r zFtNqw{8naTDQomQy={Mg?(SlyAM+cv_dZ|0z4501rD$8-Di)r6X7TH`zBifm${Q{& zZ_7Dh)AwY#>J+a7za?vf86|eIwq3ikv-Eu7FNP->VKb#4JP??n5&Uh}@!idTi+^ul zZoOZA`@W(>ntat~85sDYH-BR7Vp1`%G`6%zPD|5GwoEqBHA%KK)U`BAHq}iuHZe*| zGDtHqGE1DifTN4mCo`|KVzMEpgu0Qbk)e^Xfr*j1fuV^Kmx6)Y22BQ22J`j(C3TZML>1~8 z`PjLnS$%=2jA56ji(`nz>9-R%@*XzeVVUp7R&Y}C$|jQsYi(Mef8@}*TEsRrCq!FR zm{Dm?N#>`g%r$%eHN2Ckr z2{RR+`vf!pf89~AwEGG6hj`$CcVvdbUB85N%Uq_yq8SH<+P WIV)V>=+}2pM(}j?b6Mw<&;$UQG+Oom diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_heads_5_morgul.png b/src/main/resources/assets/lotr/textures/items/war_dart_heads_5_morgul.png new file mode 100644 index 0000000000000000000000000000000000000000..3904239942720fd96a5c4b78b66d7992d0a1c696 GIT binary patch literal 7049 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 USBRaB^>EX>4U6ba`-PAZ2)IW&i+q+ND=pmcu3t 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 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_mithril.png b/src/main/resources/assets/lotr/textures/items/war_dart_mithril.png index 953f9287c9d5ae49cabb5f5488c0d8ea0a27d293..51ff515b1f474de6af8a01be29de704848f9b699 100644 GIT binary patch delta 4422 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 delta 1022 zcmX?XJ5yp=3h9*{~KxE0l$iTRO8AvjKF~}reWxvalIeC@p z7m2c4cW|VwkUgTO^(bO>KnvHxu#Bq*pIp+|b(0>00ySx;?wU@2Fa-E zk;mq!s9r3rxqJBd_1zlhU)8)je{uaY9kw4Xk0gxieP&lQSEOAwvv@Du9uXMUdA?KK zXP3f93k$PKJcF>=A~}^Qob{Flj5>7A1Ws# zNblH@mw8IAU?($=t>h-n-IL}on{b}_efk&Q$b=7KFJeDeWxsp;h0!B8{G{}Q2Lc@; z8r6Fb@23&rmCF6Xz`$FP84^(v;p=0SoS(aS1)mL*ib+~ZqFGXE zimq9rnUSuEg@u7`Vq&71ZnANzg+;P)vPD{|$z%>ec@<-eWK;7L%Vb?6qf~QU6O-gr z-9!sxQ(YsAl+;8^v!p~*W7Emrg6b-XCYEWbsU}IfN#?1>x+X@(i9iz#O>`}dO^s45 zO^gjK)66GN6O7?CGBGltCBRh3mgMd3!obAvpMk+v`pzey2xoyuWHAE+-(e7DJf6QI1t`c~;_2(k{(@be z+nhn*^mAvR&^AvO#}JFtS0^mwI+P&dc7EAK_ky#F*7V!99~F-fXK6m0Byg?%4)+?} zH=Hfpm-j4`IJ&p#Xpt|o;E})FP4V@+AI9wad~p5d7}Z%%m#$h>*0%m@?B+co4g1bE z*KT`O__0COwUA-KbuqqU&b;b!M_;<-8zk-Sl*xJU)8tBm&6e-~jBiLRR$64XfmuN* zDpYje`^_C`CfV}mzg}N@*S}!SlDD<@v%5Q_l6Uc@bMId7K4*!E)m&wzu&eX`r&Z>s UxbdBP4fF$pr>mdKI;Vst0LcV{EdT%j diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_mithril.png.mcmeta b/src/main/resources/assets/lotr/textures/items/war_dart_mithril.png.mcmeta new file mode 100644 index 0000000..7b67f48 --- /dev/null +++ b/src/main/resources/assets/lotr/textures/items/war_dart_mithril.png.mcmeta @@ -0,0 +1,51 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + } +} diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_morgul.png b/src/main/resources/assets/lotr/textures/items/war_dart_morgul.png new file mode 100644 index 0000000000000000000000000000000000000000..24699907edf1dae4cfc41d1896a4dc6fefbe60b3 GIT binary patch literal 5646 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_orc.png b/src/main/resources/assets/lotr/textures/items/war_dart_orc.png index 14996f61922ca765045c8301ad727da228c7f1b3..8ed962ff2aef03562c393608787bcdff9fc81aba 100644 GIT binary patch delta 2235 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 JPDHLkV1oQ>;b{N> delta 1118 zcmdm|y-;a_ay`R^)CkWsPfsld4h9AWE(Qih76wKjO8|%&k=RU(%nZyxu{IzU0>oIc(CSuKn@6SfZeFT^3oQT>*+$xYkX?(-2LFz2M>-X zT|Ia-GMqi!QQ!|lVOc>?$wZ<5(?z0=R21ClFaIuA{+?lBVB)N+rra63a+gi!G@KnR z>b#yKQ9`iAP|f)CjLAzxYK~vGWvbcR{aNRKaeZH$X}+OCy@Jqrqr+P|%{!Kx=Qe+~ zE1WVlW$KSP6?c|!3)vUNe*Do}d@;2#-R-PT)jSI?9Wm>OmkD7;rjIlq%~k|MzO% zglCh#R7H2oGS=QcaI`c!_*=ti*@OotC-~l++GNt|#8_d!IR6ym-|Y_PXI+oZmS4{A z(6-C#E(3e}fsBcpuGij^efQ?=edD$N>KJC}6>ZZnns3j*z*~_S5>XQ2yIGmdkx3=R z+|0r_&C*=gFwrtu*CZv;SU1r;%}m$QG9@L=*wEO>+`wXT2Zy|hWl~CtX=+-kZc>`D zg|10jnz?SGiGh)BvZZ0FQHo)rv8B1;dSAQ#>=`GQuSaek(qBL4DeEcAt%uKqU7hd# WBR@ac;`bI%zVmeTb6Mw<&;$T2l6zJF diff --git a/src/main/resources/assets/lotr/textures/items/war_dart_red_dwarven.png b/src/main/resources/assets/lotr/textures/items/war_dart_red_dwarven.png index ccdb1bed4ff2c13839fe3c2aa9cafa3f917b9387..7ee04b785064de27e1cb1ffd69b5efeed970c063 100644 GIT binary patch delta 2328 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 delta 1158 zcmdm>y+~<-ay`R^)CkWsPfsld4h9AWE(Qih76wKjO8|%&k=RU(%nZyxu{IzU0>oIc(CSuKn@6SfZa3%W4N#(*yR7&CQb+bx--Rf5`=m(Mu+&0te$WfoN zP@X+X4S`=0WdvtN9-E`0danO)Ibk#^b4 z;=OQtL||Cw`A&78T?!wSuZ#BIw-ApJt4KTHv;0}7^O2;5y;IH7T!WS8sqw9z<@eL+ zSn|}*V(DvRQqNX@5@##^b;{^^W}iZ%tBzw62W#k*fVN(ZwN{#9L0jbCKael`E3{Lj zXzGCz8ymPxPOOvv!(Uflp8a&W+TJAzGB4^1=kyyYY~VJ@>ib;##-dmFz<-{Ym%8;! z`Oef$ip$P?sGN`>y<0f*!6F!K&i2YoZ{qFG> zMvvg|lhO|!2y}>ORPQ~!yZTo3@9#dF_sc(!D!Q~(D)$Qm18+rUNJL45?`BmtMPsk-JVrUogg#;K->hL)4ha;U4An;HXkS{mvm8k-pCnphf`0~K1B0a+%A z=7uJQi7ClulO;IqS$#6|N-HMEaZ0EgnHZT_nwpuI85kQFDsd?&D1g$IRak0Kab|v= ztr9emO`gjc%K}PRlmBsQK^Qt*T`J}&X-R2`7C;}Qn40UF7$>LcS{Rrc>KYlFBpI2T zm|GeeBu?JTtudL2Tayc@-AvoS*vi0Qvj|THNBz;+A~%5Pk}b*G-GzaP;Xea|t@NEw zKoQOYkH}&M2EM}}%y>M1MG8=my~NYkmHh>~Jh!=p#mV@)K%xDfE{-7{;jKs5T+?|BxgUlmSw`d#4e6{4b^`a~)Vtv`6)!fmunHlEr{qSw