From 44e50124e582b1a8b5e46eb0720f35bea7adcea4 Mon Sep 17 00:00:00 2001 From: KeyLime17 Date: Fri, 7 Jun 2024 22:32:45 -0400 Subject: [PATCH] Removed harad and dwarf levy (they were buggy) Added some goodies --- .gradle/8.2.1/checksums/checksums.lock | Bin 17 -> 17 bytes .gradle/8.2.1/fileHashes/fileHashes.lock | 2 +- .idea/uiDesigner.xml | 124 ++++++++++++ .../com/zivilon/cinder_loe/CinderLoE.java | 57 ++++-- .../zivilon/cinder_loe/CinderLoE_Config.java | 3 + .../render/corrupt/RenderCorruptDwarf.java | 38 ++++ .../render/corrupt/RenderCorruptElf.java | 41 ++++ .../render/corrupt/RenderCorruptEnt.java | 45 +++++ .../render/corrupt/RenderCorruptHobbit.java | 42 +++++ .../render/corrupt/RenderCorruptMan.java | 41 ++++ .../render/corrupt/RenderCorruptOrc.java | 40 ++++ .../zivilon/cinder_loe/entity/Limwaith.java | 5 + .../entity/corrupt/CorruptDwarf.java | 64 +++++++ .../cinder_loe/entity/corrupt/CorruptElf.java | 119 ++++++++++++ .../cinder_loe/entity/corrupt/CorruptEnt.java | 50 +++++ .../entity/corrupt/CorruptHobbit.java | 95 ++++++++++ .../cinder_loe/entity/corrupt/CorruptMan.java | 110 +++++++++++ .../cinder_loe/entity/corrupt/CorruptOrc.java | 85 +++++++++ .../zivilon/cinder_loe/items/VoidDagger.java | 177 ++++++++++++++++++ .../cinder_loe/items/WoodElfRelic.java | 43 +++-- .../assets/cinder_loe/lang/en_US.lang | 11 ++ .../cinder_loe/speech/corrupt/hostile.txt | 10 + .../cinder_loe/speech/corrupt/neutral.txt | 10 + .../assets/lotr/textures/items/daggerVoid.png | Bin 0 -> 7745 bytes .../lotr/textures/items/daggerVoid.png.mcmeta | 77 ++++++++ 25 files changed, 1255 insertions(+), 34 deletions(-) create mode 100644 .idea/uiDesigner.xml create mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptDwarf.java create mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptElf.java create mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptEnt.java create mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptHobbit.java create mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptMan.java create mode 100644 src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptOrc.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptDwarf.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptElf.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptEnt.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptHobbit.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptMan.java create mode 100644 src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptOrc.java create mode 100644 src/main/java/com/zivilon/cinder_loe/items/VoidDagger.java create mode 100644 src/main/resources/assets/cinder_loe/speech/corrupt/hostile.txt create mode 100644 src/main/resources/assets/cinder_loe/speech/corrupt/neutral.txt create mode 100644 src/main/resources/assets/lotr/textures/items/daggerVoid.png create mode 100644 src/main/resources/assets/lotr/textures/items/daggerVoid.png.mcmeta diff --git a/.gradle/8.2.1/checksums/checksums.lock b/.gradle/8.2.1/checksums/checksums.lock index ff263c3ac9fa6b88e775f4f26b13bd5474e20fb2..975eff9171fb5a360e44afdfa16554f82ad38bc7 100644 GIT binary patch literal 17 UcmZQRdH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/zivilon/cinder_loe/CinderLoE.java b/src/main/java/com/zivilon/cinder_loe/CinderLoE.java index bb280b2..a1e0f4c 100644 --- a/src/main/java/com/zivilon/cinder_loe/CinderLoE.java +++ b/src/main/java/com/zivilon/cinder_loe/CinderLoE.java @@ -4,8 +4,10 @@ import com.zivilon.cinder_loe.blocks.*; import com.zivilon.cinder_loe.character.CharacterEventListener; import com.zivilon.cinder_loe.character.CharacterRoleAPI; import com.zivilon.cinder_loe.client.render.*; +import com.zivilon.cinder_loe.client.render.corrupt.*; import com.zivilon.cinder_loe.command.CommandCinderCharacter; import com.zivilon.cinder_loe.entity.*; +import com.zivilon.cinder_loe.entity.corrupt.*; import com.zivilon.cinder_loe.items.*; import com.zivilon.cinder_loe.tileentity.*; import com.zivilon.cinder_loe.util.Utilities; @@ -75,11 +77,11 @@ import net.minecraftforge.client.ClientCommandHandler; @Mod( modid = "cinder_loe", - version = "1.2.1", + version = "1.2.3", name = "CinderLoE", dependencies = "required-after:spongemixins@[1.1.0,);required-after:lotr", acceptedMinecraftVersions = "[1.7.10]", - acceptableRemoteVersions = "*") + acceptableRemoteVersions = "[1.2.3]") public class CinderLoE { @Instance("cinder_loe") @@ -100,7 +102,7 @@ public class CinderLoE { // Blocks - public static Block barricade; + // public static Block barricade; public static Block cinderBlock; public static Block ivoryBlock; public static Block blockRedDwarfSteel; @@ -135,6 +137,7 @@ public class CinderLoE { // Misc public static Item frostblade; + public static Item daggervoid; public static Item spearsolidgold; public static Item whip; public static Item swordAsh; @@ -299,13 +302,19 @@ public class CinderLoE { event.registerServerCommand(new CommandCinderCharacter()); } - public void registerEntities() { // Last ID added: 37 + public void registerEntities() { // Last ID added: 41 GameRegistry.registerTileEntity(TileEntityMistBlock.class, "TileEntityMistBlock"); int entityID = 7320; // Always increment entityID by 1 over the last entity to ensure unique IDs - EntityRegistry.registerModEntity(HaradLevy.class, "HaradLevy", (entityID + 36), this, 64, 1, true); - EntityRegistry.registerModEntity(DwarfLevy.class, "DwarfLevy", (entityID + 37), this, 64, 1, true); + // EntityRegistry.registerModEntity(HaradLevy.class, "HaradLevy", (entityID + 36), this, 64, 1, true); + // EntityRegistry.registerModEntity(DwarfLevy.class, "DwarfLevy", (entityID + 37), this, 64, 1, true); + EntityRegistry.registerModEntity(CorruptDwarf.class, "CorruptDwarf", (entityID + 36), this, 64, 1, true); + EntityRegistry.registerModEntity(CorruptElf.class, "CorruptElf", (entityID + 37), this, 64, 1, true); + EntityRegistry.registerModEntity(CorruptEnt.class, "CorruptEnt", (entityID + 38), this, 64, 1, true); + EntityRegistry.registerModEntity(CorruptHobbit.class, "CorruptHobit", (entityID + 39), this, 64, 1, true); + EntityRegistry.registerModEntity(CorruptMan.class, "CorruptMan", (entityID + 40), this, 64, 1, true); + EntityRegistry.registerModEntity(CorruptOrc.class, "CorruptOrc", (entityID + 41), this, 64, 1, true); EntityRegistry.registerModEntity(SarumanFireball.class, "SarumanFireball", entityID + 0, this, 64, 10, true); EntityRegistry.registerModEntity(Renegade.class, "Renegade", (entityID + 1), this, 64, 1, true); @@ -354,8 +363,8 @@ public class CinderLoE { public void registerBlocks() { // barricade - barricade = (new barricade()); - GameRegistry.registerBlock(barricade, "barricade"); + // barricade = (new barricade()); + // GameRegistry.registerBlock(barricade, "barricade"); // Cinder Block @@ -502,7 +511,7 @@ public class CinderLoE { * Item Registation, add up the "last ID added" upon adding a new item * Weapons will need to be linked */ - // Last ID added: 95 + // Last ID added: 96 // ==Food Items== ItemRegistration.registerItem(onion, "onion", 89); @@ -571,15 +580,18 @@ public class CinderLoE { // Misc EVENT = getLOTRMaterialByName("EVENT"); frostblade = (new LOTRItemSword(EVENT)).setUnlocalizedName("lotr:frostblade").setTextureName("lotr:frostblade"); + daggervoid = (new VoidDagger(EVENT)).addWeaponDamage(5.0F).setUnlocalizedName("lotr:daggerVoid").setTextureName("lotr:daggerVoid").setCreativeTab(null); spearsolidgold = (new LOTRItemSpear(EVENT)).setUnlocalizedName("lotr:spearsolidgold").setTextureName("lotr:spearsolidgold").setCreativeTab(null); whip = (new Whip()).setUnlocalizedName("lotr:whip").setTextureName("lotr:whip"); ItemRegistration.registerItem(frostblade, "frostblade", 30); + ItemRegistration.registerItem(daggervoid, "daggerVoid", 96); ItemRegistration.registerItem(spearsolidgold, "spearsolidgold", 31); ItemRegistration.registerItem(whip, "whip", 32); linkLOTRWeapon(frostblade, "frostblade"); + linkLOTRWeapon(daggervoid, "daggerVoid"); linkLOTRWeapon(spearsolidgold, "spearsolidgold"); linkLOTRWeapon(whip, "whip"); @@ -723,8 +735,8 @@ public class CinderLoE { //Bree MATERIAL_BREE = getLOTRMaterialByName("BREE"); if (MATERIAL_BREE != null) { - helmetBree = (new LOTRItemArmor(MATERIAL_BREE, 0, "helmet")).setUnlocalizedName("lotr:helmetBree").setTextureName("lotr:helmetBree"); helmetBreeKettle = (new LOTRItemArmor(MATERIAL_BREE, 0, "helmet")).setUnlocalizedName("lotr:helmetBreeKettle").setTextureName("lotr:breekettlehelmet"); + helmetBree = (new LOTRItemArmor(MATERIAL_BREE, 0, "helmet")).setUnlocalizedName("lotr:helmetBree").setTextureName("lotr:helmetBree"); 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"); @@ -783,8 +795,15 @@ public class CinderLoE { public static class ClientProxy extends CommonProxy { @Override public void setup() { - RenderingRegistry.registerEntityRenderingHandler(HaradLevy.class, new LOTRRenderNearHaradrim()); - RenderingRegistry.registerEntityRenderingHandler(DwarfLevy.class, new LOTRRenderDwarf()); + // RenderingRegistry.registerEntityRenderingHandler(HaradLevy.class, new LOTRRenderNearHaradrim()); + // RenderingRegistry.registerEntityRenderingHandler(DwarfLevy.class, new LOTRRenderDwarf()); + + RenderingRegistry.registerEntityRenderingHandler(CorruptDwarf.class, new RenderCorruptDwarf()); + RenderingRegistry.registerEntityRenderingHandler(CorruptElf.class, new RenderCorruptElf()); + RenderingRegistry.registerEntityRenderingHandler(CorruptEnt.class, new RenderCorruptEnt()); + RenderingRegistry.registerEntityRenderingHandler(CorruptHobbit.class, new RenderCorruptHobbit()); + RenderingRegistry.registerEntityRenderingHandler(CorruptMan.class, new RenderCorruptMan()); + RenderingRegistry.registerEntityRenderingHandler(CorruptOrc.class, new RenderCorruptOrc()); RenderingRegistry.registerEntityRenderingHandler(SarumanFireball.class, new RenderSarumanFireball()); RenderingRegistry.registerEntityRenderingHandler(Renegade.class, new RenderRenegade()); @@ -937,7 +956,7 @@ public class CinderLoE { //== Blocks== CinderCore.registerItemFallback(Block.getIdFromBlock(cinderBlock), Block.getIdFromBlock(Blocks.netherrack), "cinder_loe", "1.0"); - CinderCore.registerItemFallback(Block.getIdFromBlock(barricade), Block.getIdFromBlock(Blocks.fence), "cinder_loe", "1.0"); + // CinderCore.registerItemFallback(Block.getIdFromBlock(barricade), Block.getIdFromBlock(Blocks.fence), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Block.getIdFromBlock(ivoryBlock), Block.getIdFromBlock(LOTRMod.boneBlock), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Block.getIdFromBlock(blockRedDwarfSteel), Block.getIdFromBlock(LOTRMod.blockOreStorage), "cinder_loe", "1.0"); CinderCore.registerItemFallback(Block.getIdFromBlock(chandelierRedDwarf), Block.getIdFromBlock(LOTRMod.chandelier), "cinder_loe", "1.0"); @@ -981,6 +1000,7 @@ public class CinderLoE { CinderCore.registerItemFallback(Item.getIdFromItem(welfRelic), Item.getIdFromItem(LOTRMod.rhinoHorn), "cinder_loe", "1.2"); // == Specials == CinderCore.registerItemFallback(Item.getIdFromItem(frostblade), Item.getIdFromItem(LOTRMod.swordMithril), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(daggervoid), Item.getIdFromItem(LOTRMod.daggerMithril), "cinder_loe", "1.2.3"); 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"); // == Ash Forged == @@ -1058,8 +1078,15 @@ public class CinderLoE { CinderCore.registerItemFallback(Item.getIdFromItem(bootsArnorBanner), Item.getIdFromItem(Items.chainmail_boots), "cinder_loe", "1.1"); CinderCore.registerItemFallback(Item.getIdFromItem(maceArnor), Item.getIdFromItem(LOTRMod.blacksmithHammer), "cinder_loe", "1.1"); - CinderCore.registerEntityFallback(HaradLevy.class, LOTREntityNearHaradrim.class, "cinder_loe", "1.2"); - CinderCore.registerEntityFallback(DwarfLevy.class, LOTREntityDwarf.class, "cinder_loe", "1.2"); + // CinderCore.registerEntityFallback(HaradLevy.class, LOTREntityNearHaradrim.class, "cinder_loe", "1.2.3"); + // CinderCore.registerEntityFallback(DwarfLevy.class, LOTREntityDwarf.class, "cinder_loe", "1.2.3"); + + CinderCore.registerEntityFallback(CorruptDwarf.class, LOTREntityDwarf.class, "cinder_loe", "1.2.3"); + CinderCore.registerEntityFallback(CorruptElf.class, LOTREntityTormentedElf.class, "cinder_loe", "1.2.3"); + CinderCore.registerEntityFallback(CorruptEnt.class, LOTREntityEnt.class, "cinder_loe", "1.2.3"); + CinderCore.registerEntityFallback(CorruptHobbit.class, LOTREntityHobbit.class, "cinder_loe", "1.2.3"); + CinderCore.registerEntityFallback(CorruptMan.class, LOTREntityGondorMan.class, "cinder_loe", "1.2.3"); + CinderCore.registerEntityFallback(CorruptOrc.class, LOTREntityGundabadOrc.class, "cinder_loe", "1.2.3"); CinderCore.registerEntityFallback(SarumanFireball.class, LOTREntityGandalfFireball.class, "cinder_loe", "1.0"); CinderCore.registerEntityFallback(Renegade.class, LOTREntityBandit.class, "cinder_loe", "1.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 23c6693..47694f0 100644 --- a/src/main/java/com/zivilon/cinder_loe/CinderLoE_Config.java +++ b/src/main/java/com/zivilon/cinder_loe/CinderLoE_Config.java @@ -4,6 +4,7 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent; import java.io.File; +import lotr.common.fac.LOTRFaction; import net.minecraftforge.common.config.Configuration; public class CinderLoE_Config { @@ -11,6 +12,7 @@ public class CinderLoE_Config { public static float enchantment_color_red; public static float enchantment_color_green; public static float enchantment_color_blue; + public static String corrupt_faction; public static void init(FMLPreInitializationEvent event) { File configFile = new File(event.getModConfigurationDirectory(), "CinderLoE.cfg"); @@ -28,6 +30,7 @@ public class CinderLoE_Config { enchantment_color_green = config.getFloat("EnchantmentColorGreen", Configuration.CATEGORY_GENERAL, 0.19f, 0.0f, 1.0f, "Configure green color for enchantments"); enchantment_color_blue = config.getFloat("EnchantmentColorBlue", Configuration.CATEGORY_GENERAL, 0.608f, 0.0f, 1.0f, "Configure blue color for enchantments"); + corrupt_faction = config.getString("CorruptFaction", Configuration.CATEGORY_GENERAL, "MORDOR", "Configure the alignment the Corrupt npcs follow"); // Save the configuration if it has changed if (config.hasChanged()) { config.save(); diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptDwarf.java b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptDwarf.java new file mode 100644 index 0000000..d69e84b --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptDwarf.java @@ -0,0 +1,38 @@ +package com.zivilon.cinder_loe.client.render.corrupt; + +import com.zivilon.cinder_loe.entity.corrupt.CorruptDwarf; +import com.zivilon.cinder_loe.entity.corrupt.CorruptElf; +import lotr.client.model.LOTRModelDwarf; +import lotr.client.model.LOTRModelElf; +import lotr.client.render.entity.LOTRRandomSkins; +import lotr.client.render.entity.LOTRRenderBiped; +import lotr.client.render.entity.LOTRRenderDwarf; +import lotr.common.entity.LOTRRandomSkinEntity; +import lotr.common.entity.npc.LOTREntityNPC; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class RenderCorruptDwarf extends LOTRRenderDwarf { + public static LOTRRandomSkins skinsMale; + protected ModelBiped standardRenderPassModel = new LOTRModelDwarf(0.5f, 64, 64); + + public RenderCorruptDwarf() { + super(); + skinsMale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/corrupt/dwarf"); + } + @Override + protected void func_82421_b() { + this.field_82423_g = new LOTRModelDwarf(1.0f); + this.field_82425_h = new LOTRModelDwarf(0.5f); + } + + @Override + public ResourceLocation getEntityTexture(Entity entity) { + CorruptDwarf dwarf = (CorruptDwarf)entity; + if (dwarf.familyInfo.isMale()) { + return skinsMale.getRandomSkin(dwarf); + } + return skinsMale.getRandomSkin(dwarf); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptElf.java b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptElf.java new file mode 100644 index 0000000..419b2fd --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptElf.java @@ -0,0 +1,41 @@ +package com.zivilon.cinder_loe.client.render.corrupt; + +import com.zivilon.cinder_loe.entity.corrupt.CorruptDwarf; +import com.zivilon.cinder_loe.entity.corrupt.CorruptElf; +import lotr.client.model.LOTRModelElf; +import lotr.client.render.entity.LOTRRandomSkins; +import lotr.client.render.entity.LOTRRenderBiped; +import lotr.client.render.entity.LOTRRenderElf; +import lotr.common.entity.LOTRRandomSkinEntity; +import lotr.common.entity.npc.LOTREntityNPC; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class RenderCorruptElf extends LOTRRenderElf { + public static LOTRRandomSkins skinsMale; + public static LOTRRandomSkins skinsFemale; + private LOTRModelElf eyesModel = new LOTRModelElf(0.05f, 64, 64); + private LOTRModelElf outfitModel = new LOTRModelElf(0.6f, 64, 64); + + public RenderCorruptElf() { + super(); + skinsMale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/corrupt/elf_male"); + skinsFemale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/corrupt/elf_female"); + } + + @Override + protected void func_82421_b() { + this.field_82423_g = new LOTRModelElf(1.0f); + this.field_82425_h = new LOTRModelElf(0.5f); + } + @Override + public ResourceLocation getEntityTexture(Entity entity) { + CorruptElf elf = (CorruptElf)entity; + if (((LOTREntityNPC)elf).familyInfo.isMale()) { + return skinsMale.getRandomSkin((LOTRRandomSkinEntity)elf); + } + return skinsFemale.getRandomSkin((LOTRRandomSkinEntity)elf); + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptEnt.java b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptEnt.java new file mode 100644 index 0000000..b6275e7 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptEnt.java @@ -0,0 +1,45 @@ +package com.zivilon.cinder_loe.client.render.corrupt; + +import com.zivilon.cinder_loe.entity.corrupt.CorruptDwarf; +import lotr.client.LOTRTextures; +import lotr.client.model.LOTRModelDwarf; +import lotr.client.model.LOTRModelEnt; +import lotr.client.render.entity.LOTRGlowingEyes; +import lotr.client.render.entity.LOTRRandomSkins; +import lotr.client.render.entity.LOTRRenderBiped; +import lotr.common.entity.npc.LOTREntityEnt; +import lotr.common.entity.npc.LOTREntityTree; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.ResourceLocation; + +import java.util.HashMap; + +public class RenderCorruptEnt extends RenderLiving { + private static HashMap entTextures = new HashMap(); + private LOTRModelEnt eyesModel = new LOTRModelEnt(0.05f); + + public RenderCorruptEnt() { + super((ModelBase)new LOTRModelEnt(), 0.5f); + } + + protected ResourceLocation getEntityTexture(Entity entity) { + int treeType = ((LOTREntityEnt)entity).getTreeType(); + String s = "cinder_loe:mob/corrupt/ent/" + LOTREntityTree.TYPES[treeType] + ".png"; + ResourceLocation r = (ResourceLocation)entTextures.get(treeType); + if (r == null) { + r = new ResourceLocation(s); + entTextures.put(treeType, r); + } + return r; + } + + protected void renderModel(EntityLivingBase entity, float f, float f1, float f2, float f3, float f4, float f5) { + super.renderModel(entity, f, f1, f2, f3, f4, f5); + ResourceLocation eyes = LOTRTextures.getEyesTexture(this.getEntityTexture((Entity)entity), new int[][]{{15, 23}, {22, 23}}, 3, 2); + LOTRGlowingEyes.renderGlowingEyes((Entity)entity, eyes, this.eyesModel, f, f1, f2, f3, f4, f5); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptHobbit.java b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptHobbit.java new file mode 100644 index 0000000..116ced5 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptHobbit.java @@ -0,0 +1,42 @@ +package com.zivilon.cinder_loe.client.render.corrupt; + +import com.zivilon.cinder_loe.entity.corrupt.CorruptDwarf; +import com.zivilon.cinder_loe.entity.corrupt.CorruptHobbit; +import lotr.client.model.LOTRModelDwarf; +import lotr.client.model.LOTRModelHobbit; +import lotr.client.render.entity.LOTRRandomSkins; +import lotr.client.render.entity.LOTRRenderBiped; +import lotr.client.render.entity.LOTRRenderHobbit; +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 RenderCorruptHobbit extends LOTRRenderHobbit { + public static LOTRRandomSkins hobbitSkinsMale; + public static LOTRRandomSkins hobbitSkinsFemale; + protected ModelBiped outfitModel = new LOTRModelHobbit(0.5f, 64, 64); + + public RenderCorruptHobbit() { + super(); + hobbitSkinsMale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/corrupt/hobbit_male"); + hobbitSkinsFemale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/corrupt/hobbit_female"); + + } + + @Override + protected void func_82421_b() { + this.field_82423_g = new LOTRModelHobbit(1.0f); + this.field_82425_h = new LOTRModelHobbit(0.5f); + } + + @Override + public ResourceLocation getEntityTexture(Entity entity) { + CorruptHobbit dwarf = (CorruptHobbit) entity; + if (dwarf.familyInfo.isMale()) { + return hobbitSkinsMale.getRandomSkin(dwarf); + } + return hobbitSkinsFemale.getRandomSkin(dwarf); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptMan.java b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptMan.java new file mode 100644 index 0000000..eb187fd --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptMan.java @@ -0,0 +1,41 @@ +package com.zivilon.cinder_loe.client.render.corrupt; + +import com.zivilon.cinder_loe.entity.corrupt.CorruptElf; +import com.zivilon.cinder_loe.entity.corrupt.CorruptMan; +import lotr.client.model.LOTRModelElf; +import lotr.client.model.LOTRModelHuman; +import lotr.client.render.entity.*; +import lotr.common.entity.LOTRRandomSkinEntity; +import lotr.common.entity.npc.LOTREntityMan; +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 RenderCorruptMan extends LOTRRenderGondorMan { + public static LOTRRandomSkins skinsMale; + public static LOTRRandomSkins skinsFemale; + protected ModelBiped outfitModel = new LOTRModelHuman(0.6f, false); + + public RenderCorruptMan() { + super(); + skinsMale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/corrupt/human_male"); + skinsFemale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/corrupt/human_female"); + } + + @Override + public ResourceLocation getEntityTexture(Entity entity) { + CorruptMan gondorian = (CorruptMan)entity; + if (gondorian.familyInfo.isMale()) { + return skinsMale.getRandomSkin(gondorian); + } + return skinsFemale.getRandomSkin(gondorian); + } + @Override + public int shouldRenderPass(EntityLiving entity, int pass, float f) { + CorruptMan dunedain = (CorruptMan)entity; + return super.shouldRenderPass((EntityLiving)dunedain, pass, f); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptOrc.java b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptOrc.java new file mode 100644 index 0000000..ae51dce --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptOrc.java @@ -0,0 +1,40 @@ +package com.zivilon.cinder_loe.client.render.corrupt; + +import com.zivilon.cinder_loe.entity.corrupt.CorruptDwarf; +import com.zivilon.cinder_loe.entity.corrupt.CorruptOrc; +import lotr.client.LOTRTextures; +import lotr.client.model.LOTRModelDwarf; +import lotr.client.model.LOTRModelOrc; +import lotr.client.render.entity.LOTRRandomSkins; +import lotr.client.render.entity.LOTRRenderBiped; +import lotr.client.render.entity.LOTRRenderDwarf; +import lotr.client.render.entity.LOTRRenderOrc; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class RenderCorruptOrc extends LOTRRenderOrc { + private static LOTRRandomSkins orcSkins; + private static LOTRRandomSkins urukSkins; + private static LOTRRandomSkins blackUrukSkins; + private LOTRModelOrc eyesModel = new LOTRModelOrc(0.05f); + + public RenderCorruptOrc() { + super(); + orcSkins = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/corrupt/orc"); + } + + @Override + protected void func_82421_b() { + this.field_82423_g = new LOTRModelOrc(1.0f); + this.field_82425_h = new LOTRModelOrc(0.5f); + } + + @Override + public ResourceLocation getEntityTexture(Entity entity) { + CorruptOrc orc = (CorruptOrc)entity; + return orcSkins.getRandomSkin(orc); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/Limwaith.java b/src/main/java/com/zivilon/cinder_loe/entity/Limwaith.java index 8c7bad8..7dfaccc 100644 --- a/src/main/java/com/zivilon/cinder_loe/entity/Limwaith.java +++ b/src/main/java/com/zivilon/cinder_loe/entity/Limwaith.java @@ -32,6 +32,7 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; @@ -67,4 +68,8 @@ public class Limwaith extends LOTREntityMoredain { } return "limwaith/moredain/hostile"; } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.limwaithSpawnEgg, 1); + } } \ No newline at end of file diff --git a/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptDwarf.java b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptDwarf.java new file mode 100644 index 0000000..82a5714 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptDwarf.java @@ -0,0 +1,64 @@ +package com.zivilon.cinder_loe.entity.corrupt; + +import com.zivilon.cinder_loe.CinderLoE_Config; +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityDwarf; +import lotr.common.entity.npc.LOTREntityElf; +import lotr.common.entity.npc.LOTRNames; +import lotr.common.fac.LOTRFaction; +import lotr.common.item.LOTRItemMug; +import lotr.common.world.structure.LOTRChestContents; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.config.Configuration; + +import static com.zivilon.cinder_loe.CinderLoE_Config.config; + +public class CorruptDwarf extends LOTREntityDwarf { + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return null; + } + public CorruptDwarf(World world) { + super(world); + } + @Override + public void setupNPCGender() { + this.familyInfo.setMale(true); + } + @Override + public void setupNPCName() { + this.familyInfo.setName(LOTRNames.getDwarfName(this.rand, this.familyInfo.isMale())); + } + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + return data; + } + @Override + public LOTRFaction getFaction() { + return LOTRFaction.valueOf(CinderLoE_Config.corrupt_faction); + } + + @Override + protected float getSoundPitch() { + return super.getSoundPitch() * 0.65f; + } + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + return "corrupt/neutral"; + } + return "corrupt/hostile"; + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptElf.java b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptElf.java new file mode 100644 index 0000000..a8c6dc7 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptElf.java @@ -0,0 +1,119 @@ +package com.zivilon.cinder_loe.entity.corrupt; + +import com.zivilon.cinder_loe.CinderLoE_Config; +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityElf; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.npc.LOTRNames; +import lotr.common.fac.LOTRFaction; +import lotr.common.item.LOTRItemMug; +import lotr.common.world.structure.LOTRChestContents; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class CorruptElf extends LOTREntityElf { + private LOTRFaction faction; + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return null; + } + public CorruptElf(World world) { + super(world); + } + @Override + protected LOTRFoods getElfDrinks() { + return LOTRFoods.ORC_DRINK; + } + @Override + protected EntityAIBase createElfMeleeAttackAI() { + return new LOTREntityAIAttackOnCollide(this, 1.5, false); + } + @Override + protected EntityAIBase createElfRangedAttackAI() { + return this.createElfMeleeAttackAI(); + } + + @Override + public void setupNPCName() { + this.familyInfo.setName(LOTRNames.getSindarinName(this.rand, this.familyInfo.isMale())); + } + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + return data; + } + + @Override + protected void onAttackModeChange(LOTREntityNPC.AttackMode mode, boolean mounted) { + if (mode == LOTREntityNPC.AttackMode.IDLE) { + this.tasks.removeTask(this.meleeAttackAI); + this.tasks.removeTask(this.rangedAttackAI); + this.setCurrentItemOrArmor(0, this.npcItemsInv.getIdleItem()); + } else { + this.tasks.removeTask(this.meleeAttackAI); + this.tasks.removeTask(this.rangedAttackAI); + this.tasks.addTask(2, this.meleeAttackAI); + this.setCurrentItemOrArmor(0, this.npcItemsInv.getMeleeWeapon()); + } + } + @Override + public LOTRFaction getFaction() { + return LOTRFaction.valueOf(CinderLoE_Config.corrupt_faction); + } + @Override + public float getAlignmentBonus() { + return 0.0f; + } + + @Override + protected void dropElfItems(boolean flag, int i) { + } + @Override + protected void dropFewItems(boolean flag, int i) { + } + + @Override + public boolean canElfSpawnHere() { + return false; + } + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + return "corrupt/neutral"; + } + return "corrupt/hostile"; + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } + @Override + protected float getSoundPitch() { + return super.getSoundPitch() * 0.65f; + } + @Override + public String getHurtSound() { + return "lotr:orc.hurt"; + } + @Override + public String getDeathSound() { + return "lotr:orc.death"; + } + + @Override + public String getAttackSound() { + return "lotr:orc.attack"; + } + @Override + public void onKillEntity(EntityLivingBase entity) { + super.onKillEntity(entity); + this.playSound("lotr:orc.kill", this.getSoundVolume(), this.getSoundPitch()); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptEnt.java b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptEnt.java new file mode 100644 index 0000000..3773fbf --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptEnt.java @@ -0,0 +1,50 @@ +package com.zivilon.cinder_loe.entity.corrupt; + +import com.zivilon.cinder_loe.CinderLoE_Config; +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityDwarf; +import lotr.common.entity.npc.LOTREntityEnt; +import lotr.common.entity.npc.LOTREntityTree; +import lotr.common.entity.npc.LOTRNames; +import lotr.common.fac.LOTRFaction; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +import java.util.Random; + +public class CorruptEnt extends LOTREntityEnt { + private LOTRFaction faction; + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return null; + } + + public CorruptEnt(World world) { + super(world); + } + @Override + public LOTRFaction getFaction() { + return LOTRFaction.valueOf(CinderLoE_Config.corrupt_faction); + } + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + return data; + } + @Override + public float getAlignmentBonus() { + return 0.0f; + } + @Override + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + } +} + diff --git a/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptHobbit.java b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptHobbit.java new file mode 100644 index 0000000..f7dbbab --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptHobbit.java @@ -0,0 +1,95 @@ +package com.zivilon.cinder_loe.entity.corrupt; + +import lotr.common.LOTRAchievement; +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityDwarf; +import lotr.common.entity.npc.LOTREntityHobbit; +import lotr.common.entity.npc.LOTREntityHobbitBounder; +import lotr.common.entity.npc.LOTRNames; +import lotr.common.fac.LOTRFaction; +import lotr.common.item.LOTRItemLeatherHat; +import lotr.common.world.structure.LOTRChestContents; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class CorruptHobbit extends LOTREntityHobbitBounder { + private LOTRFaction faction; + public CorruptHobbit(World world) { + super(world); + this.spawnRidingHorse = false; + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return null; + } + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + return null; + } + @Override + protected LOTRFoods getHobbitFoods() { + return LOTRFoods.ORC; + } + @Override + protected LOTRFoods getHobbitDrinks() { + return LOTRFoods.ORC_DRINK; + } + @Override + public float getAlignmentBonus() { + return 0.0f; + } + + @Override + public boolean getCanSpawnHere() { + return false; + } + + @Override + public float getBlockPathWeight(int i, int j, int k) { + float f = 0.0f; + return f; + } + @Override + public LOTRFaction getFaction() { + return this.faction != null ? this.faction : LOTRFaction.UTUMNO; + } + @Override + protected float getSoundPitch() { + return super.getSoundPitch() * 1.5f; + } + @Override + public String getHurtSound() { + return "lotr:orc.hurt"; + } + @Override + public String getDeathSound() { + return "lotr:orc.death"; + } + + @Override + public String getAttackSound() { + return "lotr:orc.attack"; + } + + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + return "corrupt/neutral"; + } + return "corrupt/hostile"; + } + @Override + protected void dropFewItems(boolean flag, int i) { + } + + protected void dropHobbitItems(boolean flag, int i) { + } + +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptMan.java b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptMan.java new file mode 100644 index 0000000..f3ac4a0 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptMan.java @@ -0,0 +1,110 @@ +package com.zivilon.cinder_loe.entity.corrupt; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.CinderLoE_Config; +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.*; +import lotr.common.entity.npc.*; +import lotr.common.fac.LOTRFaction; +import lotr.common.quest.LOTRMiniQuest; +import lotr.common.quest.LOTRMiniQuestFactory; +import net.minecraft.entity.*; +import net.minecraft.entity.ai.*; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +public class CorruptMan extends LOTREntityGondorMan { + + public CorruptMan(World world) { + super(world); + this.addTargetTasks(true); + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return null; + } + @Override + protected EntityAIBase createGondorAttackAI() { + return new LOTREntityAIAttackOnCollide(this, 1.45, true); + } + + @Override + public void setupNPCName() { + this.familyInfo.setName(LOTRNames.getGondorName(this.rand, this.familyInfo.isMale())); + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + return null; + } + + @Override + public LOTRFaction getFaction() { + return LOTRFaction.valueOf(CinderLoE_Config.corrupt_faction); + } + + @Override + public String getNPCName() { + return this.familyInfo.getName(); + } + @Override + public float getAlignmentBonus() { + return 0.0f; + } + + @Override + public boolean getCanSpawnHere() { + return false; + } + + @Override + public float getBlockPathWeight(int i, int j, int k) { + float f = 0.0f; + return f; + } + @Override + protected float getSoundPitch() { + return super.getSoundPitch() * 0.65f; + } + @Override + public String getHurtSound() { + return "lotr:orc.hurt"; + } + @Override + public String getDeathSound() { + return "lotr:orc.death"; + } + + @Override + public String getAttackSound() { + return "lotr:orc.attack"; + } + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + return "corrupt/neutral"; + } + return "corrupt/hostile"; + } + @Override + public LOTRMiniQuest createMiniQuest() { + return null; + } + + @Override + public LOTRMiniQuestFactory getBountyHelpSpeechDir() { + return null; + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } + @Override + protected void dropFewItems(boolean flag, int i) { + + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptOrc.java b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptOrc.java new file mode 100644 index 0000000..2b7e6a0 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptOrc.java @@ -0,0 +1,85 @@ +package com.zivilon.cinder_loe.entity.corrupt; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.CinderLoE_Config; +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityDwarf; +import lotr.common.entity.npc.LOTREntityOrc; +import lotr.common.entity.npc.LOTRNames; +import lotr.common.fac.LOTRFaction; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class CorruptOrc extends LOTREntityOrc { + private LOTRFaction faction; + public CorruptOrc(World world) { + super(world); + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return null; + } + @Override + public EntityAIBase createOrcAttackAI() { + return new LOTREntityAIAttackOnCollide(this, 1.4, false); + } + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0); + } + + @Override + public LOTRFaction getFaction() { + return LOTRFaction.valueOf(CinderLoE_Config.corrupt_faction); + } + + @Override + public String getHurtSound() { + return "lotr:orc.hurt"; + } + @Override + public String getDeathSound() { + return "lotr:orc.death"; + } + + @Override + public String getAttackSound() { + return "lotr:orc.attack"; + } + @Override + public void onKillEntity(EntityLivingBase entity) { + super.onKillEntity(entity); + this.playSound("lotr:orc.kill", this.getSoundVolume(), this.getSoundPitch()); + } + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + return "corrupt/neutral"; + } + return "corrupt/hostile"; + } + @Override + public float getAlignmentBonus() { + return 0.0f; + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + + } + @Override + protected void dropFewItems(boolean flag, int i) { + } + @Override + protected void dropOrcItems(boolean flag, int i) { + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/VoidDagger.java b/src/main/java/com/zivilon/cinder_loe/items/VoidDagger.java new file mode 100644 index 0000000..96f7c06 --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/items/VoidDagger.java @@ -0,0 +1,177 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.entity.corrupt.*; +import lotr.common.LOTRLevelData; +import lotr.common.entity.npc.*; +import lotr.common.fac.LOTRFaction; +import lotr.common.item.LOTRItemDagger; +import lotr.common.item.LOTRItemSword; +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRWeaponStats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; + +public class VoidDagger extends LOTRItemDagger { + public VoidDagger(LOTRMaterial material) { + super(material); + } + private LOTRFaction getFaction(EntityPlayer player) { + LOTRFaction faction = LOTRLevelData.getData(player).getPledgeFaction(); + if (faction == null) { + faction = LOTRFaction.RUFFIAN; + } + return faction; + } + + @Override + public boolean hitEntity(ItemStack itemstack, EntityLivingBase target, EntityLivingBase attacker) { + itemstack.damageItem(1, attacker); + + // Check if the target is dead and call the onKillEntity method + if (target.getHealth() <= 0.0F) { + onKillEntity(target, attacker); + } + + return true; + } + public void onKillEntity(EntityLivingBase entityKilled, EntityLivingBase killer) { + if (killer instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) killer; + LOTRFaction faction = getFaction(player); + entityKilled.worldObj.playSoundAtEntity(player, "mob.zombie.unfect", 1F,1F); + + if (!entityKilled.worldObj.isRemote && entityKilled instanceof LOTREntityOrc) { + CorruptOrc corruptOrc = new CorruptOrc(entityKilled.worldObj); + corruptOrc.copyLocationAndAnglesFrom(entityKilled); + + for (int i = 0; i < 4; i++) { + ItemStack armor = entityKilled.getEquipmentInSlot(i + 1); // Armor slots + corruptOrc.setCurrentItemOrArmor(i + 1, armor); + } + + ItemStack mainWeapon = ((LOTREntityOrc) entityKilled).npcItemsInv.getMeleeWeapon(); // Main hand weapon + corruptOrc.npcItemsInv.setIdleItem(mainWeapon); + corruptOrc.npcItemsInv.setMeleeWeapon(mainWeapon); + corruptOrc.setHealth(10); + corruptOrc.addPotionEffect(new PotionEffect(Potion.regeneration.id, 9999, 0)); + + entityKilled.worldObj.removeEntity(entityKilled); + corruptOrc.onSpawnWithEgg((IEntityLivingData) null); + + entityKilled.worldObj.spawnEntityInWorld(corruptOrc); + entityKilled.worldObj.playAuxSFXAtEntity(null, 1016, (int) corruptOrc.posX, (int) corruptOrc.posY, (int) corruptOrc.posZ, 0); + + } + if (!entityKilled.worldObj.isRemote && entityKilled instanceof LOTREntityMan && !(entityKilled instanceof LOTREntityHobbit)) { + + CorruptMan entity = new CorruptMan(entityKilled.worldObj); + entity.copyLocationAndAnglesFrom(entityKilled); + + for (int i = 0; i < 4; i++) { + ItemStack armor = entityKilled.getEquipmentInSlot(i + 1); // Armor slots + entity.setCurrentItemOrArmor(i + 1, armor); + } + + ItemStack mainWeapon = ((LOTREntityMan) entityKilled).npcItemsInv.getMeleeWeapon(); // Main hand weapon + entity.npcItemsInv.setIdleItem(mainWeapon); + entity.npcItemsInv.setMeleeWeapon(mainWeapon); + entity.setHealth(10); + entity.addPotionEffect(new PotionEffect(Potion.regeneration.id, 9999, 0)); + + entityKilled.worldObj.removeEntity(entityKilled); + entity.onSpawnWithEgg((IEntityLivingData) null); + + entityKilled.worldObj.spawnEntityInWorld(entity); + entityKilled.worldObj.playAuxSFXAtEntity(null, 1016, (int) entity.posX, (int) entity.posY, (int) entity.posZ, 0); + } + } + if (entityKilled instanceof LOTREntityHobbit) { + CorruptHobbit entity = new CorruptHobbit(entityKilled.worldObj); + entity.copyLocationAndAnglesFrom(entityKilled); + + for (int i = 0; i < 4; i++) { + ItemStack armor = entityKilled.getEquipmentInSlot(i + 1); // Armor slots + entity.setCurrentItemOrArmor(i + 1, armor); + } + + ItemStack mainWeapon = ((LOTREntityHobbit) entityKilled).npcItemsInv.getMeleeWeapon(); // Main hand weapon + entity.npcItemsInv.setIdleItem(mainWeapon); + entity.npcItemsInv.setMeleeWeapon(mainWeapon); + entity.setHealth(10); + entity.addPotionEffect(new PotionEffect(Potion.regeneration.id, 9999, 0)); + + entityKilled.worldObj.removeEntity(entityKilled); + entity.onSpawnWithEgg((IEntityLivingData) null); + + entityKilled.worldObj.spawnEntityInWorld(entity); + entityKilled.worldObj.playAuxSFXAtEntity(null, 1016, (int) entity.posX, (int) entity.posY, (int) entity.posZ, 0); + } + if (!entityKilled.worldObj.isRemote && entityKilled instanceof LOTREntityEnt) { + CorruptEnt entity = new CorruptEnt(entityKilled.worldObj); + entity.copyLocationAndAnglesFrom(entityKilled); + + entityKilled.worldObj.removeEntity(entityKilled); + entity.onSpawnWithEgg((IEntityLivingData) null); + entity.setHealth(10); + entity.addPotionEffect(new PotionEffect(Potion.regeneration.id, 9999, 0)); + + entityKilled.worldObj.spawnEntityInWorld(entity); + entityKilled.worldObj.playAuxSFXAtEntity(null, 1016, (int) entity.posX, (int) entity.posY, (int) entity.posZ, 0); + } + if (!entityKilled.worldObj.isRemote && entityKilled instanceof LOTREntityElf) { + CorruptElf entity = new CorruptElf(entityKilled.worldObj); + entity.copyLocationAndAnglesFrom(entityKilled); + + for (int i = 0; i < 4; i++) { + ItemStack armor = entityKilled.getEquipmentInSlot(i + 1); // Armor slots + entity.setCurrentItemOrArmor(i + 1, armor); + } + entity.setHealth(10); + entity.addPotionEffect(new PotionEffect(Potion.regeneration.id, 9999, 0)); + + ItemStack mainWeapon = ((LOTREntityElf) entityKilled).npcItemsInv.getMeleeWeapon(); // Main hand weapon + entity.npcItemsInv.setIdleItem(mainWeapon); + entity.npcItemsInv.setMeleeWeapon(mainWeapon); + + entityKilled.worldObj.removeEntity(entityKilled); + entity.onSpawnWithEgg((IEntityLivingData) null); + + entityKilled.worldObj.spawnEntityInWorld(entity); + entityKilled.worldObj.playAuxSFXAtEntity(null, 1016, (int) entity.posX, (int) entity.posY, (int) entity.posZ, 0); + } + if (!entityKilled.worldObj.isRemote && entityKilled instanceof LOTREntityDwarf) { + CorruptDwarf entity = new CorruptDwarf(entityKilled.worldObj); + entity.copyLocationAndAnglesFrom(entityKilled); + + + for (int i = 0; i < 4; i++) { + ItemStack armor = entityKilled.getEquipmentInSlot(i + 1); // Armor slots + entity.setCurrentItemOrArmor(i + 1, armor); + } + + ItemStack mainWeapon = ((LOTREntityDwarf) entityKilled).npcItemsInv.getMeleeWeapon(); // Main hand weapon + entity.npcItemsInv.setIdleItem(mainWeapon); + entity.npcItemsInv.setMeleeWeapon(mainWeapon); + entity.setHealth(10); + entity.addPotionEffect(new PotionEffect(Potion.regeneration.id, 9999, 0)); + + entityKilled.worldObj.removeEntity(entityKilled); + entity.onSpawnWithEgg((IEntityLivingData) null); + + entityKilled.worldObj.spawnEntityInWorld(entity); + entityKilled.worldObj.playAuxSFXAtEntity(null, 1016, (int) entity.posX, (int) entity.posY, (int) entity.posZ, 0); + } + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/WoodElfRelic.java b/src/main/java/com/zivilon/cinder_loe/items/WoodElfRelic.java index d976c27..60e0fe1 100644 --- a/src/main/java/com/zivilon/cinder_loe/items/WoodElfRelic.java +++ b/src/main/java/com/zivilon/cinder_loe/items/WoodElfRelic.java @@ -22,7 +22,7 @@ import net.minecraft.world.World; import java.util.List; -public class WoodElfRelic extends WizardStaff { +public class WoodElfRelic extends WizardStaff { public WoodElfRelic() { super(); } @@ -30,31 +30,38 @@ public class WoodElfRelic extends WizardStaff { public ItemStack onEaten(ItemStack itemstack, World world, EntityPlayer entityplayer) { entityplayer.swingItem(); - itemstack.damageItem(2, (EntityLivingBase)entityplayer); - world.playSoundAtEntity((Entity)entityplayer, "lotr:elf.woodElf_teleport", 2.0F, (Item.itemRand.nextFloat() - Item.itemRand.nextFloat()) * 0.2F + 1.0F); - LOTRFaction faction = LOTRFaction.WOOD_ELF; + itemstack.damageItem(2, (EntityLivingBase) entityplayer); + world.playSoundAtEntity((Entity) entityplayer, "lotr:elf.woodElf_teleport", 2.0F, (Item.itemRand.nextFloat() - Item.itemRand.nextFloat()) * 0.2F + 1.0F); + LOTRFaction faction = LOTRLevelData.getData(entityplayer).getPledgeFaction(); + LOTRFaction woodElfFaction = LOTRFaction.WOOD_ELF; + if (!world.isRemote) { - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, ((Entity)entityplayer).boundingBox.expand(12.0D, 8.0D, 12.0D)); - if (!entities.isEmpty()) - for (int i = 0; i < entities.size(); i++) { - EntityLivingBase entity = entities.get(i); + List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, ((Entity) entityplayer).boundingBox.expand(12.0D, 8.0D, 12.0D)); + if (!entities.isEmpty()) { + for (EntityLivingBase entity : entities) { if (entity != entityplayer) { if (entity instanceof EntityLiving) { - EntityLiving entityliving = (EntityLiving)entity; - if (!faction.isGoodRelation(LOTRMod.getNPCFaction((Entity)entityliving))) - continue; - } - if (entity instanceof EntityPlayer) - if (!MinecraftServer.getServer().isPVPEnabled() || LOTRLevelData.getData((EntityPlayer)entity).getAlignment(faction) < 0.0F) - continue; + EntityLiving entityliving = (EntityLiving) entity; + if (LOTRMod.getNPCFaction((Entity) entityliving) != woodElfFaction) { + continue; + } + } + + if (entity instanceof EntityPlayer) { + if (!MinecraftServer.getServer().isPVPEnabled() || LOTRLevelData.getData((EntityPlayer) entity).getAlignment(faction) < 0.0F) { + continue; + } + } entity.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 1200, 0)); entity.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 1200, 0)); } } - LOTRPacketWeaponFX packet = new LOTRPacketWeaponFX(LOTRPacketWeaponFX.Type.MACE_SAURON, (Entity)entityplayer); - LOTRPacketHandler.networkWrapper.sendToAllAround((IMessage)packet, LOTRPacketHandler.nearEntity((Entity)entityplayer, 64.0D)); - } + } + + LOTRPacketWeaponFX packet = new LOTRPacketWeaponFX(LOTRPacketWeaponFX.Type.MACE_SAURON, (Entity) entityplayer); + LOTRPacketHandler.networkWrapper.sendToAllAround((IMessage) packet, LOTRPacketHandler.nearEntity((Entity) entityplayer, 64.0D)); + } return itemstack; } } \ No newline at end of file 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 d17c784..98eeaa9 100644 --- a/src/main/resources/assets/cinder_loe/lang/en_US.lang +++ b/src/main/resources/assets/cinder_loe/lang/en_US.lang @@ -21,6 +21,7 @@ tile.lotr:voidblock.name=Void item.lotr:frostblade.name=Frostblade item.lotr:whip.name=Whip +item.lotr:daggerVoid.name=Voidal Dagger item.lotr:spearsolidgold.name=Solid Gold Spear item.lotr:helmetRedDwarf.name=Red Dwarven Helmet item.lotr:bodyRedDwarf.name=Red Dwarven Chestplate @@ -91,6 +92,8 @@ item.lotr:bowAsh.name=Ash-Forged Bow item.lotr:pikeAsh.name=Ash-Forged Pike item.lotr:spearAsh.name=Ash-Forged Spear +item.lotr:banner.redDwarf.name=Banner of the Orocani + 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 @@ -124,6 +127,14 @@ 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.CorruptMan.name=Corrupt Man +entity.cinder_loe.CorruptDwarf.name=Corrupt Dwarf +entity.cinder_loe.CorruptElf.name=Corrupt Elf +entity.cinder_loe.CorruptEnt.name=Corrupt Ent +entity.cinder_loe.CorruptHobit.name=Corrupt Hobbit +entity.cinder_loe.CorruptOrc.name=Corrupt Orc + + entity.cinder_loe.RedDwarfSmith.name=Red Dwarf Smith entity.cinder_loe.RedDwarfWarrior.name=Red Dwarf Warrior entity.cinder_loe.RedDwarfArbalest.name=Red Dwarf Arbalest diff --git a/src/main/resources/assets/cinder_loe/speech/corrupt/hostile.txt b/src/main/resources/assets/cinder_loe/speech/corrupt/hostile.txt new file mode 100644 index 0000000..3154ef4 --- /dev/null +++ b/src/main/resources/assets/cinder_loe/speech/corrupt/hostile.txt @@ -0,0 +1,10 @@ +Bow before the dark! +Beg for your gods to save you! +Stay back, or I'll be forced to attack you! +I don't have any choice! I'm Sorry! +I don't want to do this! +Soon you will know the cold of death... +The darkness consumes all... +You will serve in death... +You cannot escape the void... +Submit... that is the only option... \ No newline at end of file diff --git a/src/main/resources/assets/cinder_loe/speech/corrupt/neutral.txt b/src/main/resources/assets/cinder_loe/speech/corrupt/neutral.txt new file mode 100644 index 0000000..77f5e8a --- /dev/null +++ b/src/main/resources/assets/cinder_loe/speech/corrupt/neutral.txt @@ -0,0 +1,10 @@ +Serve the darkness, obey the master. +The endless darkness creeps for us all... +In shadows, we find our purpose. +We are one with the void. +Our will is bound, our souls are lost. +The master commands, we obey. +Our minds are bound, our spirits broken. +The light fades, the dark remains. +No thoughts of our own, only the master's will. + diff --git a/src/main/resources/assets/lotr/textures/items/daggerVoid.png b/src/main/resources/assets/lotr/textures/items/daggerVoid.png new file mode 100644 index 0000000000000000000000000000000000000000..7efb611c170451a3745f430ccf03b221f90795df GIT binary patch literal 7745 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