From 6a27a7ae1ae1f97bf0b47d3beef037c389fc714a Mon Sep 17 00:00:00 2001 From: KeyLime17 Date: Fri, 13 Sep 2024 00:42:35 -0400 Subject: [PATCH] fixed Chains, added more Objective NPCs getting close to release? --- .../com/zivilon/cinder_loe/CinderLoE.java | 29 +++++-- .../zivilon/cinder_loe/CinderLoE_Config.java | 4 + .../zivilon/cinder_loe/LoECreativeTabs.java | 2 +- .../zivilon/cinder_loe/blocks/FurCarpet.java | 45 ++++++++++ .../entity/npc/evil_human/RhudaurSoldier.java | 44 ++++++++++ .../npc/good_human/EsgarothSoldier.java | 23 +++++ .../npc/good_human/TauredainTrueBlood.java | 54 ++++++++++++ .../entity/npc/orc/NorthernOrc.java | 74 ++++++++++++++++ .../mixins/overrides/MixinLOTREntityWarg.java | 77 +++++++++++++++++ .../overrides/MixinLOTRUnitTradeEntries.java | 19 +++-- .../java/com/zivilon/cinder_loe/recipes.java | 16 ++-- .../assets/cinder_loe/lang/en_US.lang | 64 +++++++++++++- .../textures/blocks/bronzeChain_bottom.png | Bin 0 -> 5217 bytes .../lotr/textures/blocks/bronzeChain_mid.png | Bin 0 -> 5273 bytes .../textures/blocks/bronzeChain_single.png | Bin 0 -> 5335 bytes .../lotr/textures/blocks/bronzeChain_top.png | Bin 0 -> 5330 bytes .../lotr/textures/blocks/goldChain_bottom.png | Bin 0 -> 228 bytes .../lotr/textures/blocks/goldChain_mid.png | Bin 0 -> 237 bytes .../lotr/textures/blocks/goldChain_single.png | Bin 0 -> 266 bytes .../lotr/textures/blocks/goldChain_top.png | Bin 0 -> 266 bytes .../lotr/textures/blocks/ironChain_bottom.png | Bin 0 -> 215 bytes .../lotr/textures/blocks/ironChain_mid.png | Bin 0 -> 212 bytes .../lotr/textures/blocks/ironChain_single.png | Bin 0 -> 235 bytes .../lotr/textures/blocks/ironChain_top.png | Bin 0 -> 235 bytes .../textures/blocks/silverChain_bottom.png | Bin 0 -> 4960 bytes .../lotr/textures/blocks/silverChain_mid.png | Bin 0 -> 4995 bytes .../textures/blocks/silverChain_single.png | Bin 0 -> 5043 bytes .../lotr/textures/blocks/silverChain_top.png | Bin 0 -> 5004 bytes .../lotr/textures/items/bronzeChain.png | Bin 0 -> 5402 bytes .../assets/lotr/textures/items/goldChain.png | Bin 0 -> 365 bytes .../assets/lotr/textures/items/ironChain.png | Bin 0 -> 328 bytes .../assets/lotr/textures/items/repair_kit.png | Bin 0 -> 5973 bytes .../lotr/textures/items/silverChain.png | Bin 0 -> 5167 bytes .../lotr/textures/items/upgrade_kit.png | Bin 0 -> 858 bytes src/main/resources/credits.txt | 79 ++++++++++++++++++ src/main/resources/mixins.cinder_loe.json | 3 +- 36 files changed, 506 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/zivilon/cinder_loe/blocks/FurCarpet.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/RhudaurSoldier.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/npc/good_human/EsgarothSoldier.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/npc/good_human/TauredainTrueBlood.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/npc/orc/NorthernOrc.java create mode 100644 src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTREntityWarg.java create mode 100644 src/main/resources/assets/lotr/textures/blocks/bronzeChain_bottom.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/bronzeChain_mid.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/bronzeChain_single.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/bronzeChain_top.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/goldChain_bottom.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/goldChain_mid.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/goldChain_single.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/goldChain_top.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/ironChain_bottom.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/ironChain_mid.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/ironChain_single.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/ironChain_top.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/silverChain_bottom.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/silverChain_mid.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/silverChain_single.png create mode 100644 src/main/resources/assets/lotr/textures/blocks/silverChain_top.png create mode 100644 src/main/resources/assets/lotr/textures/items/bronzeChain.png create mode 100644 src/main/resources/assets/lotr/textures/items/goldChain.png create mode 100644 src/main/resources/assets/lotr/textures/items/ironChain.png create mode 100644 src/main/resources/assets/lotr/textures/items/repair_kit.png create mode 100644 src/main/resources/assets/lotr/textures/items/silverChain.png create mode 100644 src/main/resources/assets/lotr/textures/items/upgrade_kit.png create mode 100644 src/main/resources/credits.txt diff --git a/src/main/java/com/zivilon/cinder_loe/CinderLoE.java b/src/main/java/com/zivilon/cinder_loe/CinderLoE.java index 0083c8d..4d7b092 100644 --- a/src/main/java/com/zivilon/cinder_loe/CinderLoE.java +++ b/src/main/java/com/zivilon/cinder_loe/CinderLoE.java @@ -17,6 +17,7 @@ import com.zivilon.cinder_loe.entity.npc.dwarf.RedDwarfWarrior; import com.zivilon.cinder_loe.entity.npc.evil_human.*; import com.zivilon.cinder_loe.entity.npc.good_human.*; import com.zivilon.cinder_loe.entity.npc.orc.MorgulOrc; +import com.zivilon.cinder_loe.entity.npc.orc.NorthernOrc; import com.zivilon.cinder_loe.entity.npc.radagast.*; import com.zivilon.cinder_loe.entity.projectile.*; import com.zivilon.cinder_loe.entity.trader.*; @@ -132,6 +133,7 @@ public class CinderLoE { public static Block cutDrystone; public static Block cindercobble; public static Block cinderfur; + public static Block furCarpet; public static Block reeflessCoral; public static Block silverChain; public static Block goldChain; @@ -335,7 +337,7 @@ public class CinderLoE { event.registerServerCommand(new CommandCinderCharacter()); } - public void registerEntities() { // Last ID added: 54 + public void registerEntities() { // Last ID added: 56 ///GameRegistry.registerTileEntity(TileEntityMistBlock.class, "TileEntityMistBlock"); ///.registerBlock(TileEntityRustedSword, "TileEntityRustedSword"); @@ -389,7 +391,6 @@ public class CinderLoE { EntityRegistry.registerModEntity(ArnorSoldierArcher.class, "ArnorSoldierArcher", (entityID + 19), this, 64, 1, true); EntityRegistry.registerModEntity(ArnorCaptain.class, "ArnorCaptain", (entityID + 20), this, 64, 1, true); EntityRegistry.registerModEntity(ArnorBannerBearer.class, "ArnorBannerBearer", (entityID + 21), this, 64, 1, true); - EntityRegistry.registerModEntity(BattleNun.class, "BattleNun", (entityID + 27), this, 64, 1, true); EntityRegistry.registerModEntity(BreeSoldier.class, "BreeSoldier", (entityID + 22), this, 64, 1, true); EntityRegistry.registerModEntity(BreeCrossbowman.class, "BreeCrossbowman", (entityID + 23), this, 64, 1, true); @@ -398,9 +399,13 @@ public class CinderLoE { EntityRegistry.registerModEntity(BreeOutrider.class, "BreeOutrider", (entityID + 26), this, 64, 1, true); EntityRegistry.registerModEntity(HobbitBannerBearer.class, "HobbitBannerBearer", (entityID + 52), this, 64, 1, true); - + // Objective and Custom npcs + EntityRegistry.registerModEntity(BattleNun.class, "BattleNun", (entityID + 27), this, 64, 1, true); EntityRegistry.registerModEntity(MorgulOrc.class, "MorgulOrc", (entityID + 53), this, 64, 1, true); - // EntityRegistry.registerModEntity(MorgulOrc.class, "MorgulOrc", (entityID + 54), this, 64, 1, true); + EntityRegistry.registerModEntity(RhudaurSoldier.class, "RhudaurSoldier", (entityID + 54), this, 64, 1, true); + EntityRegistry.registerModEntity(NorthernOrc.class, "NorthernOrc", (entityID + 55), this, 64, 1, true); + EntityRegistry.registerModEntity(EsgarothSoldier.class, "EsgarothSoldier", (entityID + 56), this, 64, 1, true); + EntityRegistry.registerModEntity(TauredainTrueBlood.class, "TauredainTrueBlood", (entityID + 57), this, 64, 1, true); } @@ -482,6 +487,8 @@ public class CinderLoE { cinderfur = (new CinderFurBlock()); GameRegistry.registerBlock(cinderfur, CinderBlockMetaData.class, "cinderfur"); + furCarpet = (new FurCarpet()); + GameRegistry.registerBlock(furCarpet, CinderBlockMetaData.class, "furCarpet"); plaster = (new plaster()); GameRegistry.registerBlock(plaster, "plaster"); @@ -577,7 +584,6 @@ public class CinderLoE { ItemRegistration.register(onion, "onion", 6900); ItemRegistration.register(cabbage, "cabbage", 6901); ItemRegistration.register(pelmen, "pelmen", 6902); - ItemRegistration.register(lightStew, "lightStew", 6902); ItemRegistration.register(spice, "spice", 6903); ItemRegistration.register(spicedHam, "spicedHam", 6904); ItemRegistration.register(chocolatebar, "chocolatebar", 6905); @@ -588,6 +594,7 @@ public class CinderLoE { ItemRegistration.register(pretzel, "pretzel", 6910); ItemRegistration.register(halva, "halva", 6911); ItemRegistration.register(doner_kebab, "doner_kebab", 6912); + ItemRegistration.register(lightStew, "lightStew", 6913); ItemRegistration.register(spawnEgg, "spawnEgg", 6003); @@ -1108,6 +1115,7 @@ public class CinderLoE { CinderCore.registerItemFallback(Block.getIdFromBlock(cutDrystone), Block.getIdFromBlock(LOTRMod.cobblebrick), "cinder_loe", "1.2"); CinderCore.registerItemFallback(Block.getIdFromBlock(cindercobble), Block.getIdFromBlock(LOTRMod.cobblebrick), "cinder_loe", "1.2"); CinderCore.registerItemFallback(Block.getIdFromBlock(cinderfur), Block.getIdFromBlock(Blocks.wool), "cinder_loe", "1.2.4"); + CinderCore.registerItemFallback(Block.getIdFromBlock(furCarpet), Block.getIdFromBlock(Blocks.carpet), "cinder_loe", "1.2.4"); CinderCore.registerItemFallback(Block.getIdFromBlock(reeflessCoral), Block.getIdFromBlock(LOTRMod.coralReef), "cinder_loe", "1.2"); CinderCore.registerItemFallback(Block.getIdFromBlock(plaster), Block.getIdFromBlock(Blocks.brick_block), "cinder_loe", "1.2.1"); CinderCore.registerItemFallback(Block.getIdFromBlock(voidblock), Block.getIdFromBlock(Blocks.coal_block), "cinder_loe", "1.2.1"); @@ -1276,7 +1284,8 @@ public class CinderLoE { (new LOTRUnitTradeEntry(RedDwarfArbalest.class, 400, 100.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF), (new LOTRUnitTradeEntry(RedDwarfWarrior.class, LOTREntityWildBoar.class, "RedDwarfWarrior_Boar", 500, 150.0F)).setMountArmor(boarArmorRedDwarf).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF), (new LOTRUnitTradeEntry(RedDwarfArbalest.class, LOTREntityWildBoar.class, "RedDwarfArbalest_Boar", 500, 200.0F)).setMountArmor(boarArmorRedDwarf).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF), - (new LOTRUnitTradeEntry(RedDwarfBannerBearer.class, 400, 200.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF)); + (new LOTRUnitTradeEntry(RedDwarfBannerBearer.class, 400, 200.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF), + (new LOTRUnitTradeEntry(RedDwarfArbalest.class, LOTREntityWildBoar.class, "Banner_Horse", 600, 300.0F)).setMountArmor(boarArmorRedDwarf).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF)); LIMWAITH_COMMANDER = new LOTRUnitTradeEntries(200.0F, new LOTRUnitTradeEntry(LimwaithWarrior.class, 150, 50.0F), (new LOTRUnitTradeEntry(LimwaithBlowgunner.class, 150, 100.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), @@ -1290,14 +1299,18 @@ public class CinderLoE { (new LOTRUnitTradeEntry(LOTREntityRangerNorth.class, 250, 0.0f)), (new LOTRUnitTradeEntry(LOTREntityRangerNorth.class, LOTREntityHorse.class, "RangerNorth_Horse", 350, 100.0f)), (new LOTRUnitTradeEntry(LOTREntityRangerNorthBannerBearer.class, 250, 150.0f)), - (new LOTRUnitTradeEntry(ArnorBannerBearer.class, 250, 400.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION)); + (new LOTRUnitTradeEntry(ArnorBannerBearer.class, 250, 400.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(ArnorBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 450, 500.0F)).setMountArmor(horseArmorIron).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new CinderUnitTradeEntry(BattleNun.class, 250, 400.0F).setObjective("Arnor").setExtraInfo("Arnor")).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION)); + BREE_CAPTAIN = new LOTRUnitTradeEntries(150.0F, (new LOTRUnitTradeEntry(LOTREntityBreeGuard.class, 150, 0.0f)), (new LOTRUnitTradeEntry(BreeSoldier.class, 250, 250.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), (new LOTRUnitTradeEntry(BreeCrossbowman.class, 250, 300.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), (new LOTRUnitTradeEntry(BreeOutrider.class, LOTREntityHorse.class, "Bree_Horse", 350, 400.0F)).setMountArmor(horseArmorIron).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), (new LOTRUnitTradeEntry(LOTREntityBreeBannerBearer.class, 150, 150.0f)), - (new LOTRUnitTradeEntry(BreeSoldierBannerBearer.class, 250, 400.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION)); + (new LOTRUnitTradeEntry(BreeSoldierBannerBearer.class, 250, 400.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(BreeSoldierBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 500.0F)).setMountArmor(horseArmorIron).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION)); } public int getRustedSwordID() {return 0;} diff --git a/src/main/java/com/zivilon/cinder_loe/CinderLoE_Config.java b/src/main/java/com/zivilon/cinder_loe/CinderLoE_Config.java index ae33bce..dd81b1a 100644 --- a/src/main/java/com/zivilon/cinder_loe/CinderLoE_Config.java +++ b/src/main/java/com/zivilon/cinder_loe/CinderLoE_Config.java @@ -21,6 +21,8 @@ public class CinderLoE_Config { public static boolean objective_dolguldur; public static boolean objective_woodelf; public static boolean objective_lothlorien; + public static boolean objective_dale; + public static boolean objective_rhudaur; public static void init(FMLPreInitializationEvent event) { @@ -48,6 +50,8 @@ public class CinderLoE_Config { objective_dolguldur = config.getBoolean("Dol_Guldur", Configuration.CATEGORY_GENERAL, false,"set true if Dol Guldur Objective Complete"); objective_woodelf = config.getBoolean("Wood_Elf", Configuration.CATEGORY_GENERAL, false, "set true if Wood Elf Objective Complete"); objective_lothlorien = config.getBoolean("Lothlorien", Configuration.CATEGORY_GENERAL, false, "set true if Lothlorien Objective Complete"); + objective_dale = config.getBoolean("Dale", Configuration.CATEGORY_GENERAL, false, "set true if Dalish Objective Complete"); + objective_rhudaur = config.getBoolean("Rhudaur", Configuration.CATEGORY_GENERAL, false, "set true if Rhudaur Objective Complete"); // Save the configuration if it has changed if (config.hasChanged()) { diff --git a/src/main/java/com/zivilon/cinder_loe/LoECreativeTabs.java b/src/main/java/com/zivilon/cinder_loe/LoECreativeTabs.java index 2ec2cdd..472b4d4 100644 --- a/src/main/java/com/zivilon/cinder_loe/LoECreativeTabs.java +++ b/src/main/java/com/zivilon/cinder_loe/LoECreativeTabs.java @@ -28,7 +28,7 @@ public class LoECreativeTabs extends CreativeTabs { tabSpawnLoE.theIcon = new ItemStack(CinderLoE.spawnEgg); tabMiscLoE.theIcon = new ItemStack(CinderLoE.bonemold); tabFoodLoE.theIcon = new ItemStack(CinderLoE.onion); - tabDecoLoE.theIcon = new ItemStack(CinderLoE.cinderchain); + tabDecoLoE.theIcon = new ItemStack(CinderLoE.goldChain); tabCharacterLoE.theIcon = new ItemStack(CinderLoE.sarumanStaff); } diff --git a/src/main/java/com/zivilon/cinder_loe/blocks/FurCarpet.java b/src/main/java/com/zivilon/cinder_loe/blocks/FurCarpet.java new file mode 100644 index 0000000..ad481af --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/blocks/FurCarpet.java @@ -0,0 +1,45 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.LoECreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockCarpet; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import java.util.List; + +public class FurCarpet extends BlockCarpet { + public FurCarpet() + { + super(); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F); + this.setTickRandomly(true); + this.setCreativeTab(LoECreativeTabs.tabDecoLoE); + this.func_150089_b(0); + setBlockName("lotr:cinderfurcarpet"); + setStepSound(Block.soundTypeCloth); + } + + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) + { + return CinderLoE.cinderfur.getIcon(side, meta); + } + + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) + { + for (int i = 0; i < 9; ++i) + { + list.add(new ItemStack(itemIn, 1, i)); + } + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/RhudaurSoldier.java b/src/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/RhudaurSoldier.java new file mode 100644 index 0000000..0231a7b --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/RhudaurSoldier.java @@ -0,0 +1,44 @@ +package com.zivilon.cinder_loe.entity.npc.evil_human; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRMod; +import lotr.common.LOTRShields; +import lotr.common.entity.npc.LOTREntityAngmarHillmanWarrior; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + + +public class RhudaurSoldier extends LOTREntityAngmarHillmanWarrior { + + private static ItemStack[] weapons = new ItemStack[]{new ItemStack(LOTRMod.swordAngmar), new ItemStack(LOTRMod.battleaxeAngmar), new ItemStack(LOTRMod.hammerAngmar), new ItemStack(LOTRMod.polearmAngmar), new ItemStack(LOTRMod.spearAngmar)}; + private static ItemStack[] helmets = new ItemStack[]{new ItemStack(CinderLoE.helmetRhudaur)}; + private static ItemStack[] bodies = new ItemStack[]{new ItemStack(CinderLoE.bodyRhudaur)}; + private static ItemStack[] legs = new ItemStack[]{new ItemStack(CinderLoE.legsRhudaur)}; + private static ItemStack[] boots = new ItemStack[]{new ItemStack(CinderLoE.bootsRhudaur)}; + + public RhudaurSoldier(World world) { + super(world); + this.npcShield = LOTRShields.ALIGNMENT_MORDOR; + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = this.rand.nextInt(weapons.length); + this.npcItemsInv.setMeleeWeapon(weapons[i].copy()); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + i = this.rand.nextInt(boots.length); + this.setCurrentItemOrArmor(1, boots[i].copy()); + i = this.rand.nextInt(legs.length); + this.setCurrentItemOrArmor(2, legs[i].copy()); + i = this.rand.nextInt(bodies.length); + this.setCurrentItemOrArmor(3, bodies[i].copy()); + if (this.rand.nextInt(5) != 0) { + i = this.rand.nextInt(helmets.length); + this.setCurrentItemOrArmor(4, helmets[i].copy()); + } + return data; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/npc/good_human/EsgarothSoldier.java b/src/main/java/com/zivilon/cinder_loe/entity/npc/good_human/EsgarothSoldier.java new file mode 100644 index 0000000..7604a04 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/npc/good_human/EsgarothSoldier.java @@ -0,0 +1,23 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRMod; +import lotr.common.LOTRShields; +import lotr.common.entity.npc.LOTREntityDaleSoldier; +import lotr.common.entity.npc.LOTREntityDunedain; +import lotr.common.fac.LOTRFaction; +import lotr.common.quest.LOTRMiniQuest; +import lotr.common.quest.LOTRMiniQuestFactory; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class EsgarothSoldier extends LOTREntityDaleSoldier { + public EsgarothSoldier(World world) { + super(world); + this.npcShield = LOTRShields.ALIGNMENT_ESGAROTH; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/npc/good_human/TauredainTrueBlood.java b/src/main/java/com/zivilon/cinder_loe/entity/npc/good_human/TauredainTrueBlood.java new file mode 100644 index 0000000..65df48b --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/npc/good_human/TauredainTrueBlood.java @@ -0,0 +1,54 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import lotr.common.LOTRMod; +import lotr.common.LOTRShields; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityDaleSoldier; +import lotr.common.entity.npc.LOTREntityTauredain; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class TauredainTrueBlood extends LOTREntityTauredain { + public TauredainTrueBlood(World world) { + super(world); + this.npcShield = LOTRShields.ALIGNMENT_TAUREDAIN; + } + @Override + public EntityAIBase createHaradrimAttackAI() { + return new LOTREntityAIAttackOnCollide(this, 1.7, false); + } + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(26.0); + this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(24.0); + this.getEntityAttribute(npcAttackDamageExtra).setBaseValue(2.0); + } + + private static ItemStack[] weapons = new ItemStack[]{new ItemStack(LOTRMod.swordTauredain), new ItemStack(LOTRMod.battleaxeTauredain), new ItemStack(LOTRMod.hammerTauredain), new ItemStack(LOTRMod.spearTauredain), new ItemStack(LOTRMod.pikeTauredain)}; + private static ItemStack[] helmets = new ItemStack[]{new ItemStack(LOTRMod.helmetTauredainChieftain), new ItemStack(LOTRMod.helmetTauredainChieftain), new ItemStack(LOTRMod.helmetTauredainGold)}; + private static ItemStack[] bodies = new ItemStack[]{new ItemStack(LOTRMod.bodyTauredain), new ItemStack(LOTRMod.bodyTauredain), new ItemStack(LOTRMod.bodyTauredainGold)}; + private static ItemStack[] legs = new ItemStack[]{new ItemStack(LOTRMod.legsTauredain), new ItemStack(LOTRMod.legsTauredain), new ItemStack(LOTRMod.legsTauredainGold)}; + private static ItemStack[] boots = new ItemStack[]{new ItemStack(LOTRMod.bootsTauredain), new ItemStack(LOTRMod.bootsTauredain), new ItemStack(LOTRMod.bootsTauredainGold)}; + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = this.rand.nextInt(weapons.length); + this.npcItemsInv.setMeleeWeapon(weapons[i].copy()); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + i = this.rand.nextInt(boots.length); + this.setCurrentItemOrArmor(1, boots[i].copy()); + i = this.rand.nextInt(legs.length); + this.setCurrentItemOrArmor(2, legs[i].copy()); + i = this.rand.nextInt(bodies.length); + this.setCurrentItemOrArmor(3, bodies[i].copy()); + if (this.rand.nextInt(5) != 0) { + i = this.rand.nextInt(helmets.length); + this.setCurrentItemOrArmor(4, helmets[i].copy()); + } + return data; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/npc/orc/NorthernOrc.java b/src/main/java/com/zivilon/cinder_loe/entity/npc/orc/NorthernOrc.java new file mode 100644 index 0000000..04f7608 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/npc/orc/NorthernOrc.java @@ -0,0 +1,74 @@ +package com.zivilon.cinder_loe.entity.npc.orc; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.LOTRShields; +import lotr.common.entity.npc.LOTREntityAngmarHillmanWarrior; +import lotr.common.entity.npc.LOTREntityGundabadUruk; +import lotr.common.fac.LOTRFaction; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + + +public class NorthernOrc extends LOTREntityGundabadUruk { + + private static ItemStack[] weapons = new ItemStack[]{new ItemStack(LOTRMod.swordAngmar), new ItemStack(LOTRMod.battleaxeAngmar), new ItemStack(LOTRMod.hammerGundabadUruk), new ItemStack(LOTRMod.polearmAngmar), new ItemStack(LOTRMod.spearAngmar), new ItemStack(LOTRMod.swordGundabadUruk)}; + private static ItemStack[] helmets = new ItemStack[]{new ItemStack(LOTRMod.helmetAngmar), new ItemStack(LOTRMod.helmetGundabadUruk), new ItemStack(LOTRMod.helmetBone)}; + private static ItemStack[] bodies = new ItemStack[]{new ItemStack(LOTRMod.bodyAngmar), new ItemStack(LOTRMod.bodyGundabadUruk), new ItemStack(LOTRMod.bodyUruk)}; + private static ItemStack[] legs = new ItemStack[]{new ItemStack(LOTRMod.legsAngmar), new ItemStack(LOTRMod.legsGundabadUruk), new ItemStack(LOTRMod.legsUruk)}; + private static ItemStack[] boots = new ItemStack[]{new ItemStack(LOTRMod.bootsAngmar), new ItemStack(LOTRMod.bootsGundabadUruk), new ItemStack(LOTRMod.bootsUruk)}; + + public NorthernOrc(World world) { + super(world); + this.setSize(0.6f, 1.8f); + this.isWeakOrc = false; + this.npcShield = LOTRShields.ALIGNMENT_ANGMAR; + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = this.rand.nextInt(weapons.length); + this.npcItemsInv.setMeleeWeapon(weapons[i].copy()); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + i = this.rand.nextInt(boots.length); + this.setCurrentItemOrArmor(1, boots[i].copy()); + i = this.rand.nextInt(legs.length); + this.setCurrentItemOrArmor(2, legs[i].copy()); + i = this.rand.nextInt(bodies.length); + this.setCurrentItemOrArmor(3, bodies[i].copy()); + if (this.rand.nextInt(5) != 0) { + i = this.rand.nextInt(helmets.length); + this.setCurrentItemOrArmor(4, helmets[i].copy()); + } + return data; + } + + @Override + public LOTRFaction getFaction() { + return LOTRFaction.ANGMAR; + } + + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + if (this.hiredNPCInfo.getHiringPlayer() == entityplayer) { + return "angmar/orc/hired"; + } + if (LOTRLevelData.getData(entityplayer).getAlignment(this.getFaction()) >= 100.0f) { + return "angmar/orc/friendly"; + } + return "angmar/orc/neutral"; + } + return "angmar/orc/hostile"; + } + + @Override + public boolean canOrcSkirmish() { + return false; + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTREntityWarg.java b/src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTREntityWarg.java new file mode 100644 index 0000000..ea7db5a --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTREntityWarg.java @@ -0,0 +1,77 @@ +package com.zivilon.cinder_loe.mixins.overrides; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTREntityWarg; +import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + + +@Mixin(LOTREntityWarg.class) +public abstract class MixinLOTREntityWarg extends Entity { + + public MixinLOTREntityWarg(World worldIn) { + super(worldIn); + } + + /** + * @author KeyLime17 + * @reason Mevans + */ + + @Shadow + public abstract LOTREntityWarg.WargType getWargType(); + + @Overwrite(remap = false) + protected void func_70628_a(boolean flag, int i) { + Item furItem = null; + int furMeta = 0; + switch(getWargType().wargID) { + case 0: + furItem = LOTRMod.fur; + break; + case 1: + furItem = CinderLoE.cinderFurItem; + break; + case 2: + furItem = CinderLoE.cinderFurItem; + furMeta = 1; + break; + case 3: + furItem = CinderLoE.cinderFurItem; + furMeta = 2; + break; + case 4: + furItem = CinderLoE.cinderFurItem; + furMeta = 0; // Needs ice fur to be added + break; + case 5: + furItem = CinderLoE.cinderFurItem; + furMeta = 3; + break; + case 6: + furItem = CinderLoE.cinderFurItem; + furMeta = 0; // Needs fire fur to be added + break; + } + + int furs = 1 + this.rand.nextInt(3) + this.rand.nextInt(i + 1); + for (int l = 0; l < furs; l++) + entityDropItem(new ItemStack(furItem, 1, furMeta), 0.0F); + int bones = 2 + this.rand.nextInt(2) + this.rand.nextInt(i + 1); + for (int j = 0; j < bones; j++) + dropItem(LOTRMod.wargBone, 1); + if (flag) { + int rugChance = 50 - i * 8; + rugChance = Math.max(rugChance, 1); + if (this.rand.nextInt(rugChance) == 0) + entityDropItem(new ItemStack(LOTRMod.wargskinRug, 1, (getWargType()).wargID), 0.0F); + } + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRUnitTradeEntries.java b/src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRUnitTradeEntries.java index 20223f3..c03d821 100644 --- a/src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRUnitTradeEntries.java +++ b/src/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRUnitTradeEntries.java @@ -2,7 +2,12 @@ package com.zivilon.cinder_loe.mixins.overrides; import com.zivilon.cinder_loe.CinderUnitTradeEntry; import com.zivilon.cinder_loe.entity.npc.HobbitBannerBearer; +import com.zivilon.cinder_loe.entity.npc.evil_human.RhudaurSoldier; +import com.zivilon.cinder_loe.entity.npc.good_human.BattleNun; +import com.zivilon.cinder_loe.entity.npc.good_human.EsgarothSoldier; +import com.zivilon.cinder_loe.entity.npc.good_human.TauredainTrueBlood; import com.zivilon.cinder_loe.entity.npc.orc.MorgulOrc; +import com.zivilon.cinder_loe.entity.npc.orc.NorthernOrc; import lotr.common.LOTRMod; import lotr.common.entity.animal.*; import lotr.common.entity.npc.*; @@ -102,7 +107,6 @@ public class MixinLOTRUnitTradeEntries { @Shadow public static LOTRUnitTradeEntries ANGMAR_ORC_MERCENARY_CAPTAIN = new LOTRUnitTradeEntries(150.0f, new LOTRUnitTradeEntry(LOTREntityAngmarOrc.class, 150, 0.0f), - new CinderUnitTradeEntry(MorgulOrc.class, null, "TestMob", 100, 0.0f).setObjective("Angmar").setExtraInfo("Angmar"), new LOTRUnitTradeEntry(LOTREntityAngmarOrcArcher.class, 150, 50.0f), new LOTRUnitTradeEntry(LOTREntityAngmarOrcBombardier.class, 250, 100.0f).setPledgeExclusive(), new LOTRUnitTradeEntry(LOTREntityAngmarWarg.class, 100, 0.0f), @@ -112,7 +116,8 @@ public class MixinLOTRUnitTradeEntries { new LOTRUnitTradeEntry(LOTREntityTroll.class, 500, 250.0f), new LOTRUnitTradeEntry(LOTREntityMountainTroll.class, 600, 350.0f).setPledgeExclusive(), new LOTRUnitTradeEntry(LOTREntityAngmarBannerBearer.class, 150, 150.0f), - new LOTRUnitTradeEntry(LOTREntityAngmarBannerBearer.class, LOTREntityAngmarWarg.class, "Banner_Warg", 250, 250.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.5f).setPledgeExclusive()); + new LOTRUnitTradeEntry(LOTREntityAngmarBannerBearer.class, LOTREntityAngmarWarg.class, "Banner_Warg", 250, 250.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.5f).setPledgeExclusive(), + (new CinderUnitTradeEntry(NorthernOrc.class, 500, 400.0F).setObjective("Angmar").setExtraInfo("Angmar")).setPledgeExclusive()); @Shadow public static LOTRUnitTradeEntries MORDOR_ORC_SLAVER = new LOTRUnitTradeEntries(200.0f, new LOTRUnitTradeEntry(LOTREntityNurnSlave.class, 100, 0.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); @@ -212,12 +217,14 @@ public class MixinLOTRUnitTradeEntries { new LOTRUnitTradeEntry(LOTREntityAngmarHillmanWarrior.class, LOTREntityAngmarWarg.class, "AngmarHillmanWarrior_Warg", 250, 150.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.3f).setPledgeExclusive(), new LOTRUnitTradeEntry(LOTREntityAngmarHillmanAxeThrower.class, LOTREntityAngmarWarg.class, "AngmarHillmanAxeThrower_Warg", 250, 200.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.3f).setPledgeExclusive(), new LOTRUnitTradeEntry(LOTREntityAngmarHillmanBannerBearer.class, 150, 200.0f), - new LOTRUnitTradeEntry(LOTREntityAngmarHillmanBannerBearer.class, LOTREntityAngmarWarg.class, "Banner_Warg", 250, 300.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.5f).setPledgeExclusive()); + new LOTRUnitTradeEntry(LOTREntityAngmarHillmanBannerBearer.class, LOTREntityAngmarWarg.class, "Banner_Warg", 250, 300.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.5f).setPledgeExclusive(), + (new CinderUnitTradeEntry(RhudaurSoldier.class, 500, 400.0F).setObjective("Rhudaur").setExtraInfo("Rhudaur"))); @Shadow public static LOTRUnitTradeEntries TAUREDAIN_CHIEFTAIN = new LOTRUnitTradeEntries(200.0f, new LOTRUnitTradeEntry(LOTREntityTauredainWarrior.class, 250, 0.0f), new LOTRUnitTradeEntry(LOTREntityTauredainBlowgunner.class, 250, 50.0f), - new LOTRUnitTradeEntry(LOTREntityTauredainBannerBearer.class, 250, 150.0f)); + new LOTRUnitTradeEntry(LOTREntityTauredainBannerBearer.class, 250, 150.0f), + new LOTRUnitTradeEntry(TauredainTrueBlood.class, 500, 800.0f).setPledgeExclusive()); @Shadow public static LOTRUnitTradeEntries TAUREDAIN_FARMER = new LOTRUnitTradeEntries(0.0f, new LOTRUnitTradeEntry(LOTREntityTauredainFarmhand.class, 100, 50.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); @@ -229,8 +236,8 @@ public class MixinLOTRUnitTradeEntries { new LOTRUnitTradeEntry(LOTREntityDaleSoldier.class, LOTREntityHorse.class, "DaleSoldier_Horse", 350, 150.0f).setMountArmor(LOTRMod.horseArmorDale).setPledgeExclusive(), new LOTRUnitTradeEntry(LOTREntityDaleBannerBearer.class, 250, 200.0f), new LOTRUnitTradeEntry(LOTREntityDaleBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 300.0f).setMountArmor(LOTRMod.horseArmorDale).setPledgeExclusive(), - new LOTRUnitTradeEntry(LOTREntityEsgarothBannerBearer.class, 250, 200.0f), - new LOTRUnitTradeEntry(LOTREntityEsgarothBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 300.0f).setMountArmor(LOTRMod.horseArmorDale).setPledgeExclusive()); + (new CinderUnitTradeEntry(EsgarothSoldier.class, 500, 400.0F).setObjective("Dale").setExtraInfo("Dale")), + (new CinderUnitTradeEntry(LOTREntityEsgarothBannerBearer.class, 500, 400.0F).setObjective("Dale").setExtraInfo("Dale"))); @Shadow public static LOTRUnitTradeEntries DORWINION_CAPTAIN = new LOTRUnitTradeEntries(150.0f, new LOTRUnitTradeEntry(LOTREntityDorwinionGuard.class, 250, 0.0f), diff --git a/src/main/java/com/zivilon/cinder_loe/recipes.java b/src/main/java/com/zivilon/cinder_loe/recipes.java index 4e16912..fa5d3c8 100644 --- a/src/main/java/com/zivilon/cinder_loe/recipes.java +++ b/src/main/java/com/zivilon/cinder_loe/recipes.java @@ -163,18 +163,14 @@ public class recipes { 'X', Items.fish)); //GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.rustedsword, 8), new Object[] { "X", "y", "y", //Character.valueOf('Y'), Items.iron_ingot, Character.valueOf('X'), "stickWood"})); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderchain, 8, 0), - "X", "X", "X", - 'X', LOTRMod.bronze)); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderchain, 8, 1), - "X", "X", "X", - 'X', Items.gold_ingot)); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderchain, 8, 2), - "X", "X", "X", + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.silverChain, 8), "X", "X", "X", 'X', LOTRMod.silver)); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderchain, 8, 3), - "X", "X", "X", + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.goldChain, 8), "X", "X", "X", + 'X', Items.gold_ingot)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.ironChain, 8), "X", "X", "X", 'X', Items.iron_ingot)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.bronzeChain, 8), "X", "X", "X", + 'X', LOTRMod.bronze)); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cindercobble, 4, 0), "XX", "XX", 'X', LOTRMod.cobblebrick)); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cutDrystone, 4), "XX", "XX", 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 fac6f1b..b60fd36 100644 --- a/src/main/resources/assets/cinder_loe/lang/en_US.lang +++ b/src/main/resources/assets/cinder_loe/lang/en_US.lang @@ -23,6 +23,58 @@ tile.lotr:enchantedIce.name=Enchanted Ice tile.lotr:iceCage.name=Ice Cage tile.forging_station.name=Forging Station +tile.lotr:cinderfur.0.name=Brown Warg Fur Block +tile.lotr:cinderfur.1.name=Gray Warg Fur Block +tile.lotr:cinderfur.2.name=Black Warg Fur Block +tile.lotr:cinderfur.3.name=White Warg Fur Block +tile.lotr:cinderfur.4.name=Obsidian Warg Fur Block +tile.lotr:cinderfur.5.name=Black Bear Fur Block +tile.lotr:cinderfur.6.name=Brown Bear Fur Block +tile.lotr:cinderfur.7.name=Lion Fur Block +tile.lotr:cinderfur.8.name=Lioness Fur Block + +tile.lotr:cinderfurcarpet.0.name=Brown Warg Fur Carpet +tile.lotr:cinderfurcarpet.1.name=Gray Warg Fur Carpet +tile.lotr:cinderfurcarpet.2.name=Black Warg Fur Carpet +tile.lotr:cinderfurcarpet.3.name=White Warg Carpet +tile.lotr:cinderfurcarpet.4.name=Obsidian Warg Fur Carpet +tile.lotr:cinderfurcarpet.5.name=Black Bear Fur Carpet +tile.lotr:cinderfurcarpet.6.name=Brown Bear Fur Carpet +tile.lotr:cinderfurcarpet.7.name=Lion Fur Carpet +tile.lotr:cinderfurcarpet.8.name=Lioness Fur Carpet + +item.repair_kit.name=Repair Kit +item.upgrade_kit.name=Upgrade Kit +item.cinder_fur_item_0.name=Gray Warg Fur +item.cinder_fur_item_1.name=Black Warg Fur +item.cinder_fur_item_2.name=White Warg Fur +item.cinder_fur_item_3.name=Obsidian Warg Fur +item.cinder_fur_item_4.name=Black Bear Fur +item.cinder_fur_item_5.name=Brown Bear Fur +item.cinder_fur_item_6.name=Lioness Fur + +item.lotr:helmetJade.name=Jade Helmet +item.lotr:bodyJade.name=Jade Chestplate +item.lotr:legsJade.name=Jade Leggings +item.lotr:bootsJade.name=Jade Boots +item.lotr:helmetRhudaur.name=Rhudaur Helmet +item.lotr:bodyRhudaur.name=Rhudaur Chestplate +item.lotr:legsRhudaur.name=Rhudaur Leggings +item.lotr:bootsRhudaur.name=Rhudaur Boots + +item.lotr:helmetserpent.name=Serpent Hood +item.lotr:bodyserpent.name=Serpent Cloak +item.lotr:legsserpent.name=Serpent Leggings +item.lotr:bootsserpent.name=Serpent Boots +item.lotr:helmetUsurper.name=Usurper Helmet +item.lotr:bodyUsurper.name=Usurper Chestplate +item.lotr:legsUsurper.name=Usurper Leggings +item.lotr:bootsUsurper.name=Usurper Boots +item.lotr:helmetWarlord.name=Warlord Headdress +item.lotr:bodyWarlord.name=Warlord Chestplate +item.lotr:legsWarlord.name=Warlord Leggings +item.lotr:bootsWarlord.name=Warlord Boots +item.lotr:cleaver=Cleaver item.lotr:spearUnnamed.name=Drannach Oriour item.lotr:frostblade.name=Frostblade item.lotr:whip.name=Whip @@ -56,6 +108,14 @@ item.lotr:pelmen.name=Pelmeni item.lotr:lightStew.name=Light Stew item.lotr:spice.name=Spices item.lotr:spicedHam.name=Spiced Ham +item.lotr:chocolatebar.name=Chocolate Bar +item.lotr:fruitsalad.name=Fruid Salad +item.lotr:flour.name=Flour +item.lotr:dough.name=Dough +item.lotr:pasta.name=Pasta +item.lotr:pretzel.name=Pretzel +item.lotr:halva.name=Halva +item.lotr:doner_kebab.name=Döner Kebab item.lotr:bonemold.name=Bonemold item.lotr:helmetLimwaith.name=Limwaith Helmet @@ -274,4 +334,6 @@ lotr.unit.Banner_Warg=Warg Rider Banner lotr.unit.Banner_Horse=Mounted Banner Bearer lotr.unit.TestMob=Test Mob -lotr.unitinfo.Angmar=To Hire this unit you must have the Angmar Objective complete. \ No newline at end of file +lotr.unitinfo.Angmar=To Hire this unit you must have the Angmar Objective complete. +lotr.unitinfo.Rhudaur=To Hire this unit you must have the Rhudaur Objective complete. +lotr.unitinfo.Dale=To Hire this unit you must have the Dalish Objective complete. \ No newline at end of file diff --git a/src/main/resources/assets/lotr/textures/blocks/bronzeChain_bottom.png b/src/main/resources/assets/lotr/textures/blocks/bronzeChain_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..5cfcd0659b8483f21002647893fa5b427289dd8f GIT binary patch literal 5217 zcmeHKcT^Ku7Y{{2ih#Q;x}anOOZgzlq!$TNLWvS-Sr3{aeGjNyBZ$ zra2ZlKV(M6Pxk$CDTG~fq*iz=?efLdEDPF7g_vGBJO8=BXx*!3`xV6-h)c%31IsRY zS9kfoxoSQ7Z8cYwLcTd1kU!IF=-KqS2IH<EKPZiA*B>HulqRUF(qdj_)ioYL0!Jx5VJa#5h@*SMW3A5k+ien-x(Y3MaNPP;ip8Nd1nJl~Y$ zHtlhC4ri|_VRN?V=vmvY*$q+~%F4pMR+oBn3vGO?e_UHaDBR9pj3X2l@5>{f&kwo+ z6z*Z%A2!M;%63}5a`UXLtsz0p=8u9?fBn9+BRZzEy841~>fX!)*sAODgPVAR^@~ix zRtz0_n8CAjd6j3jb`!m=$sz`#mYLjtQgUrWVW=BYNvSqf$8ES~sNy*FPEf(rWJD<>l3FsdI1F{MBUGtm`&DE2h2! z_cHUI*uFwMYIH(p=LkQ|H>l zo>VkM?C$p(3a?3?5l=tWlz#3&^V(?JKO&ajxrg)Zo%gIck636`KJltqwfM4+w*8Ie zRXL4I7pc}4FjiBC%+7@8aWWeQA01?+3?GW1Zd5L;%adF$mDV4u8~HBthUYDl)dKe6 z@J9iGeTSOHj~46gjcIPd##%h_dAh`GqAILoS+F&y>p@h_dtE=ucmOFIP2%NWBK_&-wR%+q3_P+Dt5o}K|5PtW%Y4zkP? zrEX^Vo^`W2AJLwL!D13ksXuSR>t99>r&PBw%JqA-u1bK-dv#UK3&F zrmt;x6;BBE-)BL3Y!&hR@z@0J&*QbNuNfW-yPn`!zL!1*U?=+S{CFk1DnR(rCh-f-pChP7kTM|>2 z;Q!`KWOyh?v9llO4e`+Ctj`PdoMRrczO8gKALI3sVDdKazWKWb9u8WmO%TtS7QF8`kCa2Tsy58CObt7XV zyRLMP7FD7yFsJeuHcbvqi`T5W@9i3Z!Bj2ub-cP9>Hh8w3jFvOpyR1+lOa z&4;5z5*B8(rU8Q%K`hMA6fVG(dBV{m-xN6d>V7*kLL?Xu30PP}&gv=ne_Y?&3 z#==A^l`G4BA!UZA{JOhvP220uo8uh8sZ%W8&(M9BAHSo zm7vv_AYYoGWMMFf9{oN)v5d?8054HYv4HS_SAjA-0SDm4V*IBb3Z+*f0y34*KYA#5 z$Uce>f)&yPxd8S`ge6LwPaz<|2Y*?DJWf*%B*4RQuoy8_AW;dQh4kTY13q}DDToq@ zWg0Jp?9VKfBH>4}KFdw5(UkLPB8dA3+|R7v*RC-}thihzTPjFUr^jKlFzWbBNGcFP zOwA*S0RsXGnTiGZ00m2i2^1_y`LOKng00Q7s2!FW<=}Iu})2!4`5CX-Z&>d}iBEu;XgHbSECW+E0)PytL12`-U5eIyf z1jK<#A>x3{0g(ifCMiCucp@gGM8g7yyG#B~w2dErI07Re7I-~K3N11zjrcZaY5E9{D;MA ziZ3;V|KewA9R9@!2=vz=U&QZMy1vr&MGSnA@z?J9O4k=L@I}U7yX*f(m%+#54lF_b z0VN@anaHzOu*gAZI)9N58^u*$jwZScL^4C>yHtTf86qbr!*8@ug+;Rwp`Mb%_0k*A zHP%7dZ-u=h5m7UT?arfL>e@n>xysGd>#g<-wqplmIO|Y(?dlDBkM%pK^Ujb0lJ#2M z&djacV|PLOcqnSAA#q9PQ74{Vy`1>AwY3!pIkhvW*UVkCcJE-`gDpA3)2Q)*38qJL z56rFXbk<70;HOQG{!42qu3&xYv0;_q>`PCb^y;B=$HTrmYBJ9Zr{`|h46SzF=6vsm ze4($3zMyg9)PZ9oV}mo`F2N3*toumxv5Y-sE1+t~e`43RKlIZ=`Ry|U3LAe+bZtAS gSGcBpa>0EaRTO`*)7n9Eq$m`}YcadRBXZS$0cHmIN&o-= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/bronzeChain_mid.png b/src/main/resources/assets/lotr/textures/blocks/bronzeChain_mid.png new file mode 100644 index 0000000000000000000000000000000000000000..069555b7da4e4f2c7b39949de9f9b8ec709575ab GIT binary patch literal 5273 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 YGJg7Zb=KP=kz7!2POBYD?L!j&3;HP&?*IS* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/bronzeChain_single.png b/src/main/resources/assets/lotr/textures/blocks/bronzeChain_single.png new file mode 100644 index 0000000000000000000000000000000000000000..f55d3976bba29068c3051316b4e51f51b742d476 GIT binary patch literal 5335 zcmeHKXH-+!77hqVlcs>QF-D$(n%*Np2_Ob0g1{((g`1lj2&9<=0;nUPs0d6$t-YXg-Dp@b|RW?*RltuR0+(L=gxmky4q2FAzdVMZ6S3LU95<0ugtw zU|HDiXD+6rt+V+?hC0bT1Nkba8?XAph05I-C3~`?ms!|^STPc4x8IK_8|GikKff!d zb!woY!7qN8wsbb>SzUW=wdm1Uc*ZrSL$~xzG85|((t-OM2HHB<>h%5PmQ$XU1@znQ zZttm?=n-qV-{xj~yZ*72JMW&aC`l~MfLPlS)^2LD71glS!;OwBN~t65g;&CQFq|VeKY{+m1)i?r$lPPrE*mxZ%$@p#FQEDMo4j;T`jcId5DK zjZWBLyC^$NLh@sh?+@jQ5-d_`~p1q(!BF>2 zTT9QjG-cPwgBG7d>&&cH3{2OXRQMLMj(JMXi@Kdl_f<63SdbTPbM58rIZPX#virBJ zz&bl$qH{#)fpgRQxM@?CtuylWn|q>r+rWv_!}cfdEF!mb2={DeG_sm)!lEw8eOzK% z*PE|g`}{;-Qh)=YV_=4<)0*5}{L;exz}#6sa}BQM zgUHj9la^P^8*hh81t^Yk6@N(&3!9D*L*e{14Cm0$b)+ECs2RsCj#y%$O=akots z=@$+korX)fV3YfFVV(=Wd2fK_Gq5d?ScWNfD%oM5zUA5L{+rtxq95`>;OQB__VoO?qrv-F&iY-(Ch7r8g!jlCvu&BRRUVa!1w4jcJ9a%}ysH-|DEJ zKgfNI`qvoNwP@?$gNxH%_A~ptbXZ5P1QT&)c`7JZjmKw)S(mJ~Twtg>vjK|_^3Sy; z4mhqJ8W{XHrmnEGew5Dg?cyc+J0Ap#0ZWNRy)cx~w_c5#!!{nI4`zATI{(~V{QQ+e z-;qCc>rEZ@-*#J*6*4#WY)552FYjveRZH&{m({h!`O+?R{?e%Y82_;=;j6;f@&mm% zbqGtBy>;gjPdn?7txYF)aZ%nQc=Pu=ANlY0o4L#`-O(hEmD2sT^8Ewl1wIhf#4)Z; zJZ;-PHdUusnZ)n>qkM;`BwqLJp`1dKAVa@Iq;l)Ev~O~&Ih0=*WFL%>f=RHQ;7Wni&N zr4pkgVkEK%ES^rMV{rs5fq;fB(DHb(0*FJ4n~eb}6UPaYZyA_O9-)(a;4D@%od z|Cy|>V$*1}>3kUo?EVS&E9;NBYmH$m4u|0-0b?}bvAvim&HN0W1QhTX+94jKav>^- zfTj`oWHbq)0cbjxOhx1Hcp9EgA>!e|7f@`mTmgtdNCO3fV+1e`iNdE+xKt9FM24$L z;_*mm8U;s0^YBzYjZWs1c@Xal2!ELX?n*%TWmFm{9t?#CATmgRh-e&{h)0tsJSv(_ z0YEfJ!BcQJB9}s-P_dcukDqQkcKH7 zfrQ49(0D>Hfylt&7-TXEJDx07v!*|0>xTUwKHRhhUu*)f-v=4IxxjlB_S0rH&XaK@%QffPS-av@J+_wyX*f(m+|N84kU*E0V(0j zOrVl$2VaB?xPCrf2#)6MYOY6zB}URk%jF1!34DVxnXH3Q**O7+bW)7>^+n-^!0s?77| zMqdq3v?6hGOW%|SVC3@H^xSnQ$y<48L@8mXIX7h w{kl5BU0m0i=%0$6wP7aSm!J+_GQ}VcVV1q6)P1nY8O{{J_Fn9DniZb>U)w7(7ytkO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/bronzeChain_top.png b/src/main/resources/assets/lotr/textures/blocks/bronzeChain_top.png new file mode 100644 index 0000000000000000000000000000000000000000..47137180c842736933c9713fc09cf218e720507c GIT binary patch literal 5330 zcmeHKd00|e8wb-Cm(nRCt4Tu5Oo0ocEJ>NTQIe=smZe_cf}|`0ic2-NXqKaC%{XS+ zVzyW=l~!h2xukvRWT`n;W@e>ktMmp{Xqj9p5QRW!Wuy#3LlGhY z0uga9ca=E&`F#D6x&?ws?poS4j|TVOEwlLr7x>OXRDY~T?_8`-Dz4b6=-7uheZYsd z>e@0&J|WA{W)tpWrAbE68+`u4)falJx6&7?q7()IN6YFRA&xhiZ5b`xL5v!$V&_yl zUNm*@J#A{LKQNtW^yj99`bR60`{x|0aBQtPJJ+RjozpYF^9qa5072{8lIW$!+Erl_DF)JH~6w~XF;!{My_Raflj=4q4sq=$;8 z2#TKg(1$0CfVXlCA4a4`MP6=r{`OM9&B(;tnI=d2?m#HRdYMi4+8f;-KVP6 znoGLr@WT44F#0{qUq}C~aYww4!0-Hy_Gi~~_qv^ppYHK8IXXY(d+R)n z@4ZkdjJpY{)^}}p+zxJ-{L|Y0x!MK=Ly&P;x7~^Ljak&C%G=e3cCJ%>YIp28M0q=H z_pvnZ8z#$bZG_B{IQ#zDuE1}2grqqrnW{dH6@-#*v$-n*RJ|CxzD*5O?0TXE{-@k!}VD?M*s zov~2sG0h}RCqynVqgD&N$Gyo)3sR#YxgoA zJPf?)(d`esNx5K|b1w28$67!jU3jE_(l}(XM;Ad+JIIdqoE#>2U8G#)79LJ_uE|ar ze4>{*OE{&o`1l$-<16E7FZ5GZGn#Osn>Xt$ULDv^Zt!D?isI8RW_0ci-&Ii4yw$M= z4Bn_%(8$C_E-W|?dl(mL@x=ARW^1Nqyuy)tTri#}~g}wgu4huHTzgGC5#_UnaoEGx= z9SyJaSPur5CDBXb(}pG6{Fz%5qc2Il_9VIca&pev5@gpe*mPIjqj%q#)U;vCYrlGj z$0{G4(_bl=R2!TuI~mPb3YNz&B)8#pODci*pPMZGE+Cx~lo?XH{%-4M!@q4|^ zyS5nI;TBZw%RJHBJTZ0VqPI!wj%F8IZa*;0T2b{*5Vg_X@|^*8&=LVz8KS!_e#O44a`? z%2MNmz{7>cYr=qwFZI$%=2p0*Ex~1FyRMzwnoy88Id2Pk2-*I3TUHmwVia#x7(dWf zWZKtD?`=go9VzG70+UaqLs{(v!ahIaO94iX6Sd~u!V`QvvrxAEvjg7r54^(NC@85L zp*k&X<;QrMAK(>(MpDDNkTtZ#p`>Cf8R=n$Ib zYZHFDr7VYkqOzgV$mP!bfa}FMvex#TmFsiDJV(m|{r#AVj1HjP*GY>RpX|jjG4_qG zKbgYCxV$4w`H=kBbN8}&t4w~Kt#`sH_Q_D$hc?v(0l2=NrCSw~hq^yH16i!vEO>DK z$}aJxNUfoRo2_$u^6g{pde%P|W98Z}#p6(aiCL}VaH^Ox%XLI^w-*i5bamQBe!Xlp zLBB<-G*}|d-MD`d!lZls@OTPE+cn|0(%ymI12Ea`-$v6atB1Qw1EA@J&cJCX4;qLrsBDB$jEsV6wllREh*&$oeKXwMJ9U*NMRH zpK-sj{#3ih7`9@uXwFhzm^wYCGaaLjPvc8@B0f#?2vO{8i2$FBrH}z0mSjf)uv9YN z9!nq*1rP)QBr1XT6%#WpJd>D#Pq6k1Pm5a5tBLi3xoB*oSo&zEYU#e1kQE^0K z$VUmP`Go5rQpsc@9F0UG6DVJdRzh+G+>2^d0)QiuG#d55(BN`lYC(0U!T=gMTn&vO zhd`xN&XGz(=oocUXtk%N!O;#Mhs9l_fGr}`JwMjS z+LO5??ziX)sX(a$<@9u19jBJEE#LJgVuT_GHJGB%jl}CDMwqV)K#1>3M6btNY&$ zRkcu%xo6{5$e}nkpK$I*)Xx+o^q^qd_8Iz&@`|ShC)Xy2kn&XH?gnLH%7+V&=Od3) vo_X8FKU4V_Ot?~cFtvF>LK#pSi)=G!8%gjwvdyj?t^&byS?-+Y6u9NT-%d9k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/goldChain_bottom.png b/src/main/resources/assets/lotr/textures/blocks/goldChain_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..6b76c9baeb0583de32260a8257f5444607577362 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`t36#DLo9leQw}h`Tl47O`2zy1GwYyM7@obJ3)n&EOn>WTJXWu6TQrVsw+vjsYavFXVrw%H2r``^B^B|{vfIAp@F z;~(Chj%Ew|x4$B`!CWBU{)gQn=8s>0-{-l%Z%^uh<&w)84V?4rfB2nX|G~I!f_xeS ZL+iY(I~&&4qyU}G;OXk;vd$@?2>=08V}$?! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/goldChain_mid.png b/src/main/resources/assets/lotr/textures/blocks/goldChain_mid.png new file mode 100644 index 0000000000000000000000000000000000000000..c40b6eb9bd41f8264f1adeda2d5c89ab8b1da2b6 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`TRdGHLo9leQw}h`Tl47O`2zy1GwYyM7@obJ3)n&EOn>WTJXWu6TQrVsw+vjsYavFXVrw%H2r``^B^B|{vfIAp@F z;~(Chj%Ew|x4$B`!Cb(8≀#g+q(-JJ=R!{Et7y^zl}6J9kmKUA;(+_P&TZ3$2m8sHV!t%n+v*wmJW>9qyG zX*<Rp30D{;pidV>kO^n+a07*qoM6N<$f+{m^+W-In literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/goldChain_top.png b/src/main/resources/assets/lotr/textures/blocks/goldChain_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b0e1513e3cb8718de2e01f11ce7dec9b94887d GIT binary patch literal 266 zcmV+l0rmcgP)9kmKUA;(+_P&TZ3$2m8sHV!t%n+v*wmJW>9qyG zX*<Rp30D{;pidV>kO^n+a07*qoM6N<$f+{m^+W-In literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/ironChain_bottom.png b/src/main/resources/assets/lotr/textures/blocks/ironChain_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..05523c5cdf94c0a893cd36a97bf386a58b8b1dd1 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`^E_P~Lo9mlPTI(M)PTojzP)0p zmg9lf5=O4qPGm(XTTAdTHNQ6b7iy)w0C?=5Fv zKIO)D*-+IMhn|l+WG57}9XKN(7@qxB)RsTvfX(^X4@L*hNF1M-C=oI3X@+kedq>CY zWt~A>_kQ1(HtD>*&35vQbKjQ>?frgUWtEoZ((w94GXuRIaw^rkuH)9_epLuEqcS-aSSHLSOId* zs461jdjGo17-LN-z1|^&A>`2mr9l*?(=b34m*!R7f z+0a23AR=yA7D_32@856GB%bGqsuDtA+qUjGw-THAk0q|_dRu=8_=!aC{dW>om6XzV l5?l2@m1t&^Qn(8PJOKeJj)+D@lc4|r002ovPDHLkV1h1DU*G@$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/ironChain_top.png b/src/main/resources/assets/lotr/textures/blocks/ironChain_top.png new file mode 100644 index 0000000000000000000000000000000000000000..be3a2f452fe7101e430721868676da5256ca9ec5 GIT binary patch literal 235 zcmVw^rkuH)9_epLuEqcS-aSSHLSOId* zs461jdjGo17-LN-z1|^&A>`2mr9l*?(=b34m*!R7f z+0a23AR=yA7D_32@856GB%bGqsuDtA+qUjGw-THAk0q|_dRu=8_=!aC{dW>om6XzV l5?l2@m1t&^Qn(8PJOKeJj)+D@lc4|r002ovPDHLkV1h1DU*G@$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/silverChain_bottom.png b/src/main/resources/assets/lotr/textures/blocks/silverChain_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..4508f63ad964ef52440a7ed9e0af430b501c3e21 GIT binary patch literal 4960 zcmeHKc~leU77vR^!(OE-h^7G*(8&&DQX&G05G1k+s1J3LOkg0JNgx3?pmK_pf>LS` z*H)=m!4+J<<)LV$rQlWt%c4MqhoIu}04dmS0xF)@e>~^)Ka-Qm%y;ko-FtucemD6x zg)R=TB03NW1cH?ykQWZVZSjw}8Mw}T_6i{oO!lNk#%RM49Z98DN--Hq(x#|T5~|0f z1cLr<@3!T6&Tf|cS4%I?GZL6rtMvH>HKLsB?L=5Y=_+VFa{RZBOHng@{%kyRqB1cJ`MB)(t1^A9PjAO#?=asG z<@BYWnRO2@u>NAhP)An(!YJOMR-1r9mCIS1Yxno|9Qi|hQaeOU>XG}jR{!_+Qul^+ z4K^1h9lvA$(EOS0$GL^GdW^1CeExOD;swHjvf%9VL4J_m7fhFqL*9csiksrxqjPsR z`1o!;{kxN8e@%AuP|>dEUk|IgPEKwunb*5)u&$-8ygD}T4mZxrtFxi?@W!nCEA2&f z(T%AEFJr&q8;u9#ze$m1HoNl{B0EIq~O+01c&PQc9&d z^R!-0+<5G2sly4v#s>$Tn?GK=t^Q7%JE?eip%pb|ZF6j7k^k~V0msun363lqTCwkz z&BQ>v+fkVsWT=`Eo!FHeKn$4e(W9gVV*LI7$j#uOBVw}^r%(33(?t|k`6<4-T zuywa{tRWPqE%|qq+3@~V*FwXt@BK0C>q03MCdzUU2d{QoKTALqLEW4geNDn0kghCeE60@lj}8jABi-3d;f|DTn;p(LJ@g-3m!J)A|LRs@0VP4t zD!MtLw4FDFY1_VlwEL6vq%=s{;%b^~(JXqv6i2%{2gRy5kcc$Z?AYRphILyi+aLJp zH#_d>X!7fygkLr`IiI2yzj#rOt!P>pFTeCnB(-6E0j=cdH!s45&Lu}_{^+_hBj5P^ zmLSxzKd-mvE8CpI8*W!@*zsilH}nC8@2Mn@8LP|HIpnHVV(oC~f?uxx+ExC2_WGrR z!R^($``GQ~{wHf!5!ddq`eN3h6{`mZ69Vg2SRTxdkj2(d7hutC9c#7^#y8Ks-(>#s z#)&l%*N${|h4~!NH%DKICJ$}O`jg-5#J^D76Tsh-k^I>G;3m>$$hTi#%(D>QXFukPtiNs)vbLgJOQ!&81AnQBy_OP4mEypSueOfeqVlRme! z_lRd&W5|t%a!76ZTy8Suj$GJcLeZsF&532W1U$VtnKq=Mojl(seuM z6Q*@144SdorVBUcpL^8zXm?%92=`|9V3iX^Cy9kIu!$>Ge#K95i8{sM4}X- z6un#pMk|5f?W0#A;zU$S5}|RJf=hl}d4WvABwTW|hma;z`J?ezV5%C8NL?H$PE8cU z60*;HqPLy{0OY6^A?f8Zg@&W&k`1^VaE~uj$s~h{Hjzt?5r&fdm1>m4qOd45h_Au$h-`dRIFtlH zu^A#3n}$dskr-h@ET#yB5D6QG7*a15lPUIqrLfchB@uHLD%ElXloOL9aVS-#h%*Rq z!a2U70xp?Bp}k!Rl_6RwFaUc1Q%ICL&0A3BGl)neL*sG~@u(9Gl8j0Wj)2{$NF0wS;!v=|$6D(3I`%i^ zVxV4PI*rbR*lZ68#9||!kVxc-SDfYv8o^V7Afx4agRW6ZwK_zN`o@7wK{lX;4B3!e z$H;VhHyT|$iZexHupk->qB9~H4338vhe;<>$C9Pud-`>@-qio$!`q-RZU_Lo(KRq! zz^tOa8CGL_;S~OZudzD(gB}3%2Pf~v?+3a*(DhynyqEHa?)pI2dol1{${)Jx|3(+_ z?QsWHfPX+baG0^IeU<_aLS~{x0X%{bf4kY3!eHeiRp3$$fnWhnP!^Mn2!%VRg2jni zfsjA3%hbvko_XxkX+TcM5%7E?*}pXBafzm%T4wIK9c5HcoAbmRF8}tZa1J)X?wD@w zqFqiu+#T*dJ9CDSXK}ZzRJddp{mPlj6Q3Q+B6V8YRVBqXY>%1lT9me3SZbf^FwfWA zNY@a1ynjX=yg&az!qajirX%^{R1@CwvsDhq`bQKzyTNq3Q`J-B5_<Cum4O|ZtmUt+uzyyJNumE zY!ohA>|p0?hr{6<_`$qz@IA@+v9ShMx8H|h9L}OnFN)HI!%29xMkSHSF}!ZA8pC7B zG6@cs{7d=rm}B?6YzC!Mxt4xmuA8q$B}mm7cP{(-O3&7%JjsumyxuzJIL&Fr@Ni`t z>B~-UVGByRa9_Q__1M&TJui;Px%Ee%U-)Lh4wnW0HcPu0@OtoSCuO+0s=mL`YVSHN z`g}%|a-4?s$E|&{Z*Fj#>2P}1=7GD-mlvMP_~sbt@(=O{Z>H=_*!B3!jgOg|h(9ZS znRvzadR!K3CHnl)EPX#5dTz^t9Fovn-&6=sx&P2n-=D||@Y{d=V(R6rzOX&cXOG@V z>+Di`%ur^}EdDxHdb-MOf^2?&P4k%_o0%`ZkYwf&w$#6rTzgYjS&^Q(wFwF94QDtw zPTzi8RT)^F9&@m`9HY%XT4O%YQySCaC7pJzm96gje&0`m$ckV}vzKjnVb&da&o=aM z`{Wk8g7{tCRjPJFq}8dQ(1Hif{ft~9#BFuW+`LCH(MwGwGnWb@Ld zLyMd(YOf;GaCg@Y1lO1!cs%5MQjaf*+2b(YTY2* zjgw+>?Njg_gp_;D#EtHfYgY}SX|vA<hQQPr&y={^Au~&1v>l)`kC%TJ7EydrK(r<`1#a0yYe|PBR zWkdA1+8sNV3uO*RD&hr4%GW}(M8BQMsNlZ1R^GdEZfwYcvWbuHgmpR6Z{|2Vw(%S) z59#VU;`8sHv(MzO#_zW_@4~t4W_L|Wx7Jzs?6Ru&w~BsRLPVB#J^qH4_KfLRFwwD8KRxrzrgecK z<@q;C^o6$qCtT;|K8x)L-I_u>eZ(5R zD*zZ#XD<|7aD3fwIFvntvo6d|U)SsVdiFt&1D<~fmjLW&fXACMf!*~z=BfKF*75Y0 zpSfIe-!OmmzKBvB&MaLP5Fq3S1iW3vVD09o=5mA2FLM21Ra+JTA|y_VZx-(Jezk$M z#3_6A!D^=!3FO*mML!MBw7c1Q_x(WMe+Jg+z%6Eu8N2)OFR%r~S`~m#R)( z8D#q}X-5sA?)#BCc(Q8J75NHIZ)zubKHsjN-M`y!y8F8Bx<>;pz5h6Ge#PEp&o$rp z-BI3&M{hTjp(TxNjgtef&s)`8SEg?7EQ^dSO9&nMe)Y;2zII;^xiiY&oS&H!7BJH( zDzmjTS4;?eLzy_7(-pdP>D=WrzjGa5;=iH$Rl{&cQjG+TZ57xx87ijV8k%8Nmy{;? z^~BjNiu$$YuMVWmFMnLgFx(7n{Y?RBET1VXrvIc6v|A993=JM%QQa30v`w|M>KOd) zjORG}+vca^l&bR7{Drug4`csh&0<*wWp6*-*Wb7Q$Mzv^+rua0))Z+9LYx*lg57q8 z4D6~=f)Ea(QV?NOCB}%!3N_euaX8=4lhrU1hw1QQOe#}y2~Xg~fufZbp%S4Di4q>B&&llSHCUXFR0@K0xWQAO*H=0QVya}R<;}W6- zLVSQqgW+jJ8j%bICd(43goSo^UkxhZg!6(%DZmq#utuj-b4aA5q$FaJ4^gF&k|=C8 zn?$CPs8k3bAnjVE4o-%Y+Sx{m5e^=vMKm(CPNq`gjhwJpm7wDi2*8hjo1a205WJ&T zYDZN7dXSP~HHktblN1Wl*a)pIFcFZ9CiJHfS`qkhB86jGRe}b=0uwQ%ZuVFT6nPh~ zPSD6r<)8=&lVb`1)q+te9}KyeFA%r46{J$y}oF`EF08?k}S1?*L%cbnCyUPcN3!q@0L{DmU`>Q94wl)j(j`Xtv! zDezI?Pu=xNu8&gSqrjiK>;EQ~-TUJXrUd_hlE7hRD4z_0gOIg&>0%yEV0?Q{v}6N| ztvWbbi^GivC#dm`X1KliGk|fNjxPutci+;%ob5VqUhqX=+R5kniCCBKZKF)E_?x}u z%kYTkPKQ$lkEgMpr+vG#uX~zpbY}bEWlQ4SYYVfE9Z#xWdGnlqX>4gMLHsZIk=k3A z^0iH8o|GIXq#K;Nr;?j+xau1@;lJpgoZQ|)Zk*A-q}Xu7`P57Gj|aDl7jLaG^DNqw zN$$0r{8cEP5E(aks`0`XL&tev3|2JWscS6SeN*)O!F-Ezv%0Ldqi_@% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/silverChain_single.png b/src/main/resources/assets/lotr/textures/blocks/silverChain_single.png new file mode 100644 index 0000000000000000000000000000000000000000..b708df9b5c66788bd224a40aa47bf0443a5c0c16 GIT binary patch literal 5043 zcmeHKX;f3!77jBa3aH5VY8nMa%}5|aiAn%5fdE2~!2xb=ZXl4!B#_9o0LKas)K*l$ z5o{4b9KffjwIHZC7iw`tL@GQQ0w`9TpeF$p*XtkGdi`gza&zwt#eTRd0sv_E)o>c^E%jeemBMEQoGt4&UpV=LIN-QXT zc4+sD8yUu>m5mX*(s%EYYW{F(KZWf;l%eqCYK?n(j=S1EVPd zwSl#EcD^#PpQf$KI&79*TXXm5&m9Gfh68D`#Qw|DMXA)eoj&`|C#L>Dz=~#Gz$&&$dO}$=%(-3mG`f)dNETFmC-g+Y@~AZ? z+kZRS_WysUB&C%?{a@Rv$2O zN4sWasU6L8jYP3ebA7BGZ%w+kV!Fn{mV3yk_@WUJZNF@Kuh+3NXw_P$_5HRIImX|p z_R*p|Qzd>&YD4dY1o2yO`Sa?p$tNGjmp{LgA&acsw0$7#%`Q#A!BnR^RnGlC2HuI< zxC}dE?)mQrDI2>;HA&?aJ|%Ih_MeZjO%LVVzT`W&)2&8czBDQ9Sds7K+l(E9J&gfP zjC+TkMn&(tn`dz(ed(0-R_x~ACf8i+ERDw_wFW z?2Bg-J7<${^hiw@NTEF(9$k82*LK&^H!+5vqO#|(xX7p(p+BO4bNj=w{FuAM{DeWKXoPYeq# zwR7)xj(OQX@B(+`#MztgXiRn+KQnmN9=H~=ky_srMbo>|I|%bw76Y__o!)k{GCFHD z&z!mrTrj+8>9p%tuhlyv=O-V1P*=e(YiMb(@w+`I=5lR?tgWMBSwclp@Nj+Xs^u)j z?x%!~NTwlc)0U+^4z`h-n#;HHFn(`{RwG-U1aAv)jc~|yo><0Q-#Jt_(yscC07_`) zSX|6JVt0So-k?^MC3tx9e7^Y18pENzS@SA;t2{IB1~>m9#>$Nc#YT3mVosY8PL)|V zdnIX>|Ff297AEcQa({9&vwUE9E>R+_OfO!5a_C8TWlE(QFV6Y?oOVFF=SJHwqot?M zEdHRpB+z!jR4{byg-Y=0o9Y>$s=PS8lMOt z1bi$+CO}vk5rN4>3X#W0DB~c4G%Z6l4ukPflQ_l$?l%yk4DQ7xdQZ}4wXp2kw!JTg`tCT0JV^= zQvrb915`uzkt2{&D(6b2A_hj66k6x0Z*a8N=&~#kDuBfrUC)noeHgNO^l5Yxh=h6- z8m(_!Is}gfQ9#KEUmpngjjG^yND_yD9X{4l@8!b3SuV(fM?!cc7)yi+1h8Brz%fK5 zU@24@ML^&oWDgSjDY`-`P^us~;vEMn1=WBS(pQ6?Ge)M{r}nCNM8_0?M8*=xSR#o_ zBGEl4bif*ZtXRBmPrt9$3;#cSc%qskcVKv5=j>3QNHMS1_U<3gD zCCF#-`-QGAbbS^BpJn`|yS~u%SqyxZ@t5xUztLs!@wkIXz&{`rILwd&&bfkvkSQ;~ z-xtNvz1^&gX+SbTwj@e{LQMoGsEJbzP=&?zKxn39as14>jVBq>?D2lNw}9w8%h#Jr zy?T8cadQK~+Bot0`aI*Hw+81H1>ZXS!q|m9dn((6N4Qb5l@b+j^`UF)UCS0un5AWD z`O5HAw}Tt4Uw3PXq)YZOCu*kK)TNFjk0|V9&SpPf-4g2P8L2I(^gyxQe4dc^{dVP~ zSo0=`eW*2B`bTh*0r$3B17dotW^t}fmvhM$#B`v1kK$>t^=?I)$?BD@`PNdSvoEb+ z%dR!N+*j#F;k_8<4F{XL=r{jr$Y~l`N9CG7eqv|nW$;z!&N^(VbS@|b#qtaCJ;IF5 F{tLJUnvehh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/blocks/silverChain_top.png b/src/main/resources/assets/lotr/textures/blocks/silverChain_top.png new file mode 100644 index 0000000000000000000000000000000000000000..4539b1b399c34ce79e45662fa20577a0f47ad917 GIT binary patch literal 5004 zcmeHKX;f3!77oZHRxm210!z{`6wr(WGBlwKL5LW}h$tf5+}yw=qZvrh+6rPtqo`Od zQa};gQXZfcsdYdEoLUDI=u@jj1g9#qRH;1Vodi@|uYX+Y^`FVg&Aog0&feeNXD4T4 zbY$3cTPIr#1~Z)(&W#1%GmIY_D{ysvG6rEVQ+`|}NYKPWI-F9a5TjBAr^!?zI7E+% zF&O=CRf`jM^?2Egrq1SA1jV@IUHvJ(dGChXH`#3Mif8e~g5}s?8{BG1+GyYH$gz%@ zslh=z&bX8{IjGLZ?k%`^;LxS+Mt@iPUO{g+E!k$#+?Kwr@7s^HUhXB%bWD5hvF+Ec zGpaHC2Dg(Oi~OYFn5$QAV!d3mPIQxoZK9tdM+*pRk{S>79x9&q!|1mZ%j2YxKbWPf z`PeEO|(2QH-2|*|1P@X4$-I>dkuYly4hZ(bblRNyDn< zZG!AAmWvL!-0;|bdUJqNzqgI(y4N9$dHl{Vd_457W_drK-=dhQIJxi8*DJ+lHh*HB zf5t?c#hY0>5AVp%3JI;VTD+yOjV9R`@I^W0?Cf)QmgGl$h;H)sh+sNAd4CaM8P)AV z{2|fSrWo}_@5IYTXS)+}m-lP4Lc9(0KbvYGuH+dAncfaV-rQZ{jJ^EHi-{?}Y zn()W(h9mi_564}qIUIgLYW{4VN6heEcUe#Lh01k9(wO|ACzo%zj~*;aT-woGnpfIP>}0GDFUblmm61Lw9|X+=sr@ zY`?Oj8C*W;xVmR52fN>3GW$(lp5!)kq`9mfyJ~RvEz(Y|<5bRHi@?QWRKKT|SNgm* zr`dk2ojPidyRhzfkD$aFgE7lNLqei?At5h!Fxa<6YqoR3n*v?VB)4wD6Yv=`R-TV8 zovvCzSgQhL~7nU;KXXj&o7-J6(~Eoo@jdZuEXp{CldIvY1^*4f>${~_Mv1^3$!Sv7x_uC7(Z5sci48j8CuBM!jfES&_(77vCp$CIp-Fa<|2V z%yCG_ZK>EU#D|Vh?8mlsMde3$E}660WmEF-8ahGbJ5ugUoBQ;52?4Id>@-NOc3XWLqK zjBY;ZZT;RY^E!!KQMINh05j)N`d?NIhQ$KImvy}Zy(O31UvOF<^;xHVqbghE5HJf& z+7D1LQ4{!!Sg=AyghUD`(Mc2$mokoDfMx;!O{P<+P zG6YFO!&j-0xK)t?c$EZZitwKV*s}F303bs&5Kb?X%GE4A2XDeaqwvxjgmzo>2x}x&X=fArIIL2 zCX+;_lBiSyupp>2L&B9!3gMQJK=@1;~EGQiF|r6aXip0Edi-{QN0&KLUkH6B1~UP(%<4DGVbblS!r1 zVG&(42_i~`g06(5lcO?1i2xLg2x*Wp8c5852{bVP6_WixNDP?D@MVZ0njh5!C4yNC z6e<}6%8AOLRD`6IrWaN`V zr+|FvWIsPDh3re4J6mfRaH3gwA9#7$Te$!r;h8US5gN7p0KvxK;RF)r|NZuZcSRgDU{&cZ<9gzwhXJN7q|1@K(m} zy6YWXZ^gh{8NchU{~KMlua7&39Q*^)fy2y{f`9D*2O%qAL>L#tH@>~?Eto(uRT;ii zjloOoat5)i3|Zz8IKzzU|i_gL9soJn-ThX zilE32EW0-B;19)-Qp-8P&u{qnKNj(h9;}ZO2WuC ziUPS`?v7b#=DRL8rS9~qj|PJ4i`cs!)}2f4B!$yv!2;~j(O)qARwI^q`AMF<1`sZW M7aGZ}4o=DbFY?HKy#N3J literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/bronzeChain.png b/src/main/resources/assets/lotr/textures/items/bronzeChain.png new file mode 100644 index 0000000000000000000000000000000000000000..43e2caefa37e32d389420257e6eaa4730ed45b80 GIT binary patch literal 5402 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 a7FO$wDNV!2O7}x01vuEb*p^xc?E5cP*l-E} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/lotr/textures/items/silverChain.png b/src/main/resources/assets/lotr/textures/items/silverChain.png new file mode 100644 index 0000000000000000000000000000000000000000..7d70ba28c915c0cdd9437175e5d906e5ae5a4c9f GIT binary patch literal 5167 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