From 6dca010051a32d4d87f51ab67a0f28986c68beee Mon Sep 17 00:00:00 2001 From: Shinare Date: Tue, 16 Apr 2024 17:18:21 +0300 Subject: [PATCH] KeyLime update attempt 2 --- .../com/zivilon/cinder_loe/CinderLoE.java | 163 +++++++++++++++--- .../com/zivilon/cinder_loe/Materials.java | 2 + .../cinder_loe/blocks/bronzeChain.java | 120 +++++++++++++ .../cinder_loe/blocks/cobbleDrystone.java | 28 +++ .../cinder_loe/blocks/cutDrystone.java | 28 +++ .../cinder_loe/blocks/reeflessCoral.java | 28 +++ .../client/render/RenderLimwaithShaman.java | 32 ++++ .../coremod/LOTRMaterialTransformer.java | 2 + .../cinder_loe/coremod/LOTRWeaponLinker.java | 3 +- .../zivilon/cinder_loe/entity/BattleNun.java | 2 +- .../cinder_loe/entity/BreeOutrider.java | 15 +- .../entity/LimwaithBoneWarrior.java | 46 +++++ .../cinder_loe/entity/LimwaithChieftain.java | 22 ++- .../cinder_loe/entity/LimwaithFishmonger.java | 69 ++++++++ .../cinder_loe/entity/LimwaithShaman.java | 113 ++++++++++++ .../java/com/zivilon/cinder_loe/recipes.java | 16 +- .../assets/cinder_loe/lang/en_US.lang | 34 +++- .../textures/blocks/silverChain_bottom.png | Bin 207 -> 4960 bytes .../lotr/textures/blocks/silverChain_mid.png | Bin 190 -> 4995 bytes .../textures/blocks/silverChain_single.png | Bin 218 -> 5043 bytes .../lotr/textures/blocks/silverChain_top.png | Bin 218 -> 5004 bytes .../lotr/textures/items/silverChain.png | Bin 326 -> 5167 bytes 22 files changed, 679 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/zivilon/cinder_loe/blocks/bronzeChain.java create mode 100644 src/main/java/com/zivilon/cinder_loe/blocks/cobbleDrystone.java create mode 100644 src/main/java/com/zivilon/cinder_loe/blocks/cutDrystone.java create mode 100644 src/main/java/com/zivilon/cinder_loe/blocks/reeflessCoral.java create mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/RenderLimwaithShaman.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/LimwaithBoneWarrior.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/LimwaithFishmonger.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/LimwaithShaman.java diff --git a/src/main/java/com/zivilon/cinder_loe/CinderLoE.java b/src/main/java/com/zivilon/cinder_loe/CinderLoE.java index 08a71c5..3faead7 100644 --- a/src/main/java/com/zivilon/cinder_loe/CinderLoE.java +++ b/src/main/java/com/zivilon/cinder_loe/CinderLoE.java @@ -11,6 +11,7 @@ import com.zivilon.cinder_loe.tileentity.*; import com.zivilon.cinder_loe.util.Utilities; import com.zivilon.cinder_loe.ItemRegistration; import com.zivilon.cindercore.CinderCore; +import lotr.common.item.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.objectweb.asm.ClassReader; @@ -48,19 +49,6 @@ import lotr.common.entity.npc.*; import lotr.common.entity.npc.LOTREntityBarrowWight; import lotr.common.entity.npc.LOTREntitySauron; import lotr.common.entity.projectile.LOTREntityGandalfFireball; -import lotr.common.item.LOTRItemArmor; -import lotr.common.item.LOTRItemBattleaxe; -import lotr.common.item.LOTRItemBlowgun; -import lotr.common.item.LOTRItemCrossbow; -import lotr.common.item.LOTRItemDagger; -import lotr.common.item.LOTRItemHammer; -import lotr.common.item.LOTRItemMountArmor; -import lotr.common.item.LOTRItemPike; -import lotr.common.item.LOTRItemSpear; -import lotr.common.item.LOTRItemSword; -import lotr.common.item.LOTRItemTrident; -import lotr.common.item.LOTRMaterial; -import lotr.common.item.LOTRWeaponStats; import lotr.common.world.biome.LOTRBiome; import lotr.common.world.spawning.LOTRBiomeSpawnList; import lotr.common.world.spawning.LOTRSpawnEntry; @@ -101,10 +89,12 @@ public class CinderLoE { public static LOTRMaterial MATERIAL_RED_DWARF; public static LOTRMaterial WIZARD; public static LOTRMaterial MATERIAL_LIMWAITH_BONE; + public static LOTRMaterial MATERIAL_BONEMOLD; public static LOTRMaterial MATERIAL_LIMWAITH_WOOD; public static LOTRMaterial EVENT; public static LOTRMaterial MATERIAL_BREE; public static LOTRMaterial MATERIAL_BATTLENUN; + public static LOTRMaterial MATERIAL_ASH; // Blocks public static Block cinderBlock; @@ -118,14 +108,27 @@ public class CinderLoE { public static Block dwarvenBrickRuned; public static Block fishBarrel; public static Block mistBlock; + public static Block cutDrystone; + public static Block cobbleDrystone; + public static Block reeflessCoral; public static Block silverChain; public static Block goldChain; public static Block ironChain; + public static Block bronzeChain; + // Misc public static Item frostblade; public static Item spearsolidgold; public static Item whip; + public static Item swordAsh; + public static Item daggerAsh; + public static Item spearAsh; + public static Item hammerAsh; + public static Item battleaxeAsh; + public static Item pikeAsh; + public static Item bowAsh; + public static Item ingotAsh; // Red Dwarves public static Item redDwarfSteel; @@ -145,10 +148,15 @@ public class CinderLoE { public static LOTRUnitTradeEntries RED_DWARF_COMMANDER; // Limwaith + public static Item bonemold; public static Item helmetLimwaith; public static Item bodyLimwaith; public static Item legsLimwaith; public static Item bootsLimwaith; + public static Item helmetboneLimwaith; + public static Item bodyboneLimwaith; + public static Item legsboneLimwaith; + public static Item bootsboneLimwaith; public static Item tridentLimwaith; public static Item spearLimwaith; public static Item truncheonLimwaith; @@ -188,10 +196,15 @@ public class CinderLoE { public static Item redDwarfBannerBearerSpawnEgg; public static Item redDwarfSmithSpawnEgg; + public static Item limwaithSpawnEgg; public static Item limwaithWarriorSpawnEgg; + public static Item limwaithBoneWarriorSpawnEgg; public static Item limwaithBlowgunnerSpawnEgg; public static Item limwaithBannerBearerSpawnEgg; public static Item limwaithChieftainSpawnEgg; + public static Item limwaithFishmongerSpawnEgg; + public static Item limwaithShamanSpawnEgg; + public static Item fangornBearSpawnEgg; public static Item fangornWildBoarSpawnEgg; @@ -266,7 +279,7 @@ public class CinderLoE { event.registerServerCommand(new CommandCinderCharacter()); } - public void registerEntities() { // Last ID added: 29 + public void registerEntities() { // Last ID added: 34 GameRegistry.registerTileEntity(TileEntityMistBlock.class, "TileEntityMistBlock"); int entityID = 7320; // Always increment entityID by 1 over the last entity to ensure unique IDs @@ -286,9 +299,13 @@ public class CinderLoE { EntityRegistry.registerModEntity(FangornElk.class, "FangornElk", (entityID + 9), this, 64, 1, true); EntityRegistry.registerModEntity(FangornWolf.class, "FangornWolf", (entityID + 10), this, 64, 1, true); + EntityRegistry.registerModEntity(Limwaith.class, "Limwaith", (entityID + 31), this, 64, 1, true); EntityRegistry.registerModEntity(LimwaithWarrior.class, "LimwaithWarrior", (entityID + 11), this, 64, 1, true); + EntityRegistry.registerModEntity(LimwaithBoneWarrior.class, "LimwaithBoneWarrior", (entityID + 32), this, 64, 1, true); EntityRegistry.registerModEntity(LimwaithBlowgunner.class, "LimwaithBlowgunner", (entityID + 12), this, 64, 1, true); EntityRegistry.registerModEntity(LimwaithBannerBearer.class, "LimwaithBannerBearer", (entityID + 13), this, 64, 1, true); + EntityRegistry.registerModEntity(LimwaithFishmonger.class, "LimwaithFishmonger", (entityID + 33), this, 64, 1, true); + EntityRegistry.registerModEntity(LimwaithShaman.class, "LimwaithShaman", (entityID + 34), this, 64, 1, true); EntityRegistry.registerModEntity(LimwaithChieftain.class, "LimwaithChieftain", (entityID + 14), this, 64, 1, true); EntityRegistry.registerModEntity(Wraith.class, "Wraith", (entityID + 15), this, 64, 1, true); @@ -319,6 +336,10 @@ public class CinderLoE { ivoryBlock = (new IvoryBlock()); GameRegistry.registerBlock(ivoryBlock, "ivoryBlock"); + // Reefless Coral + reeflessCoral = (new reeflessCoral()); + GameRegistry.registerBlock(reeflessCoral, "reeflessCoral"); + // Red Dwarven Steel Block blockRedDwarfSteel = (new BlockRedDwarfSteel()); GameRegistry.registerBlock(blockRedDwarfSteel, "blockRedDwarfSteel"); @@ -331,15 +352,11 @@ public class CinderLoE { chandelierRedDwarf = (new RedDwarfChandelier()); GameRegistry.registerBlock(chandelierRedDwarf, "chandelierRedDwarf"); - // Fur bundle + // Bundles furBundle = (new FurBundle()); GameRegistry.registerBlock(furBundle, "furBundle"); - - // Leather bundle leatherBundle = (new LeatherBundle()); GameRegistry.registerBlock(leatherBundle, "leatherBundle"); - - // Reed bale reedBale = (new ReedBale()); GameRegistry.registerBlock(reedBale, "reedBale"); @@ -358,10 +375,18 @@ public class CinderLoE { GameRegistry.registerBlock(goldChain, "goldChain"); ironChain = (new ironChain()); GameRegistry.registerBlock(ironChain, "ironChain"); + bronzeChain = (new bronzeChain()); + GameRegistry.registerBlock(bronzeChain, "bronzeChain"); // Mist Block mistBlock = (new MistBlock()); GameRegistry.registerBlock(mistBlock, "mist"); + + // Drystones + cutDrystone = (new cutDrystone()); + GameRegistry.registerBlock(cutDrystone, "cutDrystone"); + cobbleDrystone = (new cobbleDrystone()); + GameRegistry.registerBlock(cobbleDrystone, "cobbleDrystone"); } public void registerItems() { @@ -380,7 +405,11 @@ public class CinderLoE { redDwarfBannerBearerSpawnEgg = new CinderLoESpawnEgg(RedDwarfBannerBearer.class).setTextureName("lotr:spawn_egg"); redDwarfSmithSpawnEgg = new CinderLoESpawnEgg(RedDwarfSmith.class).setTextureName("lotr:spawn_egg"); + limwaithSpawnEgg = new CinderLoESpawnEgg(Limwaith.class).setTextureName("lotr:spawn_egg"); + limwaithFishmongerSpawnEgg = new CinderLoESpawnEgg(LimwaithFishmonger.class).setTextureName("lotr:spawn_egg"); + limwaithShamanSpawnEgg = new CinderLoESpawnEgg(LimwaithShaman.class).setTextureName("lotr:spawn_egg"); limwaithWarriorSpawnEgg = new CinderLoESpawnEgg(LimwaithWarrior.class).setTextureName("lotr:spawn_egg"); + limwaithBoneWarriorSpawnEgg = new CinderLoESpawnEgg(LimwaithBoneWarrior.class).setTextureName("lotr:spawn_egg"); limwaithBlowgunnerSpawnEgg = new CinderLoESpawnEgg(LimwaithBlowgunner.class).setTextureName("lotr:spawn_egg"); limwaithChieftainSpawnEgg = new CinderLoESpawnEgg(LimwaithChieftain.class).setTextureName("lotr:spawn_egg"); limwaithBannerBearerSpawnEgg = new CinderLoESpawnEgg(LimwaithBannerBearer.class).setTextureName("lotr:spawn_egg"); @@ -416,7 +445,7 @@ public class CinderLoE { utumnoSlaveSpawnEgg = new CinderLoESpawnEgg(UtumnoSlaveTrader.class).setTextureName("lotr:spawn_egg"); - // Last ID added: 68 + // Last ID added: 86 ItemRegistration.registerItem(redDwarfWarriorSpawnEgg, "redDwarfWarriorSpawnEgg", 0); ItemRegistration.registerItem(redDwarfArbalestSpawnEgg, "redDwarfArbalestSpawnEgg", 1); ItemRegistration.registerItem(redDwarfCommanderSpawnEgg, "redDwarfCommanderSpawnEgg", 2); @@ -431,7 +460,11 @@ public class CinderLoE { ItemRegistration.registerItem(renegadeCaptainSpawnEgg, "renegadeCaptainSpawnEgg", 9); ItemRegistration.registerItem(wraithSpawnEgg, "wraithSpawnEgg", 10); + ItemRegistration.registerItem(limwaithSpawnEgg, "limwaithSpawnEgg", 82); + ItemRegistration.registerItem(limwaithShamanSpawnEgg, "limwaithShamanSpawnEgg", 85); + ItemRegistration.registerItem(limwaithFishmongerSpawnEgg, "limwaithFishmongerSpawnEgg", 86); ItemRegistration.registerItem(limwaithWarriorSpawnEgg, "limwaithWarriorSpawnEgg", 11); + ItemRegistration.registerItem(limwaithBoneWarriorSpawnEgg, "limwaithBoneWarriorSpawnEgg", 84); ItemRegistration.registerItem(limwaithBlowgunnerSpawnEgg, "limwaithBlowgunnerSpawnEgg", 12); ItemRegistration.registerItem(limwaithBannerBearerSpawnEgg, "limwaithBannerBearerSpawnEgg", 13); ItemRegistration.registerItem(limwaithChieftainSpawnEgg, "limwaithChieftainSpawnEgg", 14); @@ -468,6 +501,7 @@ public class CinderLoE { frostblade = (new LOTRItemSword(EVENT)).setUnlocalizedName("lotr:frostblade").setTextureName("lotr:frostblade"); spearsolidgold = (new LOTRItemSpear(EVENT)).setUnlocalizedName("lotr:spearsolidgold").setTextureName("lotr:spearsolidgold"); whip = (new Whip()).setUnlocalizedName("lotr:whip").setTextureName("lotr:whip"); + ItemRegistration.registerItem(frostblade, "frostblade", 30); ItemRegistration.registerItem(spearsolidgold, "spearsolidgold", 31); ItemRegistration.registerItem(whip, "whip", 32); @@ -475,6 +509,39 @@ public class CinderLoE { linkLOTRWeapon(spearsolidgold, "spearsolidgold"); linkLOTRWeapon(whip, "whip"); + //ASH + MATERIAL_ASH = getLOTRMaterialByName("ASH"); + ingotAsh = new Item().setUnlocalizedName("lotr:ingotAsh").setTextureName("lotr:ingotAsh").setCreativeTab((CreativeTabs) materials); + if (MATERIAL_ASH != null) { + swordAsh = (new LOTRItemSword(MATERIAL_ASH)).setUnlocalizedName("lotr:swordAsh").setTextureName("lotr:swordAsh"); + daggerAsh = (new LOTRItemDagger(MATERIAL_ASH)).setUnlocalizedName("lotr:daggerAsh").setTextureName("lotr:daggerAsh"); + hammerAsh = (new LOTRItemHammer(MATERIAL_ASH)).setUnlocalizedName("lotr:hammerAsh").setTextureName("lotr:hammerAsh"); + battleaxeAsh = (new LOTRItemBattleaxe(MATERIAL_ASH)).setUnlocalizedName("lotr:battleaxeAsh").setTextureName("lotr:battleaxeAsh"); + bowAsh = (new LOTRItemBow(MATERIAL_ASH)).setUnlocalizedName("lotr:bowAsh").setTextureName("lotr:bowAsh"); + pikeAsh = (new LOTRItemPike(MATERIAL_ASH)).setUnlocalizedName("lotr:pikeAsh").setTextureName("lotr:pikeAsh"); + spearAsh = (new LOTRItemSpear(MATERIAL_ASH)).setUnlocalizedName("lotr:spearAsh").setTextureName("lotr:spearAsh"); + + ItemRegistration.registerItem(ingotAsh, "ingotAsh", 74); + + ItemRegistration.registerItem(swordAsh, "swordAsh", 75); + ItemRegistration.registerItem(daggerAsh, "daggerAsh", 76); + ItemRegistration.registerItem(hammerAsh, "hammerAsh", 77); + ItemRegistration.registerItem(battleaxeAsh, "battleaxeAsh", 78); + ItemRegistration.registerItem(bowAsh, "bowAsh", 79); + ItemRegistration.registerItem(pikeAsh, "pikeAsh", 80); + ItemRegistration.registerItem(spearAsh, "spearAsh", 81); + } else { + // Log an error or handle the case where the material could not be found + System.err.println("Failed to find MATERIAL_ASH material for armor initialization."); + } + linkLOTRWeapon(swordAsh, "swordAsh"); + linkLOTRWeapon(daggerAsh, "daggerAsh"); + linkLOTRWeapon(hammerAsh, "hammerAsh"); + linkLOTRWeapon(battleaxeAsh, "battleaxeAsh"); + linkLOTRWeapon(bowAsh, "bowAsh"); + linkLOTRWeapon(pikeAsh, "pikeAsh"); + linkLOTRWeapon(spearAsh, "spearAsh"); + // Red Dwarves redDwarfSteel = new Item().setUnlocalizedName("lotr:redDwarfSteel").setTextureName("lotr:redDwarfSteel").setCreativeTab((CreativeTabs) materials); ItemRegistration.registerItem(redDwarfSteel, "redDwarfSteel", 33); @@ -523,14 +590,24 @@ public class CinderLoE { linkLOTRWeapon(crossbowRedDwarf, "crossbowRedDwarf"); // Limwaith + + bonemold = new Item().setUnlocalizedName("lotr:bonemold").setTextureName("lotr:bonemold").setCreativeTab((CreativeTabs) materials); + ItemRegistration.registerItem(bonemold, "bonemold", 83); + MATERIAL_LIMWAITH_BONE = getLOTRMaterialByName("LIMWAITH_BONE"); MATERIAL_LIMWAITH_WOOD = getLOTRMaterialByName("LIMWAITH_WOOD"); + MATERIAL_BONEMOLD = getLOTRMaterialByName("BONEMOLD"); if (MATERIAL_LIMWAITH_WOOD != null && MATERIAL_LIMWAITH_BONE != null) { helmetLimwaith = (new LOTRItemArmor(MATERIAL_LIMWAITH_WOOD, 0)).setUnlocalizedName("lotr:helmetLimwaith").setTextureName("lotr:helmetLimwaith"); bodyLimwaith = (new LOTRItemArmor(MATERIAL_LIMWAITH_WOOD, 1)).setUnlocalizedName("lotr:bodyLimwaith").setTextureName("lotr:bodyLimwaith"); legsLimwaith = (new LOTRItemArmor(MATERIAL_LIMWAITH_WOOD, 2)).setUnlocalizedName("lotr:legsLimwaith").setTextureName("lotr:legsLimwaith"); bootsLimwaith = (new LOTRItemArmor(MATERIAL_LIMWAITH_WOOD, 3)).setUnlocalizedName("lotr:bootsLimwaith").setTextureName("lotr:bootsLimwaith"); + helmetboneLimwaith = (new LOTRItemArmor(MATERIAL_BONEMOLD, 0)).setUnlocalizedName("lotr:helmetboneLimwaith").setTextureName("lotr:helmetboneLimwaith"); + bodyboneLimwaith = (new LOTRItemArmor(MATERIAL_BONEMOLD, 1)).setUnlocalizedName("lotr:bodyboneLimwaith").setTextureName("lotr:bodyboneLimwaith"); + legsboneLimwaith = (new LOTRItemArmor(MATERIAL_BONEMOLD, 2)).setUnlocalizedName("lotr:legsboneLimwaith").setTextureName("lotr:legsboneLimwaith"); + bootsboneLimwaith = (new LOTRItemArmor(MATERIAL_BONEMOLD, 3)).setUnlocalizedName("lotr:bootsboneLimwaith").setTextureName("lotr:bootsboneLimwaith"); + spearLimwaith = (new LOTRItemSpear(MATERIAL_LIMWAITH_BONE)).setUnlocalizedName("lotr:spearLimwaith").setTextureName("lotr:spearLimwaith"); truncheonLimwaith = (new LOTRItemSword(MATERIAL_LIMWAITH_BONE)).setUnlocalizedName("lotr:truncheonLimwaith").setTextureName("lotr:truncheonLimwaith"); battleaxeLimwaith = (new LOTRItemBattleaxe(MATERIAL_LIMWAITH_BONE)).setUnlocalizedName("lotr:battleaxeLimwaith").setTextureName("lotr:battleaxeLimwaith"); @@ -543,6 +620,12 @@ public class CinderLoE { ItemRegistration.registerItem(bodyLimwaith, "bodyLimwaith", 48); ItemRegistration.registerItem(legsLimwaith, "legsLimwaith", 49); ItemRegistration.registerItem(bootsLimwaith, "bootsLimwaith", 50); + + ItemRegistration.registerItem(helmetboneLimwaith, "helmetboneLimwaith", 70); + ItemRegistration.registerItem(bodyboneLimwaith, "bodyboneLimwaith", 71); + ItemRegistration.registerItem(legsboneLimwaith, "legsboneLimwaith", 72); + ItemRegistration.registerItem(bootsboneLimwaith, "bootsboneLimwaith", 73); + ItemRegistration.registerItem(spearLimwaith, "spearLimwaith", 51); ItemRegistration.registerItem(tridentLimwaith, "tridentLimwaith", 52); ItemRegistration.registerItem(truncheonLimwaith, "truncheonLimwaith", 53); @@ -568,7 +651,7 @@ public class CinderLoE { bodyBree = (new LOTRItemArmor(MATERIAL_BREE, 1)).setUnlocalizedName("lotr:bodyBree").setTextureName("lotr:bodyBree"); legsBree = (new LOTRItemArmor(MATERIAL_BREE, 2)).setUnlocalizedName("lotr:legsBree").setTextureName("lotr:legsBree"); bootsBree = (new LOTRItemArmor(MATERIAL_BREE, 3)).setUnlocalizedName("lotr:bootsBree").setTextureName("lotr:bootsBree"); - swordBree = (new LOTRItemSpear(MATERIAL_BREE)).setUnlocalizedName("lotr:swordBree").setTextureName("lotr:swordBree"); + swordBree = (new LOTRItemSword(MATERIAL_BREE)).setUnlocalizedName("lotr:swordBree").setTextureName("lotr:swordBree"); ItemRegistration.registerItem(helmetBree, "helmetBree", 58); ItemRegistration.registerItem(bodyBree, "bodyBree", 59); @@ -633,7 +716,11 @@ public class CinderLoE { RenderingRegistry.registerEntityRenderingHandler(RedDwarfCommander.class, new LOTRRenderDwarf()); RenderingRegistry.registerEntityRenderingHandler(RedDwarfSmith.class, new LOTRRenderDwarf()); + RenderingRegistry.registerEntityRenderingHandler(Limwaith.class, new RenderLimwaith()); + RenderingRegistry.registerEntityRenderingHandler(LimwaithFishmonger.class, new RenderLimwaith()); + RenderingRegistry.registerEntityRenderingHandler(LimwaithShaman.class, new RenderLimwaithShaman()); RenderingRegistry.registerEntityRenderingHandler(LimwaithWarrior.class, new RenderLimwaith()); + RenderingRegistry.registerEntityRenderingHandler(LimwaithBoneWarrior.class, new RenderLimwaith()); RenderingRegistry.registerEntityRenderingHandler(LimwaithBlowgunner.class, new RenderLimwaith()); RenderingRegistry.registerEntityRenderingHandler(LimwaithBannerBearer.class, new RenderLimwaith()); RenderingRegistry.registerEntityRenderingHandler(LimwaithChieftain.class, new RenderLimwaith()); @@ -683,8 +770,10 @@ public class CinderLoE { }); LOTRSpawnList LIMWAITH = constructor.newInstance((Object) new LOTRSpawnEntry[]{ - new LOTRSpawnEntry(LimwaithWarrior.class, 100, 4, 4), - new LOTRSpawnEntry(LimwaithBlowgunner.class, 15, 1, 3) + new LOTRSpawnEntry(Limwaith.class, 100, 4, 6), + new LOTRSpawnEntry(LimwaithWarrior.class, 20, 4, 6), + new LOTRSpawnEntry(LimwaithBlowgunner.class, 15, 1, 3), + new LOTRSpawnEntry(LimwaithBoneWarrior.class, 10, 1, 3) }); @@ -766,7 +855,11 @@ public class CinderLoE { CinderCore.registerItemFallback(Block.getIdFromBlock(silverChain), Block.getIdFromBlock(LOTRMod.orcChain), "cinder_loe", "1.1"); CinderCore.registerItemFallback(Block.getIdFromBlock(goldChain), Block.getIdFromBlock(LOTRMod.orcChain), "cinder_loe", "1.1"); CinderCore.registerItemFallback(Block.getIdFromBlock(ironChain), Block.getIdFromBlock(LOTRMod.orcChain), "cinder_loe", "1.1"); + CinderCore.registerItemFallback(Block.getIdFromBlock(bronzeChain), Block.getIdFromBlock(LOTRMod.orcChain), "cinder_loe", "1.2"); CinderCore.registerItemFallback(Block.getIdFromBlock(mistBlock), Block.getIdFromBlock(LOTRMod.utumnoPortal), "cinder_loe", "1.1"); + CinderCore.registerItemFallback(Block.getIdFromBlock(cutDrystone), Block.getIdFromBlock(LOTRMod.cobblebrick), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Block.getIdFromBlock(cobbleDrystone), Block.getIdFromBlock(LOTRMod.cobblebrick), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Block.getIdFromBlock(reeflessCoral), Block.getIdFromBlock(LOTRMod.coralReef), "cinder_loe", "1.2"); CinderCore.registerItemFallback(Item.getIdFromItem(redDwarfSteel), Item.getIdFromItem(LOTRMod.dwarfSteel), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Item.getIdFromItem(spearRedDwarf), Item.getIdFromItem(LOTRMod.spearDwarven), "cinder_loe", "1.0"); @@ -792,6 +885,15 @@ public class CinderLoE { CinderCore.registerItemFallback(Item.getIdFromItem(spearsolidgold), Item.getIdFromItem(LOTRMod.spearMithril), "cinder_loe", "1.1"); CinderCore.registerItemFallback(Item.getIdFromItem(whip), Item.getIdFromItem(LOTRMod.balrogWhip), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(ingotAsh), Item.getIdFromItem(LOTRMod.galvorn), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(daggerAsh), Item.getIdFromItem(LOTRMod.daggerBlackUruk), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(swordAsh), Item.getIdFromItem(LOTRMod.scimitarBlackUruk), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(hammerAsh), Item.getIdFromItem(LOTRMod.hammerBlackUruk), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(battleaxeAsh), Item.getIdFromItem(LOTRMod.battleaxeBlackUruk), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(pikeAsh), Item.getIdFromItem(LOTRMod.pikeDolGuldur), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(bowAsh), Item.getIdFromItem(LOTRMod.blackUrukBow), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(spearAsh), Item.getIdFromItem(LOTRMod.spearBlackUruk), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(fangornBearSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Item.getIdFromItem(fangornAurochSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Item.getIdFromItem(fangornWildBoarSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.0"); @@ -801,7 +903,13 @@ public class CinderLoE { CinderCore.registerItemFallback(Item.getIdFromItem(redDwarfCommanderSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Item.getIdFromItem(redDwarfBannerBearerSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Item.getIdFromItem(redDwarfSmithSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.2.1"); + + CinderCore.registerItemFallback(Item.getIdFromItem(bonemold), Item.getIdFromItem(LOTRMod.leekSoup), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(limwaithSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(limwaithFishmongerSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(limwaithShamanSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.2"); CinderCore.registerItemFallback(Item.getIdFromItem(limwaithWarriorSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(limwaithBoneWarriorSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.2"); CinderCore.registerItemFallback(Item.getIdFromItem(limwaithBlowgunnerSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Item.getIdFromItem(limwaithBannerBearerSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Item.getIdFromItem(limwaithChieftainSpawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.0"); @@ -824,6 +932,10 @@ public class CinderLoE { CinderCore.registerItemFallback(Item.getIdFromItem(bodyLimwaith), Item.getIdFromItem(LOTRMod.bodyMoredain), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Item.getIdFromItem(legsLimwaith), Item.getIdFromItem(LOTRMod.legsMoredain), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Item.getIdFromItem(bootsLimwaith), Item.getIdFromItem(LOTRMod.bootsMoredain), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(helmetboneLimwaith), Item.getIdFromItem(LOTRMod.helmetBone), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(bodyboneLimwaith), Item.getIdFromItem(LOTRMod.bodyBone), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(legsboneLimwaith), Item.getIdFromItem(LOTRMod.legsBone), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(bootsboneLimwaith), Item.getIdFromItem(LOTRMod.bootsBone), "cinder_loe", "1.2"); CinderCore.registerItemFallback(Item.getIdFromItem(spearLimwaith), Item.getIdFromItem(LOTRMod.spearMoredain), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Item.getIdFromItem(tridentLimwaith), Item.getIdFromItem(LOTRMod.dunlendingTrident), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Item.getIdFromItem(truncheonLimwaith), Item.getIdFromItem(LOTRMod.swordMoredain), "cinder_loe", "1.0"); @@ -856,7 +968,11 @@ public class CinderLoE { CinderCore.registerEntityFallback(RedDwarfCommander.class, LOTREntityDwarfCommander.class, "cinder_loe", "1.0"); CinderCore.registerEntityFallback(RedDwarfSmith.class, LOTREntityDwarfSmith.class, "cinder_loe", "1.2.1"); + CinderCore.registerEntityFallback(Limwaith.class, LOTREntityMoredain.class, "cinder_loe", "1.2"); + CinderCore.registerEntityFallback(LimwaithFishmonger.class, LOTREntityMoredain.class, "cinder_loe", "1.2"); + CinderCore.registerEntityFallback(LimwaithShaman.class, LOTREntityTauredainShaman.class, "cinder_loe", "1.2"); CinderCore.registerEntityFallback(LimwaithWarrior.class, LOTREntityMoredain.class, "cinder_loe", "1.0"); + CinderCore.registerEntityFallback(LimwaithBoneWarrior.class, LOTREntityMoredain.class, "cinder_loe", "1.2"); CinderCore.registerEntityFallback(LimwaithBlowgunner.class, LOTREntityMoredain.class, "cinder_loe", "1.0"); CinderCore.registerEntityFallback(LimwaithBannerBearer.class, LOTREntityMoredainBannerBearer.class, "cinder_loe", "1.0"); CinderCore.registerEntityFallback(LimwaithChieftain.class, LOTREntityMoredainChieftain.class, "cinder_loe", "1.0"); @@ -893,6 +1009,7 @@ public class CinderLoE { LIMWAITH_COMMANDER = new LOTRUnitTradeEntries(200.0F, new LOTRUnitTradeEntry[]{ new LOTRUnitTradeEntry(LimwaithWarrior.class, 30, 50.0F), (new LOTRUnitTradeEntry(LimwaithBlowgunner.class, 50, 100.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(LimwaithBoneWarrior.class, 70, 200.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), (new LOTRUnitTradeEntry(LimwaithBannerBearer.class, 50, 200.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION) }); ARNOR_CAPTAIN = new LOTRUnitTradeEntries(200.0F, new LOTRUnitTradeEntry[]{ diff --git a/src/main/java/com/zivilon/cinder_loe/Materials.java b/src/main/java/com/zivilon/cinder_loe/Materials.java index 3aa2963..feeb5d7 100644 --- a/src/main/java/com/zivilon/cinder_loe/Materials.java +++ b/src/main/java/com/zivilon/cinder_loe/Materials.java @@ -16,10 +16,12 @@ public class Materials { modifyMaterial("RED_DWARF", 700, 3.0F, 0.7F, 3, 7.0F, 10, CinderLoE.redDwarfSteel); modifyMaterial("WIZARD", 1000, 3.0F, 0.7F, 3, 7.0F, 10, null); modifyMaterial("LIMWAITH_BONE", 250, 2.0F, 0.7F, 2, 6.0F, 10, null); + modifyMaterial("BONEMOLD", 350, 2.0F, 0.6F, 2, 6.0F, 10, CinderLoE.bonemold); modifyMaterial("LIMWAITH_WOOD", 230, 1.5F, 0.5F, 2, 5.0F, 10, null); modifyMaterial("EVENT", 2400, 5.0F, 0.0F, 0, 9.0F, 10, null); modifyMaterial("BREE", 350, 2.5F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); modifyMaterial("BATTLENUN", 300, 3F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); + modifyMaterial("ASH", 2000, 4.25F, 0.6F, 2, 7.0F, 10, CinderLoE.ingotAsh); } 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/bronzeChain.java b/src/main/java/com/zivilon/cinder_loe/blocks/bronzeChain.java new file mode 100644 index 0000000..d8fd0a2 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/blocks/bronzeChain.java @@ -0,0 +1,120 @@ +package com.zivilon.cinder_loe.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import lotr.common.block.LOTRBlockChandelier; +import lotr.common.block.LOTRBlockOrcChain; +import net.minecraft.block.*; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class bronzeChain extends LOTRBlockOrcChain { + + public IIcon icon; + @SideOnly(value= Side.CLIENT) + private IIcon iconMiddle; + @SideOnly(value=Side.CLIENT) + private IIcon iconTop; + @SideOnly(value=Side.CLIENT) + private IIcon iconBottom; + @SideOnly(value=Side.CLIENT) + private IIcon iconSingle; + + public bronzeChain() { + this.setHardness(1.0f); + this.setStepSound(Block.soundTypeMetal); + this.textureName = "lotr:bronzeChain"; + setBlockName("lotr:bronzeChain"); + setBlockTextureName("lotr:bronzeChain"); + float f = 0.2f; + this.setBlockBounds(0.5f - f, 0.0f, 0.5f - f, 0.5f + f, 1.0f, 0.5f + f); + } + + @SideOnly(value=Side.CLIENT) + public void registerBlockIcons(IIconRegister iconregister) { + this.iconMiddle = iconregister.registerIcon(this.getTextureName() + "_mid"); + this.iconTop = iconregister.registerIcon(this.getTextureName() + "_top"); + this.iconBottom = iconregister.registerIcon(this.getTextureName() + "_bottom"); + this.iconSingle = iconregister.registerIcon(this.getTextureName() + "_single"); + this.blockIcon = iconregister.registerIcon(this.getTextureName()); + } + + @SideOnly(value=Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int i, int j, int k, int side) { + boolean chainBelow; + Block above = world.getBlock(i, j + 1, k); + Block below = world.getBlock(i, j - 1, k); + boolean chainAbove = above instanceof bronzeChain; + boolean bl = chainBelow = below instanceof bronzeChain || below instanceof LOTRBlockChandelier; + if (chainAbove && chainBelow) { + return this.iconMiddle; + } + if (chainAbove) { + return this.iconBottom; + } + if (chainBelow) { + return this.iconTop; + } + return this.iconSingle; + } + + @SideOnly(value=Side.CLIENT) + public IIcon getIcon(int i, int j) { + return this.iconMiddle; + } + + @SideOnly(value=Side.CLIENT) + public String getItemIconName() { + return this.getTextureName(); + } + + public boolean canPlaceBlockAt(World world, int i, int j, int k) { + Block block = world.getBlock(i, j + 1, k); + int meta = world.getBlockMetadata(i, j + 1, k); + if (block instanceof bronzeChain) { + return true; + } + if (block instanceof BlockFence || block instanceof BlockWall) { + return true; + } + if (block instanceof BlockSlab && !block.isOpaqueCube() && (meta & 8) == 0) { + return true; + } + if (block instanceof BlockStairs && (meta & 4) == 0) { + return true; + } + return world.getBlock(i, j + 1, k).isSideSolid((IBlockAccess)world, i, j + 1, k, ForgeDirection.DOWN); + } + + public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer entityplayer, int side, float f, float f1, float f2) { + ItemStack itemstack = entityplayer.getHeldItem(); + if (itemstack != null && itemstack.getItem() == Item.getItemFromBlock((Block)this)) { + Block block; + int j1; + for (j1 = j; j1 >= 0 && j1 < world.getHeight() && (block = world.getBlock(i, j1, k)) == this; --j1) { + } + if (j1 >= 0 && j1 < world.getHeight()) { + block = world.getBlock(i, j1, k); + if (this.canPlaceBlockOnSide(world, i, j1, k, side) && block.isReplaceable((IBlockAccess)world, i, j1, k) && !block.getMaterial().isLiquid()) { + int thisMeta = world.getBlockMetadata(i, j, k); + world.setBlock(i, j1, k, (Block)this, thisMeta, 3); + world.playSoundEffect((double)((float)i + 0.5f), (double)((float)j1 + 0.5f), (double)((float)k + 0.5f), this.stepSound.func_150496_b(), (this.stepSound.getVolume() + 1.0f) / 2.0f, this.stepSound.getPitch() * 0.8f); + if (!entityplayer.capabilities.isCreativeMode) { + --itemstack.stackSize; + } + if (itemstack.stackSize <= 0) { + entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, null); + } + return true; + } + } + } + return false; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/blocks/cobbleDrystone.java b/src/main/java/com/zivilon/cinder_loe/blocks/cobbleDrystone.java new file mode 100644 index 0000000..0740054 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/blocks/cobbleDrystone.java @@ -0,0 +1,28 @@ +package com.zivilon.cinder_loe.blocks; + +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.creativetab.CreativeTabs; + +public class cobbleDrystone extends Block { + + public cobbleDrystone() { + super(Material.rock); // Choose the appropriate material + // Set other properties like hardness, resistance, name, etc. + setHardness(2.0F); + setResistance(5.0F); + setBlockTextureName(Utilities.toSnakeCase("lotr:cobble_drystone")); + setBlockName("lotr:cobbleDrystone"); + setCreativeTab((CreativeTabs)Utilities.reflected_tab_block); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon("lotr:cobbleDrystone"); + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/blocks/cutDrystone.java b/src/main/java/com/zivilon/cinder_loe/blocks/cutDrystone.java new file mode 100644 index 0000000..57d141a --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/blocks/cutDrystone.java @@ -0,0 +1,28 @@ +package com.zivilon.cinder_loe.blocks; + +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.creativetab.CreativeTabs; + +public class cutDrystone extends Block { + + public cutDrystone() { + super(Material.rock); // Choose the appropriate material + // Set other properties like hardness, resistance, name, etc. + setHardness(2.0F); + setResistance(5.0F); + setBlockTextureName(Utilities.toSnakeCase("lotr:cut_drystone")); + setBlockName("lotr:cutDrystone"); + setCreativeTab((CreativeTabs)Utilities.reflected_tab_block); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon("lotr:cutDrystone"); + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/blocks/reeflessCoral.java b/src/main/java/com/zivilon/cinder_loe/blocks/reeflessCoral.java new file mode 100644 index 0000000..76c97f8 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/blocks/reeflessCoral.java @@ -0,0 +1,28 @@ +package com.zivilon.cinder_loe.blocks; + +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.creativetab.CreativeTabs; + +public class reeflessCoral extends Block { + + public reeflessCoral() { + super(Material.rock); // Choose the appropriate material + // Set other properties like hardness, resistance, name, etc. + setHardness(2.0F); + setResistance(5.0F); + setBlockTextureName(Utilities.toSnakeCase("lotr:reeflessCoral")); + setBlockName("lotr:reeflessCoral"); + setCreativeTab((CreativeTabs)Utilities.reflected_tab_block); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon("lotr:reeflessCoral"); + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/RenderLimwaithShaman.java b/src/main/java/com/zivilon/cinder_loe/client/render/RenderLimwaithShaman.java new file mode 100644 index 0000000..8968d03 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/render/RenderLimwaithShaman.java @@ -0,0 +1,32 @@ +package com.zivilon.cinder_loe.client.render; + +import com.zivilon.cinder_loe.entity.Limwaith; +import lotr.client.model.LOTRModelHuman; +import lotr.client.render.entity.LOTRRandomSkins; +import lotr.client.render.entity.LOTRRenderBiped; +import lotr.common.entity.LOTRRandomSkinEntity; +import lotr.common.entity.npc.LOTREntityNPC; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.ResourceLocation; + +public class RenderLimwaithShaman extends RenderLimwaith { + private static LOTRRandomSkins outfits; + + public RenderLimwaithShaman() { + outfits = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/limwaith/shaman_outfit"); + } + + @Override + public int shouldRenderPass(EntityLiving entity, int pass, float f) { + Limwaith shaman = (Limwaith) entity; + if (pass == 1 && shaman.getEquipmentInSlot(3) == null) { + this.setRenderPassModel((ModelBase)this.outfitModel); + this.bindTexture(outfits.getRandomSkin(shaman)); + return 1; + } + return super.shouldRenderPass((EntityLiving)shaman, pass, f); + } +} 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 c81c61e..9552328 100644 --- a/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java +++ b/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java @@ -22,10 +22,12 @@ public class LOTRMaterialTransformer implements IClassTransformer { addMaterial("RED_DWARF", classNode); addMaterial("WIZARD", classNode); addMaterial("LIMWAITH_BONE", classNode); + addMaterial("BONEMOLD", classNode); addMaterial("LIMWAITH_WOOD", classNode); addMaterial("EVENT", classNode); addMaterial("BREE", classNode); addMaterial("BATTLENUN", classNode); + addMaterial("ASH", classNode); // Convert your ClassNode back to byte array with ClassWriter ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); 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 9d9ed5d..e8c43ef 100644 --- a/src/main/java/com/zivilon/cinder_loe/coremod/LOTRWeaponLinker.java +++ b/src/main/java/com/zivilon/cinder_loe/coremod/LOTRWeaponLinker.java @@ -24,7 +24,8 @@ public class LOTRWeaponLinker implements IClassTransformer { "spearLimwaith", "tridentLimwaith", "daggerLimwaith", "daggerLimwaithPoisoned", "truncheonLimwaith", "battleaxeLimwaith", "blowgunLimwaith", "frostblade", "spearsolidgold", "whip", "swordBree", - "maceArnor"); + "maceArnor", + "daggerAsh","bowAsh","hammerAsh","pikeAsh","battleaxeAsh","swordAsh","spearAsh"); } return basicClass; } diff --git a/src/main/java/com/zivilon/cinder_loe/entity/BattleNun.java b/src/main/java/com/zivilon/cinder_loe/entity/BattleNun.java index 7537970..6b767bd 100644 --- a/src/main/java/com/zivilon/cinder_loe/entity/BattleNun.java +++ b/src/main/java/com/zivilon/cinder_loe/entity/BattleNun.java @@ -44,6 +44,6 @@ public class BattleNun extends ArnorSoldier { @Override public LOTRMiniQuest createMiniQuest() { - return LOTRMiniQuestFactory.RANGER_NORTH_ARNOR_RELIC.createQuest(this); + return LOTRMiniQuestFactory.RANGER_NORTH.createQuest(this); } } diff --git a/src/main/java/com/zivilon/cinder_loe/entity/BreeOutrider.java b/src/main/java/com/zivilon/cinder_loe/entity/BreeOutrider.java index ac8c0be..7a0eaa0 100644 --- a/src/main/java/com/zivilon/cinder_loe/entity/BreeOutrider.java +++ b/src/main/java/com/zivilon/cinder_loe/entity/BreeOutrider.java @@ -25,26 +25,19 @@ import net.minecraft.world.World; public class BreeOutrider extends BreeCrossbowman { protected EntityAIBase rangedAttackAI = this.createBreeRangedAttackAI(); - protected EntityAIBase meleeAttackAI = this.createBreeMeleeAttackAI(); + protected EntityAIBase meleeAttackAI; public BreeOutrider(World world) { super(world); + this.addTargetTasks(true); this.npcCape = LOTRCapes.RANGER; this.spawnRidingHorse = true; this.npcShield = LOTRShields.ALIGNMENT_BREE; } - - @Override - protected int addBreeAttackAI(int prio) { - ((EntityLiving)this).tasks.addTask(prio, (EntityAIBase)new LOTREntityAIRangedAttack(this, 1.25, 30, 50, 16.0f)); - return prio; - } - protected EntityAIBase createBreeRangedAttackAI() { return new LOTREntityAIRangedAttack(this, 1.25, 30, 40, 16.0f); } - - protected EntityAIBase createBreeMeleeAttackAI() { - return new LOTREntityAIAttackOnCollide(this, 1.45D, false); + protected EntityAIBase addBreeAttackAI() { + return new LOTREntityAIAttackOnCollide(this, 1.45D, true); } @Override diff --git a/src/main/java/com/zivilon/cinder_loe/entity/LimwaithBoneWarrior.java b/src/main/java/com/zivilon/cinder_loe/entity/LimwaithBoneWarrior.java new file mode 100644 index 0000000..7d00cfb --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/LimwaithBoneWarrior.java @@ -0,0 +1,46 @@ +package com.zivilon.cinder_loe.entity; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRShields; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class LimwaithBoneWarrior extends Limwaith { + public LimwaithBoneWarrior(World world) { + super(world); + this.npcShield = LOTRShields.ALIGNMENT_MOREDAIN; + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = rand.nextInt(6); + if (i == 0) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.truncheonLimwaith)); + } else if (i == 1 || i == 2) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.tridentLimwaith)); + } else if (i == 3 || i == 4) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.spearLimwaith)); + } else { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.battleaxeLimwaith)); + } + + if (rand.nextInt(6) == 0) { + this.npcItemsInv.setSpearBackup(this.npcItemsInv.getMeleeWeapon()); + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.spearLimwaith)); + } + + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + setCurrentItemOrArmor(1, new ItemStack(CinderLoE.bootsboneLimwaith)); + setCurrentItemOrArmor(2, new ItemStack(CinderLoE.legsboneLimwaith)); + setCurrentItemOrArmor(3, new ItemStack(CinderLoE.bodyboneLimwaith)); + if (rand.nextInt(10) != 0) + setCurrentItemOrArmor(4, new ItemStack(CinderLoE.helmetboneLimwaith)); + return data; + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.limwaithBoneWarriorSpawnEgg, 1); + } +} \ No newline at end of file diff --git a/src/main/java/com/zivilon/cinder_loe/entity/LimwaithChieftain.java b/src/main/java/com/zivilon/cinder_loe/entity/LimwaithChieftain.java index 02c055e..b3d0823 100644 --- a/src/main/java/com/zivilon/cinder_loe/entity/LimwaithChieftain.java +++ b/src/main/java/com/zivilon/cinder_loe/entity/LimwaithChieftain.java @@ -1,5 +1,7 @@ package com.zivilon.cinder_loe.entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; import net.minecraft.world.World; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -13,7 +15,7 @@ import lotr.common.world.spawning.LOTRInvasions; import com.zivilon.cinder_loe.entity.LimwaithWarrior; import com.zivilon.cinder_loe.CinderLoE; -public class LimwaithChieftain extends LimwaithWarrior implements LOTRUnitTradeable { +public class LimwaithChieftain extends LimwaithBoneWarrior implements LOTRUnitTradeable { public LimwaithChieftain(World world) { super(world); addTargetTasks(false); @@ -33,7 +35,18 @@ public class LimwaithChieftain extends LimwaithWarrior implements LOTRUnitTradea public void onUnitTrade(EntityPlayer entityplayer) { } - + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.truncheonLimwaith)); + + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + setCurrentItemOrArmor(1, new ItemStack(CinderLoE.bootsboneLimwaith)); + setCurrentItemOrArmor(2, new ItemStack(CinderLoE.legsboneLimwaith)); + setCurrentItemOrArmor(3, new ItemStack(CinderLoE.bodyboneLimwaith)); + setCurrentItemOrArmor(4, null); + return data; + } public boolean canTradeWith(EntityPlayer entityplayer) { return (LOTRLevelData.getData(entityplayer).getAlignment(getFaction()) >= 150.0F && isFriendlyAndAligned(entityplayer)); } @@ -41,4 +54,9 @@ public class LimwaithChieftain extends LimwaithWarrior implements LOTRUnitTradea public ItemStack getPickedResult(MovingObjectPosition target) { return new ItemStack(CinderLoE.limwaithChieftainSpawnEgg, 1); } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + + } } diff --git a/src/main/java/com/zivilon/cinder_loe/entity/LimwaithFishmonger.java b/src/main/java/com/zivilon/cinder_loe/entity/LimwaithFishmonger.java new file mode 100644 index 0000000..e1b61d8 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/LimwaithFishmonger.java @@ -0,0 +1,69 @@ +package com.zivilon.cinder_loe.entity; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTREntityDwarf; +import lotr.common.entity.npc.LOTRTradeEntries; +import lotr.common.entity.npc.LOTRTradeEntries.TradeType; +import lotr.common.entity.npc.LOTRTradeEntry; +import lotr.common.entity.npc.LOTRTradeable; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import static lotr.common.entity.npc.LOTRTradeEntries.HARAD_FISHMONGER_BUY; +import static lotr.common.entity.npc.LOTRTradeEntries.HARAD_FISHMONGER_SELL; + +public class LimwaithFishmonger extends Limwaith implements LOTRTradeable { + + public LimwaithFishmonger(World world) { + super(world); + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.tridentLimwaith)); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + return data; + } + + public LOTRTradeEntries getBuyPool() { + return HARAD_FISHMONGER_BUY; + } + + public LOTRTradeEntries getSellPool() { + return HARAD_FISHMONGER_SELL; + } + + public float getAlignmentBonus() { + return 2.0F; + } + + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + dropItem(getLimwaithTraderDrop(), 1 + rand.nextInt(3) + rand.nextInt(i + 1)); + } + protected Item getLimwaithTraderDrop() { + return LOTRMod.pearl; + } + + public boolean canTradeWith(EntityPlayer entityplayer) { + return (LOTRLevelData.getData(entityplayer).getAlignment(getFaction()) >= 100.0F && isFriendlyAndAligned(entityplayer)); + } + + @Override + public void onPlayerTrade(EntityPlayer entityplayer, TradeType type, ItemStack itemstack) { + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } + + +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/LimwaithShaman.java b/src/main/java/com/zivilon/cinder_loe/entity/LimwaithShaman.java new file mode 100644 index 0000000..d5b0b96 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/LimwaithShaman.java @@ -0,0 +1,113 @@ +package com.zivilon.cinder_loe.entity; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRFoods; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTREntityDwarf; +import lotr.common.entity.npc.LOTRTradeEntries; +import lotr.common.entity.npc.LOTRTradeEntries.TradeType; +import lotr.common.entity.npc.LOTRTradeEntry; +import lotr.common.entity.npc.LOTRTradeable; +import lotr.common.item.LOTRItemMug; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class LimwaithShaman extends Limwaith implements LOTRTradeable.Smith { + public static LOTRTradeEntries LIMWAITH_SHAMAN_BUY; + public static LOTRTradeEntries LIMWAITH_SHAMAN_SELL; + + public LimwaithShaman(World world) { + super(world); + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.daggerLimwaithPoisoned)); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + return data; + } + + public LOTRTradeEntries getBuyPool() { + return LIMWAITH_SHAMAN_BUY; + } + + public LOTRTradeEntries getSellPool() { + return LIMWAITH_SHAMAN_SELL; + } + + public float getAlignmentBonus() { + return 2.0F; + } + + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + dropItem(getLimwaithTraderDrop(), 1 + rand.nextInt(2) + rand.nextInt(i + 1)); + } + + public boolean canTradeWith(EntityPlayer entityplayer) { + return (LOTRLevelData.getData(entityplayer).getAlignment(getFaction()) >= 100.0F && isFriendlyAndAligned(entityplayer)); + } + + + static { + LIMWAITH_SHAMAN_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(CinderLoE.daggerLimwaith), 12), + new LOTRTradeEntry(new ItemStack(CinderLoE.daggerLimwaithPoisoned), 20), + new LOTRTradeEntry(new ItemStack(CinderLoE.blowgunLimwaith), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.tauredainDart, 4), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.tauredainDartPoisoned, 4), 10), + new LOTRTradeEntry(new ItemStack(CinderLoE.bonemold, 2), 4), + new LOTRTradeEntry(new ItemStack(Items.bone, 1), 1), + new LOTRTradeEntry(new ItemStack(LOTRMod.bottlePoison), 10)); + + LIMWAITH_SHAMAN_SELL = new LOTRTradeEntries(TradeType.SELL, + new LOTRTradeEntry(new ItemStack(Items.gold_nugget), 2), + new LOTRTradeEntry(new ItemStack(LOTRMod.emerald), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.amber), 10), + new LOTRTradeEntry(new ItemStack(Items.glass_bottle), 2), + new LOTRTradeEntry(new ItemStack(LOTRMod.mug), 1), + new LOTRTradeEntry(new ItemStack(Items.bone), 1), + new LOTRTradeEntry(new ItemStack(LOTRMod.rhinoHorn), 5), + new LOTRTradeEntry(new ItemStack(Items.dye, 3, 15), 1), + new LOTRTradeEntry(new ItemStack(LOTRMod.gemsbokHorn), 4), + new LOTRTradeEntry(new ItemStack(LOTRMod.doubleFlower, 2, 2), 1), + new LOTRTradeEntry(new ItemStack(LOTRMod.doubleFlower, 2, 3), 1), + new LOTRTradeEntry(new ItemStack(Blocks.red_mushroom, 1, 0), 2), + new LOTRTradeEntry(new ItemStack(Blocks.brown_mushroom, 1, 0), 2), + new LOTRTradeEntry(new ItemStack(CinderLoE.bonemold, 2), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.mango), 1), + new LOTRTradeEntry(new ItemStack(LOTRMod.banana), 1), + new LOTRTradeEntry(new ItemStack(LOTRMod.corn, 2), 1)); + } + + @Override + public void onPlayerTrade(EntityPlayer entityplayer, TradeType type, ItemStack itemstack) { + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } + + protected Item getLimwaithTraderDrop() { + return LOTRMod.pearl; + } + + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + if (this.canTradeWith(entityplayer)) { + return "limwaith/shaman/friendly"; + } + return "limwaith/shaman/neutral"; + } + return "limwaith/shaman/hostile"; + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/recipes.java b/src/main/java/com/zivilon/cinder_loe/recipes.java index 5d7a227..09ccea0 100644 --- a/src/main/java/com/zivilon/cinder_loe/recipes.java +++ b/src/main/java/com/zivilon/cinder_loe/recipes.java @@ -33,12 +33,22 @@ public class recipes { Character.valueOf('X'), LOTRMod.fur})); GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.fishBarrel), new Object[] { "XXX", "XXX", "XXX", Character.valueOf('X'), Items.fish})); - GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.silverChain, 6), new Object[] { " X ", " X ", " X ", + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.silverChain, 8), new Object[] { "X", "X", "X", Character.valueOf('X'), LOTRMod.silver})); - GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.goldChain, 6), new Object[] { " X ", " X ", " X ", + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.goldChain, 8), new Object[] { "X", "X", "X", Character.valueOf('X'), Items.gold_ingot})); - GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.ironChain, 6), new Object[] { " X ", " X ", " X ", + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.ironChain, 8), new Object[] { "X", "X", "X", Character.valueOf('X'), Items.iron_ingot})); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.bronzeChain, 8), new Object[] { "X", "X", "X", + Character.valueOf('X'), LOTRMod.bronze})); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.cobbleDrystone, 4), new Object[] { "XX", "XX", + Character.valueOf('X'), LOTRMod.cobblebrick})); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.cutDrystone, 4), new Object[] { "XX", "XX", + Character.valueOf('X'), CinderLoE.cobbleDrystone})); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(LOTRMod.cobblebrick, 4), new Object[] { "XX", "XX", + Character.valueOf('X'), CinderLoE.cutDrystone})); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.reeflessCoral, 1), new Object[] { "X", + Character.valueOf('X'), LOTRMod.coralReef})); } public static void registerRedDwarvenRecipes() { LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.helmetRedDwarf), new Object[] { "XXX", "X X", 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 9819b6f..db2a2bc 100644 --- a/src/main/resources/assets/cinder_loe/lang/en_US.lang +++ b/src/main/resources/assets/cinder_loe/lang/en_US.lang @@ -2,6 +2,7 @@ tile.lotr:cinderBlock.name=Cinder Block tile.lotr:ironChain.name=Iron Chain tile.lotr:silverChain.name=Silver Chain tile.lotr:goldChain.name=Gold Chain +tile.lotr:bronzeChain.name=Bronze Chain tile.lotr:blockRedDwarfSteel.name=Red Dwarven Steel Block tile.lotr:chandelierRedDwarf.name=Red Dwarven Chandelier tile.lotr:barsRedDwarf.name=Red Dwarven Bars @@ -12,6 +13,9 @@ tile.lotr:dwarvenBrickRuned.name=Runed Dwarven Brick tile.lotr:ivoryBlock.name=Ivory Block tile.lotr:mistBlock.name=Mist tile.lotr:fishbarrel.name=Barrel of Fish +tile.lotr:reeflessCoral.name=Cut Coral +tile.lotr:cutDrystone.name=Cut Drystone +tile.lotr:cobbleDrystone.name=Cobbled Drystone item.lotr:frostblade.name=Frostblade item.lotr:whip.name=Whip @@ -30,14 +34,21 @@ item.lotr:daggerRedDwarf.name=Red Dwarven Dagger item.lotr:daggerRedDwarfPoisoned.name=Poisoned Red Dwarven Dagger item.lotr:crossbowRedDwarf.name=Red Dwarven Crossbow item.lotr:boarArmorRedDwarf.name=Red Dwarven Boar Armor + item.lotr:radagastStaff.name=Staff of Radagast the Brown item.lotr:pallandoStaff.name=Staff of Pallando the Blue item.lotr:alatarStaff.name=Staff of Alatar the Blue item.lotr:sarumanStaff.name=Staff of Saruman of Many Colors + +item.lotr:bonemold.name=Bonemold item.lotr:helmetLimwaith.name=Limwaith Helmet item.lotr:bodyLimwaith.name=Limwaith Chestplate item.lotr:legsLimwaith.name=Limwaith Leggings item.lotr:bootsLimwaith.name=Limwaith Boots +item.lotr:helmetboneLimwaith.name=Bonemold Helmet +item.lotr:bodyboneLimwaith.name=Bonemold Chestplate +item.lotr:legsboneLimwaith.name=Bonemold Leggings +item.lotr:bootsboneLimwaith.name=Bonemold Boots item.lotr:spearLimwaith.name=Limwaith Spear item.lotr:tridentLimwaith.name=Limwaith Trident item.lotr:battleaxeLimwaith.name=Limwaith Battleaxe @@ -57,6 +68,15 @@ item.lotr:legsArnorBanner.name=Light Arnorian Leggings item.lotr:bootsArnorBanner.name=Light Arnorian Boots item.lotr:maceArnor.name=Arnorian Mace +item.lotr:ingotAsh.name=Ashen Ingot +item.lotr:swordAsh.name=Ash-Forged Sword +item.lotr:daggerAsh.name=Ash-Forged Dagger +item.lotr:hammerAsh.name=Ash-Forged Mace +item.lotr:battleaxeAsh.name=Ash-Forged Axe +item.lotr:bowAsh.name=Ash-Forged Bow +item.lotr:pikeAsh.name=Ash-Forged Pike +item.lotr:spearAsh.name=Ash-Forged Spear + item.spawn_egg_fangornauroch.name=Spawn Fangorn Auroch item.spawn_egg_fangornbear.name=Spawn Fangorn Bear item.spawn_egg_fangornwildboar.name=Spawn Fangorn Wild Boar @@ -66,7 +86,7 @@ item.spawn_egg_reddwarfarbalest.name=Spawn Red Dwarf Arbalest item.spawn_egg_reddwarfbannerbearer.name=Spawn Red Dwarf Banner Bearer item.spawn_egg_reddwarfcommander.name=Spawn Red Dwarf Commander item.spawn_egg_reddwarfsmith.name=Red Dwarven Smith -item.spawn_egg_limwaithwarrior.name=Spawn Limwaith Warrior +item.spawn_egg_limwaithwarrior.name=Spawn Limwaith Clansman item.spawn_egg_limwaithblowgunner.name=Spawn Limwaith Blowgunner item.spawn_egg_limwaithbannerbearer.name=Spawn Limwaith Banner Bearer item.spawn_egg_limwaithchieftain.name=Spawn Limwaith Chieftain @@ -84,13 +104,21 @@ item.spawn_egg_breecrossbowman.name=Spawn Bree-Land Crossbowman item.spawn_egg_breecaptain.name=Spawn Bree-Land Captain item.spawn_egg_breesoldierbannerbearer.name=Spawn Bree-Land Bannerbearer item.spawn_egg_breeoutrider.name=Spawn Bree-Land Outrider -item.spawn_egg_utumnoslavetrader.name=Utumno Slave +item.spawn_egg_utumnoslavetrader.name=Spawn Utumno Slave +item.spawn_egg_limwaith.name=Spawn Limwaith +item.spawn_egg_limwaithshaman.name=Spawn Limwaith Shaman +item.spawn_egg_limwaithfishmonger.name=Spawn Limwaith Fishmonger +item.spawn_egg_limwaithbonewarrior.name=Spawn Limwaith Warrior entity.cinder_loe.RedDwarfWarrior.name=Red Dwarf Warrior entity.cinder_loe.RedDwarfArbalest.name=Red Dwarf Arbalest entity.cinder_loe.RedDwarfBannerBearer.name=Red Dwarf Banner Bearer entity.cinder_loe.RedDwarfCommander.name=Red Dwarf Commander -entity.cinder_loe.LimwaithWarrior.name=Limwaith Warrior +entity.cinder_loe.Limwaith.name=Limwaith +entity.cinder_loe.LimwaithFishmonger.name=Limwaith Fisherman +entity.cinder_loe.LimwaithShaman.name=Limwaith Shaman +entity.cinder_loe.LimwaithWarrior.name=Limwaith Clansman +entity.cinder_loe.LimwaithBoneWarrior.name=Limwaith Warrior entity.cinder_loe.LimwaithBlowgunner.name=Limwaith Blowgunner entity.cinder_loe.LimwaithBannerBearer.name=Limwaith Banner Bearer entity.cinder_loe.LimwaithChieftain.name=Limwaith Chieftain diff --git a/src/main/resources/assets/lotr/textures/blocks/silverChain_bottom.png b/src/main/resources/assets/lotr/textures/blocks/silverChain_bottom.png index b916cbff90d6d8a82a8ee19bda4c3c90bc061d67..4508f63ad964ef52440a7ed9e0af430b501c3e21 100644 GIT binary patch literal 4960 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 delta 163 zcmV;U09^lrC%yrYBYyyeNklCgkC4v}Fy{n7RS^->dp`}`1D--k z=~%o1R26G2&N*_<>sj(MKtxOkfiVW&`|E;N;zgqO{+0NzL>yIRjKQr8@CAsmio0_M RTW0_O002ovPDHLkV1h7ZMr8m1 diff --git a/src/main/resources/assets/lotr/textures/blocks/silverChain_single.png b/src/main/resources/assets/lotr/textures/blocks/silverChain_single.png index 34590465eb95f68a605801345c358b4ad86b7b29..b708df9b5c66788bd224a40aa47bf0443a5c0c16 100644 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 delta 191 zcmV;w06_nBZ~z9S+{Ri_SyfRvK)-cw4!Ik#-ElxVF*RXCRthYh;KUcEc{_zOJ{ tV_eps0)8UVIro?NtwdF&l)@?u@CLkzhqq{Ct79x9&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 delta 191 zcmV;w06_nYC)xp!BYyy)NklBZ~z9S+{Ri_SyfRvK)-cw4!Ik#-ElxVF*RXCRthYh;KUcEc{_zOJ{ tV_eps0)8UVIro?NtwdF&l)@?u@CLkzhqq{Ct6&a^yV#gTc*Wd;^r;fC?d#O9i5E5TT5gfe0{4B!I!9 z+E4qh|KXX9{)B3dP+!|#My{WPE$`KjR5Vbbp<) zlPzg3o#$L_OJK}b2G1>8mp*jX@nn2;P<>M2@UWrJ`j*NL*1^`a8+{L+|M+P3os)|r z6DtgoYa6=F_4w6|Y~9DWj2hH!c>68lnxIT8L}@qQvYO!U8<`>*o9Ah58>dr8I|PJ; zytolEc5)SQ=h&6A2RdFPKMJL6Hhd8kTe>MmTL1j4k-jJZTOJG^Lr|@r5G;)>W|!(M z`Xe289}#PWC_Ue1P~eHwwar_&?&kgDx5AES&s#*<6Od(8-{6y+dtn#3=Gtz@yaMav zM;%VWHfSAGg@m5Z5h!-dN&3!lzrjuYWo>DFX21J+4KC?PJ~i-DdZOGJGJKOqS0lVvx z#*^LCogSpBI^T8`_~*yXGz}WEO0;kpsrNdXYM*3LP&emX3jMG7q!aTw*=EZe6)#bR zhe$;Sh-re*MrxkbzL8%u)=FOZ9O^Fg$(B35nd2X4u+*HqG&87TwR3*)k-8J)=HH5~ zGPA=j?J& z*J&$-&a+ljUBr_+F0Fa}zx4WFc(cPg;JEil zL)qO6P5wG!|4t8oQFHe0$k#V^@A3GJnU?u;0YS2HgX8Oj@|^W%^Nd0Y@6UX%w=gh% zqNgK7*sO@mYVG@LqB-~O%~lRN=H}{5`K?PlY;Olq!5MezA7zXuxsJ^rzE~KoJTvUx z%)I?m2WgM$jaSq2m}75@8#>yZdPl=wnYl6-JIiw$V}pzSUD8tiv>|65jkBQdYHjQO z5qY`O!u-5jrv_|tV~dC1no>$PjpxseNt9i#rg2AY*n^S#3wvK1K9Ytl*;bk`VS=ux zdsW=Eq}D__61KCYInLm(fwqj>W~X{}E0Q!-#P^QxwAXBT z70+Bl`DH|Pb8$CE16jmj~LVHe%4j^6uI;r7FD)uxa)%D-~e-= zQ>#;uiAvh4?dj{|v8;O)=CTbu)^fBa<6g03zT3$)j(%KEC<%GkG~YpX6>CXCBV_B6%SKx5oO1dZze&RRN8 zD#ieODHp^ z0>~s%>(m4_WnM&wyJrussuO8MLR7fM_JkU83lqi=>hv4%*`pY8Z;hJ*z zJS-RviXl@46cztjNLM$G=SL4U1wxTnrtyNv{>)M-5_}@-v)t4gO*zvOf!sgherEll zc8xJ)#o^FdQeK2QJvSB;sg6(QOL-zbU2`k26Ho{goB&P4bNOfz0idC2R4x_GrI2VO zGM-AX6VRqXxk(gCK*9snP!Kpq1mOT=0bjtw6VL)04T2y6R5Xo@82;L<2O0hvtEK=FBW z7pYtfK+7o-140lhlL$2mHQ{tePd6r#fWdu|c!mQ?0ptMf0g;3+RVhBHd_`i=M+vC; z#8dDD8r6_*5q83nhDg>aBL)FlobH%a#`3S1!NJe?)j;%_W?IgK22_daFIrZKxi754)7*}D1bH137 z7cuZf#$UVZD_vj2z!w>R?XLeDU51~IJD>#m2c&`yGZ}6XBhW!em%GN51>>mSs9A6t zBr%Y&zgNIuMrP_u3znU00SWb#ZX9R5r*PwMPz!}cYZpPHJ~x)5FSWiX13&XBVutfp zIZW3&QhKTa{$sD{h6g6!nXU?|$=j7%Cc4*RX7_YtVn$8=PfruGz>=TE>o0k81$`IS z3Ei@g70Q(vh2 ky*tlm6)XxaAMs(pVhSiBYyz%Nkl0LFn65%p@``|nKC1i-qkXGgC9KRfy)=TGqs y+|QO(_)TH$03`qb4rN$LW=%~1DgXcg2mk;800000(o>TF0000