diff --git a/src (1)/main/java/com/zivilon/cinder_loe/.CinderLoE.java.kate-swp b/src (1)/main/java/com/zivilon/cinder_loe/.CinderLoE.java.kate-swp new file mode 100644 index 0000000..95d473c Binary files /dev/null and b/src (1)/main/java/com/zivilon/cinder_loe/.CinderLoE.java.kate-swp differ diff --git a/src (1)/main/java/com/zivilon/cinder_loe/CinderBlockMetaData.java b/src (1)/main/java/com/zivilon/cinder_loe/CinderBlockMetaData.java new file mode 100644 index 0000000..ec62f2e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/CinderBlockMetaData.java @@ -0,0 +1,22 @@ +package com.zivilon.cinder_loe; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class CinderBlockMetaData extends ItemBlock { + public CinderBlockMetaData(Block block) { + super(block); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) { + return damage; + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName() + "." + stack.getItemDamage(); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/CinderDrinkRecipe.java b/src (1)/main/java/com/zivilon/cinder_loe/CinderDrinkRecipe.java new file mode 100644 index 0000000..6fc70b4 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/CinderDrinkRecipe.java @@ -0,0 +1,29 @@ +package com.zivilon.cinder_loe; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; + +public class CinderDrinkRecipe +implements IRecipe { + @Override + public boolean matches(InventoryCrafting inv, World world) { + return false; + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting p_77572_1_) { + return null; + } + + @Override + public int getRecipeSize() { + return 0; + } + + @Override + public ItemStack getRecipeOutput() { + return null; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/CinderEventHandler.java b/src (1)/main/java/com/zivilon/cinder_loe/CinderEventHandler.java new file mode 100644 index 0000000..56e75ee --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/CinderEventHandler.java @@ -0,0 +1,445 @@ +package com.zivilon.cinder_loe; + +import com.zivilon.cinder_loe.entity.corrupt.CorruptMan; +import com.zivilon.cinder_loe.items.BrokenHalo; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.IFuelHandler; +import cpw.mods.fml.common.eventhandler.EventPriority; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.registry.GameRegistry; +import lotr.common.LOTRMod; +import lotr.common.enchant.LOTREnchantment; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.item.*; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.DataWatcher; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.*; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S04PacketEntityEquipment; +import net.minecraft.network.play.server.S09PacketHeldItemChange; +import net.minecraft.network.play.server.S1CPacketEntityMetadata; +import net.minecraft.network.play.server.S19PacketEntityStatus; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.LivingAttackEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; +import net.minecraftforge.event.entity.player.ArrowLooseEvent; + +import java.util.Random; + +public class CinderEventHandler implements IFuelHandler { + private static final Random random = new Random(); + public CinderEventHandler() { + FMLCommonHandler.instance().bus().register(this); + MinecraftForge.EVENT_BUS.register(this); + MinecraftForge.TERRAIN_GEN_BUS.register(this); + GameRegistry.registerFuelHandler(this); + } + @SubscribeEvent + public void onArrowLoose(ArrowLooseEvent event) { + Entity attacker = event.entityLiving; + if (attacker instanceof EntityPlayerMP player) { + ItemStack bow = player.getHeldItem(); + if (bow != null && bow.isItemStackDamageable() && (bow.getItem() instanceof LOTRItemBow || bow.getItem() instanceof ItemBow)) { + float[] durabilityThresholds = {0.5f, 0.4f, 0.25f}; + double[] probabilities = {0.0005, 0.001, 0.005}; // Corrected probabilities + + // Corrected durabilityPercent calculation + float durabilityPercent = (float) (bow.getMaxDamage() - bow.getItemDamage()) / bow.getMaxDamage(); + + for (int j = 0; j < durabilityThresholds.length; j++) { + if (durabilityPercent <= durabilityThresholds[j] && random.nextDouble() <= probabilities[j]) { + addNegativeModifier(bow, player, "bow"); + break; // Exit loop once a modifier is added + } + } + } + } + } + + @SubscribeEvent + public void onLivingAttack(LivingAttackEvent event) { + Entity attacker = event.source.getEntity(); + + if (attacker instanceof EntityPlayerMP player) { + ItemStack weapon = player.getHeldItem(); + // smithing rework for melee + if (weapon != null && (weapon.getItem() instanceof LOTRItemSpear || weapon.getItem() instanceof LOTRItemSword || weapon.getItem() instanceof LOTRItemDagger || weapon.getItem() instanceof LOTRItemBattleaxe || weapon.getItem() instanceof LOTRItemHammer || weapon.getItem() instanceof ItemSword)) { + float[] durabilityThresholds = {0.5f, 0.4f, 0.25f}; + double[] probabilities = {0.0005, 0.001, 0.005}; // Corrected probabilities + if (weapon.isItemStackDamageable()) { + // Corrected durabilityPercent calculation + float durabilityPercent = (float) (weapon.getMaxDamage() - weapon.getItemDamage()) / weapon.getMaxDamage(); + + for (int j = 0; j < durabilityThresholds.length; j++) { + if (durabilityPercent <= durabilityThresholds[j] && random.nextDouble() <= probabilities[j]) { + addNegativeModifier(weapon, player, "weapon"); + break; // Exit loop once a modifier is added + } + } + } + } + } + } + @SubscribeEvent + public void onLivingHurt(LivingHurtEvent event) { + + if (event.entityLiving == null || event.source.getEntity() == null) { + return; + } + + EntityLivingBase entity = event.entityLiving; + EntityLivingBase attacker = event.source.getEntity() instanceof EntityLivingBase ? (EntityLivingBase) event.source.getEntity() : null; + World world = entity.worldObj; + DamageSource source = event.source; + + /* Blocking event handler removed and replaced with one in DamageEvent class. Temporarily stored for backup reasons. + + if (event.entity instanceof EntityPlayer && !source.isUnblockable()) { + EntityPlayerMP player = (EntityPlayerMP) event.entity; + ItemStack sword = player.getHeldItem(); + + + float playerYaw = player.getRotationYawHead(); + float attackerYaw = attacker.getRotationYawHead(); + +// Normalize both angles to be within 0 - 360 + playerYaw = (playerYaw + 360) % 360; + attackerYaw = (attackerYaw + 360) % 360; + +// Calculate the angle difference + float angleDifference = Math.abs(playerYaw - attackerYaw); + + if (angleDifference > 180) { + angleDifference = 360 - angleDifference; + } + ItemStack weapon = attacker.getHeldItem(); + if (weapon != null) { + if (player.isBlocking() && angleDifference >= 135 && angleDifference <=225) { + + float additionalDamage = 0.0f; + if (weapon.getItem() instanceof ItemAxe || weapon.getItem() instanceof LOTRItemAxe || weapon.getItem() instanceof LOTRItemBattleaxe) { + sword.damageItem((int) (event.ammount *1.5), player); // Axes deal 150% the Durability damage + player.clearItemInUse(); + world.playSoundAtEntity(player, "random.anvil_land", 1F, 2F); + additionalDamage = 0.75f; // Only 25% Passes through + } else if (weapon.getItem() instanceof LOTRItemHammer) { + sword.damageItem((int) event.ammount, player); // Hammers bypass the block better, but only deal 100% of the durability damage + player.clearItemInUse(); + world.playSoundAtEntity(player, "random.anvil_land", 1F, 2F); + additionalDamage = 0.5f; // Only 50% Passes through + } else { + additionalDamage = 0.0f; // 0% Damage Passes through + sword.damageItem((int) (event.ammount/2), player); //Swords only deal 50% of durability damage + player.clearItemInUse(); + world.playSoundAtEntity(player, "random.anvil_land", 1F, 2F); + } + + float newDamage = event.ammount * (additionalDamage); // Calculate new damage + float newHealth = player.getHealth() - (newDamage - event.ammount); // Calculate health after applying extra damage + + if (newHealth > 0) { + player.setHealth(newHealth); + event.setCanceled(true); + } else { + event.ammount = player.getHealth(); // Ensure player dies if health reaches 0 or below + } + + } + } + } + */ + + + + // Negative Arrow Protection Handler + if (!event.entityLiving.worldObj.isRemote && event.source.isProjectile() && event.entityLiving instanceof EntityPlayerMP player) { + // player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "DEBUG: Initial Damage: " + event.ammount)); + + float totalAdditionalDamage = 0.0f; // Initialize total additional damage + + for (int i = 0; i < 4; i++) { + ItemStack armor = player.getEquipmentInSlot(i + 1); + if (armor != null) { + LOTREnchantment protectRangedWeak1 = LOTREnchantment.getEnchantmentByName("protectRangedWeak1"); + LOTREnchantment protectRangedWeak2 = LOTREnchantment.getEnchantmentByName("protectRangedWeak2"); + + if (LOTREnchantmentHelper.hasEnchant(armor, protectRangedWeak1)) { + float additionalDamage = 0.2f; // 20% more damage per piece + totalAdditionalDamage += additionalDamage; // Accumulate damage increase + } + if (LOTREnchantmentHelper.hasEnchant(armor, protectRangedWeak2)) { + float additionalDamage = 0.4f; // 40% more damage per piece + totalAdditionalDamage += additionalDamage; // Accumulate damage increase + } + } + } + + // Apply total additional damage + if (totalAdditionalDamage > 0) { + float newDamage = event.ammount * (1 + totalAdditionalDamage); // Calculate new damage + float newHealth = player.getHealth() - (newDamage - event.ammount); // Calculate health after applying extra damage + + if (newHealth > 0) { + player.setHealth(newHealth); + event.setCanceled(true); + } else { + event.ammount = player.getHealth(); // Ensure player dies if health reaches 0 or below + } + + // player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "DEBUG: Total Additional Damage: " + newDamage)); + } + } + + // Broken Halo Event handler + if (attacker != null && event.source.getSourceOfDamage() == attacker) { + ItemStack helmet = entity.getEquipmentInSlot(4); + if (helmet != null && helmet.getItem() instanceof BrokenHalo) { + + if (random.nextDouble() <= 0.25) { + // Summon Corrupt Civilian NPC + CorruptMan spawnedEntity = new CorruptMan(world); + spawnedEntity.copyLocationAndAnglesFrom(attacker); + + // Randomly select main weapon + ItemStack mainWeapon = getRandomWeapon(); + spawnedEntity.npcItemsInv.setIdleItem(mainWeapon); + spawnedEntity.npcItemsInv.setMeleeWeapon(mainWeapon); + spawnedEntity.setHealth(10); + spawnedEntity.addPotionEffect(new PotionEffect(Potion.regeneration.id, 9999, 0)); + + spawnedEntity.onSpawnWithEgg(null); + world.spawnEntityInWorld(spawnedEntity); + world.playAuxSFXAtEntity(null, 1016, (int) spawnedEntity.posX, (int) spawnedEntity.posY, (int) spawnedEntity.posZ, 0); + world.playSoundAtEntity(entity, "mob.zombie.unfect", 1F, 1F); + + } + } + } + + // Smithing Rework event handler + if (attacker instanceof EntityPlayerMP player) { + ItemStack weapon = player.getHeldItem(); + // smithing rework for melee + if (weapon !=null && (weapon.getItem() instanceof LOTRItemSpear || weapon.getItem() instanceof LOTRItemSword || weapon.getItem() instanceof LOTRItemDagger || weapon.getItem() instanceof LOTRItemBattleaxe || weapon.getItem() instanceof LOTRItemHammer || weapon.getItem() instanceof ItemSword)) { + float[] durabilityThresholds = {0.6f, 0.5f, 0.4f}; + double[] probabilities = {0.02, 0.05, 0.1}; + + if (weapon.isItemStackDamageable()) { + float durabilityPercent = (float) (weapon.getMaxDamage() - weapon.getItemDamage() / weapon.getMaxDamage()); + for (int j = 0; j < durabilityThresholds.length; j++) { + if (durabilityPercent <= durabilityThresholds[j] && random.nextDouble() <= probabilities[j]) { + addNegativeModifier(weapon, player, "weapon"); + break; // Exit loop once a modifier is added + } + } + } + } + } + if (entity instanceof EntityPlayerMP player) { + + // Durability thresholds and corresponding probabilities for adding a negative modifier + float[] durabilityThresholds = {0.6f, 0.5f, 0.4f}; + double[] probabilities = {0.02, 0.05, 0.1}; + + for (int i = 0; i < 4; ++i) { + ItemStack armor = player.getEquipmentInSlot(i + 1); + if (armor != null && armor.isItemStackDamageable()) { + float durabilityPercent = (float) (armor.getMaxDamage() - armor.getItemDamage()) / armor.getMaxDamage(); + // Check each threshold and apply negative modifier if conditions are met + for (int j = 0; j < durabilityThresholds.length; j++) { + if (durabilityPercent <= durabilityThresholds[j] && random.nextDouble() <= probabilities[j]) { + addNegativeModifier(armor, player, "armor"); + break; // Exit loop once a modifier is added + } + } + } + } + } + } + + private void sendNegativeModifierMessage(EntityPlayerMP player, String type) { + player.addChatMessage(new ChatComponentText( + EnumChatFormatting.RED + "Your " + + EnumChatFormatting.GOLD + type + + EnumChatFormatting.RED + " has received a negative modifier!" + )); + } + private void playNegativeModifierSound(World world, double x, double y, double z) { + world.playSoundEffect(x, y, z, "mob.irongolem.hit", 1.0F, 2.0F); + } + private void addNegativeModifier(ItemStack item, EntityPlayerMP player, String type) { + NBTTagCompound tag = item.getTagCompound(); + if (tag == null) { + tag = new NBTTagCompound(); + item.setTagCompound(tag); + } + + if (!tag.hasKey("LOTREnch")) { + tag.setTag("LOTREnch", new NBTTagList()); + } + + NBTTagList enchList = tag.getTagList("LOTREnch", 8); // 8 is the type for strings + boolean protectWeakUpgraded = false; + boolean protectRangedWeakUpgraded = false; + boolean upgraded = false; + + boolean meleeSwift = false; + boolean meleeReach = false; + + if (type.equals("armor")) { + // First, iterate and upgrade if necessary + for (int i = 0; i < enchList.tagCount(); i++) { + String ench = enchList.getStringTagAt(i); + switch (ench) { + case "protectWeak1" -> { + enchList.removeTag(i); + enchList.appendTag(new NBTTagString("protectWeak2")); + protectWeakUpgraded = true; + i--; // Adjust index after removal + playNegativeModifierSound(player.worldObj, player.posX, player.posY, player.posZ); + sendNegativeModifierMessage(player, "Armor"); + } + case "protectRangedWeak1" -> { + enchList.removeTag(i); + enchList.appendTag(new NBTTagString("protectRangedWeak2")); + protectRangedWeakUpgraded = true; + i--; // Adjust index after removal + playNegativeModifierSound(player.worldObj, player.posX, player.posY, player.posZ); + sendNegativeModifierMessage(player, "Armor"); + } + case "protectWeak2" -> protectWeakUpgraded = true; + case "protectRangedWeak2" -> protectRangedWeakUpgraded = true; + } + } + // After upgrading, check if we need to add a new modifier + if (!protectWeakUpgraded || !protectRangedWeakUpgraded) { + // Separate conditions for adding new modifiers + if (!protectWeakUpgraded && !protectRangedWeakUpgraded) { + // Randomly add either protectWeak1 or protectRangedWeak1 + String[] possibleModifiers = {"protectWeak1", "protectRangedWeak1"}; + String newModifier = possibleModifiers[random.nextInt(possibleModifiers.length)]; + enchList.appendTag(new NBTTagString(newModifier)); + } else if (!protectWeakUpgraded) { + // Only protectWeak1 is added + enchList.appendTag(new NBTTagString("protectWeak1")); + } else if (!protectRangedWeakUpgraded) { + // Only protectRangedWeak1 is added + enchList.appendTag(new NBTTagString("protectRangedWeak1")); + } + playNegativeModifierSound(player.worldObj, player.posX, player.posY, player.posZ); + sendNegativeModifierMessage(player, "Armor"); + } + + tag.setTag("LOTREnch", enchList); + } else if (type.equals("bow")) { + for (int i = 0; i < enchList.tagCount(); i++) { + String ench = enchList.getStringTagAt(i); + switch (ench) { + case "rangedWeak1" -> { + enchList.removeTag(i); + enchList.appendTag(new NBTTagString("rangedWeak2")); + upgraded = true; + i--; // Adjust index after removal + playNegativeModifierSound(player.worldObj, player.posX, player.posY, player.posZ); + sendNegativeModifierMessage(player, "Bow"); + } + case "rangedWeak2" -> { + enchList.removeTag(i); + enchList.appendTag(new NBTTagString("rangedWeak3")); + upgraded = true; + i--; // Adjust index after removal + playNegativeModifierSound(player.worldObj, player.posX, player.posY, player.posZ); + sendNegativeModifierMessage(player, "Bow"); + } + case "rangedWeak3" -> upgraded = true; + } + } + if (!upgraded) { + // Randomly add either rangedWeak1... etc + String[] possibleModifiers = {"rangedWeak1", "rangedWeak2", "rangedWeak3"}; + String newModifier = possibleModifiers[random.nextInt(possibleModifiers.length)]; + enchList.appendTag(new NBTTagString(newModifier)); + playNegativeModifierSound(player.worldObj, player.posX, player.posY, player.posZ); + sendNegativeModifierMessage(player, "Weapon"); + } + } else if (type.equals("weapon")) { + // First, iterate and upgrade if necessary + for (int i = 0; i < enchList.tagCount(); i++) { + String ench = enchList.getStringTagAt(i); + switch (ench) { + case "weak1" -> { + enchList.removeTag(i); + enchList.appendTag(new NBTTagString("weak2")); + upgraded = true; + i--; // Adjust index after removal + playNegativeModifierSound(player.worldObj, player.posX, player.posY, player.posZ); + sendNegativeModifierMessage(player, "Weapon"); + } + case "weak3" -> { + enchList.removeTag(i); + enchList.appendTag(new NBTTagString("weak4")); + upgraded = true; + i--; // Adjust index after removal + playNegativeModifierSound(player.worldObj, player.posX, player.posY, player.posZ); + sendNegativeModifierMessage(player, "Weapon"); + } + case "weak4" -> upgraded = true; + case "meleeSlow1" -> meleeSwift = true; + case "meleeUnreach1" -> meleeReach = true; + } + } + // After upgrading, check if we need to add a new modifier + if (!upgraded || !meleeSwift || !meleeReach) { + // Separate conditions for adding new modifiers + if (!upgraded && !meleeSwift && !meleeReach) { + // Randomly add one of the possible modifiers + String[] possibleModifiers = {"weak1", "weak2", "weak3", "weak4", "meleeSlow1", "meleeUnreach1"}; + String newModifier = possibleModifiers[random.nextInt(possibleModifiers.length)]; + enchList.appendTag(new NBTTagString(newModifier)); + } else if (!upgraded) { + // Only weak modifier is added + String[] weakModifiers = {"weak1", "weak2", "weak3", "weak4"}; + String newModifier = weakModifiers[random.nextInt(weakModifiers.length)]; + enchList.appendTag(new NBTTagString(newModifier)); + } else if (!meleeSwift) { + // Only meleeSlow1 is added + enchList.appendTag(new NBTTagString("meleeSlow1")); + } else if (!meleeReach) { + // Only meleeUnreach1 is added + enchList.appendTag(new NBTTagString("meleeUnreach1")); + } + + playNegativeModifierSound(player.worldObj, player.posX, player.posY, player.posZ); + sendNegativeModifierMessage(player, "Weapon"); + } + + + tag.setTag("LOTREnch", enchList); + } + } + + + + private ItemStack getRandomWeapon() { + Item[] weapons = new Item[]{LOTRMod.blacksmithHammer, LOTRMod.daggerIron, LOTRMod.dunlendingTrident, LOTRMod.battleaxeBronze, CinderLoE.cleaver}; + return new ItemStack(weapons[random.nextInt(weapons.length)]); + } + + @Override + public int getBurnTime(ItemStack fuel) { + return 0; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/CinderLoE.java b/src (1)/main/java/com/zivilon/cinder_loe/CinderLoE.java new file mode 100644 index 0000000..9d35e85 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/CinderLoE.java @@ -0,0 +1,1396 @@ +package com.zivilon.cinder_loe; + +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.client.render.projectile.*; +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.entity.npc.*; +import com.zivilon.cinder_loe.entity.npc.dwarf.RedDwarfArbalest; +import com.zivilon.cinder_loe.entity.npc.dwarf.RedDwarfBannerBearer; +import com.zivilon.cinder_loe.entity.npc.dwarf.RedDwarfCommander; +import com.zivilon.cinder_loe.entity.npc.dwarf.RedDwarfWarrior; +import com.zivilon.cinder_loe.entity.npc.elf.Sirrandrai; +import com.zivilon.cinder_loe.entity.npc.evil_human.*; +import com.zivilon.cinder_loe.entity.npc.good_human.*; +import com.zivilon.cinder_loe.entity.npc.orc.MorgulOrc; +import com.zivilon.cinder_loe.entity.npc.orc.NorthernOrc; +import com.zivilon.cinder_loe.entity.npc.radagast.*; +import com.zivilon.cinder_loe.entity.projectile.*; +import com.zivilon.cinder_loe.entity.trader.*; +import com.zivilon.cinder_loe.items.*; +import com.zivilon.cinder_loe.potion.LoEPotions; +import com.zivilon.cinder_loe.tileentity.*; +import com.zivilon.cinder_loe.util.Utilities; +import com.zivilon.cinder_loe.world.event.*; +import com.zivilon.cindercore.CinderCore; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.util.TraceClassVisitor; + +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.Instance; +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.registry.EntityRegistry; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; + +import lotr.client.render.entity.*; +import lotr.client.render.tileentity.LOTRRenderUtumnoPortal; +import lotr.common.LOTRCreativeTabs; +import lotr.common.LOTRMod; +import lotr.common.entity.animal.*; +import lotr.common.entity.npc.*; +import lotr.common.entity.projectile.LOTREntityGandalfFireball; +import lotr.common.item.*; +import lotr.common.world.biome.LOTRBiome; +import lotr.common.world.spawning.LOTRBiomeSpawnList; +import lotr.common.world.spawning.LOTRSpawnEntry; +import lotr.common.world.spawning.LOTRSpawnList; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.potion.Potion; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.WorldEvent; + +import static lotr.common.LOTRMod.horseArmorIron; +import static lotr.common.item.LOTRMaterial.GONDOR; + +import net.minecraft.command.ICommandSender; +import net.minecraft.command.CommandBase; +import net.minecraft.util.ChatComponentText; +import net.minecraftforge.client.ClientCommandHandler; +import com.zivilon.cinder_loe.SwiftnessHandler; + +@Mod( + modid = "cinder_loe", + version = "1.3.0", + name = "CinderLoE", + dependencies = "required-after:spongemixins@[1.1.0,);required-after:lotr", + acceptedMinecraftVersions = "[1.7.10]", + acceptableRemoteVersions = "[1.3.0]") +public class CinderLoE { + + @Instance("cinder_loe") + public static CinderLoE instance; + + public static Logger LOG = LogManager.getLogger(Tags.MODID); + public static boolean DEBUG = false; + + // LOTR Materials + public static LOTRMaterial MATERIAL_RED_DWARF; + public static LOTRMaterial MATERIAL_BONEMOLD; + public static LOTRMaterial MATERIAL_LIMWAITH_WOOD; + public static LOTRMaterial EVENT; + public static LOTRMaterial MATERIAL_BREE; + public static LOTRMaterial MATERIAL_RHUDAUR; + public static LOTRMaterial MATERIAL_BATTLENUN; + public static LOTRMaterial MATERIAL_ASH; + public static LOTRMaterial MATERIAL_SERPENT; + public static LOTRMaterial MATERIAL_USURPER; + public static LOTRMaterial MATERIAL_WARLORD; + public static LOTRMaterial MATERIAL_JADE; + + // Blocks + // public static Block barricade; + public static Block cinderBlock; + public static Block ivoryBlock; + public static Block blockRedDwarfSteel; + public static Block barsRedDwarf; + public static Block chandelierRedDwarf; + public static Block furBundle; + public static Block leatherBundle; + public static Block reedBale; + public static Block dwarvenBrickRuned; + public static Block fishBarrel; + ///public static Block rustedsword; + public static Block mistBlock; + public static Block cutDrystone; + public static Block cindercobble; + public static Block cinderfur; + public static Block furCarpet; + public static Block reeflessCoral; + public static Block silverChain; + public static Block goldChain; + public static Block ironChain; + public static Block bronzeChain; + + public static Block plaster; + public static Block voidblock; + public static Block entityBarrier; + public static Block woodpanel; + + //public static Block verticalWeaponRack; + + //Gates + //public static Block gatecharredportcullis; + + //Food Crop blocks + public static Block onionCrop; + public static Block cabbageCrop; + + //Food! Yum :P + public static Item onion; + public static Item cabbage; + public static Item pelmen; + public static Item spice; + public static Item spicedHam; + public static Item lightStew; + + public static Item chocolatebar; + public static Item fruitsalad; + public static Item flour; + public static Item dough; + public static Item pasta; + public static Item pretzel; + public static Item halva; + // public static Item honey; + public static Item doner_kebab; + + // Brews + public static Item mugElfBrew; + public static Item mugHumanBrew; + public static Item mugOrcBrew; + public static Item mugDwarfBrew; + public static Item spiceElven; + public static Item spiceHuman; + public static Item spiceOrcish; + public static Item spiceDwarven; + + + // Event/special + public static Item frostblade; + public static Item daggervoid; + public static Item spearsolidgold; + public static Item spearUnnamed; + public static Item swordAsh; + public static Item staffAsh; + 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; + public static Item helmetbrokenhalo; + public static Item helmetJade; + public static Item bodyJade; + public static Item legsJade; + public static Item bootsJade; + + // Misc + public static Item forgingKit; + public static Item cinderFurItem; + + // Common tools/weapons + public static Item whip; + public static Item cleaver; + public static Item warDart; + public static Item warDartHeads; + + // Elite Armors/weapons + public static Item helmetserpent; + public static Item bodyserpent; + public static Item legsserpent; + public static Item bootsserpent; + public static Item helmetUsurper; + public static Item bodyUsurper; + public static Item legsUsurper; + public static Item bootsUsurper; + public static Item helmetWarlord; + public static Item bodyWarlord; + public static Item legsWarlord; + public static Item bootsWarlord; + public static Item maceWarlord; + // public static Item bowserpent; + //public static Item swordUsurper; + + + // Red Dwarves + public static Item redDwarfSteel; + public static Item helmetRedDwarf; + public static Item bodyRedDwarf; + public static Item legsRedDwarf; + public static Item bootsRedDwarf; + public static Item spearRedDwarf; + public static Item swordRedDwarf; + public static Item battleaxeRedDwarf; + public static Item pikeRedDwarf; + public static Item hammerRedDwarf; + public static Item daggerRedDwarf; + public static Item daggerRedDwarfPoisoned; + public static Item crossbowRedDwarf; + public static Item boarArmorRedDwarf; + public static LOTRUnitTradeEntries RED_DWARF_COMMANDER; + + // Rhudaur + public static Item helmetRhudaur; + public static Item bodyRhudaur; + public static Item legsRhudaur; + public static Item bootsRhudaur; + + // 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; + public static Item battleaxeLimwaith; + public static Item daggerLimwaith; + public static Item daggerLimwaithPoisoned; + public static Item blowgunLimwaith; + public static LOTRUnitTradeEntries LIMWAITH_COMMANDER; + + //Bree + public static Item helmetBree; + public static Item helmetBreeKettle; + public static Item bodyBree; + public static Item legsBree; + public static Item bootsBree; + public static Item swordBree; + public static LOTRUnitTradeEntries BREE_CAPTAIN; + + // Arnor + public static Item helmetArnorBanner; + public static Item bodyArnorBanner; + public static Item legsArnorBanner; + public static Item bootsArnorBanner; + public static Item maceArnor; + public static LOTRUnitTradeEntries ARNOR_CAPTAIN; + + // Wizards + public static Item radagastStaff; + public static Item pallandoStaff; + public static Item alatarStaff; + public static Item sarumanStaff; + public static Item sarumanWhiteStaff; + + // Relics + public static Item welfRelic; + // Spawn eggs + public static Item spawnEgg; + public static Item unitLevelTool; + + // Spawn lists + public static LOTRSpawnList RED_DWARF; + public static LOTRSpawnList LIMWAITH; + public static LOTRSpawnList RHUDAUR; + + public static CinderEventHandler modEventHandler; + + @Mod.EventHandler + public void preInit(FMLPreInitializationEvent event) { + CinderLoE_Config.init(event); + Materials.registerMaterials(); + registerBlocks(); + registerItems(); + ItemRegistration.registerItems(); + registerEntities(); + modEventHandler = new CinderEventHandler(); + LoEPotions.registerPotions(); + } + + @Mod.EventHandler + public void init(FMLInitializationEvent event) { + CommonProxy proxy = event.getSide() == Side.CLIENT ? new ClientProxy() : new ServerProxy(); + proxy.setup(); + if (FMLCommonHandler.instance().getEffectiveSide().isServer()) { + FMLCommonHandler.instance().bus().register(this); + } + MinecraftForge.EVENT_BUS.register(this); + new CharacterEventListener(); +<<<<<<< HEAD + FMLCommonHandler.instance().bus().register(new WarbandTickHandler()); +======= + MinecraftForge.EVENT_BUS.register(new SwiftnessHandler()); +>>>>>>> 8e7cde676647c7cbbe3fba596e024ea046cf50e6 + } + + + @Mod.EventHandler + public void postInit(FMLPostInitializationEvent event) { + if (event.getSide() + .isServer()) { + SpeechBankModifier.insertSpeechBanks(); + modifySpawnLists(); + } + Utilities.initialize_reflects(); + recipes.registerRecipes(); + setupTradeEntries(); + LOTRWeaponStats.registerMeleeReach(Whip.class, 1.5F); + LoECreativeTabs.setupIcons(); + } + + + @Mod.EventHandler + public void serverStarting(FMLServerStartingEvent event) { + CharacterRoleAPI.loadRolesFromFile(); + event.registerServerCommand(new CommandCinderCharacter()); + } + + public void registerEntities() { // Last ID added: 60 + ///GameRegistry.registerTileEntity(TileEntityMistBlock.class, "TileEntityMistBlock"); + ///.registerBlock(TileEntityRustedSword, "TileEntityRustedSword"); + + int entityID = 7320; // Always increment entityID by 1 over the last entity to ensure unique IDs + + // Traders + EntityRegistry.registerModEntity(RedDwarfSmith.class, "RedDwarfSmith", (entityID + 29), 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(BladorthinSmith.class, "BladorthinSmith", (entityID + 43), this, 64, 1, true); + + + // Event + EntityRegistry.registerModEntity(DarkSpider.class, "DarkSpider", (entityID + 42), 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(Renegade.class, "Renegade", (entityID + 1), this, 64, 1, true); + EntityRegistry.registerModEntity(RenegadeCaptain.class, "RenegadeCaptain", (entityID + 16), this, 64, 1, true); + EntityRegistry.registerModEntity(FangornBear.class, "FangornBear", (entityID + 6), this, 64, 1, true); + EntityRegistry.registerModEntity(FangornWildBoar.class, "FangornWildBoar", (entityID + 7), this, 64, 1, true); + EntityRegistry.registerModEntity(FangornAuroch.class, "FangornAuroch", (entityID + 8), this, 64, 1, true); + EntityRegistry.registerModEntity(FangornElk.class, "FangornElk", (entityID + 9), this, 64, 1, true); + EntityRegistry.registerModEntity(FangornWolf.class, "FangornWolf", (entityID + 10), this, 64, 1, true); + EntityRegistry.registerModEntity(Wraith.class, "Wraith", (entityID + 15), this, 64, 1, true); + EntityRegistry.registerModEntity(CorruptSkeleton.class, "CorruptSkeleton", (entityID + 59), this, 64, 1, true); + EntityRegistry.registerModEntity(CorruptSkeletonArcher.class, "CorruptSkeletonArcher", (entityID + 60), this, 64, 1, true); + + //Misc + EntityRegistry.registerModEntity(EntityWarDart.class, "WarDart", (entityID + 44), this, 64, 1, true); + EntityRegistry.registerModEntity(SarumanFireball.class, "SarumanFireball", entityID + 0, this, 64, 10, true); + EntityRegistry.registerModEntity(SarumanWhiteFireball.class, "SarumanWhiteFireball", entityID + 61, this, 64, 10, true); + EntityRegistry.registerModEntity(LOTREntitySauron.class, "LOTREntitySauron", (entityID + 28), this, 64, 1, true); + EntityRegistry.registerModEntity(UtumnoSlaveTrader.class, "UtumnoSlaveTrader", (entityID + 30), this, 64, 1, true); + + // Faction Units + EntityRegistry.registerModEntity(RedDwarfWarrior.class, "RedDwarfWarrior", (entityID + 2), this, 64, 1, true); + EntityRegistry.registerModEntity(RedDwarfArbalest.class, "RedDwarfArbalest", (entityID + 3), this, 64, 1, true); + EntityRegistry.registerModEntity(RedDwarfBannerBearer.class, "RedDwarfBannerBearer", (entityID + 4), this, 64, 1, true); + EntityRegistry.registerModEntity(RedDwarfCommander.class, "RedDwarfCommander", (entityID + 5), this, 64, 1, true); + + // EntityRegistry.registerModEntity(FangornWolf.class, "TamedCrocodile", (entityID + 35), 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(LimwaithChieftain.class, "LimwaithChieftain", (entityID + 14), this, 64, 1, true); + + EntityRegistry.registerModEntity(ArnorSoldier.class, "ArnorSoldier", (entityID + 17), this, 64, 1, true); + EntityRegistry.registerModEntity(ArnorSoldierArcher.class, "ArnorSoldierArcher", (entityID + 19), this, 64, 1, true); + EntityRegistry.registerModEntity(ArnorCaptain.class, "ArnorCaptain", (entityID + 20), this, 64, 1, true); + EntityRegistry.registerModEntity(ArnorBannerBearer.class, "ArnorBannerBearer", (entityID + 21), this, 64, 1, true); + + EntityRegistry.registerModEntity(BreeSoldier.class, "BreeSoldier", (entityID + 22), this, 64, 1, true); + EntityRegistry.registerModEntity(BreeCrossbowman.class, "BreeCrossbowman", (entityID + 23), this, 64, 1, true); + EntityRegistry.registerModEntity(BreeCaptain.class, "BreeCaptain", (entityID + 24), this, 64, 1, true); + EntityRegistry.registerModEntity(BreeSoldierBannerBearer.class, "BreeSoldierBannerBearer", (entityID + 25), this, 64, 1, true); + EntityRegistry.registerModEntity(BreeOutrider.class, "BreeOutrider", (entityID + 26), this, 64, 1, true); + + EntityRegistry.registerModEntity(HobbitBannerBearer.class, "HobbitBannerBearer", (entityID + 52), this, 64, 1, true); + // Objective and Custom npcs + EntityRegistry.registerModEntity(BattleNun.class, "BattleNun", (entityID + 27), this, 64, 1, true); + EntityRegistry.registerModEntity(MorgulOrc.class, "MorgulOrc", (entityID + 53), this, 64, 1, true); + EntityRegistry.registerModEntity(RhudaurSoldier.class, "RhudaurSoldier", (entityID + 54), this, 64, 1, true); + EntityRegistry.registerModEntity(NorthernOrc.class, "NorthernOrc", (entityID + 55), this, 64, 1, true); + EntityRegistry.registerModEntity(EsgarothSoldier.class, "EsgarothSoldier", (entityID + 56), this, 64, 1, true); + EntityRegistry.registerModEntity(TauredainTrueBlood.class, "TauredainTrueBlood", (entityID + 57), this, 64, 1, true); + EntityRegistry.registerModEntity(Sirrandrai.class, "Sirrandrai", (entityID + 58), this, 64, 1, true); + + } + + public void registerBlocks() { + // barricade + // barricade = (new barricade()); + // GameRegistry.registerBlock(barricade, "barricade"); + + // Cinder Block + cinderBlock = (new CinderBlock()); + GameRegistry.registerBlock(cinderBlock, "cinderBlock"); + + // Ivory Block + ivoryBlock = (new IvoryBlock()); //Unobtainable + GameRegistry.registerBlock(ivoryBlock, "ivoryBlock"); + + // Reefless Coral + reeflessCoral = (new reeflessCoral()); + GameRegistry.registerBlock(reeflessCoral, "reeflessCoral"); + + // Red Dwarven Steel Block + blockRedDwarfSteel = (new BlockRedDwarfSteel()); + GameRegistry.registerBlock(blockRedDwarfSteel, "blockRedDwarfSteel"); + + // Red Dwarven Steel Bars + barsRedDwarf = (new RedDwarfBars()); + GameRegistry.registerBlock(barsRedDwarf, "barsRedDwarf"); + + // Red dwarven chandelier + chandelierRedDwarf = (new RedDwarfChandelier()); + GameRegistry.registerBlock(chandelierRedDwarf, "chandelierRedDwarf"); + + // Bundles + furBundle = (new FurBundle()); + GameRegistry.registerBlock(furBundle, "furBundle"); + leatherBundle = (new LeatherBundle()); + GameRegistry.registerBlock(leatherBundle, "leatherBundle"); + reedBale = (new ReedBale()); + GameRegistry.registerBlock(reedBale, "reedBale"); + + // Unique + dwarvenBrickRuned = (new RunedDwarvenBrick()); + GameRegistry.registerBlock(dwarvenBrickRuned, "dwarvenBrickRuned"); + // verticalWeaponRack = new VerticalWeaponRack(); + // GameRegistry.registerTileEntity(LOTRTileEntityWeaponRack.class, "verticalWeaponRack"); + // GameRegistry.registerBlock(verticalWeaponRack, "verticalWeaponRack"); + //Decor + ///rustedsword = (new RustedSword()); + ///GameRegistry.registerBlock(rustedsword, "rustedsword"); + // Barrel + fishBarrel = (new FishBarrel()); + GameRegistry.registerBlock(fishBarrel, "fishbarrel"); + + // Chains + silverChain = (new silverChain()); + GameRegistry.registerBlock(silverChain, "silverChain"); + goldChain = (new goldChain()); + GameRegistry.registerBlock(goldChain, "goldChain"); + ironChain = (new ironChain()); + GameRegistry.registerBlock(ironChain, "ironChain"); + bronzeChain = (new bronzeChain()); + GameRegistry.registerBlock(bronzeChain, "bronzeChain"); + + + // Staff + mistBlock = (new MistBlock()); + GameRegistry.registerBlock(mistBlock, "mist"); + voidblock = (new voidblock()); + GameRegistry.registerBlock(voidblock, "voidblock"); + entityBarrier = (new EntityBarrier()); + GameRegistry.registerBlock(entityBarrier, "entity_barrier"); + + // Building Blocks + cutDrystone = (new cutDrystone()); + GameRegistry.registerBlock(cutDrystone, "cutDrystone"); + + cindercobble = (new CobbleBlock()); + GameRegistry.registerBlock(cindercobble, CinderBlockMetaData.class, "cindercobble"); + + cinderfur = (new CinderFurBlock()); + GameRegistry.registerBlock(cinderfur, CinderBlockMetaData.class, "cinderfur"); + furCarpet = (new FurCarpet()); + GameRegistry.registerBlock(furCarpet, CinderBlockMetaData.class, "furCarpet"); + + plaster = (new plaster()); + GameRegistry.registerBlock(plaster, "plaster"); + + woodpanel = (new woodpanel()); + GameRegistry.registerBlock(woodpanel, "woodpanel"); + + // Gates + //gatecharredportcullis = LOTRBlockGate.createWooden(false).setBlockName("lotr:gatecharredportcullis"); + //GameRegistry.registerBlock(gatecharredportcullis, "gatecharredportcullis"); + + //Food Crops + onionCrop = new onionCrop().setBlockName("onion"); + GameRegistry.registerBlock(onionCrop, "onionCrop"); + cabbageCrop = new cabbageCrop().setBlockName("cabbage"); + GameRegistry.registerBlock(cabbageCrop, "cabbageCrop"); + + + } + + public void registerItems() { + // Get materials tab via reflection because ForgeGradle insists on obfuscating it when it should not + LOTRCreativeTabs materials = null; + try { + Field tabField = LOTRCreativeTabs.class.getDeclaredField("tabMaterials"); // Stupid workaround because ForgeGradle tries to obfuscate field LOTRCreativeTabs.tabBlock when it's not supposed to be + materials = (LOTRCreativeTabs) tabField.get(null); + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + // Food + // onion = new ItemSeedFood(3, 0.3f, CinderLoE.onionCrop, Blocks.farmland).setUnlocalizedName("lotr:onion").setTextureName("lotr:onion"); + //cabbage = new ItemSeedFood(3, 0.3f, CinderLoE.cabbageCrop, Blocks.farmland).setUnlocalizedName("lotr:cabbage").setTextureName("lotr:cabbage");; + spice = new CinderItemFood(1, 0.0f, false).setdamageAmount(2).setPotionEffect(Potion.moveSpeed.id, 5,0,100).setUnlocalizedName("lotr:spice").setTextureName("lotr:spice"); + spicedHam = new CinderItemFood(9, 0.6f, true).setdamageAmount(2).setPotionEffect(Potion.moveSpeed.id, 15, 0, 100).setUnlocalizedName("lotr:spicedHam").setTextureName("lotr:spicedHam"); + // spice = new LOTRItemFood(1, 0.0f, false).setPotionEffect(Potion.moveSpeed.id, 10,0,100).setUnlocalizedName("lotr:spice"); + pelmen = new LOTRItemFood(4, 5.0f, true).setUnlocalizedName("lotr:pelmen").setTextureName("lotr:pelmen"); + onion = new LOTRItemFood(3, 0.3f, false).setUnlocalizedName("lotr:onion").setTextureName("lotr:onion"); + cabbage = new LOTRItemFood(4, 0.5f, false).setUnlocalizedName("lotr:cabbage").setTextureName("lotr:cabbage"); + lightStew = new LOTRItemStew(6, 0.7f, false).setPotionEffect(Potion.damageBoost.id, 60, 0, 100).setUnlocalizedName("lotr:lightStew").setTextureName("lotr:lightStew"); + chocolatebar = new LOTRItemFood(4,0.3f, false).setUnlocalizedName("lotr:chocolatebar").setTextureName("lotr:chocolatebar"); + fruitsalad = new LOTRItemStew(6, 0.5f, false).setPotionEffect(Potion.field_76444_x.id, 60, 0,1).setUnlocalizedName("lotr:fruitsalad").setTextureName("lotr:fruitsalad"); + flour = new LOTRItemFood(0,0.0f, false).setPotionEffect(Potion.confusion.id, 5,0,100).setUnlocalizedName("lotr:flour").setTextureName("lotr:flour"); + dough = new LOTRItemFood(1,0.0f, false).setPotionEffect(Potion.hunger.id, 5,0,100).setUnlocalizedName("lotr:dough").setTextureName("lotr:dough"); + pasta = new LOTRItemFood(2,0.0f, false).setPotionEffect(Potion.hunger.id, 5,0,100).setUnlocalizedName("lotr:pasta").setTextureName("lotr:pasta"); + pretzel = new LOTRItemFood(4,1.0f, false).setUnlocalizedName("lotr:pretzel").setTextureName("lotr:pretzel"); + halva = new LOTRItemFood (7, 4.0f, false).setUnlocalizedName("lotr:halva").setTextureName("lotr:halva"); + doner_kebab = new LOTRItemFood (6, 6.0f, false).setUnlocalizedName("lotr:doner_kebab").setTextureName("lotr:doner_kebab"); + // honey = new LOTRItemFood(3, 0.4f, false).setPotionEffect(Potion.regeneration.id, 5, 0, 100).setUnlocalizedName("lotr:honey").setTextureName("lotr:honey"); + spiceElven = new Item().setUnlocalizedName("lotr:spice_elven").setTextureName("lotr:spice_elven"); + spiceHuman = new Item().setUnlocalizedName("lotr:spice_human").setTextureName("lotr:spice_human"); + spiceOrcish = new Item().setUnlocalizedName("lotr:spice_orcish").setTextureName("lotr:spice_orcish"); + spiceDwarven = new Item().setUnlocalizedName("lotr:spice_dwarven").setTextureName("lotr:spice_dwarven"); + mugElfBrew = (new LoEItemMug(0.0F)).setDrinkStats(20, 1.0F).addPotionEffect(Potion.moveSpeed.id, 180, 1).toxic().setUnlocalizedName("lotr:mugElfBrew"); + mugHumanBrew = (new LoEItemMug(0.0F)).setDrinkStats(20, 1.0F).addPotionEffect(Potion.regeneration.id, 180, 1).toxic().setUnlocalizedName("lotr:mugHumanBrew"); + mugOrcBrew = (new LoEItemMug(0.0F)).setDrinkStats(20, 1.0F).addPotionEffect(Potion.damageBoost.id, 180, 1).toxic().setUnlocalizedName("lotr:mugOrcBrew"); + mugDwarfBrew = (new LoEItemMug(0.0F)).setDrinkStats(20, 1.0F).addPotionEffect(Potion.field_76443_y.id, 360).toxic().setUnlocalizedName("lotr:mugDwarfBrew"); + ((LoEItemMug)mugElfBrew).setTextureNameFromUnlocalizedName(); + ((LoEItemMug)mugHumanBrew).setTextureNameFromUnlocalizedName(); + ((LoEItemMug)mugOrcBrew).setTextureNameFromUnlocalizedName(); + ((LoEItemMug)mugDwarfBrew).setTextureNameFromUnlocalizedName(); + + spawnEgg = new CinderLoESpawnEgg(); + + // Wizard Staves + radagastStaff = (new RadagastStaff()).setUnlocalizedName("lotr:radagastStaff").setTextureName("lotr:radagastStaff"); + pallandoStaff = (new PallandoStaff()).setUnlocalizedName("lotr:pallandoStaff").setTextureName("lotr:pallandoStaff"); + alatarStaff = (new AlatarStaff()).setUnlocalizedName("lotr:alatarStaff").setTextureName("lotr:alatarStaff"); + sarumanStaff = (new SarumanStaff()).setUnlocalizedName("lotr:sarumanStaff").setTextureName("lotr:sarumanStaff"); + sarumanWhiteStaff = (new SarumanWhiteStaff()).setUnlocalizedName("lotr:sarumanWhiteStaff").setTextureName("lotr:sarumanStaff"); + // Relics + welfRelic = (new WoodElfRelic()).setUnlocalizedName("lotr:welfRelic").setTextureName("lotr:welfRelic"); + unitLevelTool = (new unitLevelTool()).setUnlocalizedName("lotr:unitLevelTool").setTextureName("stick"); + + /** + * Item Registation + * Weapons will need to be linked + * + * ID 6000-6099 + * Misc / Materials + * + * ID 6100-6199 + * Misc equipment + * + * ID 6200-6399 + * Event + * + * ID 6400-6499 + * Faction equipment + * + * ID 6500-6699 + * Unassigned + * + * ID 6700-6799 + * Character or Objective + * + * ID 6800-6899 + * Elite armor + * + * ID 6900-6999 + * Food and crops + * + * ID 7000-7199 + * Unassigned + * + * ID 7200-7299 + * Frozen Dungeon + **/ + + // ==Admin Tools== + ItemRegistration.register(unitLevelTool, "unitLevelTool", 7000); + + + // ==Food Items== + ItemRegistration.register(onion, "onion", 6900); + ItemRegistration.register(cabbage, "cabbage", 6901); + ItemRegistration.register(pelmen, "pelmen", 6902); + ItemRegistration.register(spice, "spice", 6903); + ItemRegistration.register(spicedHam, "spicedHam", 6904); + ItemRegistration.register(chocolatebar, "chocolatebar", 6905); + ItemRegistration.register(fruitsalad, "fruitsalad", 6906); + ItemRegistration.register(flour, "flour", 6907); + ItemRegistration.register(dough, "dough", 6908); + ItemRegistration.register(pasta, "pasta", 6909); + ItemRegistration.register(pretzel, "pretzel", 6910); + ItemRegistration.register(halva, "halva", 6911); + ItemRegistration.register(doner_kebab, "doner_kebab", 6912); + ItemRegistration.register(lightStew, "lightStew", 6913); + ItemRegistration.register(mugElfBrew, "mugElfBrew",6914); + ItemRegistration.register(mugHumanBrew, "mugHumanBrew",6915); + ItemRegistration.register(mugOrcBrew, "mugOrcBrew",6916); + ItemRegistration.register(mugDwarfBrew, "mugDwarfBrew",6917); + ItemRegistration.register(spiceElven, "spiceElven",6918); + ItemRegistration.register(spiceHuman, "spiceHuman",6919); + ItemRegistration.register(spiceOrcish, "spiceOrcish",6920); + ItemRegistration.register(spiceDwarven, "spiceDwarven",6921); + + ItemRegistration.register(spawnEgg, "spawnEgg", 6003); + + // Wizard Staves + ItemRegistration.register(radagastStaff, "radagastStaff", 6700); + ItemRegistration.register(pallandoStaff, "pallandoStaff", 6701); + ItemRegistration.register(alatarStaff, "alatarStaff", 6702); + ItemRegistration.register(sarumanStaff, "sarumanStaff", 6703); + ItemRegistration.register(sarumanWhiteStaff, "sarumanWhiteStaff", 6705); + + linkLOTRWeapon(radagastStaff, "radagastStaff"); + linkLOTRWeapon(pallandoStaff, "pallandoStaff"); + linkLOTRWeapon(alatarStaff, "alatarStaff"); + linkLOTRWeapon(sarumanStaff, "sarumanStaff"); + linkLOTRWeapon(sarumanWhiteStaff, "sarumanWhiteStaff"); + + //Relics + ItemRegistration.register(welfRelic, "welfRelic", 6704); + + linkLOTRWeapon(welfRelic, "welfRelic"); + + // Misc + cinderFurItem = (new CinderFurItem()).setUnlocalizedName("cinder_fur_item").setTextureName("lotr:cinder_fur_item_0"); + ItemRegistration.register(cinderFurItem,"cinderFurItem",6004); + + EVENT = getLOTRMaterialByName("EVENT"); + MATERIAL_JADE = getLOTRMaterialByName("JADE"); + + 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); + spearUnnamed = (new UnnamedSpear(EVENT)).setUnlocalizedName("lotr:spearUnnamed").setTextureName("lotr:spearUnnamed").setCreativeTab(null); + whip = (new Whip()).setUnlocalizedName("lotr:whip").setTextureName("lotr:whip"); + helmetbrokenhalo = (new BrokenHalo(EVENT, 0, "helmet")).setUnlocalizedName("lotr:helmetbrokenhalo").setTextureName("lotr:helmetbrokenhalo").setCreativeTab(null); + helmetJade = (new LOTRItemArmor(MATERIAL_JADE, 0, "helmet")).setUnlocalizedName("lotr:helmetJade").setTextureName("lotr:helmetJade").setCreativeTab(null); + bodyJade = (new LOTRItemArmor(MATERIAL_JADE, 1, "chestplate")).setUnlocalizedName("lotr:bodyJade").setTextureName("lotr:bodyJade").setCreativeTab(null); + legsJade = (new LOTRItemArmor(MATERIAL_JADE, 2,"leggings")).setUnlocalizedName("lotr:legsJade").setTextureName("lotr:legsJade").setCreativeTab(null); + bootsJade = (new LOTRItemArmor(MATERIAL_JADE, 3)).setUnlocalizedName("lotr:bootsJade").setTextureName("lotr:bootsJade").setCreativeTab(null); + + forgingKit = (new ForgingKit()); + + ItemRegistration.register(frostblade, "frostblade", 6200); + ItemRegistration.register(forgingKit,"forgingKit",6001); + ItemRegistration.register(whip, "whip", 6110); + ItemRegistration.register(daggervoid, "daggerVoid", 6201); + ItemRegistration.register(spearsolidgold, "spearsolidgold", 6202); + ItemRegistration.register(spearUnnamed, "spearUnnamed", 6203); + ItemRegistration.register(helmetbrokenhalo, "brokenhalo", 6204); + ItemRegistration.register(helmetJade, "helmetJade", 6205); + ItemRegistration.register(bodyJade, "chestplateJade", 6206); + ItemRegistration.register(legsJade, "legsJade", 6207); + ItemRegistration.register(bootsJade, "bootsJade", 6208); + linkLOTRWeapon(frostblade, "frostblade"); + linkLOTRWeapon(daggervoid, "daggerVoid"); + linkLOTRWeapon(spearsolidgold, "spearsolidgold"); + linkLOTRWeapon(spearUnnamed, "spearUnnamed"); + linkLOTRWeapon(whip, "whip"); + + // Common Tools/Weapons + cleaver = (new LOTRItemDagger(Item.ToolMaterial.IRON)).setUnlocalizedName("lotr:cleaver").setTextureName("lotr:cleaver"); + warDart = (new WarDart()).setUnlocalizedName("war_dart").setTextureName("lotr:war_dart"); + warDartHeads = (new WarDartHeads()).setUnlocalizedName("war_dart_heads").setTextureName("lotr:war_dart_heads_0"); + + ItemRegistration.register(cleaver,"cleaver",6109); + linkLOTRWeapon(cleaver, "cleaver"); + + ItemRegistration.register(warDart,"warDart",6111); + ItemRegistration.register(warDartHeads,"warDartHeads",6500); + + + //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)).addWeaponDamage(4.25F).setUnlocalizedName("lotr:swordAsh").setTextureName("lotr:swordAsh"); + staffAsh = (new LOTRItemPolearm(MATERIAL_ASH)).addWeaponDamage(5.5F).setUnlocalizedName("lotr:staffAsh").setTextureName("lotr:staffAsh"); + daggerAsh = (new LOTRItemDagger(MATERIAL_ASH)).addWeaponDamage(6.75F).setUnlocalizedName("lotr:daggerAsh").setTextureName("lotr:daggerAsh"); + hammerAsh = (new LOTRItemHammer(MATERIAL_ASH)).addWeaponDamage(5.5F).setUnlocalizedName("lotr:hammerAsh").setTextureName("lotr:hammerAsh"); + battleaxeAsh = (new LOTRItemBattleaxe(MATERIAL_ASH)).addWeaponDamage(5.5F).setUnlocalizedName("lotr:battleaxeAsh").setTextureName("lotr:battleaxeAsh"); + bowAsh = (new CinderBow(MATERIAL_ASH, 1.5)).setDrawTime(16).setUnlocalizedName("lotr:bowAsh").setTextureName("lotr:bowAsh"); + pikeAsh = (new LOTRItemPike(MATERIAL_ASH)).addWeaponDamage(5.0F).setUnlocalizedName("lotr:pikeAsh").setTextureName("lotr:pikeAsh"); + spearAsh = (new LOTRItemSpear(MATERIAL_ASH)).addWeaponDamage(5.0F).setUnlocalizedName("lotr:spearAsh").setTextureName("lotr:spearAsh"); + + ItemRegistration.register(ingotAsh, "ingotAsh", 6100); + ItemRegistration.register(swordAsh, "swordAsh", 6101); + ItemRegistration.register(daggerAsh, "daggerAsh", 6102); + ItemRegistration.register(hammerAsh, "hammerAsh", 6103); + ItemRegistration.register(battleaxeAsh, "battleaxeAsh", 6104); + ItemRegistration.register(bowAsh, "bowAsh", 6105); + ItemRegistration.register(pikeAsh, "pikeAsh", 6106); + ItemRegistration.register(spearAsh, "spearAsh", 6107); + ItemRegistration.register(staffAsh, "staffAsh", 6108); + } 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"); + linkLOTRWeapon(staffAsh, "staffAsh"); + + // Red Dwarves + redDwarfSteel = new Item().setUnlocalizedName("lotr:redDwarfSteel").setTextureName("lotr:redDwarfSteel").setCreativeTab((CreativeTabs) materials); + ItemRegistration.register(redDwarfSteel, "redDwarfSteel", 6002); + + MATERIAL_RED_DWARF = getLOTRMaterialByName("RED_DWARF"); + if (MATERIAL_RED_DWARF != null) { + helmetRedDwarf = (new LOTRItemArmor(MATERIAL_RED_DWARF, 0, "helmet")).setUnlocalizedName("lotr:helmetRedDwarf").setTextureName("lotr:helmetRedDwarf"); + bodyRedDwarf = (new LOTRItemArmor(MATERIAL_RED_DWARF, 1)).setUnlocalizedName("lotr:bodyRedDwarf").setTextureName("lotr:bodyRedDwarf"); + legsRedDwarf = (new LOTRItemArmor(MATERIAL_RED_DWARF, 2)).setUnlocalizedName("lotr:legsRedDwarf").setTextureName("lotr:legsRedDwarf"); + bootsRedDwarf = (new LOTRItemArmor(MATERIAL_RED_DWARF, 3)).setUnlocalizedName("lotr:bootsRedDwarf").setTextureName("lotr:bootsRedDwarf"); + spearRedDwarf = (new LOTRItemSpear(MATERIAL_RED_DWARF)).setUnlocalizedName("lotr:spearRedDwarf").setTextureName("lotr:spearRedDwarf"); + swordRedDwarf = (new LOTRItemSword(MATERIAL_RED_DWARF)).setUnlocalizedName("lotr:swordRedDwarf").setTextureName("lotr:swordRedDwarf"); + battleaxeRedDwarf = (new LOTRItemBattleaxe(MATERIAL_RED_DWARF)).setUnlocalizedName("lotr:battleaxeRedDwarf").setTextureName("lotr:battleaxeRedDwarf"); + pikeRedDwarf = (new LOTRItemPike(MATERIAL_RED_DWARF)).setUnlocalizedName("lotr:pikeRedDwarf").setTextureName("lotr:pikeRedDwarf"); + hammerRedDwarf = (new LOTRItemHammer(MATERIAL_RED_DWARF)).setUnlocalizedName("lotr:hammerRedDwarf").setTextureName("lotr:hammerRedDwarf"); + daggerRedDwarf = (new LOTRItemDagger(MATERIAL_RED_DWARF)).setUnlocalizedName("lotr:daggerRedDwarf").setTextureName("lotr:daggerRedDwarf"); + daggerRedDwarfPoisoned = (new LOTRItemDagger(MATERIAL_RED_DWARF, LOTRItemDagger.DaggerEffect.POISON)).setUnlocalizedName("lotr:daggerRedDwarfPoisoned").setTextureName("lotr:daggerRedDwarfPoisoned"); + crossbowRedDwarf = (new LOTRItemCrossbow(MATERIAL_RED_DWARF)).setUnlocalizedName("lotr:crossbowRedDwarf").setTextureName("lotr:crossbowRedDwarf"); + boarArmorRedDwarf = (new LOTRItemMountArmor(MATERIAL_RED_DWARF, LOTRItemMountArmor.Mount.BOAR)).setUnlocalizedName("lotr:boarArmorRedDwarf").setTextureName("lotr:boarArmorRedDwarf"); + + ItemRegistration.register(helmetRedDwarf, "helmetRedDwarf", 6400); + ItemRegistration.register(bodyRedDwarf, "bodyRedDwarf", 6401); + ItemRegistration.register(legsRedDwarf, "legsRedDwarf", 6402); + ItemRegistration.register(bootsRedDwarf, "bootsRedDwarf", 6403); + ItemRegistration.register(spearRedDwarf, "spearRedDwarf", 6404); + ItemRegistration.register(swordRedDwarf, "swordRedDwarf", 6405); + ItemRegistration.register(battleaxeRedDwarf, "battleaxeRedDwarf", 6406); + ItemRegistration.register(pikeRedDwarf, "pikeRedDwarf", 6407); + ItemRegistration.register(hammerRedDwarf, "hammerRedDwarf", 6408); + ItemRegistration.register(daggerRedDwarf, "daggerRedDwarf", 6409); + ItemRegistration.register(daggerRedDwarfPoisoned, "daggerRedDwarfPoisoned", 6410); + ItemRegistration.register(crossbowRedDwarf, "crossbowRedDwarf", 6411); + ItemRegistration.register(boarArmorRedDwarf, "boarArmorRedDwarf", 6412); +// System.out.println("Registered red dwarf equipment"); + } else { + // Log an error or handle the case where the material could not be found + System.err.println("Failed to find RED_DWARF material for armor initialization."); + } + linkLOTRWeapon(spearRedDwarf, "spearRedDwarf"); + linkLOTRWeapon(swordRedDwarf, "swordRedDwarf"); + linkLOTRWeapon(battleaxeRedDwarf, "battleaxeRedDwarf"); + linkLOTRWeapon(pikeRedDwarf, "pikeRedDwarf"); + linkLOTRWeapon(hammerRedDwarf, "hammerRedDwarf"); + linkLOTRWeapon(daggerRedDwarf, "daggerRedDwarf"); + linkLOTRWeapon(daggerRedDwarfPoisoned, "daggerRedDwarfPoisoned"); + linkLOTRWeapon(crossbowRedDwarf, "crossbowRedDwarf"); + + // Limwaith + + bonemold = new Item().setUnlocalizedName("lotr:bonemold").setTextureName("lotr:bonemold").setCreativeTab((CreativeTabs) materials); + ItemRegistration.register(bonemold, "bonemold", 6000); + + MATERIAL_LIMWAITH_WOOD = getLOTRMaterialByName("LIMWAITH_WOOD"); + MATERIAL_BONEMOLD = getLOTRMaterialByName("BONEMOLD"); + if (MATERIAL_LIMWAITH_WOOD != null && MATERIAL_BONEMOLD != 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_BONEMOLD)).setUnlocalizedName("lotr:spearLimwaith").setTextureName("lotr:spearLimwaith"); + truncheonLimwaith = (new LOTRItemSword(MATERIAL_BONEMOLD)).setUnlocalizedName("lotr:truncheonLimwaith").setTextureName("lotr:truncheonLimwaith"); + battleaxeLimwaith = (new LOTRItemBattleaxe(MATERIAL_BONEMOLD)).setUnlocalizedName("lotr:battleaxeLimwaith").setTextureName("lotr:battleaxeLimwaith"); + tridentLimwaith = (new LOTRItemTrident(MATERIAL_BONEMOLD)).setUnlocalizedName("lotr:tridentLimwaith").setTextureName("lotr:tridentLimwaith"); + daggerLimwaith = (new LOTRItemDagger(MATERIAL_BONEMOLD)).setUnlocalizedName("lotr:daggerLimwaith").setTextureName("lotr:daggerLimwaith"); + daggerLimwaithPoisoned = (new LOTRItemDagger(MATERIAL_BONEMOLD, LOTRItemDagger.DaggerEffect.POISON)).setUnlocalizedName("lotr:daggerLimwaithPoisoned").setTextureName("lotr:daggerLimwaithPoisoned"); + blowgunLimwaith = (new LOTRItemBlowgun(LOTRMaterial.TAUREDAIN)).setUnlocalizedName("lotr:blowgunLimwaith").setTextureName("lotr:blowgunLimwaith"); + + ItemRegistration.register(helmetLimwaith, "helmetLimwaith", 6420); + ItemRegistration.register(bodyLimwaith, "bodyLimwaith", 6421); + ItemRegistration.register(legsLimwaith, "legsLimwaith", 6422); + ItemRegistration.register(bootsLimwaith, "bootsLimwaith", 6423); + + ItemRegistration.register(helmetboneLimwaith, "helmetboneLimwaith", 6424); + ItemRegistration.register(bodyboneLimwaith, "bodyboneLimwaith", 6425); + ItemRegistration.register(legsboneLimwaith, "legsboneLimwaith", 6426); + ItemRegistration.register(bootsboneLimwaith, "bootsboneLimwaith", 6427); + + ItemRegistration.register(spearLimwaith, "spearLimwaith", 6428); + ItemRegistration.register(tridentLimwaith, "tridentLimwaith", 6429); + ItemRegistration.register(truncheonLimwaith, "truncheonLimwaith", 6430); + ItemRegistration.register(battleaxeLimwaith, "battleaxeLimwaith", 6431); + ItemRegistration.register(daggerLimwaith, "daggerLimwaith", 6432); + ItemRegistration.register(daggerLimwaithPoisoned, "daggerLimwaithPoisoned", 6433); + ItemRegistration.register(blowgunLimwaith, "blowgunLimwaith", 6434); + } else { + System.err.println("Failed to find LIMWAITH material for armor initialization."); + } + linkLOTRWeapon(spearLimwaith, "spearLimwaith"); + linkLOTRWeapon(truncheonLimwaith, "truncheonLimwaith"); + linkLOTRWeapon(battleaxeLimwaith, "battleaxeLimwaith"); + linkLOTRWeapon(tridentLimwaith, "tridentLimwaith"); + linkLOTRWeapon(daggerLimwaith, "daggerLimwaith"); + linkLOTRWeapon(daggerLimwaithPoisoned, "daggerLimwaithPoisoned"); + linkLOTRWeapon(blowgunLimwaith, "blowgunLimwaith"); + + //Bree + MATERIAL_BREE = getLOTRMaterialByName("BREE"); + if (MATERIAL_BREE != null) { + helmetBreeKettle = (new LOTRItemArmor(MATERIAL_BREE, 0, "helmet")).setUnlocalizedName("lotr:helmetBreeKettle").setTextureName("lotr:breekettlehelmet"); + helmetBree = (new LOTRItemArmor(MATERIAL_BREE, 0)).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"); + swordBree = (new LOTRItemSword(MATERIAL_BREE)).setUnlocalizedName("lotr:swordBree").setTextureName("lotr:swordBree"); + + ItemRegistration.register(helmetBreeKettle, "breekettle", 6440); + ItemRegistration.register(helmetBree, "helmetBree", 6441); + ItemRegistration.register(bodyBree, "bodyBree", 6442); + ItemRegistration.register(legsBree, "legsBree", 6443); + ItemRegistration.register(bootsBree, "bootsBree", 6444); + ItemRegistration.register(swordBree, "swordBree", 6445); + } else { + System.err.println("Failed to find BREE material for armor initialization."); + } + linkLOTRWeapon(swordBree, "swordBree"); + + //Elite Armors + //Elite Armors + MATERIAL_SERPENT = getLOTRMaterialByName("SERPENT"); + if (MATERIAL_SERPENT != null) { + helmetserpent = (new LOTRItemArmor(MATERIAL_SERPENT, 0)).setUnlocalizedName("lotr:helmetserpent").setTextureName("lotr:helmetserpent").setCreativeTab(null); + bodyserpent = (new LOTRItemArmor(MATERIAL_SERPENT, 1, "chestplate")).setUnlocalizedName("lotr:bodyserpent").setTextureName("lotr:bodyserpent").setCreativeTab(null); + legsserpent = (new LOTRItemArmor(MATERIAL_SERPENT, 2)).setUnlocalizedName("lotr:legsserpent").setTextureName("lotr:legsserpent").setCreativeTab(null); + bootsserpent = (new LOTRItemArmor(MATERIAL_SERPENT, 3)).setUnlocalizedName("lotr:bootsserpent").setTextureName("lotr:bootsserpent").setCreativeTab(null); + + ItemRegistration.register(helmetserpent, "helmetserpent", 6800); + ItemRegistration.register(bodyserpent, "bodyserpent", 6801); + ItemRegistration.register(legsserpent, "legsserpent", 6802); + ItemRegistration.register(bootsserpent, "bootsserpent", 6803); + } else { + System.err.println("Failed to find SERPENT material for armor initialization."); + } + MATERIAL_USURPER = getLOTRMaterialByName("USURPER"); + if (MATERIAL_USURPER != null) { + helmetUsurper = (new LOTRItemArmor(MATERIAL_USURPER, 0, "helmet")).setUnlocalizedName("lotr:helmetUsurper").setTextureName("lotr:helmetUsurper").setCreativeTab(null); + bodyUsurper = (new LOTRItemArmor(MATERIAL_USURPER, 1)).setUnlocalizedName("lotr:bodyUsurper").setTextureName("lotr:bodyUsurper").setCreativeTab(null); + legsUsurper = (new LOTRItemArmor(MATERIAL_USURPER, 2)).setUnlocalizedName("lotr:legsUsurper").setTextureName("lotr:legsUsurper").setCreativeTab(null); + bootsUsurper = (new LOTRItemArmor(MATERIAL_USURPER, 3)).setUnlocalizedName("lotr:bootsUsurper").setTextureName("lotr:bootsUsurper").setCreativeTab(null); + + + ItemRegistration.register(helmetUsurper, "helmetUsurper", 6804); + ItemRegistration.register(bodyUsurper, "bodyUsurper", 6805); + ItemRegistration.register(legsUsurper, "legsUsurper", 6806); + ItemRegistration.register(bootsUsurper, "bootsUsurper", 6807); + + } else { + System.err.println("Failed to find USURPER material for armor initialization."); + } + MATERIAL_WARLORD = getLOTRMaterialByName("WARLORD"); + if (MATERIAL_WARLORD != null) { + helmetWarlord = (new LOTRItemArmor(MATERIAL_WARLORD, 0, "helmet")).setUnlocalizedName("lotr:helmetWarlord").setTextureName("lotr:helmetWarlord").setCreativeTab(null); + bodyWarlord = (new LOTRItemArmor(MATERIAL_WARLORD, 1)).setUnlocalizedName("lotr:bodyWarlord").setTextureName("lotr:bodyWarlord").setCreativeTab(null); + legsWarlord = (new LOTRItemArmor(MATERIAL_WARLORD, 2)).setUnlocalizedName("lotr:legsWarlord").setTextureName("lotr:legsWarlord").setCreativeTab(null); + bootsWarlord = (new LOTRItemArmor(MATERIAL_WARLORD, 3)).setUnlocalizedName("lotr:bootsWarlord").setTextureName("lotr:bootsWarlord").setCreativeTab(null); + maceWarlord = (new LOTRItemHammer(MATERIAL_WARLORD)).setUnlocalizedName("lotr:maceWarlord").setTextureName("lotr:maceWarlord"); + + ItemRegistration.register(helmetWarlord, "helmetWarlord", 6808); + ItemRegistration.register(bodyWarlord, "bodyWarlord", 6809); + ItemRegistration.register(legsWarlord, "legsWarlord", 6810); + ItemRegistration.register(bootsWarlord, "bootsWarlord", 6811); + ItemRegistration.registerItem(maceWarlord, "maceWarlord", 6812); + } else { + System.err.println("Failed to find WARLORD material for armor initialization."); + } + linkLOTRWeapon(maceWarlord, "maceWarlord"); + + //Rhudaur + MATERIAL_RHUDAUR = getLOTRMaterialByName("RHUDAUR"); + if (MATERIAL_RHUDAUR != null) { + helmetRhudaur = (new LOTRItemArmor(MATERIAL_RHUDAUR, 0, "helmet")).setUnlocalizedName("lotr:helmetRhudaur").setTextureName("lotr:helmetRhudaur"); + bodyRhudaur = (new LOTRItemArmor(MATERIAL_RHUDAUR, 1)).setUnlocalizedName("lotr:bodyRhudaur").setTextureName("lotr:bodyRhudaur"); + legsRhudaur = (new LOTRItemArmor(MATERIAL_RHUDAUR, 2)).setUnlocalizedName("lotr:legsRhudaur").setTextureName("lotr:legsRhudaur"); + bootsRhudaur = (new LOTRItemArmor(MATERIAL_RHUDAUR, 3)).setUnlocalizedName("lotr:bootsRhudaur").setTextureName("lotr:bootsRhudaur"); + + ItemRegistration.register(helmetRhudaur, "helmetRhudaur",6450); + ItemRegistration.register(bodyRhudaur, "bodyRhudaur", 6451); + ItemRegistration.register(legsRhudaur, "legsRhudaur", 6452); + ItemRegistration.register(bootsRhudaur, "bootsRhudaur", 6453); + } else { + System.err.println("Failed to find RHUDAUR material for armor initialization."); + } + //Arnor + MATERIAL_BATTLENUN = getLOTRMaterialByName("BATTLENUN"); + if (MATERIAL_BATTLENUN != null) { + helmetArnorBanner = (new LOTRItemArmor(MATERIAL_BATTLENUN, 0)).setUnlocalizedName("lotr:helmetArnorBanner").setTextureName("lotr:helmetArnorBanner"); + bodyArnorBanner = (new LOTRItemArmor(MATERIAL_BATTLENUN, 1)).setUnlocalizedName("lotr:bodyArnorBanner").setTextureName("lotr:bodyArnorBanner"); + legsArnorBanner = (new LOTRItemArmor(MATERIAL_BATTLENUN, 2)).setUnlocalizedName("lotr:legsArnorBanner").setTextureName("lotr:legsArnorBanner"); + bootsArnorBanner = (new LOTRItemArmor(MATERIAL_BATTLENUN, 3)).setUnlocalizedName("lotr:bootsArnorBanner").setTextureName("lotr:bootsArnorBanner"); + maceArnor = (new LOTRItemHammer(LOTRMaterial.ARNOR)).setUnlocalizedName("lotr:maceArnor").setTextureName("lotr:maceArnor"); + + ItemRegistration.register(helmetArnorBanner, "helmetArnorBanner", 6460); + ItemRegistration.register(bodyArnorBanner, "bodyArnorBanner", 6461); + ItemRegistration.register(legsArnorBanner, "legsArnorBanner", 6462); + ItemRegistration.register(bootsArnorBanner, "bootsArnorBanner", 6463); + ItemRegistration.register(maceArnor, "maceArnor", 6464); + } else { + System.err.println("Failed to find ARNOR material for armor initialization."); + } + linkLOTRWeapon(maceArnor, "maceArnor"); + } + + public static ModContainer getModContainer() { + return FMLCommonHandler.instance() + .findContainerFor(instance); + } + + public void linkLOTRWeapon(Item item, String weapon_name) { + try { + Field field = LOTRMod.class.getField(weapon_name); + field.set(null, item); + } catch (Exception e) { + System.err.println("[CinderLoE] linkLOTRWeapon: Failed to find field " + weapon_name + " in LOTRMod!"); + } + } + + public static class CommonProxy { + public void setup() { + } + } + + public static class ClientProxy extends CommonProxy { + @Override + public void setup() { + // RenderingRegistry.registerEntityRenderingHandler(HaradLevy.class, new LOTRRenderNearHaradrim()); + // RenderingRegistry.registerEntityRenderingHandler(DwarfLevy.class, new LOTRRenderDwarf()); + + RenderingRegistry.registerEntityRenderingHandler(EntityWarDart.class, new RenderWarDart()); + RenderingRegistry.registerEntityRenderingHandler(BladorthinSmith.class, new LOTRRenderDorwinionElfVintner()); + RenderingRegistry.registerEntityRenderingHandler(DarkSpider.class, new RenderDarkSpider()); + 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(CorruptSkeleton.class, new RenderCorruptSkeleton()); + RenderingRegistry.registerEntityRenderingHandler(CorruptSkeletonArcher.class, new RenderCorruptSkeleton()); + + RenderingRegistry.registerEntityRenderingHandler(SarumanFireball.class, new RenderSarumanFireball()); + RenderingRegistry.registerEntityRenderingHandler(SarumanWhiteFireball.class, new RenderSarumanWhiteFireball()); + RenderingRegistry.registerEntityRenderingHandler(Renegade.class, new RenderRenegade()); + RenderingRegistry.registerEntityRenderingHandler(RenegadeCaptain.class, new RenderRenegade()); + RenderingRegistry.registerEntityRenderingHandler(Wraith.class, new RenderWraith()); + + RenderingRegistry.registerEntityRenderingHandler(RedDwarfWarrior.class, new LOTRRenderDwarf()); + RenderingRegistry.registerEntityRenderingHandler(RedDwarfArbalest.class, new LOTRRenderDwarf()); + RenderingRegistry.registerEntityRenderingHandler(RedDwarfBannerBearer.class, new LOTRRenderDwarf()); + 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()); + + //RenderingRegistry.registerEntityRenderingHandler(LimwaithCrocodile.class, new RenderTamedCrocodile()); + RenderingRegistry.registerEntityRenderingHandler(FangornBear.class, new RenderFangornBear()); + RenderingRegistry.registerEntityRenderingHandler(FangornWildBoar.class, new RenderFangornWildBoar()); + RenderingRegistry.registerEntityRenderingHandler(FangornAuroch.class, new RenderFangornAuroch()); + RenderingRegistry.registerEntityRenderingHandler(FangornElk.class, new RenderFangornElk()); + RenderingRegistry.registerEntityRenderingHandler(FangornWolf.class, new RenderFangornWolf()); + + RenderingRegistry.registerEntityRenderingHandler(ArnorSoldier.class, new LOTRRenderDunedain()); + RenderingRegistry.registerEntityRenderingHandler(ArnorSoldierArcher.class, new LOTRRenderDunedain()); + RenderingRegistry.registerEntityRenderingHandler(ArnorCaptain.class, new LOTRRenderDunedain()); + RenderingRegistry.registerEntityRenderingHandler(ArnorBannerBearer.class, new LOTRRenderDunedain()); + RenderingRegistry.registerEntityRenderingHandler(BattleNun.class, new RenderBattleNun()); + + RenderingRegistry.registerEntityRenderingHandler(BreeSoldier.class, new LOTRRenderBreeMan()); + RenderingRegistry.registerEntityRenderingHandler(BreeCrossbowman.class, new LOTRRenderBreeMan()); + RenderingRegistry.registerEntityRenderingHandler(BreeCaptain.class, new LOTRRenderBreeMan()); + RenderingRegistry.registerEntityRenderingHandler(BreeSoldierBannerBearer.class, new LOTRRenderBreeMan()); + RenderingRegistry.registerEntityRenderingHandler(BreeOutrider.class, new LOTRRenderBreeMan()); + + RenderingRegistry.registerEntityRenderingHandler(HobbitBannerBearer.class, new LOTRRenderHobbit()); + + RenderingRegistry.registerEntityRenderingHandler(LOTREntitySauron.class, new LOTRRenderSauron()); + RenderingRegistry.registerEntityRenderingHandler(UtumnoSlaveTrader.class, new RenderUtumnoSlave()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMistBlock.class, (TileEntitySpecialRenderer)new LOTRRenderUtumnoPortal()); + + RenderingRegistry.registerEntityRenderingHandler(Sirrandrai.class, new LOTRRenderElf()); + RenderingRegistry.registerEntityRenderingHandler(TauredainTrueBlood.class, new LOTRRenderTauredain()); + RenderingRegistry.registerEntityRenderingHandler(EsgarothSoldier.class, new LOTRRenderDaleMan()); + RenderingRegistry.registerEntityRenderingHandler(MorgulOrc.class, new LOTRRenderOrc()); + RenderingRegistry.registerEntityRenderingHandler(NorthernOrc.class, new LOTRRenderOrc()); + } + } + + public static class ServerProxy extends CommonProxy { + @Override + public void setup() { + } + } + + public void modifySpawnLists() { + try { + // Retrieve the constructor of LOTRSpawnList class + Constructor constructor = LOTRSpawnList.class.getDeclaredConstructor(LOTRSpawnEntry[].class); + constructor.setAccessible(true); // Make the private constructor accessible + + // RED_DWARF is initialized earlier in this class + LOTRSpawnList RED_DWARF = constructor.newInstance((Object) new LOTRSpawnEntry[]{ + new LOTRSpawnEntry(LOTREntityDwarf.class, 100, 4, 4), + new LOTRSpawnEntry(LOTREntityDwarfMiner.class, 15, 1, 3), + new LOTRSpawnEntry(RedDwarfWarrior.class, 20, 4, 4), + new LOTRSpawnEntry(RedDwarfArbalest.class, 10, 4, 4) + }); + + LOTRSpawnList LIMWAITH = constructor.newInstance((Object) new LOTRSpawnEntry[]{ + 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) + }); + + + Field redDwarfField = LOTRSpawnList.class.getDeclaredField("RED_DWARF"); + redDwarfField.setAccessible(true); + redDwarfField.set(null, RED_DWARF); + + Field limwaithField = LOTRSpawnList.class.getDeclaredField("LIMWAITH"); + limwaithField.setAccessible(true); + limwaithField.set(null, LIMWAITH); + + + if (LOTRBiome.redMountains != null) { + LOTRBiome.redMountains.npcSpawnList.newFactionList(500) + .add(new LOTRBiomeSpawnList.SpawnListContainer[]{ + LOTRBiomeSpawnList.entry((LOTRSpawnList) redDwarfField.get(null), 10) + }); + } else { + System.out.println("Red Mountains biome is not available."); + } + if (LOTRBiome.farHaradMangrove != null) { + LOTRBiome.farHaradMangrove.npcSpawnList.newFactionList(100) + .add(new LOTRBiomeSpawnList.SpawnListContainer[]{ + LOTRBiomeSpawnList.entry((LOTRSpawnList) limwaithField.get(null), 10) + }); + } else { + System.out.println("Mangrove biome is not available."); + } + } catch (Exception e) { + System.err.println("[CinderLoE] linkLOTRWeapon: Failed to find field RED_DWARF in LOTRSpawnList!"); + } + } + + public static LOTRMaterial getLOTRMaterialByName(String materialName) { + try { + Field materialField = LOTRMaterial.class.getField(materialName); + return (LOTRMaterial) materialField.get(null); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + // Debug method + public static void printClass(String className) { + String resourcePath = "/" + className.replace('.', '/') + ".class"; + InputStream in = CinderLoE.class.getResourceAsStream(resourcePath); + if (in == null) { + System.out.println("Class resource not found: " + resourcePath); + return; + } + try { + ClassReader classReader = new ClassReader(in); + classReader.accept(new TraceClassVisitor(new PrintWriter(System.out)), 0); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @SubscribeEvent + @SideOnly(Side.SERVER) + public void onWorldLoad(WorldEvent.Load event) { + // == Crop Blocks == + CinderCore.registerItemFallback(Block.getIdFromBlock(onionCrop), Block.getIdFromBlock(LOTRMod.turnipCrop), "cinder_loe", "1.2.1"); + CinderCore.registerItemFallback(Block.getIdFromBlock(cabbageCrop), Block.getIdFromBlock(LOTRMod.lettuceCrop), "cinder_loe", "1.2.1"); + // == Food Items == + CinderCore.registerItemFallback(Item.getIdFromItem(onion), Item.getIdFromItem(LOTRMod.turnip), "cinder_loe", "1.2.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(cabbage), Item.getIdFromItem(LOTRMod.lettuce), "cinder_loe", "1.2.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(spice), Item.getIdFromItem(LOTRMod.dye), "cinder_loe", "1.2.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(spicedHam), Item.getIdFromItem(LOTRMod.gammon), "cinder_loe", "1.2.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(pelmen), Item.getIdFromItem(LOTRMod.cram), "cinder_loe", "1.2.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(lightStew), Item.getIdFromItem(LOTRMod.leekSoup), "cinder_loe", "1.2.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(chocolatebar),Item.getIdFromItem(LOTRMod.marzipanChocolate), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(fruitsalad),Item.getIdFromItem(LOTRMod.leekSoup), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(flour),Item.getIdFromItem(Items.sugar), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(dough),Item.getIdFromItem(Items.gunpowder), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(pasta),Item.getIdFromItem(Items.wheat), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(pretzel),Item.getIdFromItem(Items.bread), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(halva),Item.getIdFromItem(Items.bread),"cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(doner_kebab),Item.getIdFromItem(Items.bread),"cinder_loe", "1.2.5"); + // CinderCore.registerItemFallback(Item.getIdFromItem(honey),Item.getIdFromItem(LOTRMod.mapleSyrup), "cinder_loe", "1.2.5"); + + //== 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(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"); + CinderCore.registerItemFallback(Block.getIdFromBlock(barsRedDwarf), Block.getIdFromBlock(LOTRMod.dwarfBars), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Block.getIdFromBlock(furBundle), Block.getIdFromBlock(Blocks.hay_block), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Block.getIdFromBlock(leatherBundle), Block.getIdFromBlock(Blocks.hay_block), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Block.getIdFromBlock(reedBale), Block.getIdFromBlock(Blocks.hay_block), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Block.getIdFromBlock(dwarvenBrickRuned), Block.getIdFromBlock(LOTRMod.brick), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Block.getIdFromBlock(fishBarrel), Block.getIdFromBlock(LOTRMod.woodBeam1), "cinder_loe", "1.1"); + //CinderCore.registerItemFallback(Block.getIdFromBlock(rustedsword), Block.getIdFromBlock(Blocks.nether_brick_fence), "cinder_loe", "1.2.5"); + 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(cindercobble), Block.getIdFromBlock(LOTRMod.cobblebrick), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Block.getIdFromBlock(cinderfur), Block.getIdFromBlock(Blocks.wool), "cinder_loe", "1.2.4"); + CinderCore.registerItemFallback(Block.getIdFromBlock(furCarpet), Block.getIdFromBlock(Blocks.carpet), "cinder_loe", "1.2.4"); + CinderCore.registerItemFallback(Block.getIdFromBlock(reeflessCoral), Block.getIdFromBlock(LOTRMod.coralReef), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Block.getIdFromBlock(plaster), Block.getIdFromBlock(Blocks.brick_block), "cinder_loe", "1.2.1"); + CinderCore.registerItemFallback(Block.getIdFromBlock(voidblock), Block.getIdFromBlock(Blocks.coal_block), "cinder_loe", "1.2.1"); + // CinderCore.registerItemFallback(Block.getIdFromBlock(verticalWeaponRack), Block.getIdFromBlock(Blocks.fence), "cinder_loe", "1.2.4"); + // == Gates == + //CinderCore.registerItemFallback(Block.getIdFromBlock(gatecharredportcullis), Block.getIdFromBlock(LOTRMod.gateWoodenCross), "cinder_loe", "1.2.5"); + // == Red Dwarf Items== + 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"); + CinderCore.registerItemFallback(Item.getIdFromItem(swordRedDwarf), Item.getIdFromItem(LOTRMod.swordDwarven), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(battleaxeRedDwarf), Item.getIdFromItem(LOTRMod.battleaxeDwarven), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(pikeRedDwarf), Item.getIdFromItem(LOTRMod.pikeDwarven), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(hammerRedDwarf), Item.getIdFromItem(LOTRMod.hammerDwarven), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(daggerRedDwarf), Item.getIdFromItem(LOTRMod.daggerDwarven), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(daggerRedDwarfPoisoned), Item.getIdFromItem(LOTRMod.daggerDwarvenPoisoned), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(helmetRedDwarf), Item.getIdFromItem(LOTRMod.helmetDwarvenGold), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(bodyRedDwarf), Item.getIdFromItem(LOTRMod.bodyDwarvenGold), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(legsRedDwarf), Item.getIdFromItem(LOTRMod.legsDwarvenGold), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(bootsRedDwarf), Item.getIdFromItem(LOTRMod.bootsDwarvenGold), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(crossbowRedDwarf), Item.getIdFromItem(LOTRMod.ironCrossbow), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(boarArmorRedDwarf), Item.getIdFromItem(LOTRMod.boarArmorDwarven), "cinder_loe", "1.0"); + // == Rhudaur Items== + CinderCore.registerItemFallback(Item.getIdFromItem(helmetRhudaur), Item.getIdFromItem(LOTRMod.helmetFur), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(bodyRhudaur), Item.getIdFromItem(LOTRMod.bodyFur), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(legsRhudaur), Item.getIdFromItem(LOTRMod.legsFur), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(bootsRhudaur), Item.getIdFromItem(LOTRMod.bootsFur), "cinder_loe", "1.2.5"); + // == Elite Armors== + CinderCore.registerItemFallback(Item.getIdFromItem(helmetserpent), Item.getIdFromItem(LOTRMod.helmetNearHarad), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(bodyserpent), Item.getIdFromItem(LOTRMod.bodyNearHarad), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(legsserpent),Item.getIdFromItem(LOTRMod.bodyNearHarad), "cinder_loe","1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(bootsserpent), Item.getIdFromItem(LOTRMod.bootsNearHarad), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(helmetUsurper), Item.getIdFromItem(LOTRMod.helmetUmbar), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(bodyUsurper), Item.getIdFromItem(LOTRMod.bodyUmbar), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(legsUsurper), Item.getIdFromItem(LOTRMod.legsUmbar), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(bootsUsurper), Item.getIdFromItem(LOTRMod.bootsUmbar), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(helmetWarlord), Item.getIdFromItem(LOTRMod.helmetNomad), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(bodyWarlord), Item.getIdFromItem(LOTRMod.bodyNomad), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(legsWarlord), Item.getIdFromItem(LOTRMod.legsNomad), "cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(bootsWarlord), Item.getIdFromItem(LOTRMod.bootsNomad), "cinder_loe", "1.2.5"); + // == Wizard Staves == + CinderCore.registerItemFallback(Item.getIdFromItem(radagastStaff), Item.getIdFromItem(LOTRMod.gandalfStaffWhite), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(pallandoStaff), Item.getIdFromItem(LOTRMod.gandalfStaffWhite), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(alatarStaff), Item.getIdFromItem(LOTRMod.gandalfStaffWhite), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(sarumanStaff), Item.getIdFromItem(LOTRMod.gandalfStaffWhite), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(sarumanWhiteStaff), Item.getIdFromItem(LOTRMod.gandalfStaffWhite), "cinder_loe", "1.4"); + // == Relics == + 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(spearUnnamed), Item.getIdFromItem(LOTRMod.spearMithril), "cinder_loe", "1.2.4"); + CinderCore.registerItemFallback(Item.getIdFromItem(whip), Item.getIdFromItem(LOTRMod.balrogWhip), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(helmetbrokenhalo), Item.getIdFromItem(Items.golden_helmet),"cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(helmetJade), Item.getIdFromItem(LOTRMod.helmetMithril),"cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(bodyJade), Item.getIdFromItem(LOTRMod.bodyMithril),"cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(legsJade), Item.getIdFromItem(LOTRMod.legsMithril),"cinder_loe", "1.2.5"); + CinderCore.registerItemFallback(Item.getIdFromItem(bootsJade), Item.getIdFromItem(LOTRMod.bootsMithril),"cinder_loe", "1.2.5"); + // == Common Tools/weapons == + CinderCore.registerItemFallback(Item.getIdFromItem(cleaver),Item.getIdFromItem(LOTRMod.daggerIron),"cinder_loe","1.2.5"); + // == Ash Forged == + 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(staffAsh), Item.getIdFromItem(LOTRMod.polearmOrc), "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"); + // == Spawn Eggs == + CinderCore.registerItemFallback(Item.getIdFromItem(spawnEgg), Item.getIdFromItem(Items.spawn_egg), "cinder_loe", "1.0"); + // == Limwaith Items == + CinderCore.registerItemFallback(Item.getIdFromItem(bonemold), Item.getIdFromItem(LOTRMod.leekSoup), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(helmetLimwaith), Item.getIdFromItem(LOTRMod.helmetMoredain), "cinder_loe", "1.0"); + 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"); + CinderCore.registerItemFallback(Item.getIdFromItem(battleaxeLimwaith), Item.getIdFromItem(LOTRMod.battleaxeMoredain), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(daggerLimwaith), Item.getIdFromItem(LOTRMod.daggerMoredain), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(daggerLimwaithPoisoned), Item.getIdFromItem(LOTRMod.daggerMoredainPoisoned), "cinder_loe", "1.0"); + CinderCore.registerItemFallback(Item.getIdFromItem(blowgunLimwaith), Item.getIdFromItem(LOTRMod.tauredainBlowgun), "cinder_loe", "1.0"); + // == Bree Items == + CinderCore.registerItemFallback(Item.getIdFromItem(helmetBree), Item.getIdFromItem(Items.iron_helmet), "cinder_loe", "1.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(helmetBreeKettle), Item.getIdFromItem(Items.iron_helmet), "cinder_loe", "1.2"); + CinderCore.registerItemFallback(Item.getIdFromItem(bodyBree), Item.getIdFromItem(Items.chainmail_chestplate), "cinder_loe", "1.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(legsBree), Item.getIdFromItem(Items.chainmail_leggings), "cinder_loe", "1.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(bootsBree), Item.getIdFromItem(Items.iron_boots), "cinder_loe", "1.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(swordBree), Item.getIdFromItem(Items.iron_sword), "cinder_loe", "1.1"); + // == Arnor Items == + CinderCore.registerItemFallback(Item.getIdFromItem(helmetArnorBanner), Item.getIdFromItem(Items.chainmail_helmet), "cinder_loe", "1.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(bodyArnorBanner), Item.getIdFromItem(Items.chainmail_chestplate), "cinder_loe", "1.1"); + CinderCore.registerItemFallback(Item.getIdFromItem(legsArnorBanner), Item.getIdFromItem(Items.chainmail_leggings), "cinder_loe", "1.1"); + 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.registerItemFallback(Item.getIdFromItem(maceWarlord), Item.getIdFromItem(LOTRMod.blacksmithHammer), "cinder_loe", "1.2.5"); + + CinderCore.registerEntityFallback(DarkSpider.class, LOTREntityUtumnoIceSpider.class, "cinder_loe", "1.2.4"); + + CinderCore.registerEntityFallback(BladorthinSmith.class, LOTREntityDorwinionElf.class, "cinder_loe", "1.2.4"); + + 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(SarumanWhiteFireball.class, LOTREntityGandalfFireball.class, "cinder_loe", "1.4"); + CinderCore.registerEntityFallback(Renegade.class, LOTREntityBandit.class, "cinder_loe", "1.0"); + CinderCore.registerEntityFallback(RenegadeCaptain.class, LOTREntityBandit.class, "cinder_loe", "1.1"); + CinderCore.registerEntityFallback(Wraith.class, LOTREntityMarshWraith.class, "cinder_loe", "1.0"); + CinderCore.registerEntityFallback(LOTREntitySauron.class, LOTREntityBarrowWight.class, "cinder_loe", "1.1"); + + CinderCore.registerEntityFallback(RedDwarfWarrior.class, LOTREntityDwarfWarrior.class, "cinder_loe", "1.0"); + CinderCore.registerEntityFallback(RedDwarfArbalest.class, LOTREntityDwarfAxeThrower.class, "cinder_loe", "1.0"); + CinderCore.registerEntityFallback(RedDwarfBannerBearer.class, LOTREntityDwarfBannerBearer.class, "cinder_loe", "1.0"); + 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"); + + //CinderCore.registerEntityFallback(LimwaithCrocodile.class, LOTREntityCrocodile.class, "cinder_loe", "1.2"); + CinderCore.registerEntityFallback(FangornBear.class, LOTREntityBear.class, "cinder_loe", "1.0"); + CinderCore.registerEntityFallback(FangornWildBoar.class, LOTREntityWildBoar.class, "cinder_loe", "1.0"); + CinderCore.registerEntityFallback(FangornAuroch.class, LOTREntityAurochs.class, "cinder_loe", "1.0"); + CinderCore.registerEntityFallback(FangornElk.class, LOTREntityElk.class, "cinder_loe", "1.0"); + CinderCore.registerEntityFallback(FangornWolf.class, EntityWolf.class, "cinder_loe", "1.0"); + + CinderCore.registerEntityFallback(ArnorSoldier.class, LOTREntityDunedain.class, "cinder_loe", "1.1"); + CinderCore.registerEntityFallback(ArnorSoldierArcher.class, LOTREntityDunedain.class, "cinder_loe", "1.1"); + CinderCore.registerEntityFallback(ArnorCaptain.class, LOTREntityDunedain.class, "cinder_loe", "1.1"); + CinderCore.registerEntityFallback(ArnorBannerBearer.class, LOTREntityDunedain.class, "cinder_loe", "1.1"); + CinderCore.registerEntityFallback(BattleNun.class, LOTREntityDunedain.class, "cinder_loe", "1.1"); + + CinderCore.registerEntityFallback(BreeSoldier.class, LOTREntityBreeMan.class, "cinder_loe", "1.1"); + CinderCore.registerEntityFallback(BreeCrossbowman.class, LOTREntityBreeMan.class, "cinder_loe", "1.1"); + CinderCore.registerEntityFallback(BreeCaptain.class, LOTREntityBreeMan.class, "cinder_loe", "1.1"); + CinderCore.registerEntityFallback(BreeSoldierBannerBearer.class, LOTREntityBreeMan.class, "cinder_loe", "1.1"); + CinderCore.registerEntityFallback(BreeOutrider.class, LOTREntityBreeMan.class, "cinder_loe", "1.1"); + + + CinderCore.registerCustomFallback(42, 16, "banner", "cinder_loe", "1.2"); + CinderCore.registerCustomFallback(43, 16, "banner", "cinder_loe", "1.2.4"); + CinderCore.registerCustomFallback(44, 16, "banner", "cinder_loe", "1.2.4"); + CinderCore.registerCustomFallback(45, 16, "banner", "cinder_loe", "1.2.4"); + CinderCore.registerCustomFallback(46, 16, "banner", "cinder_loe", "1.2.4"); + } + + // Create unit trade entries here, out of the way of important code + public void setupTradeEntries() { + RED_DWARF_COMMANDER = new LOTRUnitTradeEntries(200.0F, new LOTRUnitTradeEntry(LOTREntityDwarf.class, 60, 0.0F), + (new LOTRUnitTradeEntry(RedDwarfWarrior.class, 400, 50.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF), + (new LOTRUnitTradeEntry(RedDwarfArbalest.class, 400, 100.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF), + (new LOTRUnitTradeEntry(RedDwarfWarrior.class, LOTREntityWildBoar.class, "RedDwarfWarrior_Boar", 500, 150.0F)).setMountArmor(boarArmorRedDwarf).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF), + (new LOTRUnitTradeEntry(RedDwarfArbalest.class, LOTREntityWildBoar.class, "RedDwarfArbalest_Boar", 500, 200.0F)).setMountArmor(boarArmorRedDwarf).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF), + (new LOTRUnitTradeEntry(RedDwarfBannerBearer.class, 400, 200.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF), + (new LOTRUnitTradeEntry(RedDwarfArbalest.class, LOTREntityWildBoar.class, "Banner_Horse", 600, 300.0F)).setMountArmor(boarArmorRedDwarf).setPledgeType(LOTRUnitTradeEntry.PledgeType.ANY_DWARF)); + + LIMWAITH_COMMANDER = new LOTRUnitTradeEntries(200.0F, new LOTRUnitTradeEntry(LimwaithWarrior.class, 150, 50.0F), + (new LOTRUnitTradeEntry(LimwaithBlowgunner.class, 150, 100.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(LimwaithBoneWarrior.class, 250, 200.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(LimwaithBannerBearer.class, 150, 200.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION)); + + ARNOR_CAPTAIN = new LOTRUnitTradeEntries(200.0F, (new LOTRUnitTradeEntry(ArnorSoldier.class, 250, 250.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(ArnorSoldierArcher.class, 250, 300.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(ArnorSoldier.class, LOTREntityHorse.class, "Arnor_Horse", 350, 150.0F)).setMountArmor(horseArmorIron).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(ArnorSoldierArcher.class, LOTREntityHorse.class, "Arnor_Horse", 350, 200.0F)).setMountArmor(horseArmorIron).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(LOTREntityRangerNorth.class, 250, 0.0f)), + (new LOTRUnitTradeEntry(LOTREntityRangerNorth.class, LOTREntityHorse.class, "RangerNorth_Horse", 350, 100.0f)), + (new LOTRUnitTradeEntry(LOTREntityRangerNorthBannerBearer.class, 250, 150.0f)), + (new LOTRUnitTradeEntry(ArnorBannerBearer.class, 250, 400.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(ArnorBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 450, 500.0F)).setMountArmor(horseArmorIron).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new CinderUnitTradeEntry(BattleNun.class, 250, 400.0F).setObjective("Arnor").setExtraInfo("Arnor")).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION)); + + + BREE_CAPTAIN = new LOTRUnitTradeEntries(150.0F, (new LOTRUnitTradeEntry(LOTREntityBreeGuard.class, 150, 0.0f)), + (new LOTRUnitTradeEntry(BreeSoldier.class, 250, 250.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(BreeCrossbowman.class, 250, 300.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(BreeOutrider.class, LOTREntityHorse.class, "Bree_Horse", 350, 400.0F)).setMountArmor(horseArmorIron).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(LOTREntityBreeBannerBearer.class, 150, 150.0f)), + (new LOTRUnitTradeEntry(BreeSoldierBannerBearer.class, 250, 400.0F)).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION), + (new LOTRUnitTradeEntry(BreeSoldierBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 500.0F)).setMountArmor(horseArmorIron).setPledgeType(LOTRUnitTradeEntry.PledgeType.FACTION)); + } + + public int getRustedSwordID() {return 0;} +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/CinderLoE_Config.java b/src (1)/main/java/com/zivilon/cinder_loe/CinderLoE_Config.java new file mode 100644 index 0000000..dd81b1a --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/CinderLoE_Config.java @@ -0,0 +1,63 @@ +package com.zivilon.cinder_loe; + +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 { + public static Configuration 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 boolean objective_lindon; + public static boolean objective_arnor; + public static boolean objective_angmar; + public static boolean objective_durin; + public static boolean objective_dolguldur; + public static boolean objective_woodelf; + public static boolean objective_lothlorien; + public static boolean objective_dale; + public static boolean objective_rhudaur; + + + public static void init(FMLPreInitializationEvent event) { + File configFile = new File(event.getModConfigurationDirectory(), "CinderLoE.cfg"); + config = new Configuration(configFile); + syncConfig(); + } + + public static void syncConfig() { + try { + // Load the configuration file + config.load(); + + // Read properties, define categories and keys + enchantment_color_red = config.getFloat("EnchantmentColorRed", Configuration.CATEGORY_GENERAL, 0.38f, 0.0f, 1.0f, "Configure red color for enchantments"); + 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"); + + objective_lindon = config.getBoolean("Lindon", Configuration.CATEGORY_GENERAL, false, "set true if Lindon Objective Complete"); + objective_arnor = config.getBoolean("Arnor", Configuration.CATEGORY_GENERAL, false,"set true if Arnor Objective Complete"); + objective_angmar = config.getBoolean("Angmar", Configuration.CATEGORY_GENERAL, false, "set true if Angmar Objective Complete"); + objective_durin = config.getBoolean("Durin", Configuration.CATEGORY_GENERAL, false, "set true if Durin Objective Complete"); + objective_dolguldur = config.getBoolean("Dol_Guldur", Configuration.CATEGORY_GENERAL, false,"set true if Dol Guldur Objective Complete"); + objective_woodelf = config.getBoolean("Wood_Elf", Configuration.CATEGORY_GENERAL, false, "set true if Wood Elf Objective Complete"); + objective_lothlorien = config.getBoolean("Lothlorien", Configuration.CATEGORY_GENERAL, false, "set true if Lothlorien Objective Complete"); + objective_dale = config.getBoolean("Dale", Configuration.CATEGORY_GENERAL, false, "set true if Dalish Objective Complete"); + objective_rhudaur = config.getBoolean("Rhudaur", Configuration.CATEGORY_GENERAL, false, "set true if Rhudaur Objective Complete"); + + // Save the configuration if it has changed + if (config.hasChanged()) { + config.save(); + } + } catch (Exception e) { + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/CinderShapelessOreRecipe.java b/src (1)/main/java/com/zivilon/cinder_loe/CinderShapelessOreRecipe.java new file mode 100644 index 0000000..74e5c66 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/CinderShapelessOreRecipe.java @@ -0,0 +1,44 @@ +package com.zivilon.cinder_loe; + +import lotr.common.LOTRMod; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +import java.util.Random; + +public class CinderShapelessOreRecipe extends ShapelessOreRecipe { + public CinderShapelessOreRecipe(ItemStack result, Object... recipe) { + super(result, recipe); + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting inv) { + ItemStack result = super.getCraftingResult(inv).copy(); + for (int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (stack != null && stack.getItem() == LOTRMod.rollingPin) { + stack = stack.copy(); + stack.attemptDamageItem(1, new Random()); + if (stack.getItemDamage() > stack.getMaxDamage()) { + stack.stackSize -= 1; + } + inv.setInventorySlotContents(i, stack); + } + } + return result; + } + + @Override + public boolean matches (InventoryCrafting inv, World world) { + return super.matches(inv, world); + } + + @Override + public ItemStack getRecipeOutput() { + return super.getRecipeOutput(); + } + + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/CinderUnitTradeEntry.java b/src (1)/main/java/com/zivilon/cinder_loe/CinderUnitTradeEntry.java new file mode 100644 index 0000000..e442608 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/CinderUnitTradeEntry.java @@ -0,0 +1,93 @@ +package com.zivilon.cinder_loe; + +import lotr.common.LOTRLevelData; +import lotr.common.entity.LOTREntities; +import lotr.common.entity.npc.LOTRBannerBearer; +import lotr.common.entity.npc.LOTRHireableBase; +import lotr.common.entity.npc.LOTRUnitTradeEntry; +import lotr.common.fac.LOTRFaction; +import lotr.common.item.LOTRItemCoin; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.config.Configuration; + +import java.io.File; + +public class CinderUnitTradeEntry extends LOTRUnitTradeEntry { + + public Class entityClass; + private String name; + private PledgeType pledgeType = PledgeType.NONE; + private String objectivename; + private static Configuration config; + private String extraInfo; + + static { + config = new Configuration(new File("CinderLoE.cfg")); + config.load(); + } + + public CinderUnitTradeEntry(Class c, int cost, float alignment) { + super(c, cost, alignment); + this.entityClass = c; // Set entityClass to the passed class + + if (LOTRBannerBearer.class.isAssignableFrom(this.entityClass)) { + this.setExtraInfo("Banner"); + } + } + + public CinderUnitTradeEntry(Class c, Class c1, String s, int cost, float alignment) { + super(c, cost, alignment); + this.entityClass = c; // Set entityClass to the passed class + this.mountClass = c1; + this.name = s; + } + + public boolean isObjectiveComplete(String objective) { + return config.getBoolean(objective, Configuration.CATEGORY_GENERAL, false, "Set true if " + objective + " is complete"); + } + + @Override + public boolean hasRequiredCostAndAlignment(EntityPlayer entityplayer, LOTRHireableBase trader) { + int coins = LOTRItemCoin.getInventoryValue(entityplayer, false); + if (coins < this.getCost(entityplayer, trader)) { + return false; + } + LOTRFaction fac = trader.getFaction(); + if (!this.pledgeType.canAcceptPlayer(entityplayer, fac)) { + return false; + } + if (objectivename != null && !isObjectiveComplete(objectivename)) { + return false; + } + float alignment = LOTRLevelData.getData(entityplayer).getAlignment(fac); + return alignment >= this.alignmentRequired; + } + + public CinderUnitTradeEntry setObjective(String objective) { + this.objectivename = objective; + return this; + } + + public String getFormattedExtraInfo() { + return StatCollector.translateToLocal((String) "lotr.unitinfo." + this.objectivename); + } + + public LOTRUnitTradeEntry setExtraInfo(String s) { + this.extraInfo = s; + return this; + } + + public boolean hasExtraInfo() { + return this.extraInfo != null; + } + + public String getUnitTradeName() { + if (this.mountClass == null) { + String entityName = LOTREntities.getStringFromClass(this.entityClass); + return StatCollector.translateToLocal((String)("entity." + entityName + ".name")); + } + return StatCollector.translateToLocal((String)("lotr.unit." + this.name)); + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/ItemRegistration.java b/src (1)/main/java/com/zivilon/cinder_loe/ItemRegistration.java new file mode 100644 index 0000000..8d75f32 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/ItemRegistration.java @@ -0,0 +1,51 @@ +package com.zivilon.cinder_loe; + +import java.util.AbstractMap.SimpleEntry; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import cpw.mods.fml.common.registry.GameData; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.FMLControlledNamespacedRegistry; + +public class ItemRegistration { + public static FMLControlledNamespacedRegistry block_registry; + public static FMLControlledNamespacedRegistry item_registry; + + static { + block_registry = GameData.getBlockRegistry(); + item_registry = GameData.getItemRegistry(); + } + + public static List> list = new ArrayList<>(); + + @Deprecated + public static void registerItem(Item item, String item_name, int ordinal) { + while (list.size() <= ordinal) { + list.add(new SimpleEntry<>(null, null)); + } + list.set(ordinal, new SimpleEntry<>(item, item_name)); + } + + // Register items in consistent order that persists through mod updates while enabling us to keep the item lists neatly organized. + // Unknown if this is actually necessary, but might help to prevent item ID shifts + public static void registerItems() { + for (int i = 0; i < list.size(); i++) { + SimpleEntry entry = list.get(i); + + if (entry == null || entry.getKey() == null || entry.getValue() == null) { + break; + } + + GameRegistry.registerItem(entry.getKey(), entry.getValue()); + } + } + + public static void register(Item item, String item_name, int id) { + item_registry.addObject(id, item_name, item); + } + public static void register(Block block, String item_name, int id) { + block_registry.addObject(id, item_name, block); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/LoECreativeTabs.java b/src (1)/main/java/com/zivilon/cinder_loe/LoECreativeTabs.java new file mode 100644 index 0000000..472b4d4 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/LoECreativeTabs.java @@ -0,0 +1,49 @@ +package com.zivilon.cinder_loe; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class LoECreativeTabs extends CreativeTabs { + public static LoECreativeTabs tabBlockLoE = new LoECreativeTabs("tabBlockLoE"); + public static LoECreativeTabs tabCombatLoE = new LoECreativeTabs("tabCombatLoE"); + public static LoECreativeTabs tabSpawnLoE = new LoECreativeTabs("tabSpawnLoE"); + public static LoECreativeTabs tabMiscLoE = new LoECreativeTabs("tabMiscLoE"); + public static LoECreativeTabs tabFoodLoE = new LoECreativeTabs("tabFoodLoE"); + public static LoECreativeTabs tabDecoLoE = new LoECreativeTabs("tabDecoLoE"); + public static LoECreativeTabs tabCharacterLoE = new LoECreativeTabs("tabCharacterLoE"); + + public ItemStack theIcon; + + public LoECreativeTabs(String label) { + super(label); + } + + public static void setupIcons() { + tabBlockLoE.theIcon = new ItemStack(CinderLoE.fishBarrel); + tabCombatLoE.theIcon = new ItemStack(CinderLoE.swordAsh); + tabSpawnLoE.theIcon = new ItemStack(CinderLoE.spawnEgg); + tabMiscLoE.theIcon = new ItemStack(CinderLoE.bonemold); + tabFoodLoE.theIcon = new ItemStack(CinderLoE.onion); + tabDecoLoE.theIcon = new ItemStack(CinderLoE.goldChain); + tabCharacterLoE.theIcon = new ItemStack(CinderLoE.sarumanStaff); + } + + @SideOnly(Side.CLIENT) + public String getTranslatedTabLabel() { + return StatCollector.translateToLocal("cinder_loe.creativetab." + getTabLabel()); + } + + @SideOnly(Side.CLIENT) + public Item getTabIconItem() { + return this.theIcon.getItem(); + } + + public ItemStack getIconItemStack() { + return this.theIcon; + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/LoEDamage.java b/src (1)/main/java/com/zivilon/cinder_loe/LoEDamage.java new file mode 100644 index 0000000..d148063 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/LoEDamage.java @@ -0,0 +1,7 @@ +package com.zivilon.cinder_loe; + +import net.minecraft.util.DamageSource; + +public class LoEDamage { + public static DamageSource shadow = (new DamageSource("cinder_loe.shadow")).setDamageBypassesArmor().setMagicDamage(); +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/Materials.java b/src (1)/main/java/com/zivilon/cinder_loe/Materials.java new file mode 100644 index 0000000..da30bc0 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/Materials.java @@ -0,0 +1,75 @@ +package com.zivilon.cinder_loe; + +import lotr.common.LOTRMod; +import net.minecraft.init.Items; +import net.minecraft.item.Item; + +import lotr.common.item.LOTRMaterial; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.lang.reflect.Field; + +public class Materials { + public static void registerMaterials() { + 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("BONEMOLD", 512, 2.5F, 0.6F, 2, 6.0F, 10, CinderLoE.bonemold); //Original Durability = 350 | Add 81 | 162 if Upgraded Armory | 2/4 (Unupgraded) + modifyMaterial("LIMWAITH_WOOD", 230, 1.5F, 0.5F, 2, 5.0F, 10, Item.getItemFromBlock(LOTRMod.driedReeds)); + modifyMaterial("EVENT", 2400, 5.0F, 0.8F, 0, 9.0F, 10, LOTRMod.emerald); + modifyMaterial("BREE", 350, 2.5F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); + modifyMaterial("RHUDAUR", 300, 2.5F, 0.6F, 2, 6.0F, 10, LOTRMod.fur); + modifyMaterial("BATTLENUN", 300, 3F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); + modifyMaterial("ASH", 2000, 0.0F, 0.6F, 2, 7.0F, 10, CinderLoE.ingotAsh); + modifyMaterial("SERPENT", 650, 2.0F, 0.6F, 2, 6.0F, 10, LOTRMod.bronze); + modifyMaterial("USURPER",650, 2.0F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); + modifyMaterial("WARLORD", 650, 2.0F, 0.6F, 2, 6.0F, 10, LOTRMod.bronze); + modifyMaterial("JADE",2400, 5.0F, 0.8F, 0, 9.0F, 10, LOTRMod.emerald); + } + + public static void modifyMaterial(String fieldName, int uses, float weapon_damage, float protection, int harvest_level, float speed, int enchantability, Item crafting_item) { + try { + Class lotrMaterialClass = Class.forName("lotr.common.item.LOTRMaterial"); + Field materialField = lotrMaterialClass.getField(fieldName); + + // Reflection to access and instantiate the private constructor of LOTRMaterial + Constructor constructor = lotrMaterialClass.getDeclaredConstructor(String.class); + constructor.setAccessible(true); + Object materialLocal = constructor.newInstance(fieldName); + + // Reflection to call the private methods on the new instance + Method setUses = lotrMaterialClass.getDeclaredMethod("setUses", int.class); + Method setDamage = lotrMaterialClass.getDeclaredMethod("setDamage", float.class); + Method setProtection = lotrMaterialClass.getDeclaredMethod("setProtection", float.class); + Method setHarvestLevel = lotrMaterialClass.getDeclaredMethod("setHarvestLevel", int.class); + Method setSpeed = lotrMaterialClass.getDeclaredMethod("setSpeed", float.class); + Method setEnchantability = lotrMaterialClass.getDeclaredMethod("setEnchantability", int.class); + Method setCraftingItem = lotrMaterialClass.getDeclaredMethod("setCraftingItem", Item.class); + // Method setManFlesh = lotrMaterialClass.getDeclaredMethod("canHarvestManFlesh", boolean.class); + + setUses.setAccessible(true); + setDamage.setAccessible(true); + setProtection.setAccessible(true); + setHarvestLevel.setAccessible(true); + setSpeed.setAccessible(true); + setEnchantability.setAccessible(true); + setCraftingItem.setAccessible(true); + // setManFlesh.setAccessible(true); + + setUses.invoke(materialLocal, uses); + setDamage.invoke(materialLocal, weapon_damage); + setProtection.invoke(materialLocal, protection); + setHarvestLevel.invoke(materialLocal, harvest_level); + setSpeed.invoke(materialLocal, speed); + setEnchantability.invoke(materialLocal, enchantability); + // setManFlesh.invoke(materialLocal, canHarvestManFlesh); + if (crafting_item != null) { + setCraftingItem.invoke(materialLocal, crafting_item); + } + + materialField.set(null, materialLocal); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/ShapelessDurabilityRecipe.java b/src (1)/main/java/com/zivilon/cinder_loe/ShapelessDurabilityRecipe.java new file mode 100644 index 0000000..4e8bb1c --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/ShapelessDurabilityRecipe.java @@ -0,0 +1,107 @@ +package com.zivilon.cinder_loe; + +import java.util.List; +import java.util.ArrayList; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.world.World; +import net.minecraft.item.crafting.IRecipe; + +public class ShapelessDurabilityRecipe implements IRecipe { + private final ItemStack recipeOutput; + private final List recipeItems; + private final Item toolItem; + + public ShapelessDurabilityRecipe(ItemStack result, Item toolItem, ItemStack... ingredients) { + this.recipeOutput = result; + this.recipeItems = new ArrayList<>(ingredients.length); + for (ItemStack ingredient : ingredients) { + this.recipeItems.add(ingredient); + } + this.toolItem = toolItem; + System.out.println("[CinderLoE] Created ShapelessDurabilityRecipe for: " + result.getUnlocalizedName()); + System.out.println("[CinderLoE] Ingredients: " + this.recipeItems); + } + + @Override + public boolean matches(InventoryCrafting inv, World worldIn) { + System.out.println("[CinderLoE] Checking matches for ShapelessDurabilityRecipe"); + + boolean hasTool = false; + List ingredientsCopy = new ArrayList<>(this.recipeItems); + + for (int i = 0; i < inv.getSizeInventory(); ++i) { + ItemStack stack = inv.getStackInSlot(i); + if (stack != null) { + if (stack.getItem() == toolItem) { + hasTool = true; + } else { + boolean matched = false; + for (ItemStack recipeStack : ingredientsCopy) { + if (stack.getItem() == recipeStack.getItem() && (recipeStack.getItemDamage() == 32767 || stack.getItemDamage() == recipeStack.getItemDamage())) { + matched = true; + ingredientsCopy.remove(recipeStack); + break; + } + } + if (!matched) { + System.out.println("[CinderLoE] Ingredient did not match: " + stack); + return false; + } + } + } + } + + boolean matches = hasTool && ingredientsCopy.isEmpty(); + System.out.println("[CinderLoE] ShapelessDurabilityRecipe match result: " + matches + ", has tool: " + hasTool); + return matches; + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting inv) { + System.out.println("[CinderLoE] Getting crafting result for ShapelessDurabilityRecipe"); + return this.recipeOutput.copy(); + } + + @Override + public int getRecipeSize() { + return this.recipeItems.size(); + } + + @Override + public ItemStack getRecipeOutput() { + return this.recipeOutput; + } + + public ItemStack[] getRemainingItems(InventoryCrafting inv) { + System.out.println("[CinderLoE] Getting remaining items for ShapelessDurabilityRecipe"); + ItemStack[] remainingItems = new ItemStack[inv.getSizeInventory()]; + + for (int i = 0; i < remainingItems.length; ++i) { + ItemStack itemstack = inv.getStackInSlot(i); + + if (itemstack != null && itemstack.getItem() == toolItem) { + ItemStack tool = itemstack.copy(); + tool.setItemDamage(tool.getItemDamage() + 1); + System.out.println("[CinderLoE] Damaging tool: " + tool.getUnlocalizedName() + " | New Damage: " + tool.getItemDamage()); + + if (tool.getItemDamage() >= tool.getMaxDamage()) { + System.out.println("[CinderLoE] Tool is out of durability, breaking: " + tool.getUnlocalizedName()); + tool = null; + } + + remainingItems[i] = tool; + } else if (itemstack != null && itemstack.getItem().hasContainerItem(itemstack)) { + System.out.println("[CinderLoE] Consuming non-tool item " + itemstack.getUnlocalizedName()); + remainingItems[i] = itemstack.getItem().getContainerItem(itemstack); + } else { + remainingItems[i] = itemstack; + } + } + + return remainingItems; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/SwiftnessHandler.java b/src (1)/main/java/com/zivilon/cinder_loe/SwiftnessHandler.java new file mode 100644 index 0000000..d4f32f7 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/SwiftnessHandler.java @@ -0,0 +1,56 @@ +// File: SwiftnessHandler.java +package com.zivilon.cinder_loe; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.event.entity.living.LivingEvent; +import lotr.common.enchant.LOTREnchantment; +import lotr.common.enchant.LOTREnchantmentHelper; +import net.minecraft.entity.ai.attributes.IAttributeInstance; + +import java.util.UUID; + +public class SwiftnessHandler { + // Use fixed UUIDs to prevent stacking + private static final UUID[] SWIFTNESS_UUIDS = new UUID[]{ + UUID.fromString("123e4567-e89b-12d3-a456-426614174001"), // boots + UUID.fromString("123e4567-e89b-12d3-a456-426614174002"), // leggings + UUID.fromString("123e4567-e89b-12d3-a456-426614174003"), // chestplate + UUID.fromString("123e4567-e89b-12d3-a456-426614174004") // helmet + }; + private static final String[] MODIFIER_NAMES = new String[]{ + "SwiftnessBoots", "SwiftnessLegs", "SwiftnessChest", "SwiftnessHelm" + }; + + @SubscribeEvent + public void onPlayerTick(LivingEvent.LivingUpdateEvent event) { + if (!(event.entityLiving instanceof EntityPlayer)) return; + + EntityPlayer player = (EntityPlayer) event.entityLiving; + + for (int i = 0; i < player.inventory.armorInventory.length; i++) { + ItemStack armor = player.inventory.armorInventory[i]; + UUID uuid = SWIFTNESS_UUIDS[i]; + String label = MODIFIER_NAMES[i]; + + // Get movement speed attribute + IAttributeInstance attr = player.getEntityAttribute(SharedMonsterAttributes.movementSpeed); +AttributeModifier existingMod = attr.getModifier(uuid); + +if (armor != null && LOTREnchantmentHelper.hasEnchant(armor, LOTREnchantment.getEnchantmentByName("swiftness"))) { + if (existingMod == null) { + AttributeModifier mod = new AttributeModifier(uuid, label, 0.05, 1); + attr.applyModifier(mod); + } +} else { + if (existingMod != null) { + attr.removeModifier(existingMod); + } +} + + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/BarsBase.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/BarsBase.java new file mode 100644 index 0000000..c159a43 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/BarsBase.java @@ -0,0 +1,52 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockPane; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; + +import lotr.common.LOTRCreativeTabs; +import lotr.common.block.LOTRBlockOrcChain; +import lotr.common.block.LOTRBlockPane; + +import com.zivilon.cinder_loe.util.Utilities; + +public abstract class BarsBase extends BlockPane { + public String textureName; + protected IIcon icon; + + public BarsBase(String blockName) { + super("", "", Material.iron, true); + this.textureName = Utilities.toSnakeCase(blockName); + this.setBlockName(blockName); + this.setCreativeTab(LoECreativeTabs.tabBlockLoE); + setHardness(5.0F); + setResistance(10.0F); + setStepSound(Block.soundTypeMetal); + } + + public void registerBlockIcons(IIconRegister iconregister) { + this.icon = iconregister.registerIcon(textureName); + System.out.println("Registering texture " + textureName); + } + + public IIcon getIcon() { + return this.icon; + } + + public IIcon getIcon(int i, int j) { + return this.icon; + } + + public IIcon func_150097_e() { + return this.icon; + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/BlockRedDwarfSteel.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/BlockRedDwarfSteel.java new file mode 100644 index 0000000..df907fa --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/BlockRedDwarfSteel.java @@ -0,0 +1,32 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; + +import lotr.common.LOTRCreativeTabs; + +import java.lang.reflect.Field; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BlockRedDwarfSteel extends Block { + + public BlockRedDwarfSteel() { + super(Material.iron); // Choose the appropriate material + this.setCreativeTab(LoECreativeTabs.tabBlockLoE); + setHardness(5.0F); + setResistance(15.0F); + setStepSound(Block.soundTypeMetal); + setBlockTextureName("lotr:red_dwarf_steel"); + setBlockName("lotr:blockRedDwarfSteel"); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon("lotr:red_dwarf_steel"); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/ChandelierBase.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/ChandelierBase.java new file mode 100644 index 0000000..af002f2 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/ChandelierBase.java @@ -0,0 +1,106 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.common.util.ForgeDirection; + +import lotr.common.LOTRCreativeTabs; +import lotr.common.block.LOTRBlockOrcChain; + +import com.zivilon.cinder_loe.util.Utilities; + +public abstract class ChandelierBase extends Block { + public String textureName; + public IIcon icon; + + public ChandelierBase(String blockName) { + super(Material.circuits); + this.textureName = Utilities.toSnakeCase(blockName); + this.setBlockName(blockName); + this.setCreativeTab(LoECreativeTabs.tabBlockLoE); + setHardness(0.0F); + setResistance(2.0F); + setStepSound(Block.soundTypeMetal); + setLightLevel(0.9375F); + setBlockBounds(0.0625F, 0.1875F, 0.0625F, 0.9375F, 1.0F, 0.9375F); + } + + public IIcon getIcon(int i, int j) { + return this.icon; + } + + @Override + public void registerBlockIcons(IIconRegister reg) { + icon = reg.registerIcon(this.textureName); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 1; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k) { + return null; + } + + public boolean canBlockStay(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 net.minecraft.block.BlockFence || block instanceof net.minecraft.block.BlockWall) + return true; + if (block instanceof net.minecraft.block.BlockSlab && !block.isOpaqueCube() && (meta & 0x8) == 0) + return true; + if (block instanceof net.minecraft.block.BlockStairs && (meta & 0x4) == 0) + return true; + if (block instanceof LOTRBlockOrcChain) + return true; + return world.getBlock(i, j + 1, k).isSideSolid((IBlockAccess)world, i, j + 1, k, ForgeDirection.DOWN); + } + + public boolean canPlaceBlockAt(World world, int i, int j, int k) { + return canBlockStay(world, i, j, k); + } + + public void onNeighborBlockChange(World world, int i, int j, int k, Block block) { + if (!canBlockStay(world, i, j, k)) { + dropBlockAsItem(world, i, j, k, world.getBlockMetadata(i, j, k), 0); + world.setBlockToAir(i, j, k); + } + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(World world, int i, int j, int k, Random random) { + double d = 0.13D; + double d1 = 1.0D - d; + double d2 = 0.6875D; + spawnChandelierParticles(world, i + d, j + d2, k + d); + spawnChandelierParticles(world, i + d1, j + d2, k + d1); + spawnChandelierParticles(world, i + d, j + d2, k + d1); + spawnChandelierParticles(world, i + d1, j + d2, k + d); + } + + private void spawnChandelierParticles(World world, double d, double d1, double d2) { + world.spawnParticle("smoke", d, d1, d2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("flame", d, d1, d2, 0.0D, 0.0D, 0.0D); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/CinderBlock.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/CinderBlock.java new file mode 100644 index 0000000..602a66f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/CinderBlock.java @@ -0,0 +1,37 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import java.lang.reflect.Field; + +public class CinderBlock extends Block { + + public CinderBlock() { + super(Material.rock); + this.setCreativeTab(LoECreativeTabs.tabBlockLoE); + setHardness(2.0F); + setResistance(5.0F); + setBlockTextureName("lotr:cinder_block"); + setBlockName("lotr:cinderBlock"); + setLightLevel(0.25F); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon("lotr:cinder_block"); + } + + @Override + public void onEntityWalking(World world, int x, int y, int z, Entity entity) { + entity.setFire(20); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/CinderChain.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/CinderChain.java new file mode 100644 index 0000000..2aa4fa2 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/CinderChain.java @@ -0,0 +1,149 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import lotr.common.block.LOTRBlockOrcChain; +import net.minecraft.block.*; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +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; + +import java.util.List; + +public class CinderChain extends LOTRBlockOrcChain { + + public static final String[] chainTypes = {"bronze", "gold", "silver", "iron"}; + @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; + @SideOnly(Side.CLIENT) + private IIcon[] iconItem; + + + public CinderChain() { + this.setCreativeTab(LoECreativeTabs.tabDecoLoE); + this.setHardness(1.0f); + this.setStepSound(Block.soundTypeMetal); + setBlockName("lotr:cinderchain"); + setBlockTextureName("lotr:cinderchain"); + float f = 0.2f; + this.setBlockBounds(0.5f - f, 0.0f, 0.5f - f, 0.5f + f, 1.0f, 0.5f + f); + } + + @SideOnly(Side.CLIENT) + @Override + public void registerBlockIcons(IIconRegister iconRegister) { + + this.iconItem = new IIcon[chainTypes.length]; + + for (int i = 0; i < chainTypes.length; ++i) { + this.iconItem[i] = iconRegister.registerIcon(this.getTextureName() + "_" + chainTypes[i] + "_item"); + } + + this.iconMiddle = new IIcon[chainTypes.length]; + this.iconTop = new IIcon[chainTypes.length]; + this.iconBottom = new IIcon[chainTypes.length]; + this.iconSingle = new IIcon[chainTypes.length]; + + for (int i = 0; i < chainTypes.length; ++i) { + this.iconMiddle[i] = iconRegister.registerIcon(this.getTextureName() + "_" + chainTypes[i] + "_mid"); + this.iconTop[i] = iconRegister.registerIcon(this.getTextureName() + "_" + chainTypes[i] + "_top"); + this.iconBottom[i] = iconRegister.registerIcon(this.getTextureName() + "_" + chainTypes[i] + "_bottom"); + this.iconSingle[i] = iconRegister.registerIcon(this.getTextureName() + "_" + chainTypes[i] + "_single"); + } + } + @SideOnly(Side.CLIENT) + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + Block above = world.getBlock(x, y + 1, z); + Block below = world.getBlock(x, y - 1, z); + boolean chainAbove = above instanceof CinderChain; + boolean chainBelow = below instanceof CinderChain; + + int meta = world.getBlockMetadata(x, y, z); + if (chainAbove && chainBelow) { + return this.iconMiddle[meta]; + } + if (chainAbove) { + return this.iconBottom[meta]; + } + if (chainBelow) { + return this.iconTop[meta]; + } + return this.iconSingle[meta]; + } + + @SideOnly(value=Side.CLIENT) + public IIcon getIcon(int i, int j) { + return i == 1 ? this.iconItem[0] : this.iconItem[1]; + } + + @SideOnly(value=Side.CLIENT) + public String getItemIconName() { + return this.getTextureName(); + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < chainTypes.length; ++i) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + public int onBlockPlaced(World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) { + // The metadata provided here is the metadata of the block being placed (from the item stack). + return metadata; // Return the metadata of the block that should be placed. + } + + + @Override + public boolean canPlaceBlockAt(World world, int x, int y, int z) { + Block blockAbove = world.getBlock(x, y + 1, z); + int metaAbove = world.getBlockMetadata(x, y + 1, z); + + // Get the metadata of the block to be placed (already handled by onBlockPlaced) + int currentMeta = world.getBlockMetadata(x, y, z); // Metadata of the block being placed + + // Check if the block above is a chain block and if the metadata matches + if (blockAbove instanceof CinderChain) { + if (metaAbove != currentMeta) { + return false; // Prevent placement of different types of chains + } + return true; // Same type, allow placement + } + + // Other checks for fences, walls, slabs, etc. + if (blockAbove instanceof BlockFence || blockAbove instanceof BlockWall) { + return true; + } + if (blockAbove instanceof BlockSlab && !blockAbove.isOpaqueCube() && (metaAbove & 8) == 0) { + return true; + } + if (blockAbove instanceof BlockStairs && (metaAbove & 4) == 0) { + return true; + } + + // Check if the block above is solid on the bottom + return blockAbove.isSideSolid(world, x, y + 1, z, ForgeDirection.DOWN); + } + + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/CinderFurBlock.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/CinderFurBlock.java new file mode 100644 index 0000000..af2ad42 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/CinderFurBlock.java @@ -0,0 +1,64 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.util.Utilities; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import lotr.common.LOTRCreativeTabs; +import lotr.common.block.LOTRBlockBrickBase; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import java.lang.reflect.Field; +import java.util.List; + +public class CinderFurBlock extends Block { + protected IIcon[] brickIcons; + protected String[] brickNames; + + + public CinderFurBlock() { + super(Material.cloth); + this.setCreativeTab(LoECreativeTabs.tabBlockLoE); + setBlockTextureName("lotr:cinderfur"); + setBlockName("lotr:cinderfur"); + setStepSound(Block.soundTypeCloth); + this.setBrickNames("brown", "gray", "black", "white", "obsidian", "bearblack", "bearbrown", "lion", "lioness"); + } + + protected void setBrickNames(String ... names) { + this.brickNames = names; + } + + @SideOnly(Side.CLIENT) + @Override + public void registerBlockIcons(IIconRegister iconregister) { + this.brickIcons = new IIcon[this.brickNames.length]; + for (int i = 0; i < this.brickNames.length; ++i) { + String texturePath = this.getTextureName() + "_" + this.brickNames[i]; + System.out.println("Registering texture: " + texturePath); // Debug log + this.brickIcons[i] = iconregister.registerIcon(texturePath); + } + } + @Override + public IIcon getIcon(int side, int meta) { + return this.brickIcons[meta]; + } + + @Override + public int damageDropped(int meta) { + return meta; + } + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < this.brickNames.length; ++i) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/CobbleBlock.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/CobbleBlock.java new file mode 100644 index 0000000..4d959db --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/CobbleBlock.java @@ -0,0 +1,66 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.util.Utilities; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import lotr.common.LOTRCreativeTabs; +import lotr.common.block.LOTRBlockBrickBase; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import java.lang.reflect.Field; +import java.util.List; + +public class CobbleBlock extends Block { + protected IIcon[] brickIcons; + protected String[] brickNames; + + + public CobbleBlock() { + super(Material.rock); + this.setHardness(1.5f); + this.setResistance(10.0f); + this.setStepSound(Block.soundTypeStone); + this.setCreativeTab(LoECreativeTabs.tabBlockLoE); + setBlockTextureName("lotr:cindercobble"); + setBlockName("lotr:cindercobble"); + this.setBrickNames("drystone", "mordor", "silverbrick", "silvercobble"); + } + + protected void setBrickNames(String ... names) { + this.brickNames = names; + } + + @SideOnly(Side.CLIENT) + @Override + public void registerBlockIcons(IIconRegister iconregister) { + this.brickIcons = new IIcon[this.brickNames.length]; + for (int i = 0; i < this.brickNames.length; ++i) { + String texturePath = this.getTextureName() + "_" + this.brickNames[i]; + System.out.println("Registering texture: " + texturePath); // Debug log + this.brickIcons[i] = iconregister.registerIcon(texturePath); + } + } + @Override + public IIcon getIcon(int side, int meta) { + return this.brickIcons[meta]; + } + + @Override + public int damageDropped(int meta) { + return meta; + } + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < this.brickNames.length; ++i) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/EntityBarrier.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/EntityBarrier.java new file mode 100644 index 0000000..aed9edd --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/EntityBarrier.java @@ -0,0 +1,84 @@ +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.util.IIcon; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import java.lang.reflect.Field; +import java.util.List; +import net.minecraft.client.Minecraft; +import cpw.mods.fml.common.FMLCommonHandler; + +public class EntityBarrier extends Block { + @SideOnly(Side.CLIENT) + public IIcon transparentIcon; + + public EntityBarrier() { + super(Material.rock); + setHardness(Float.MAX_VALUE); + setResistance(Float.MAX_VALUE); + setBlockTextureName(Utilities.toSnakeCase("lotr:entityBarrier")); + setBlockName(Utilities.toSnakeCase("lotr:entityBarrier")); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public int getRenderType() { + return -1; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.transparentIcon = iconRegister.registerIcon("lotr:invisible"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return this.transparentIcon; + } + + @SideOnly(Side.CLIENT) + private boolean isPlayerInSurvivalModeClientSide() { + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + return player != null && !player.capabilities.isCreativeMode; + } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && isPlayerInSurvivalModeClientSide()) { + this.setBlockBounds(0.5F, 1.0F, 0.5F, 0.5F, 0.0F, 0.5F); // Zero-sized bounding box for survival players + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); // Full-sized bounding box for others + } + } + + @Override + public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB aabb, List list, Entity entity) { + if (entity instanceof EntityPlayer) { + return; + } + AxisAlignedBB boundingBox = AxisAlignedBB.getBoundingBox(x, y, z, x + 1.0F, y + 1.0F, z + 1.0F); + if (boundingBox != null && aabb.intersectsWith(boundingBox)) { + list.add(boundingBox); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/FishBarrel.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/FishBarrel.java new file mode 100644 index 0000000..d857567 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/FishBarrel.java @@ -0,0 +1,26 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import lotr.common.LOTRCreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.IIcon; + +import java.lang.reflect.Field; + +public class FishBarrel extends StaticBlockBase3 { + + public FishBarrel() { + super(Material.wood, "lotr:fishbarrel"); + this.setCreativeTab(LoECreativeTabs.tabDecoLoE); + setStepSound(Block.soundTypeWood); + setBlockName("lotr:fishbarrel"); + setHardness(1.0F); + setResistance(2.0F); + // setCreativeTab((CreativeTabs) LOTRCreativeTabs.tabDeco); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/FurBundle.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/FurBundle.java new file mode 100644 index 0000000..398a03d --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/FurBundle.java @@ -0,0 +1,23 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.blocks.RotatableBlockBase3; +import lotr.common.LOTRCreativeTabs; +import net.minecraft.block.Block; + +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; + +import java.lang.reflect.Field; + +public class FurBundle extends RotatableBlockBase3 { + public FurBundle() { + super(Material.cloth, "lotr:furBundle"); + this.setCreativeTab(LoECreativeTabs.tabDecoLoE); + setStepSound(Block.soundTypeCloth); + setBlockName("lotr:furBundle"); + setHardness(0.5F); + setResistance(0.5F); + // setCreativeTab((CreativeTabs) LOTRCreativeTabs.tabDeco); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/FurCarpet.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/FurCarpet.java new file mode 100644 index 0000000..ad481af --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/FurCarpet.java @@ -0,0 +1,45 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.LoECreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockCarpet; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import java.util.List; + +public class FurCarpet extends BlockCarpet { + public FurCarpet() + { + super(); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F); + this.setTickRandomly(true); + this.setCreativeTab(LoECreativeTabs.tabDecoLoE); + this.func_150089_b(0); + setBlockName("lotr:cinderfurcarpet"); + setStepSound(Block.soundTypeCloth); + } + + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) + { + return CinderLoE.cinderfur.getIcon(side, meta); + } + + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) + { + for (int i = 0; i < 9; ++i) + { + list.add(new ItemStack(itemIn, 1, i)); + } + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/IvoryBlock.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/IvoryBlock.java new file mode 100644 index 0000000..3fa59d1 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/IvoryBlock.java @@ -0,0 +1,17 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.blocks.RotatableBlockBase2; +import net.minecraft.block.Block; + +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; + +public class IvoryBlock extends RotatableBlockBase2 { + public IvoryBlock() { + super(Material.rock, "lotr:ivoryBlock"); + setStepSound(Block.soundTypeStone); + setBlockName("lotr:ivoryBlock"); + setHardness(1.0F); + setResistance(5.0F); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/LeatherBundle.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/LeatherBundle.java new file mode 100644 index 0000000..1ae87f7 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/LeatherBundle.java @@ -0,0 +1,23 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.blocks.RotatableBlockBase3; +import lotr.common.LOTRCreativeTabs; +import net.minecraft.block.Block; + +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; + +import java.lang.reflect.Field; + +public class LeatherBundle extends RotatableBlockBase3 { + public LeatherBundle() { + super(Material.cloth, "lotr:leatherBundle"); + this.setCreativeTab(LoECreativeTabs.tabDecoLoE); + setStepSound(Block.soundTypeCloth); + setBlockName("lotr:leatherBundle"); + setHardness(0.5F); + setResistance(0.5F); + // setCreativeTab((CreativeTabs) LOTRCreativeTabs.tabDeco); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/MistBlock.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/MistBlock.java new file mode 100644 index 0000000..80fe590 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/MistBlock.java @@ -0,0 +1,56 @@ +package com.zivilon.cinder_loe.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import java.util.List; +import java.util.Random; + +import lotr.common.LOTRDimension; +import lotr.common.block.LOTRBlockUtumnoPortal; +import lotr.common.tileentity.LOTRTileEntityUtumnoPortal; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import com.zivilon.cinder_loe.tileentity.TileEntityMistBlock; + +public class MistBlock extends LOTRBlockUtumnoPortal { + public float color_red; + public float color_green; + public float color_blue; + public MistBlock() { + super(); + color_red = 0.0F; + color_green = 0.0F; + color_blue = 0.0F; + setBlockTextureName("lotr:mist_block"); + setBlockName("lotr:mistBlock"); + } + public MistBlock(float r, float g, float b) { + super(); + color_red = r; + color_green = g; + color_blue = b; + setHardness(-1.0F); + setResistance(Float.MAX_VALUE); + setBlockTextureName("lotr:mist_block"); + setBlockName("lotr:mistBlock"); + } + + public TileEntity createNewTileEntity(World world, int i) { + return (TileEntity)new TileEntityMistBlock(color_red, color_green, color_blue); + } + + @Override + public void func_149670_a(World world, int i, int j, int k, Entity entity) {} + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/RedDwarfBars.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/RedDwarfBars.java new file mode 100644 index 0000000..1a34f73 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/RedDwarfBars.java @@ -0,0 +1,12 @@ +package com.zivilon.cinder_loe.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; + +import com.zivilon.cinder_loe.blocks.BarsBase; + +public class RedDwarfBars extends BarsBase { + public RedDwarfBars() { + super("lotr:barsRedDwarf"); + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/RedDwarfChandelier.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/RedDwarfChandelier.java new file mode 100644 index 0000000..d28ef08 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/RedDwarfChandelier.java @@ -0,0 +1,12 @@ +package com.zivilon.cinder_loe.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; + +import com.zivilon.cinder_loe.blocks.ChandelierBase; + +public class RedDwarfChandelier extends ChandelierBase { + public RedDwarfChandelier() { + super("lotr:chandelierRedDwarf"); + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/ReedBale.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/ReedBale.java new file mode 100644 index 0000000..3d173f5 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/ReedBale.java @@ -0,0 +1,23 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.blocks.RotatableBlockBase3; +import lotr.common.LOTRCreativeTabs; +import net.minecraft.block.Block; + +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; + +import java.lang.reflect.Field; + +public class ReedBale extends RotatableBlockBase3 { + public ReedBale() { + super(Material.grass, "lotr:reedBale"); + setCreativeTab(LoECreativeTabs.tabDecoLoE); + setStepSound(Block.soundTypeGrass); + setBlockName("lotr:reedBale"); + setHardness(0.5F); + setResistance(0.5F); + // setCreativeTab((CreativeTabs) LOTRCreativeTabs.tabDeco); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/RotatableBlockBase2.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/RotatableBlockBase2.java new file mode 100644 index 0000000..9e64596 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/RotatableBlockBase2.java @@ -0,0 +1,88 @@ +package com.zivilon.cinder_loe.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockRotatedPillar; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import com.zivilon.cinder_loe.util.Utilities; + +public abstract class RotatableBlockBase2 extends BlockRotatedPillar { + public String textureName; + public IIcon[] icons = new IIcon[3]; + + public RotatableBlockBase2(Material material, String blockName) { + super(material); + this.textureName = Utilities.toSnakeCase(blockName); + this.setBlockName(blockName); + // Get LOTRCreativeTabs.tabBlock without ForgeGradle incorrectly obfuscating it. Uses cached field, not real-time reflection + this.setCreativeTab((CreativeTabs)Utilities.reflected_tab_block); + } + + public int onBlockPlaced(World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int meta) { + int orientation = 0; + switch (side) { + case 0: // Bottom + case 1: // Top + orientation = 0; + break; + case 2: // North + case 3: // South + orientation = 1; + break; + case 4: // West + case 5: // East + orientation = 2; + break; + } + + return orientation; + } + + public int damageDropped(int i) { + return 0; + } + + + @Override + public IIcon getIcon(int side, int meta) { + switch(meta) { + case 0: // Facing up + if(side == 0 || side == 1) return this.icons[0]; + else return this.icons[1]; + case 1: // Facing North-South + if(side == 2 || side == 3) return this.icons[0]; + if(side == 4 || side == 5) return this.icons[2]; + else return this.icons[1]; + case 2: // Facing East-West + if(side == 4 || side == 5) return this.icons[0]; + else return this.icons[2]; + case 3: // Uniform block + return this.icons[1]; + } + + return this.blockIcon; // Default case, should not happen + } + + @Override + public void registerBlockIcons(IIconRegister reg) { + icons[0] = reg.registerIcon(this.textureName + "_top"); + icons[1] = reg.registerIcon(this.textureName + "_side_0"); + icons[2] = reg.registerIcon(this.textureName + "_side_90"); + } + + @SideOnly(Side.CLIENT) + protected IIcon getSideIcon(int i) { + return null; + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/RotatableBlockBase3.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/RotatableBlockBase3.java new file mode 100644 index 0000000..9dac237 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/RotatableBlockBase3.java @@ -0,0 +1,165 @@ +package com.zivilon.cinder_loe.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockRotatedPillar; +import net.minecraft.block.material.Material; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.MathHelper; +import net.minecraft.util.IIcon; +import net.minecraft.client.renderer.texture.IIconRegister; +import lotr.common.LOTRCreativeTabs; +import net.minecraft.creativetab.CreativeTabs; + +import com.zivilon.cinder_loe.util.Utilities; + +public abstract class RotatableBlockBase3 extends BlockRotatedPillar { + public String textureName; + public IIcon[] icons = new IIcon[6]; + + public RotatableBlockBase3(Material material, String blockName) { + super(material); + this.textureName = Utilities.toSnakeCase(blockName); + this.setBlockName(blockName); + // Get LOTRCreativeTabs.tabBlock without ForgeGradle incorrectly obfuscating it. Uses cached field, not real-time reflection + this.setCreativeTab((CreativeTabs)Utilities.reflected_tab_block); + +/* Examples for block properties + this.setHardness(2.0F); // How long it takes to break the block + this.setResistance(10.0F); // Explosion resistance + this.setStepSound(soundTypePiston); // The sound made when walking on the block + this.setLightLevel(0.5F); // Light emitted by the block, 0.0 - 1.0 + this.setLightOpacity(255); // How much light is blocked, 0 - 255 + this.setBlockName("exampleBlock"); // The unique name of the block + this.setBlockTextureName("modid:exampleBlock"); // Texture for the block + this.setCreativeTab(CreativeTabs.tabBlock); // The creative tab it appears in +*/ + } + + public int onBlockPlaced(World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int meta) { + // Default orientation (meta 0) + int orientation = 0; + + // Determine orientation based on the side of the block the player is placing against + switch (side) { + case 0: // Bottom + orientation = 5; // Unique orientation for bottom + break; + case 1: // Top + orientation = 0; // Default vertical orientation + break; + case 2: // North + orientation = 1; // North-South horizontal + break; + case 3: // South + orientation = 2; // South-North horizontal + break; + case 4: // West + orientation = 3; // West-East horizontal + break; + case 5: // East + orientation = 4; // East-West horizontal + break; + } + + return orientation; + } + + public int damageDropped(int i) { + return 0; + } + + + @Override + public IIcon getIcon(int side, int meta) { + switch(meta) { + case 0: // Facing up + if(side == 0) return this.icons[0]; + else if(side == 1) return this.icons[1]; + else return this.icons[2]; + case 1: // Facing North + if(side == 0) return this.icons[2]; + else if(side == 1) return this.icons[2]; + else if(side == 2) return this.icons[1]; + else if(side == 3) return this.icons[0]; + else if(side == 4) return this.icons[5]; + else if(side == 5) return this.icons[3]; + case 2: // Facing South + if(side == 0) return this.icons[4]; + else if(side == 1) return this.icons[4]; + else if(side == 2) return this.icons[0]; + else if(side == 3) return this.icons[1]; + else if(side == 4) return this.icons[3]; + else if(side == 5) return this.icons[5]; + case 3: // Facing West + if(side == 0) return this.icons[5]; + else if(side == 1) return this.icons[5]; + else if(side == 2) return this.icons[3]; + else if(side == 3) return this.icons[5]; + else if(side == 4) return this.icons[1]; + else if(side == 5) return this.icons[0]; + case 4: // Facing East + if(side == 4) return this.icons[0]; + else if(side == 5) return this.icons[1]; + else return this.icons[2]; + case 5: // Facing down + if(side == 0) return this.icons[1]; + else if(side == 1) return this.icons[0]; + else if (side == 2) return this.icons[3]; + else if (side == 3) return this.icons[3]; + else return this.icons[4]; + } + + return this.blockIcon; + } + + @Override + public void registerBlockIcons(IIconRegister reg) { + icons[0] = reg.registerIcon(this.textureName + "_bottom"); + icons[1] = reg.registerIcon(this.textureName + "_top"); + icons[2] = reg.registerIcon(this.textureName + "_side_0"); + icons[3] = reg.registerIcon(this.textureName + "_side_90"); + icons[4] = reg.registerIcon(this.textureName + "_side_180"); + icons[5] = reg.registerIcon(this.textureName + "_side_270"); + } + + @SideOnly(Side.CLIENT) + protected IIcon getSideIcon(int i) { + return null; + } +} + + +/* Example method overrides for blocks + @Override + public void onBlockAdded(World world, int x, int y, int z) { + // Called when the block is placed in the world + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int metadata) { + // Called when the block is broken + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + // Called when the player right-clicks the block + return true; + } + + @Override + public void onEntityWalking(World world, int x, int y, int z, Entity entity) { + // Called when an entity walks over the block + } + + @Override + public int isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int side) { + // Determines the redstone power output + return 15; + } +*/ \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/RunedDwarvenBrick.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/RunedDwarvenBrick.java new file mode 100644 index 0000000..9afd624 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/RunedDwarvenBrick.java @@ -0,0 +1,36 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import lotr.common.LOTRCreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import com.zivilon.cinder_loe.util.Utilities; + +import java.lang.reflect.Field; + +public class RunedDwarvenBrick extends Block { + + public RunedDwarvenBrick() { + super(Material.rock); // Choose the appropriate material + setCreativeTab(LoECreativeTabs.tabDecoLoE); + // Set other properties like hardness, resistance, name, etc. + setHardness(2.0F); + setResistance(5.0F); + setBlockTextureName(Utilities.toSnakeCase("lotr:dwarven_brick_runed")); + setBlockName("lotr:dwarvenBrickRuned"); + // setCreativeTab((CreativeTabs) LOTRCreativeTabs.tabDeco); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon("lotr:dwarven_brick_runed"); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/StaticBlockBase3.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/StaticBlockBase3.java new file mode 100644 index 0000000..821147c --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/StaticBlockBase3.java @@ -0,0 +1,55 @@ +package com.zivilon.cinder_loe.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockRotatedPillar; +import net.minecraft.block.material.Material; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.MathHelper; +import net.minecraft.util.IIcon; +import net.minecraft.client.renderer.texture.IIconRegister; +import lotr.common.LOTRCreativeTabs; +import net.minecraft.creativetab.CreativeTabs; + +import com.zivilon.cinder_loe.util.Utilities; + +public abstract class StaticBlockBase3 extends Block { + public String textureName; + public IIcon[] icons = new IIcon[3]; + + public StaticBlockBase3(Material material, String blockName) { + super(material); + this.textureName = Utilities.toSnakeCase(blockName); + this.setBlockName(blockName); + this.setCreativeTab((CreativeTabs)Utilities.reflected_tab_block); + } + + @Override + public IIcon getIcon(int side, int meta) { + switch(side) { + case 0: // Facing down + return this.icons[0]; + case 1: // Facing up + return this.icons[1]; + case 2: // Facing North + case 3: // Facing South + case 4: // Facing West + case 5: // Facing East + return this.icons[2]; + } + + return this.blockIcon; + } + + @Override + public void registerBlockIcons(IIconRegister reg) { + icons[0] = reg.registerIcon(this.textureName + "_bottom"); + icons[1] = reg.registerIcon(this.textureName + "_top"); + icons[2] = reg.registerIcon(this.textureName + "_side"); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/VerticalWeaponRack.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/VerticalWeaponRack.java new file mode 100644 index 0000000..3cde8ed --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/VerticalWeaponRack.java @@ -0,0 +1,24 @@ +package com.zivilon.cinder_loe.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import lotr.common.block.LOTRBlockWeaponRack; +import lotr.common.tileentity.LOTRTileEntityWeaponRack; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class VerticalWeaponRack extends LOTRBlockWeaponRack { + public VerticalWeaponRack() { + super(); + this.setHardness(0.5f); + this.setResistance(1.0f); + this.setStepSound(Block.soundTypeWood); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/barricade.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/barricade.java new file mode 100644 index 0000000..12701ab --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/barricade.java @@ -0,0 +1,53 @@ +package com.zivilon.cinder_loe.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.block.BlockFence; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; + +import java.lang.reflect.Field; + +import static net.minecraft.init.Blocks.fence; + +public class barricade extends Block { + + @SideOnly(Side.CLIENT) + private IIcon field_149950_a; + @SideOnly(Side.CLIENT) + private IIcon field_149949_b; + public barricade() { + super(Material.wood); // Choose the appropriate material + setCreativeTab(LoECreativeTabs.tabBlockLoE); + setHardness(5.0F); + setResistance(15.0F); + setStepSound(Block.soundTypeWood); + setBlockTextureName("lotr:red_dwarf_steel"); + setBlockName("lotr:blockRedDwarfSteel"); + } + + public boolean renderAsNormalBlock() + { + return false; + } + public boolean isOpaqueCube() + { + return false; + } + + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) + { + return side == 0 ? this.field_149949_b : (side == 1 ? this.field_149950_a : this.blockIcon); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) + { + this.blockIcon = reg.registerIcon(this.getTextureName()); + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/bronzeChain.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/bronzeChain.java new file mode 100644 index 0000000..d8fd0a2 --- /dev/null +++ b/src (1)/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 (1)/main/java/com/zivilon/cinder_loe/blocks/cabbageCrop.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/cabbageCrop.java new file mode 100644 index 0000000..cd25957 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/cabbageCrop.java @@ -0,0 +1,49 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.CinderLoE; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import lotr.common.LOTRMod; +import net.minecraft.block.BlockCrops; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.EnumPlantType; + +public class cabbageCrop + extends BlockCrops { + @SideOnly(value=Side.CLIENT) + private IIcon[] cabbageIcons; + + @SideOnly(value=Side.CLIENT) + public IIcon getIcon(int i, int j) { + if (j < 7) { + if (j == 6) { + j = 5; + } + return this.cabbageIcons[j >> 1]; + } + return this.cabbageIcons[3]; + } + + @SideOnly(value=Side.CLIENT) + public void registerBlockIcons(IIconRegister iconregister) { + this.cabbageIcons = new IIcon[4]; + for (int i = 0; i < this.cabbageIcons.length; ++i) { + this.cabbageIcons[i] = iconregister.registerIcon(this.getTextureName() + "_" + i); + } + } + + public Item func_149866_i() { + return CinderLoE.cabbage; + } + + public Item func_149865_P() { + return CinderLoE.cabbage; + } + + public EnumPlantType getPlantType(IBlockAccess world, int i, int j, int k) { + return EnumPlantType.Crop; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/cutDrystone.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/cutDrystone.java new file mode 100644 index 0000000..74beb96 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/cutDrystone.java @@ -0,0 +1,33 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.util.Utilities; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import lotr.common.LOTRCreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; + +import java.lang.reflect.Field; + +public class cutDrystone extends Block { + + public cutDrystone() { + super(Material.rock); // Choose the appropriate material + // Set other properties like hardness, resistance, name, etc. + this.setCreativeTab(LoECreativeTabs.tabBlockLoE); + setHardness(2.0F); + setResistance(5.0F); + setBlockTextureName(Utilities.toSnakeCase("lotr:cut_drystone")); + setBlockName("lotr:cutDrystone"); + // setCreativeTab((CreativeTabs) LOTRCreativeTabs.tabBlock); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon("lotr:cutDrystone"); + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/goldChain.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/goldChain.java new file mode 100644 index 0000000..b4498f1 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/goldChain.java @@ -0,0 +1,121 @@ +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 goldChain + 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 goldChain() { + this.setHardness(1.0f); + this.setStepSound(Block.soundTypeMetal); + this.textureName = "lotr:goldChain"; + setBlockName("lotr:goldChain"); + setBlockTextureName("lotr:goldChain"); + 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 goldChain; + boolean bl = chainBelow = below instanceof goldChain || 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 goldChain) { + 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 (1)/main/java/com/zivilon/cinder_loe/blocks/ironChain.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/ironChain.java new file mode 100644 index 0000000..180e6b6 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/ironChain.java @@ -0,0 +1,121 @@ +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 ironChain + 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 ironChain() { + this.setHardness(1.0f); + this.setStepSound(Block.soundTypeMetal); + this.textureName = "lotr:ironChain"; + setBlockName("lotr:ironChain"); + setBlockTextureName("lotr:ironChain"); + 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 ironChain; + boolean bl = chainBelow = below instanceof ironChain || 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 ironChain) { + 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 (1)/main/java/com/zivilon/cinder_loe/blocks/onionCrop.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/onionCrop.java new file mode 100644 index 0000000..5e8753b --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/onionCrop.java @@ -0,0 +1,50 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.CinderLoE; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import lotr.common.LOTRMod; +import net.minecraft.block.BlockCrops; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.EnumPlantType; + +public class onionCrop + extends BlockCrops { + @SideOnly(value=Side.CLIENT) + private IIcon[] onionIcons; + + @SideOnly(value=Side.CLIENT) + public IIcon getIcon(int i, int j) { + if (j < 7) { + if (j == 6) { + j = 5; + } + return this.onionIcons[j >> 1]; + } + return this.onionIcons[3]; + } + + @SideOnly(value=Side.CLIENT) + public void registerBlockIcons(IIconRegister iconregister) { + this.onionIcons = new IIcon[4]; + for (int i = 0; i < this.onionIcons.length; ++i) { + this.onionIcons[i] = iconregister.registerIcon(this.getTextureName() + "_" + i); + } + } + + + public Item func_149866_i() { + return CinderLoE.onion; + } + + public Item func_149865_P() { + return CinderLoE.onion; + } + + public EnumPlantType getPlantType(IBlockAccess world, int i, int j, int k) { + return EnumPlantType.Crop; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/plaster.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/plaster.java new file mode 100644 index 0000000..8870169 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/plaster.java @@ -0,0 +1,31 @@ +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 com.zivilon.cinder_loe.LoECreativeTabs; + +import java.lang.reflect.Field; + +public class plaster extends Block { + + public plaster() { + super(Material.rock); // Choose the appropriate material + setCreativeTab(LoECreativeTabs.tabBlockLoE); + // Set other properties like hardness, resistance, name, etc. + setHardness(2.0F); + setResistance(5.0F); + setBlockTextureName(Utilities.toSnakeCase("lotr:plaster")); + setBlockName("lotr:plaster"); + // setCreativeTab((CreativeTabs) LOTRCreativeTabs.tabBlock); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon("lotr:plaster"); + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/reeflessCoral.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/reeflessCoral.java new file mode 100644 index 0000000..67294ee --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/reeflessCoral.java @@ -0,0 +1,33 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.util.Utilities; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import lotr.common.LOTRCreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; + +import java.lang.reflect.Field; + +public class reeflessCoral extends Block { + + public reeflessCoral() { + super(Material.rock); // Choose the appropriate material + setCreativeTab(LoECreativeTabs.tabBlockLoE); + // Set other properties like hardness, resistance, name, etc. + setHardness(2.0F); + setResistance(5.0F); + setBlockTextureName(Utilities.toSnakeCase("lotr:reeflessCoral")); + setBlockName("lotr:reeflessCoral"); + // setCreativeTab((CreativeTabs) LOTRCreativeTabs.tabDeco); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon("lotr:reeflessCoral"); + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/silverChain.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/silverChain.java new file mode 100644 index 0000000..4236d1b --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/silverChain.java @@ -0,0 +1,125 @@ +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 lotr.common.LOTRMod; +import lotr.common.block.LOTRBlockChandelier; +import lotr.common.block.LOTRBlockOrcChain; +import net.minecraft.block.*; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class silverChain 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 silverChain() { + this.setHardness(1.0f); + this.setStepSound(Block.soundTypeMetal); + this.textureName = "lotr:silverChain"; + setBlockName("lotr:silverChain"); + setBlockTextureName("lotr:silverChain"); + 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 silverChain; + boolean bl = chainBelow = below instanceof silverChain || 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 silverChain) { + 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 (1)/main/java/com/zivilon/cinder_loe/blocks/voidblock.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/voidblock.java new file mode 100644 index 0000000..8964cf3 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/voidblock.java @@ -0,0 +1,27 @@ +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 voidblock extends Block { + + public voidblock() { + super(Material.rock); // Choose the appropriate material + // Set other properties like hardness, resistance, name, etc. + setHardness(100.0F); + setResistance(100.0F); + setBlockTextureName(Utilities.toSnakeCase("lotr:voidblock")); + setBlockName("lotr:voidblock"); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon("lotr:voidblock"); + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/blocks/woodpanel.java b/src (1)/main/java/com/zivilon/cinder_loe/blocks/woodpanel.java new file mode 100644 index 0000000..2e8fc23 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/blocks/woodpanel.java @@ -0,0 +1,17 @@ +package com.zivilon.cinder_loe.blocks; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; + + +public class woodpanel extends RotatableBlockBase3{ + public woodpanel() { + super(Material.wood, "lotr:woodpanel"); + setCreativeTab(LoECreativeTabs.tabBlockLoE); + setStepSound(Block.soundTypeWood); + setHardness(2.0F); + setResistance(5.0F); + setBlockName("lotr:woodpanel"); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/character/CharacterEventListener.java b/src (1)/main/java/com/zivilon/cinder_loe/character/CharacterEventListener.java new file mode 100644 index 0000000..e76917f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/character/CharacterEventListener.java @@ -0,0 +1,75 @@ +package com.zivilon.cinder_loe.character; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.eventhandler.EventPriority; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.LivingHurtEvent; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import com.zivilon.cinder_loe.entity.npc.radagast.FangornAnimal; + +public class CharacterEventListener { + + public CharacterEventListener() { + // Register the event listener + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true) + public void onLivingHurt(LivingHurtEvent event) { + // Check if the entity being hurt is a character of interest + EntityLivingBase damagedEntity = event.entityLiving; + + // Check if the source of damage is an entity + if (event.source.getSourceOfDamage() instanceof EntityLivingBase) { + // The entity that caused the damage + EntityLivingBase damagerEntity = (EntityLivingBase) event.source.getSourceOfDamage(); + + if (damagedEntity instanceof EntityPlayerMP) { + EntityPlayerMP player = (EntityPlayerMP)damagedEntity; + + UUID radagast = CharacterRoleAPI.getCharacterRoleUUID("Radagast"); + if (player.getUniqueID().equals(radagast)) { + List entities = findAnimalsAndFangornEntities((EntityLivingBase)player); + for (EntityLivingBase entity : entities) { + EntityLiving animal = (EntityLiving) entity; + animal.setAttackTarget((EntityLivingBase)damagerEntity); + } + } + } + } + } + + public static List findAnimalsAndFangornEntities(EntityLivingBase centerEntity) { + World world = centerEntity.worldObj; + double searchRadius = 32.0D; // Define the search radius + + // Calculate the search area + AxisAlignedBB searchArea = AxisAlignedBB.getBoundingBox( + centerEntity.posX - searchRadius, centerEntity.posY - searchRadius, centerEntity.posZ - searchRadius, + centerEntity.posX + searchRadius, centerEntity.posY + searchRadius, centerEntity.posZ + searchRadius); + + // Retrieve all entities within the search area + List entitiesWithinAABB = world.getEntitiesWithinAABB(EntityLivingBase.class, searchArea); + List foundEntities = new ArrayList(); + + // Manually filter the entities to match your criteria + for (Object obj : entitiesWithinAABB) { + if (obj instanceof EntityAnimal || obj instanceof FangornAnimal) { // Adjust for your custom entity + foundEntities.add((EntityLivingBase) obj); + } + } + + return foundEntities; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/character/CharacterRoleAPI.java b/src (1)/main/java/com/zivilon/cinder_loe/character/CharacterRoleAPI.java new file mode 100644 index 0000000..c45722a --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/character/CharacterRoleAPI.java @@ -0,0 +1,61 @@ +package com.zivilon.cinder_loe.character; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import java.io.*; +import java.nio.file.*; +import java.lang.reflect.Type; +import java.util.*; + +public class CharacterRoleAPI { + + private static final Path FILE_PATH = Paths.get("character_roles.json"); + private static Map characterRoles = new HashMap<>(); + + public static void loadRolesFromFile() { + if (!Files.exists(FILE_PATH)) { + try { + Files.createFile(FILE_PATH); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + + try (Reader reader = Files.newBufferedReader(FILE_PATH)) { + Gson gson = new Gson(); + Type type = new TypeToken>() {}.getType(); + characterRoles = gson.fromJson(reader, type); + if (characterRoles == null) { + characterRoles = new HashMap<>(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void saveRolesToFile() { + Gson gson = new Gson(); + try (Writer writer = Files.newBufferedWriter(FILE_PATH)) { + gson.toJson(characterRoles, writer); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static UUID getCharacterRoleUUID(String roleName) { + return characterRoles.get(roleName); + } + + public static void setCharacterRoleUUID(String roleName, UUID playerUUID) { + characterRoles.put(roleName, playerUUID); + saveRolesToFile(); + } + + public static void removeCharacterRole(String roleName) { + if (characterRoles.containsKey(roleName)) { + characterRoles.remove(roleName); + saveRolesToFile(); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBodyJade.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBodyJade.java new file mode 100644 index 0000000..b03eb42 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBodyJade.java @@ -0,0 +1,101 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * LegsJade - Cleric_red + * Created using Tabula 4.1.1 + */ +public class ModelBodyJade extends LOTRModelBiped { + public ModelRenderer lpad; + public ModelRenderer lribbon; + public ModelRenderer neck3; + public ModelRenderer neck2; + public ModelRenderer neck1; + public ModelRenderer rpad; + public ModelRenderer rribbon; + + public ModelBodyJade(float f) { + super(f); + this.textureWidth = 64; + this.textureHeight = 32; + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + this.neck1 = new ModelRenderer(this, 13, 0); + this.neck1.setRotationPoint(0.0F, 0.0F, 0.0F); + this.neck1.addBox(-3.7F, -2.1F, -3.4F, 3, 3, 1, 0.0F); + this.setRotateAngle(neck1, 0.5009094953223726F, 0.22759093446006054F, 0.0F); + + this.lpad = new ModelRenderer(this, 16, 0); + this.lpad.setRotationPoint(0.0F, 0.0F, 0.0F); + this.lpad.addBox(3.5F, -4.5F, -2.5F, 1, 7, 5, 0.0F); + + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, 0.5F); + + this.rribbon = new ModelRenderer(this, 16, 7); + this.rribbon.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rribbon.addBox(-4F, 2.5F, -2.5F, 0, 2, 5, 0.0F); + + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.mirror = true; + this.bipedRightArm.setRotationPoint(5.0F, 2.0F, -0.0F); + this.bipedRightArm.addBox( -3.0F, -2.0F, -2.0F, 4, 12, 4, 0.5F); + this.setRotateAngle(bipedRightArm, 4.371139006309477E-9F, 0.0F, -0.02639634720981121F); + + this.neck2 = new ModelRenderer(this, 13, 0); + this.neck2.setRotationPoint(0.0F, 0.0F, 0.0F); + this.neck2.addBox(0.7F, -2.1F, -3.4F, 3, 3, 1, 0.0F); + this.setRotateAngle(neck2, 0.5009094953223726F, -0.22759093446006054F, 0.0F); + + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, 0.5F); + this.setRotateAngle(bipedLeftArm, -4.371139006309477E-9F, 0.0F, 0.02639634720981121F); + + this.lribbon = new ModelRenderer(this, 16, 7); + this.lribbon.setRotationPoint(0.0F, 0.0F, 0.0F); + this.lribbon.addBox(4F, 2.5F, -2.5F, 0, 2, 5, 0.0F); + this.rpad = new ModelRenderer(this, 16, 0); + this.rpad.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rpad.addBox(-4.5F, -4.5F, -2.5F, 1, 7, 5, 0.0F); + + this.neck3 = new ModelRenderer(this, 13, 0); + this.neck3.setRotationPoint(0.0F, 0.0F, 0.0F); + this.neck3.addBox(-1.5F, -2.0F, -3.2F, 3, 3, 1, 0.0F); + this.setRotateAngle(neck3, 0.5009094953223726F, 0.0F, 0.0F); + this.bipedBody.addChild(this.neck1); + this.bipedLeftArm.addChild(this.lpad); + this.bipedRightArm.addChild(this.rribbon); + this.bipedBody.addChild(this.neck2); + this.bipedLeftArm.addChild(this.lribbon); + this.bipedRightArm.addChild(this.rpad); + this.bipedBody.addChild(this.neck3); + + this.bipedHead.cubeList.clear(); + this.bipedHeadwear.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedBody.render(f5); + this.bipedRightArm.render(f5); + this.bipedLeftArm.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBodySerpent.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBodySerpent.java new file mode 100644 index 0000000..eff3740 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBodySerpent.java @@ -0,0 +1,90 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * Black serpent Chestpiece - cleric_red + * Created using Tabula 4.1.1 + */ +public class ModelBodySerpent extends LOTRModelBiped { + public ModelRenderer sash; + public ModelRenderer Quiver; + public ModelRenderer Arrows1; + public ModelRenderer Arrows1_1; + public ModelRenderer Arrows1_2; + public ModelRenderer Arrows1_3; + + public ModelBodySerpent(float f) { + super (f); + this.textureWidth = 64; + this.textureHeight = 32; + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, 0.5F); + + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.mirror = true; + this.bipedRightArm.setRotationPoint(5.0F, 2.0F, -0.0F); + this.bipedRightArm.addBox( -3.0F, -2.0F, -2.0F, 4, 12, 4, 0.5F); + this.setRotateAngle(bipedRightArm, 4.371139006309477E-9F, 0.0F, -0.02639634720981121F); + + this.Arrows1_1 = new ModelRenderer(this, 6, 20); + this.Arrows1_1.setRotationPoint(0.0F, 0.0F, 0.0F); + this.Arrows1_1.addBox(-6.0F, -7.0F, 3.7F, 4, 3, 0, 0.0F); + this.Arrows1_3 = new ModelRenderer(this, 8, 23); + this.Arrows1_3.setRotationPoint(0.0F, 0.0F, 0.0F); + this.Arrows1_3.addBox(-2.5F, -7.0F, 1.2F, 0, 3, 3, 0.0F); + this.Quiver = new ModelRenderer(this, 33, 0); + this.Quiver.setRotationPoint(0.0F, 0.0F, 0.0F); + this.Quiver.addBox(-6.0F, -4.0F, 2.0F, 4, 12, 3, 0.0F); + this.setRotateAngle(Quiver, 0.0F, 0.0F, -0.5138249317871306F); + this.Arrows1_2 = new ModelRenderer(this, 8, 23); + this.Arrows1_2.setRotationPoint(0.0F, 0.0F, 0.0F); + this.Arrows1_2.addBox(-4.5F, -7.0F, 2.0F, 0, 3, 3, 0.0F); + + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, 0.5F); + this.setRotateAngle(bipedLeftArm, -4.371139006309477E-9F, 0.0F, 0.02639634720981121F); + + this.sash = new ModelRenderer(this, 16, 3); + this.sash.setRotationPoint(0.0F, 0.0F, 0.0F); + this.sash.addBox(-4.0F, 0.0F, -2.7F, 8, 12, 0, 0.0F); + this.Arrows1 = new ModelRenderer(this, 6, 20); + this.Arrows1.setRotationPoint(0.0F, 0.0F, 0.0F); + this.Arrows1.addBox(-4.0F, -7.0F, 2.8F, 4, 3, 0, 0.0F); + this.Arrows1.addChild(this.Arrows1_1); + this.Arrows1_2.addChild(this.Arrows1_3); + this.sash.addChild(this.Quiver); + this.Arrows1_1.addChild(this.Arrows1_2); + this.bipedBody.addChild(this.sash); + this.Quiver.addChild(this.Arrows1); + + this.bipedHead.cubeList.clear(); + this.bipedHeadwear.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedBody.render(f5); + this.bipedRightArm.render(f5); + this.bipedLeftArm.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBreeKettleHelmet.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBreeKettleHelmet.java new file mode 100644 index 0000000..b7835de --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBreeKettleHelmet.java @@ -0,0 +1,54 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelBreeKettleHelmet extends LOTRModelBiped { + public ModelRenderer shape9; + + public ModelBreeKettleHelmet(float f) { + super(f); // Call the parent constructor to initialize the biped parts + + this.textureWidth = 64; + this.textureHeight = 32; + + // Define the shape9 part and attach it to bipedHead + this.shape9 = new ModelRenderer(this, 0, 16); + this.shape9.setRotationPoint(0.0F, 0.0F, 0.0F); + //shape9.addBox(0F, -13F, -4F, 0, 4, 10); + this.shape9.addBox(-7.0F, -6.0F, -7.0F, 14, 0, 14, 0.0F); + + // Clear any previously defined parts for the bipedHead + this.bipedHead.cubeList.clear(); + + // Define the main helmet part and attach shape9 to it + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.setRotationPoint(0.0F, 0.0F, 0.0F); + // this.bipedHead.addBox(-4.5F, -9.0F, -4.5F, 9, 9, 9, 0.5F); // Adjusted position and scale + this.bipedHead.addBox(-4F, -8F, -4F, 8, 8, 8, f); // Adjusted position and scale (f) + this.bipedHead.addChild(this.shape9); + + // Clear unnecessary parts + this.bipedHeadwear.cubeList.clear(); + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedHead.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBrokenHalo.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBrokenHalo.java new file mode 100644 index 0000000..e672df7 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelBrokenHalo.java @@ -0,0 +1,50 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelBrokenHalo extends LOTRModelBiped { + public ModelRenderer shape9; + + public ModelBrokenHalo(float f) { + super(f); + + this.textureWidth = 128; + this.textureHeight = 64; + + this.shape9 = new ModelRenderer(this, 32, 16); + this.shape9.setRotationPoint(0.0F, 0.0F, 0.0F); + + this.shape9.addBox(-8.0F, -14.0F, 5.0F, 16, 16, 0, 0.0F); + + this.bipedHead.cubeList.clear(); + + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedHead.addBox(-4F, -8F, -4F, 8, 8, 8, f); // Adjusted position and scale (f) + this.bipedHead.addChild(this.shape9); + + this.bipedHeadwear.cubeList.clear(); + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedHead.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelFangornAuroch.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelFangornAuroch.java new file mode 100644 index 0000000..2921aa7 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelFangornAuroch.java @@ -0,0 +1,123 @@ +package com.zivilon.cinder_loe.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.MathHelper; + +public class ModelFangornAuroch extends ModelBase { + public ModelRenderer body; + + public ModelRenderer leg1; + + public ModelRenderer leg2; + + public ModelRenderer leg3; + + public ModelRenderer leg4; + + public ModelRenderer tail; + + public ModelRenderer head; + + public ModelRenderer horns; + + public ModelRenderer hornLeft1; + + public ModelRenderer hornLeft2; + + public ModelRenderer hornRight1; + + public ModelRenderer hornRight2; + + public ModelFangornAuroch() { + this.textureWidth = 128; + this.textureHeight = 64; + this.body = new ModelRenderer(this, 0, 0); + this.body.setRotationPoint(0.0F, 2.0F, -1.0F); + this.body.addBox(-8.0F, -6.0F, -11.0F, 16, 16, 26); + this.body.setTextureOffset(28, 42).addBox(-8.0F, -8.0F, -8.0F, 16, 2, 10); + this.body.setTextureOffset(84, 31).addBox(-3.0F, 10.0F, 4.0F, 6, 1, 6); + this.leg1 = new ModelRenderer(this, 0, 42); + this.leg1.setRotationPoint(-5.0F, 12.0F, 9.0F); + this.leg1.addBox(-2.5F, 0.0F, -2.5F, 5, 12, 5); + this.leg2 = new ModelRenderer(this, 0, 42); + this.leg2.setRotationPoint(5.0F, 12.0F, 9.0F); + this.leg2.mirror = true; + this.leg2.addBox(-2.5F, 0.0F, -2.5F, 5, 12, 5); + this.leg3 = new ModelRenderer(this, 0, 42); + this.leg3.setRotationPoint(-5.0F, 12.0F, -7.0F); + this.leg3.addBox(-2.5F, 0.0F, -2.5F, 5, 12, 5); + this.leg4 = new ModelRenderer(this, 0, 42); + this.leg4.setRotationPoint(5.0F, 12.0F, -7.0F); + this.leg4.mirror = true; + this.leg4.addBox(-2.5F, 0.0F, -2.5F, 5, 12, 5); + this.tail = new ModelRenderer(this, 20, 42); + this.tail.setRotationPoint(0.0F, 1.0F, 14.0F); + this.tail.addBox(-1.0F, -1.0F, 0.0F, 2, 12, 1); + this.head = new ModelRenderer(this, 58, 0); + this.head.setRotationPoint(0.0F, -1.0F, -10.0F); + this.head.addBox(-5.0F, -4.0F, -12.0F, 10, 10, 11); + this.head.setTextureOffset(89, 0).addBox(-3.0F, 1.0F, -15.0F, 6, 4, 4); + this.head.setTextureOffset(105, 0); + this.head.addBox(-8.0F, -2.5F, -7.0F, 3, 2, 1); + this.head.mirror = true; + this.head.addBox(5.0F, -2.5F, -7.0F, 3, 2, 1); + this.head.mirror = false; + this.horns = new ModelRenderer(this, 98, 21); + this.horns.setRotationPoint(0.0F, -3.5F, -5.0F); + this.horns.addBox(-6.0F, -1.5F, -1.5F, 12, 3, 3); + this.head.addChild(this.horns); + this.hornLeft1 = new ModelRenderer(this, 112, 27); + this.hornLeft1.setRotationPoint(-6.0F, 0.0F, 0.0F); + this.hornLeft1.addBox(-5.0F, -1.0F, -1.0F, 6, 2, 2); + this.hornLeft2 = new ModelRenderer(this, 114, 31); + this.hornLeft2.setRotationPoint(-5.0F, 0.0F, 0.0F); + this.hornLeft2.addBox(-5.0F, -0.5F, -0.5F, 6, 1, 1); + this.hornLeft1.addChild(this.hornLeft2); + this.horns.addChild(this.hornLeft1); + this.hornRight1 = new ModelRenderer(this, 112, 27); + this.hornRight1.mirror = true; + this.hornRight1.setRotationPoint(6.0F, 0.0F, 0.0F); + this.hornRight1.addBox(-1.0F, -1.0F, -1.0F, 6, 2, 2); + this.hornRight2 = new ModelRenderer(this, 114, 31); + this.hornRight2.mirror = true; + this.hornRight2.setRotationPoint(5.0F, 0.0F, 0.0F); + this.hornRight2.addBox(-1.0F, -0.5F, -0.5F, 6, 1, 1); + this.hornRight1.addChild(this.hornRight2); + this.horns.addChild(this.hornRight1); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.horns.showModel = true; + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.head.render(f5); + this.body.render(f5); + this.leg1.render(f5); + this.leg2.render(f5); + this.leg3.render(f5); + this.leg4.render(f5); + this.tail.render(f5); + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { + this.head.rotateAngleX = 0.0F; + this.head.rotateAngleY = 0.0F; + this.head.rotateAngleZ = 0.0F; + this.head.rotateAngleX += (float)Math.toRadians(f4); + this.head.rotateAngleY += (float)Math.toRadians(f3); + this.head.rotateAngleX += MathHelper.cos(f * 0.2F) * f1 * 0.4F; + this.hornLeft1.rotateAngleZ = (float)Math.toRadians(25.0D); + this.hornLeft2.rotateAngleZ = (float)Math.toRadians(15.0D); + this.hornRight1.rotateAngleZ = -this.hornLeft1.rotateAngleZ; + this.hornRight2.rotateAngleZ = -this.hornLeft2.rotateAngleZ; + this.hornLeft1.rotateAngleY = (float)Math.toRadians(-25.0D); + this.hornRight1.rotateAngleY = -this.hornLeft1.rotateAngleY; + this.hornLeft1.rotateAngleX = (float)Math.toRadians(35.0D); + this.hornRight1.rotateAngleX = this.hornLeft1.rotateAngleX; + this.leg1.rotateAngleX = MathHelper.cos(f * 0.4F) * f1 * 0.8F; + this.leg2.rotateAngleX = MathHelper.cos(f * 0.4F + 3.1415927F) * f1 * 0.8F; + this.leg3.rotateAngleX = MathHelper.cos(f * 0.4F + 3.1415927F) * f1 * 0.8F; + this.leg4.rotateAngleX = MathHelper.cos(f * 0.4F) * f1 * 0.8F; + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelFangornElk.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelFangornElk.java new file mode 100644 index 0000000..62d5b9a --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelFangornElk.java @@ -0,0 +1,187 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.common.LOTRMod; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.MathHelper; +import org.lwjgl.opengl.GL11; + +import com.zivilon.cinder_loe.entity.npc.radagast.FangornElk; + +public class ModelFangornElk extends ModelBase { + private ModelRenderer body; + + private ModelRenderer leg1; + + private ModelRenderer leg2; + + private ModelRenderer leg3; + + private ModelRenderer leg4; + + private ModelRenderer head; + + private ModelRenderer nose; + + private ModelRenderer antlersRight_1; + + private ModelRenderer antlersRight_2; + + private ModelRenderer antlersRight_3; + + private ModelRenderer antlersRight_4; + + private ModelRenderer antlersLeft_1; + + private ModelRenderer antlersLeft_2; + + private ModelRenderer antlersLeft_3; + + private ModelRenderer antlersLeft_4; + + public ModelFangornElk() { + this(0.0F); + } + + public ModelFangornElk(float f) { + this.textureWidth = 128; + this.textureHeight = 64; + this.body = new ModelRenderer(this, 0, 0); + this.body.setRotationPoint(0.0F, 4.0F, 9.0F); + this.body.addBox(-6.0F, -4.0F, -21.0F, 12, 11, 26, f); + ModelRenderer tail = new ModelRenderer(this, 0, 54); + tail.addBox(-1.0F, -5.0F, 2.0F, 2, 2, 8, f); + tail.rotateAngleX = (float)Math.toRadians(-60.0D); + this.body.addChild(tail); + this.leg1 = new ModelRenderer(this, 42, 37); + this.leg1.setRotationPoint(-4.0F, 3.0F, 8.0F); + this.leg1.addBox(-5.5F, 0.0F, -3.0F, 7, 11, 8, f); + this.leg1.setTextureOffset(26, 37).addBox(-4.0F, 11.0F, -1.0F, 4, 10, 4, f); + this.leg2 = new ModelRenderer(this, 42, 37); + this.leg2.mirror = true; + this.leg2.setRotationPoint(4.0F, 3.0F, 8.0F); + this.leg2.addBox(-1.5F, 0.0F, -3.0F, 7, 11, 8, f); + this.leg2.setTextureOffset(26, 37).addBox(0.0F, 11.0F, -1.0F, 4, 10, 4, f); + this.leg3 = new ModelRenderer(this, 0, 37); + this.leg3.setRotationPoint(-4.0F, 4.0F, -6.0F); + this.leg3.addBox(-4.5F, 0.0F, -3.0F, 6, 10, 7, f); + this.leg3.setTextureOffset(26, 37).addBox(-3.5F, 10.0F, -2.0F, 4, 10, 4, f); + this.leg4 = new ModelRenderer(this, 0, 37); + this.leg4.mirror = true; + this.leg4.setRotationPoint(4.0F, 4.0F, -6.0F); + this.leg4.addBox(-1.5F, 0.0F, -3.0F, 6, 10, 7, f); + this.leg4.setTextureOffset(26, 37).addBox(-0.5F, 10.0F, -2.0F, 4, 10, 4, f); + this.head = new ModelRenderer(this, 50, 0); + this.head.setRotationPoint(0.0F, 4.0F, -10.0F); + this.head.addBox(-2.0F, -10.0F, -4.0F, 4, 12, 8, f); + this.head.setTextureOffset(74, 0).addBox(-3.0F, -16.0F, -8.0F, 6, 6, 13, f); + this.head.setTextureOffset(50, 20); + this.head.addBox(-2.0F, -18.0F, 3.0F, 1, 2, 1, f); + this.head.mirror = true; + this.head.addBox(1.0F, -18.0F, 3.0F, 1, 2, 1, f); + this.nose = new ModelRenderer(this, 56, 20); + this.nose.addBox(-1.0F, -14.5F, -9.0F, 2, 2, 1, f); + this.antlersRight_1 = new ModelRenderer(this, 0, 0); + this.antlersRight_1.addBox(10.0F, -19.0F, 2.5F, 1, 12, 1, f); + this.antlersRight_1.rotateAngleZ = (float)Math.toRadians(-65.0D); + this.antlersRight_2 = new ModelRenderer(this, 4, 0); + this.antlersRight_2.addBox(-3.0F, -23.6F, 2.5F, 1, 8, 1, f); + this.antlersRight_2.rotateAngleZ = (float)Math.toRadians(-15.0D); + this.antlersRight_3 = new ModelRenderer(this, 8, 0); + this.antlersRight_3.addBox(-8.0F, -36.0F, 2.5F, 1, 16, 1, f); + this.antlersRight_3.rotateAngleZ = (float)Math.toRadians(-15.0D); + this.antlersRight_4 = new ModelRenderer(this, 12, 0); + this.antlersRight_4.addBox(7.5F, -35.0F, 2.5F, 1, 10, 1, f); + this.antlersRight_4.rotateAngleZ = (float)Math.toRadians(-50.0D); + this.head.addChild(this.antlersRight_1); + this.head.addChild(this.antlersRight_2); + this.head.addChild(this.antlersRight_3); + this.head.addChild(this.antlersRight_4); + this.antlersLeft_1 = new ModelRenderer(this, 0, 0); + this.antlersLeft_1.mirror = true; + this.antlersLeft_1.addBox(-11.0F, -19.0F, 2.5F, 1, 12, 1, f); + this.antlersLeft_1.rotateAngleZ = (float)Math.toRadians(65.0D); + this.antlersLeft_2 = new ModelRenderer(this, 4, 0); + this.antlersLeft_2.mirror = true; + this.antlersLeft_2.addBox(2.0F, -23.6F, 2.5F, 1, 8, 1, f); + this.antlersLeft_2.rotateAngleZ = (float)Math.toRadians(15.0D); + this.antlersLeft_3 = new ModelRenderer(this, 8, 0); + this.antlersLeft_3.mirror = true; + this.antlersLeft_3.addBox(7.0F, -36.0F, 2.5F, 1, 16, 1, f); + this.antlersLeft_3.rotateAngleZ = (float)Math.toRadians(15.0D); + this.antlersLeft_4 = new ModelRenderer(this, 12, 0); + this.antlersLeft_4.mirror = true; + this.antlersLeft_4.addBox(-8.5F, -35.0F, 2.5F, 1, 10, 1, f); + this.antlersLeft_4.rotateAngleZ = (float)Math.toRadians(50.0D); + this.head.addChild(this.antlersLeft_1); + this.head.addChild(this.antlersLeft_2); + this.head.addChild(this.antlersLeft_3); + this.head.addChild(this.antlersLeft_4); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + FangornElk elk = (FangornElk)entity; + setRotationAngles(f, f1, f2, f3, f4, f5, (Entity)elk); + GL11.glPushMatrix(); + float scale = 1.0F; + GL11.glTranslatef(0.0F, 24.0F * (1.0F - scale) * f5, 0.0F); + GL11.glScalef(scale, scale, scale); + boolean showAntlers = (scale > 0.75F); + this.antlersRight_1.showModel = showAntlers; + this.antlersRight_2.showModel = showAntlers; + this.antlersRight_3.showModel = showAntlers; + this.antlersRight_4.showModel = showAntlers; + this.antlersLeft_1.showModel = showAntlers; + this.antlersLeft_2.showModel = showAntlers; + this.antlersLeft_3.showModel = showAntlers; + this.antlersLeft_4.showModel = showAntlers; + this.body.render(f5); + this.leg1.render(f5); + this.leg2.render(f5); + this.leg3.render(f5); + this.leg4.render(f5); + this.head.render(f5); + if (LOTRMod.isChristmas()) + GL11.glColor3f(1.0F, 0.0F, 0.0F); + this.nose.render(f5); + if (LOTRMod.isChristmas()) + GL11.glColor3f(1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { + float rearAmount = 0.0F; + float antiRearAmount = 1.0F - rearAmount; + this.head.rotationPointY = 4.0F; + this.head.rotationPointZ = -10.0F; + this.head.rotateAngleX = (float)Math.toRadians(20.0D); + this.head.rotateAngleY = 0.0F; + this.head.rotationPointY = rearAmount * -6.0F + antiRearAmount * this.head.rotationPointY; + this.head.rotationPointZ = rearAmount * -1.0F + antiRearAmount * this.head.rotationPointZ; + this.head.rotateAngleX = (float)(this.head.rotateAngleX + Math.toRadians(f4)); + this.head.rotateAngleY = (float)(this.head.rotateAngleY + Math.toRadians(f3)); + this.head.rotateAngleX = antiRearAmount * this.head.rotateAngleX; + this.head.rotateAngleY = antiRearAmount * this.head.rotateAngleY; + if (f1 > 0.2F) + this.head.rotateAngleX += MathHelper.cos(f * 0.3F) * 0.1F * f1; + this.nose.setRotationPoint(this.head.rotationPointX, this.head.rotationPointY, this.head.rotationPointZ); + this.nose.rotateAngleX = this.head.rotateAngleX; + this.nose.rotateAngleY = this.head.rotateAngleY; + this.nose.rotateAngleZ = this.head.rotateAngleZ; + this.body.rotateAngleX = 0.0F; + this.body.rotateAngleX = rearAmount * -0.7853982F + antiRearAmount * this.body.rotateAngleX; + float legRotation = MathHelper.cos(f * 0.4F + 3.1415927F) * f1; + float f17 = -1.0471976F; + float f18 = 0.2617994F * rearAmount; + float f19 = MathHelper.cos(f2 * 0.4F + 3.1415927F); + this.leg4.rotationPointY = -2.0F * rearAmount + 4.0F * antiRearAmount; + this.leg4.rotationPointZ = -2.0F * rearAmount + -6.0F * antiRearAmount; + this.leg3.rotationPointY = this.leg4.rotationPointY; + this.leg3.rotationPointZ = this.leg4.rotationPointZ; + this.leg1.rotateAngleX = f18 + legRotation * antiRearAmount; + this.leg2.rotateAngleX = f18 + -legRotation * antiRearAmount; + this.leg3.rotateAngleX = (f17 + -f19) * rearAmount + -legRotation * 0.8F * antiRearAmount; + this.leg4.rotateAngleX = (f17 + f19) * rearAmount + legRotation * 0.8F * antiRearAmount; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelFangornWolf.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelFangornWolf.java new file mode 100644 index 0000000..d7db6fe --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelFangornWolf.java @@ -0,0 +1,124 @@ +package com.zivilon.cinder_loe.client.model; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.MathHelper; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import com.zivilon.cinder_loe.entity.npc.radagast.FangornWolf; + +@SideOnly(Side.CLIENT) +public class ModelFangornWolf extends ModelBase { + /** main box for the wolf head */ + public ModelRenderer wolfHeadMain; + /** The wolf's body */ + public ModelRenderer wolfBody; + /** Wolf'se first leg */ + public ModelRenderer wolfLeg1; + /** Wolf's second leg */ + public ModelRenderer wolfLeg2; + /** Wolf's third leg */ + public ModelRenderer wolfLeg3; + /** Wolf's fourth leg */ + public ModelRenderer wolfLeg4; + /** The wolf's tail */ + ModelRenderer wolfTail; + /** The wolf's mane */ + ModelRenderer wolfMane; + + public ModelFangornWolf() + { + float f = 0.0F; + float f1 = 13.5F; + this.wolfHeadMain = new ModelRenderer(this, 0, 0); + this.wolfHeadMain.addBox(-3.0F, -3.0F, -2.0F, 6, 6, 4, f); + this.wolfHeadMain.setRotationPoint(-1.0F, f1, -7.0F); + this.wolfBody = new ModelRenderer(this, 18, 14); + this.wolfBody.addBox(-4.0F, -2.0F, -3.0F, 6, 9, 6, f); + this.wolfBody.setRotationPoint(0.0F, 14.0F, 2.0F); + this.wolfMane = new ModelRenderer(this, 21, 0); + this.wolfMane.addBox(-4.0F, -3.0F, -3.0F, 8, 6, 7, f); + this.wolfMane.setRotationPoint(-1.0F, 14.0F, 2.0F); + this.wolfLeg1 = new ModelRenderer(this, 0, 18); + this.wolfLeg1.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f); + this.wolfLeg1.setRotationPoint(-2.5F, 16.0F, 7.0F); + this.wolfLeg2 = new ModelRenderer(this, 0, 18); + this.wolfLeg2.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f); + this.wolfLeg2.setRotationPoint(0.5F, 16.0F, 7.0F); + this.wolfLeg3 = new ModelRenderer(this, 0, 18); + this.wolfLeg3.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f); + this.wolfLeg3.setRotationPoint(-2.5F, 16.0F, -4.0F); + this.wolfLeg4 = new ModelRenderer(this, 0, 18); + this.wolfLeg4.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f); + this.wolfLeg4.setRotationPoint(0.5F, 16.0F, -4.0F); + this.wolfTail = new ModelRenderer(this, 9, 18); + this.wolfTail.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f); + this.wolfTail.setRotationPoint(-1.0F, 12.0F, 8.0F); + this.wolfHeadMain.setTextureOffset(16, 14).addBox(-3.0F, -5.0F, 0.0F, 2, 2, 1, f); + this.wolfHeadMain.setTextureOffset(16, 14).addBox(1.0F, -5.0F, 0.0F, 2, 2, 1, f); + this.wolfHeadMain.setTextureOffset(0, 10).addBox(-1.5F, 0.0F, -5.0F, 3, 3, 4, f); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity p_78088_1_, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float p_78088_7_) + { + super.render(p_78088_1_, p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, p_78088_7_); + this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, p_78088_7_, p_78088_1_); + + this.wolfHeadMain.renderWithRotation(p_78088_7_); + this.wolfBody.render(p_78088_7_); + this.wolfLeg1.render(p_78088_7_); + this.wolfLeg2.render(p_78088_7_); + this.wolfLeg3.render(p_78088_7_); + this.wolfLeg4.render(p_78088_7_); + this.wolfTail.renderWithRotation(p_78088_7_); + this.wolfMane.render(p_78088_7_); + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase p_78086_1_, float p_78086_2_, float p_78086_3_, float p_78086_4_) + { + FangornWolf entitywolf = (FangornWolf)p_78086_1_; + + this.wolfTail.rotateAngleY = MathHelper.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_; + + this.wolfBody.setRotationPoint(0.0F, 14.0F, 2.0F); + this.wolfBody.rotateAngleX = ((float)Math.PI / 2F); + this.wolfMane.setRotationPoint(-1.0F, 14.0F, -3.0F); + this.wolfMane.rotateAngleX = this.wolfBody.rotateAngleX; + this.wolfTail.setRotationPoint(-1.0F, 12.0F, 8.0F); + this.wolfLeg1.setRotationPoint(-2.5F, 16.0F, 7.0F); + this.wolfLeg2.setRotationPoint(0.5F, 16.0F, 7.0F); + this.wolfLeg3.setRotationPoint(-2.5F, 16.0F, -4.0F); + this.wolfLeg4.setRotationPoint(0.5F, 16.0F, -4.0F); + this.wolfLeg1.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_; + this.wolfLeg2.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F + (float)Math.PI) * 1.4F * p_78086_3_; + this.wolfLeg3.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F + (float)Math.PI) * 1.4F * p_78086_3_; + this.wolfLeg4.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_; + + this.wolfHeadMain.rotateAngleZ = 0.0F; + this.wolfMane.rotateAngleZ = -0.08F; + this.wolfBody.rotateAngleZ = -0.16F; + this.wolfTail.rotateAngleZ = -0.2F; + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity p_78087_7_) + { + super.setRotationAngles(p_78087_1_, p_78087_2_, p_78087_3_, p_78087_4_, p_78087_5_, p_78087_6_, p_78087_7_); + this.wolfHeadMain.rotateAngleX = p_78087_5_ / (180F / (float)Math.PI); + this.wolfHeadMain.rotateAngleY = p_78087_4_ / (180F / (float)Math.PI); + this.wolfTail.rotateAngleX = p_78087_3_; + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelJadeHelmet.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelJadeHelmet.java new file mode 100644 index 0000000..2e0b612 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelJadeHelmet.java @@ -0,0 +1,128 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * JadeHelmet - Cleric_red + * Created using Tabula 4.1.1 + */ +public class ModelJadeHelmet extends LOTRModelBiped { + public ModelRenderer brframe; + public ModelRenderer frframe; + public ModelRenderer blframe; + public ModelRenderer frframe_1; + public ModelRenderer fgold; + public ModelRenderer bgold; + public ModelRenderer tgold; + public ModelRenderer glframe; + public ModelRenderer grframe; + public ModelRenderer back; + public ModelRenderer backangle; + public ModelRenderer Holder; + public ModelRenderer moon; + + public ModelJadeHelmet(float f) { + super (f); + this.textureWidth = 64; + this.textureHeight = 32; + this.bipedHead.cubeList.clear(); + this.Holder = new ModelRenderer(this, 21, 22); + this.Holder.setRotationPoint(0.0F, 0.0F, 0.0F); + this.Holder.addBox(-1.0F, -12.2F, -8.0F, 2, 3, 1, 0.0F); + this.setRotateAngle(Holder, -0.136659280431156F, 0.0F, 0.0F); + this.moon = new ModelRenderer(this, 0, 0); + this.moon.setRotationPoint(0.0F, 0.0F, 0.0F); + this.moon.addBox(-5.5F, -16.2F, -7.3F, 11, 7, 0, 0.0F); + this.setRotateAngle(moon, -0.136659280431156F, 0.0F, 0.0F); + + this.bgold = new ModelRenderer(this, 14, 19); + this.bgold.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bgold.addBox(-3.5F, -11.2F, 0.0F, 7, 2, 7, 0.0F); + this.setRotateAngle(bgold, -0.17453292519943295F, 0.0F, 0.0F); + + this.glframe = new ModelRenderer(this, 21, 14); + this.glframe.setRotationPoint(0.0F, 0.0F, 0.0F); + this.glframe.addBox(7.4F, -7.4F, -2.5F, 1, 8, 5, 0.0F); + this.setRotateAngle(glframe, 0.0F, 0.0F, -0.6108652381980153F); + + this.backangle = new ModelRenderer(this, 0, 7); + this.backangle.setRotationPoint(0.0F, 0.0F, 0.0F); + this.backangle.addBox(-5.0F, -2.4F, 6.2F, 10, 5, 1, 0.0F); + this.setRotateAngle(backangle, 0.36425021489121656F, 0.0F, 0.0F); + + this.frframe = new ModelRenderer(this, 0, 14); + this.frframe.setRotationPoint(0.0F, 0.0F, 0.0F); + this.frframe.addBox(-8.6F, -7.5F, -7.0F, 1, 8, 6, 0.0F); + this.setRotateAngle(frframe, 0.17453292519943295F, 0.0F, 0.6108652381980153F); + + this.blframe = new ModelRenderer(this, 0, 14); + this.blframe.setRotationPoint(0.0F, 0.0F, 0.0F); + this.blframe.addBox(7.6F, -7.5F, 1.0F, 1, 8, 6, 0.0F); + this.setRotateAngle(blframe, -0.17453292519943295F, 0.0F, -0.6108652381980153F); + + this.fgold = new ModelRenderer(this, 14, 19); + this.fgold.setRotationPoint(0.0F, 0.0F, 0.0F); + this.fgold.addBox(-3.5F, -11.2F, -7.0F, 7, 2, 7, 0.0F); + this.setRotateAngle(fgold, 0.17453292519943295F, 0.0F, 0.0F); + + this.back = new ModelRenderer(this, 0, 8); + this.back.setRotationPoint(0.0F, 0.0F, 0.0F); + this.back.addBox(-5.0F, -7.9F, 5.0F, 10, 4, 1, 0.0F); + + this.tgold = new ModelRenderer(this, 16, 21); + this.tgold.setRotationPoint(0.0F, 0.0F, 0.0F); + this.tgold.addBox(-3.5F, -11.31F, -2.5F, 7, 2, 5, 0.0F); + this.brframe = new ModelRenderer(this, 0, 14); + this.brframe.setRotationPoint(0.0F, 0.0F, 0.0F); + this.brframe.addBox(-8.6F, -7.5F, 1.0F, 1, 8, 6, 0.0F); + this.setRotateAngle(brframe, -0.17453292519943295F, 0.0F, 0.6108652381980153F); + this.frframe_1 = new ModelRenderer(this, 0, 14); + this.frframe_1.setRotationPoint(0.0F, 0.0F, 0.0F); + this.frframe_1.addBox(7.6F, -7.5F, -7.0F, 1, 8, 6, 0.0F); + this.setRotateAngle(frframe_1, 0.17453292519943295F, 0.0F, -0.6108652381980153F); + this.grframe = new ModelRenderer(this, 21, 15); + this.grframe.setRotationPoint(0.0F, 0.0F, 0.0F); + this.grframe.addBox(-8.5F, -7.4F, -2.5F, 1, 8, 5, 0.0F); + this.setRotateAngle(grframe, 0.0F, 0.0F, 0.6108652381980153F); + this.bipedHead = new ModelRenderer(this, 32, 0); + this.bipedHead.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 0.5F); + this.bipedHead.addChild(this.Holder); + this.bipedHead.addChild(this.moon); + this.bipedHead.addChild(this.bgold); + this.bipedHead.addChild(this.glframe); + this.bipedHead.addChild(this.backangle); + this.bipedHead.addChild(this.frframe); + this.bipedHead.addChild(this.blframe); + this.bipedHead.addChild(this.fgold); + this.bipedHead.addChild(this.back); + this.bipedHead.addChild(this.tgold); + this.bipedHead.addChild(this.brframe); + this.bipedHead.addChild(this.frframe_1); + this.bipedHead.addChild(this.grframe); + + this.bipedHeadwear.cubeList.clear(); + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedHead.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelLegsJade.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelLegsJade.java new file mode 100644 index 0000000..114fcd5 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelLegsJade.java @@ -0,0 +1,89 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * LegsJade - Cleric_red + * Created using Tabula 4.1.1 + */ +public class ModelLegsJade extends LOTRModelBiped { + public ModelRenderer rarmor; + public ModelRenderer rftrim; + public ModelRenderer rbtrim; + public ModelRenderer larmor; + public ModelRenderer lftrim; + public ModelRenderer lbtrim; + + public ModelLegsJade(float f) { + super(f); + this.textureWidth = 64; + this.textureHeight = 32; + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + + this.lftrim = new ModelRenderer(this, 2, 24); + this.lftrim.setRotationPoint(0.0F, 0.0F, 0.0F); + this.lftrim.addBox(-2.0F, 0.1F, -3.1F, 4, 1, 1, 0.0F); + + this.bipedRightLeg = new ModelRenderer(this, 0, 16); + this.bipedRightLeg.setRotationPoint(-1.9F, 12.0F, 0.0F); + this.bipedRightLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, 0.5F); + + this.rbtrim = new ModelRenderer(this, 1, 21); + this.rbtrim.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rbtrim.addBox(-2.0F, 0.1F, 2.1F, 4, 1, 1, 0.0F); + + this.larmor = new ModelRenderer(this, -1, 0); + this.larmor.setRotationPoint(0.0F, 0.0F, 0.0F); + this.larmor.addBox(1.0F, 1.0F, -3F, 4, 1, 6, 0.0F); + this.setRotateAngle(larmor, 0.0F, 0.0F, 2.0943951023931953F); + + this.bipedLeftLeg = new ModelRenderer(this, 0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.setRotationPoint(1.899999976158142F, 12.0F, 0.0F); + this.bipedLeftLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, 0.5F); + + this.lbtrim = new ModelRenderer(this, 3, 21); + this.lbtrim.setRotationPoint(0.0F, 0.0F, 0.0F); + this.lbtrim.addBox(-2.0F, 0.1F, 2.1F, 4, 1, 1, 0.0F); + + this.rarmor = new ModelRenderer(this, -1, 0); + this.rarmor.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rarmor.addBox(1.0F, -2.0F, -3F, 4, 1, 6, 0.0F); + this.setRotateAngle(rarmor, 0.0F, 0.0F, 1.0471975511965976F); + + this.rftrim = new ModelRenderer(this, 3, 24); + this.rftrim.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rftrim.addBox(-2.0F, 0.1F, -3.1F, 4, 1, 1, 0.0F); + + this.bipedRightLeg.addChild(this.lftrim); + this.bipedLeftLeg.addChild(this.rbtrim); + this.bipedRightLeg.addChild(this.larmor); + this.bipedRightLeg.addChild(this.lbtrim); + this.bipedLeftLeg.addChild(this.rarmor); + this.bipedLeftLeg.addChild(this.rftrim); + this.bipedHead.cubeList.clear(); + this.bipedHeadwear.cubeList.clear(); + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedRightLeg.render(f5); + this.bipedLeftLeg.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelNexFireChestplate.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelNexFireChestplate.java new file mode 100644 index 0000000..f473029 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelNexFireChestplate.java @@ -0,0 +1,93 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * chestplatenex - Cleric_red + * Created using Tabula 4.1.1 + */ +public class ModelNexFireChestplate extends LOTRModelBiped { + + public ModelRenderer upperrightarm; + public ModelRenderer upperleftarm; + public ModelRenderer banner; + public ModelRenderer hood; + public ModelRenderer rightribbon; + public ModelRenderer leftribbon; + + public ModelNexFireChestplate(float f) { + super (f); + this.textureWidth = 64; + this.textureHeight = 32; + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + + this.banner = new ModelRenderer(this, 0, 17); + this.banner.setRotationPoint(0.0F, 0.0F, 0.0F); + this.banner.addBox(-4.0F, 0.0F, -2.7F, 8, 15, 0, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.mirror = true; + this.bipedRightArm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedRightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, 0.1F); + this.setRotateAngle(bipedRightArm, 0.0F, 0.0F, -0.026354471705114374F); + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, 0.1F); + this.setRotateAngle(bipedLeftArm, 0.0F, 0.0F, 0.026354471705114374F); + this.hood = new ModelRenderer(this, 0, 0); + this.hood.setRotationPoint(0.0F, 0.0F, 0.0F); + this.hood.addBox(-5.4F, 0.0F, 0.7F, 11, 4, 7, 0.0F); + this.setRotateAngle(hood, 0.5009094953223726F, 0.0F, 0.0F); + this.rightribbon = new ModelRenderer(this, 57, 17); + this.rightribbon.mirror = true; + this.rightribbon.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rightribbon.addBox(-4.0F, -0.8F, 8.3F, 3, 15, 0, 0.0F); + this.leftribbon = new ModelRenderer(this, 57, 17); + this.leftribbon.setRotationPoint(0.0F, 0.0F, 0.0F); + this.leftribbon.addBox(1.0F, -0.8F, 8.3F, 3, 15, 0, 0.0F); + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, 0.5F); + this.upperleftarm = new ModelRenderer(this, 40, 16); + this.upperleftarm.mirror = true; + this.upperleftarm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.upperleftarm.addBox(-6.0F, -4.0F, -2.0F, 4, 7, 4, 0.5F); + this.setRotateAngle(upperleftarm, 0.0F, 0.0F, -0.026354471705114374F); + this.upperrightarm = new ModelRenderer(this, 40, 16); + this.upperrightarm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.upperrightarm.addBox(2.0F, -4.0F, -2.0F, 4, 7, 4, 0.5F); + this.setRotateAngle(upperrightarm, 0.0F, 0.0F, 0.026354471705114374F); + this.bipedRightArm.addChild(this.upperrightarm); + this.bipedLeftArm.addChild(this.upperleftarm); + this.bipedBody.addChild(this.banner); + this.bipedBody.addChild(this.hood); + this.bipedBody.addChild(this.rightribbon); + this.bipedBody.addChild(this.leftribbon); + + this.bipedHead.cubeList.clear(); + this.bipedHeadwear.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedRightArm.render(f5); + this.bipedLeftArm.render(f5); + this.bipedBody.render(f5); + + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelNexIceChestplate.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelNexIceChestplate.java new file mode 100644 index 0000000..f386746 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelNexIceChestplate.java @@ -0,0 +1,84 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelNexIceChestplate extends LOTRModelBiped { + + public ModelRenderer upperrightarm; + public ModelRenderer upperleftarm; + public ModelRenderer banner; + public ModelRenderer hood; + public ModelRenderer rightribbon; + public ModelRenderer leftribbon; + + public ModelNexIceChestplate(float f) { + super (f); + this.textureWidth = 64; + this.textureHeight = 32; + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + + this.banner = new ModelRenderer(this, 0, 17); + this.banner.setRotationPoint(0.0F, 0.0F, 0.0F); + this.banner.addBox(-4.0F, 0.0F, -2.7F, 8, 15, 0, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.mirror = true; + this.bipedRightArm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedRightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, 0.1F); + this.setRotateAngle(bipedRightArm, 0.0F, 0.0F, -0.026354471705114374F); + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, 0.1F); + this.setRotateAngle(bipedLeftArm, 0.0F, 0.0F, 0.026354471705114374F); + this.hood = new ModelRenderer(this, 0, 0); + this.hood.setRotationPoint(0.0F, 0.0F, 0.0F); + this.hood.addBox(-5.4F, 0.0F, 0.7F, 11, 4, 7, 0.0F); + this.setRotateAngle(hood, 0.5009094953223726F, 0.0F, 0.0F); + this.rightribbon = new ModelRenderer(this, 57, 17); + this.rightribbon.mirror = true; + this.rightribbon.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rightribbon.addBox(-4.0F, -0.8F, 8.3F, 3, 15, 0, 0.0F); + this.leftribbon = new ModelRenderer(this, 57, 17); + this.leftribbon.setRotationPoint(0.0F, 0.0F, 0.0F); + this.leftribbon.addBox(1.0F, -0.8F, 8.3F, 3, 15, 0, 0.0F); + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, 0.5F); + this.upperleftarm = new ModelRenderer(this, 40, 16); + this.upperleftarm.mirror = true; + this.upperleftarm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.upperleftarm.addBox(-6.0F, -4.0F, -2.0F, 4, 7, 4, 0.5F); + this.setRotateAngle(upperleftarm, 0.0F, 0.0F, -0.026354471705114374F); + this.upperrightarm = new ModelRenderer(this, 40, 16); + this.upperrightarm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.upperrightarm.addBox(2.0F, -4.0F, -2.0F, 4, 7, 4, 0.5F); + this.setRotateAngle(upperrightarm, 0.0F, 0.0F, 0.026354471705114374F); + this.bipedRightArm.addChild(this.upperrightarm); + this.bipedLeftArm.addChild(this.upperleftarm); + this.bipedBody.addChild(this.banner); + this.bipedBody.addChild(this.hood); + this.bipedBody.addChild(this.rightribbon); + this.bipedBody.addChild(this.leftribbon); + + this.bipedHead.cubeList.clear(); + this.bipedHeadwear.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedRightArm.render(f5); + this.bipedLeftArm.render(f5); + this.bipedBody.render(f5); + + } + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelNexToxinChestplate.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelNexToxinChestplate.java new file mode 100644 index 0000000..89a6a31 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelNexToxinChestplate.java @@ -0,0 +1,88 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelNexToxinChestplate extends LOTRModelBiped { + + public ModelRenderer upperrightarm; + public ModelRenderer upperleftarm; + public ModelRenderer banner; + public ModelRenderer hood; + public ModelRenderer rightribbon; + public ModelRenderer leftribbon; + + public ModelNexToxinChestplate(float f) { + super (f); + this.textureWidth = 64; + this.textureHeight = 32; + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + + this.banner = new ModelRenderer(this, 0, 17); + this.banner.setRotationPoint(0.0F, 0.0F, 0.0F); + this.banner.addBox(-4.0F, 0.0F, -2.7F, 8, 15, 0, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.mirror = true; + this.bipedRightArm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedRightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, 0.1F); + this.setRotateAngle(bipedRightArm, 0.0F, 0.0F, -0.026354471705114374F); + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, 0.1F); + this.setRotateAngle(bipedLeftArm, 0.0F, 0.0F, 0.026354471705114374F); + this.hood = new ModelRenderer(this, 0, 0); + this.hood.setRotationPoint(0.0F, 0.0F, 0.0F); + this.hood.addBox(-5.4F, 0.0F, 0.7F, 11, 4, 7, 0.0F); + this.setRotateAngle(hood, 0.5009094953223726F, 0.0F, 0.0F); + this.rightribbon = new ModelRenderer(this, 57, 17); + this.rightribbon.mirror = true; + this.rightribbon.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rightribbon.addBox(-4.0F, -0.8F, 8.3F, 3, 15, 0, 0.0F); + this.leftribbon = new ModelRenderer(this, 57, 17); + this.leftribbon.setRotationPoint(0.0F, 0.0F, 0.0F); + this.leftribbon.addBox(1.0F, -0.8F, 8.3F, 3, 15, 0, 0.0F); + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, 0.5F); + this.upperleftarm = new ModelRenderer(this, 40, 16); + this.upperleftarm.mirror = true; + this.upperleftarm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.upperleftarm.addBox(-6.0F, -4.0F, -2.0F, 4, 7, 4, 0.5F); + this.setRotateAngle(upperleftarm, 0.0F, 0.0F, -0.026354471705114374F); + this.upperrightarm = new ModelRenderer(this, 40, 16); + this.upperrightarm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.upperrightarm.addBox(2.0F, -4.0F, -2.0F, 4, 7, 4, 0.5F); + this.setRotateAngle(upperrightarm, 0.0F, 0.0F, 0.026354471705114374F); + this.bipedRightArm.addChild(this.upperrightarm); + this.bipedLeftArm.addChild(this.upperleftarm); + this.bipedBody.addChild(this.banner); + this.bipedBody.addChild(this.hood); + this.bipedBody.addChild(this.rightribbon); + this.bipedBody.addChild(this.leftribbon); + + this.bipedHead.cubeList.clear(); + this.bipedHeadwear.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedRightArm.render(f5); + this.bipedLeftArm.render(f5); + this.bipedBody.render(f5); + + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelRedDwarfHelmet.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelRedDwarfHelmet.java new file mode 100644 index 0000000..8c625e6 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelRedDwarfHelmet.java @@ -0,0 +1,61 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelRedDwarfHelmet extends LOTRModelBiped { + //fields + ModelRenderer rightneckguard; + ModelRenderer leftneckguard = new ModelRenderer(this, 32, 0); + ModelRenderer shape1 = new ModelRenderer(this, 32, 18); + + public ModelRedDwarfHelmet() { + + } + + public ModelRedDwarfHelmet(float f) { + super(f); + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.setRotationPoint(0F, 0F, 0F); + this.bipedHead.addBox(-4F, -8F, -4F, 8, 8, 8, f); + + rightneckguard = new ModelRenderer(this, 32, 9); + rightneckguard.addBox(4.6F, 2.15F, -3.0F, 0, 1, 8); + rightneckguard.setRotationPoint(0F, 0F, 0F); + rightneckguard.setTextureSize(64, 32); + rightneckguard.mirror = true; + setRotation(rightneckguard, 0F, 0F, -0.2443461F); + this.bipedHead.addChild(rightneckguard); + + leftneckguard = new ModelRenderer(this, 32, 0); + leftneckguard.addBox(-4.6F, 2.15F, -3.0F, 0, 1, 8); + leftneckguard.setRotationPoint(0F, 0F, 0F); + leftneckguard.setTextureSize(64, 32); + leftneckguard.mirror = true; + setRotation(leftneckguard, 0F, 0F, 0.2443461F); + this.bipedHead.addChild(leftneckguard); + + shape1 = new ModelRenderer(this, 32, 18); + shape1.setRotationPoint(0F, 0F, 0F); + shape1.addBox(0F, -13F, -4F, 0, 4, 10); + shape1.setTextureSize(64, 32); + setRotation(shape1, 0F, 0F, 0F); + this.bipedHead.addChild(shape1); + + this.bipedHeadwear.cubeList.clear(); + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelRhudaurHelmet.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelRhudaurHelmet.java new file mode 100644 index 0000000..42942aa --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelRhudaurHelmet.java @@ -0,0 +1,93 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + + +public class ModelRhudaurHelmet extends LOTRModelBiped { + public ModelRenderer backhelm; + public ModelRenderer topfur; + public ModelRenderer righthelm; + public ModelRenderer fronthelm; + public ModelRenderer lefthelm; + public ModelRenderer rightfur; + public ModelRenderer leftfur; + public ModelRenderer Middlefur; + public ModelRenderer backfur; + + public ModelRhudaurHelmet(float f) { + super(f); + this.textureWidth = 64; + this.textureHeight = 32; + this.Middlefur = new ModelRenderer(this, 24, 11); + this.Middlefur.setRotationPoint(0.0F, 0.0F, 0.0F); + this.Middlefur.addBox(-4.0F, -8.0F, -4.1F, 8, 1, 0, 1.3F); + this.lefthelm = new ModelRenderer(this, 0, 0); + this.lefthelm.setRotationPoint(0.0F, 0.0F, 0.0F); + this.lefthelm.addBox(4.0F, -5.85F, -5.5F, 1, 2, 9, 0.6F); + this.setRotateAngle(lefthelm, -0.22759093446006054F, 0.0F, 0.0F); + this.fronthelm = new ModelRenderer(this, 0, 0); + this.fronthelm.setRotationPoint(0.0F, 0.0F, 0.0F); + this.fronthelm.addBox(-5.0F, -5.85F, -6.5F, 10, 2, 1, 0.6F); + this.setRotateAngle(fronthelm, -0.22759093446006054F, 0.0F, 0.0F); + this.backhelm = new ModelRenderer(this, 0, 0); + this.backhelm.setRotationPoint(0.0F, 0.0F, 0.0F); + this.backhelm.addBox(-5.0F, -5.0F, 3.9F, 10, 2, 1, 0.6F); + this.rightfur = new ModelRenderer(this, 32, 11); + this.rightfur.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rightfur.addBox(-4.1F, -8.2F, -4.0F, 0, 3, 8, 1.3F); + this.righthelm = new ModelRenderer(this, 0, 0); + this.righthelm.setRotationPoint(0.0F, 0.0F, 0.0F); + this.righthelm.addBox(-5.0F, -5.85F, -5.5F, 1, 2, 9, 0.6F); + this.setRotateAngle(righthelm, -0.22759093446006054F, 0.0F, 0.0F); + this.backfur = new ModelRenderer(this, 24, 11); + this.backfur.setRotationPoint(0.0F, 0.0F, 0.0F); + this.backfur.addBox(-4.0F, -8.0F, 4.1F, 8, 3, 0, 1.3F); + this.leftfur = new ModelRenderer(this, 32, 11); + this.leftfur.setRotationPoint(0.0F, 0.0F, 0.0F); + this.leftfur.addBox(4.1F, -8.2F, -4.0F, 0, 3, 8, 1.3F); + this.topfur = new ModelRenderer(this, 16, 11); + this.topfur.setRotationPoint(0.0F, 0.0F, 0.0F); + this.topfur.addBox(-4.0F, -8.2F, -4.0F, 8, 0, 8, 1.3F); + + this.bipedHead.cubeList.clear(); + + this.bipedHead = new ModelRenderer(this, 0, 11); + this.bipedHead.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 1.0F); + + this.bipedHead.addChild(this.Middlefur); + this.bipedHead.addChild(this.lefthelm); + this.bipedHead.addChild(this.fronthelm); + this.bipedHead.addChild(this.backhelm); + this.bipedHead.addChild(this.rightfur); + this.bipedHead.addChild(this.righthelm); + this.bipedHead.addChild(this.backfur); + this.bipedHead.addChild(this.leftfur); + this.bipedHead.addChild(this.topfur); + + // Clear unnecessary parts + this.bipedHeadwear.cubeList.clear(); + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedHead.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelSunkenSkeleton.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelSunkenSkeleton.java new file mode 100644 index 0000000..7c9ac1b --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelSunkenSkeleton.java @@ -0,0 +1,37 @@ +package com.zivilon.cinder_loe.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * ModelSunkenSkeleton - Cleric_red + * Created using Tabula 4.1.1 + */ +public class ModelSunkenSkeleton + extends ModelBiped { + public ModelSunkenSkeleton() { + this(0.0f); + } + + public ModelSunkenSkeleton(float f) { + super(f, 0.0f, 64, 32); + if (f == 0.0f) { + this.bipedRightArm = new ModelRenderer((ModelBase)this, 40, 16); + this.bipedRightArm.addBox(-1.0f, -2.0f, -1.0f, 2, 12, 2, f); + this.bipedRightArm.setRotationPoint(-5.0f, 2.0f, 0.0f); + this.bipedLeftArm = new ModelRenderer((ModelBase)this, 40, 16); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0f, -2.0f, -1.0f, 2, 12, 2, f); + this.bipedLeftArm.setRotationPoint(5.0f, 2.0f, 0.0f); + this.bipedRightLeg = new ModelRenderer((ModelBase)this, 0, 16); + this.bipedRightLeg.addBox(-1.0f, 0.0f, -1.0f, 2, 12, 2, f); + this.bipedRightLeg.setRotationPoint(-2.0f, 12.0f, 0.0f); + this.bipedLeftLeg = new ModelRenderer((ModelBase)this, 0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-1.0f, 0.0f, -1.0f, 2, 12, 2, f); + this.bipedLeftLeg.setRotationPoint(2.0f, 12.0f, 0.0f); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelUsurperHelmet.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelUsurperHelmet.java new file mode 100644 index 0000000..921cff2 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelUsurperHelmet.java @@ -0,0 +1,78 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * UsurperHelmet - Cleric_red + * Created using Tabula 4.1.1 + */ +public class ModelUsurperHelmet extends LOTRModelBiped { + public ModelRenderer leftfan; + public ModelRenderer rightfan; + public ModelRenderer leftfeather; + public ModelRenderer rightfeather; + public ModelRenderer shape15; + + public ModelUsurperHelmet(float f) { + super (f); + this.textureWidth = 64; + this.textureHeight = 32; + this.leftfan = new ModelRenderer(this, 32, 19); + this.leftfan.setRotationPoint(0.0F, 0.0F, 0.0F); + this.leftfan.addBox(-8.4F, -12.0F, -1.0F, 4, 12, 1, 0.0F); + this.setRotateAngle(leftfan, 0.0F, 0.3490658503988659F, 0.0F); + this.leftfeather = new ModelRenderer(this, 43, 20); + this.leftfeather.setRotationPoint(0.0F, 0.0F, 0.0F); + this.leftfeather.addBox(-8.4F, -12.0F, -0.5F, 4, 12, 0, 0.0F); + this.setRotateAngle(leftfeather, 0.0F, 0.3490658503988659F, 0.0F); + this.rightfan = new ModelRenderer(this, 32, 5); + this.rightfan.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rightfan.addBox(4.6F, -12.0F, -1.0F, 4, 12, 1, 0.0F); + this.setRotateAngle(rightfan, 0.0F, -0.3490658503988659F, 0.0F); + this.shape15 = new ModelRenderer(this, 8, 16); + this.shape15.setRotationPoint(0.0F, 0.0F, 0.0F); + this.shape15.addBox(-4.0F, -7.0F, -5.2F, 8, 6, 0, 0.0F); + this.rightfeather = new ModelRenderer(this, 43, 6); + this.rightfeather.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rightfeather.addBox(4.6F, -12.0F, -0.5F, 4, 12, 0, 0.0F); + this.setRotateAngle(rightfeather, 0.0F, -0.3490658503988659F, 0.0F); + + this.bipedHead.cubeList.clear(); + + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedHead.addBox(-4.0F, -8F, -4.0F, 8, 8, 8, 1.0F); + + this.bipedHead.addChild(this.leftfan); + this.bipedHead.addChild(this.leftfeather); + this.bipedHead.addChild(this.rightfan); + this.bipedHead.addChild(this.shape15); + this.bipedHead.addChild(this.rightfeather); + + this.bipedHeadwear.cubeList.clear(); + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + + + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedHead.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelWarlordHelmet.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelWarlordHelmet.java new file mode 100644 index 0000000..7fe2b10 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/ModelWarlordHelmet.java @@ -0,0 +1,90 @@ +package com.zivilon.cinder_loe.client.model; + +import lotr.client.model.LOTRModelBiped; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * heavyHelmet - Cleric + * Created using Tabula 4.1.1 + */ +public class ModelWarlordHelmet extends LOTRModelBiped { + public ModelRenderer leftmaw; + public ModelRenderer rightmaw; + public ModelRenderer shape31; + public ModelRenderer hair; + public ModelRenderer mane; + public ModelRenderer lefttrim; + public ModelRenderer righttrim; + public ModelRenderer Teeth; + + public ModelWarlordHelmet(float f) { + super (f); + this.textureWidth = 64; + this.textureHeight = 32; + this.shape31 = new ModelRenderer(this, 2, 2); + this.shape31.setRotationPoint(0.0F, 0.0F, 0.0F); + this.shape31.addBox(-4.0F, -10.0F, -7.0F, 8, 3, 6, 1.0F); + this.mane = new ModelRenderer(this, 8, 27); + this.mane.setRotationPoint(0.0F, 0.0F, 0.0F); + this.mane.addBox(-4.0F, 1.0F, 5.0F, 8, 3, 0, 0.0F); + this.leftmaw = new ModelRenderer(this, 24, 8); + this.leftmaw.setRotationPoint(0.0F, 0.0F, 0.0F); + this.leftmaw.addBox(-4.7F, -4.0F, -12.3F, 0, 4, 7, 0.0F); + this.setRotateAngle(leftmaw, 0.0F, 0.12217304763960307F, 0.0F); + this.hair = new ModelRenderer(this, 30, 6); + this.hair.setRotationPoint(0.0F, 0.0F, 0.0F); + this.hair.addBox(-3.0F, -8.7F, -3.0F, 6, 1, 4, 1.0F); + this.setRotateAngle(hair, -0.22759093446006054F, 0.0F, 0.0F); + this.righttrim = new ModelRenderer(this, 32, 15); + this.righttrim.setRotationPoint(0.0F, 0.0F, 0.0F); + this.righttrim.addBox(4.2F, -7.9F, -3.9F, 0, 8, 4, 1.0F); + this.lefttrim = new ModelRenderer(this, 32, 15); + this.lefttrim.setRotationPoint(0.0F, 0.0F, 0.0F); + this.lefttrim.addBox(-4.2F, -7.9F, -3.9F, 0, 8, 4, 1.0F); + this.Teeth = new ModelRenderer(this, 32, 12); + this.Teeth.setRotationPoint(0.0F, 0.0F, 0.0F); + this.Teeth.addBox(-4.0F, -6.0F, -6.0F, 8, 3, 0, 0.0F); + this.rightmaw = new ModelRenderer(this, 24, 8); + this.rightmaw.setRotationPoint(0.0F, 0.0F, 0.0F); + this.rightmaw.addBox(4.7F, -4.0F, -12.3F, 0, 4, 7, 0.0F); + this.setRotateAngle(rightmaw, 0.0F, -0.12217304763960307F, 0.0F); + + this.bipedHead.cubeList.clear(); + + this.bipedHead = new ModelRenderer(this, 0, 11); + this.bipedHead.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedHead.addBox(-4.0F, -8F, -4.0F, 8, 8, 8, 1.0F); + + this.bipedHead.addChild(this.shape31); + this.bipedHead.addChild(this.mane); + this.bipedHead.addChild(this.leftmaw); + this.bipedHead.addChild(this.hair); + this.bipedHead.addChild(this.righttrim); + this.bipedHead.addChild(this.lefttrim); + this.bipedHead.addChild(this.Teeth); + this.bipedHead.addChild(this.rightmaw); + + this.bipedHeadwear.cubeList.clear(); + this.bipedBody.cubeList.clear(); + this.bipedRightArm.cubeList.clear(); + this.bipedLeftArm.cubeList.clear(); + this.bipedRightLeg.cubeList.clear(); + this.bipedLeftLeg.cubeList.clear(); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.bipedHead.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/Modelverticalweaponrack.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/Modelverticalweaponrack.java new file mode 100644 index 0000000..eaf1b54 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/Modelverticalweaponrack.java @@ -0,0 +1,92 @@ +package com.zivilon.cinder_loe.client.model; + + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * Vertical Weapon rack - Cleric_red + * Created using Tabula 4.1.1 + */ +public class Modelverticalweaponrack extends ModelBase { + public ModelRenderer Post; + public ModelRenderer Plate; + public ModelRenderer Post_1; + public ModelRenderer Base; + public ModelRenderer HolderBottom; + public ModelRenderer HolderBottom_1; + public ModelRenderer HolderBottom_2; + public ModelRenderer HolderTop; + public ModelRenderer HolderTop_1; + public ModelRenderer HolderTop_2; + public boolean onWall = true; + + public Modelverticalweaponrack() { + this.textureWidth = 64; + this.textureHeight = 32; + this.HolderBottom_2 = new ModelRenderer(this, 0, 17); + this.HolderBottom_2.setRotationPoint(-1.0F, 20.0F, 2.0F); + this.HolderBottom_2.addBox(0.0F, 0.0F, 0.0F, 1, 2, 1, 0.0F); + this.setRotateAngle(HolderBottom_2, 0.0F, 1.5707963267948966F, 0.0F); + this.Base = new ModelRenderer(this, 0, 0); + this.Base.setRotationPoint(-8.0F, 10.0F, 2.5F); + this.Base.addBox(0.0F, 0.0F, 0.0F, 5, 14, 2, 0.0F); + this.setRotateAngle(Base, 0.0F, 1.5707963267948966F, 0.0F); + this.HolderTop_1 = new ModelRenderer(this, 0, 17); + this.HolderTop_1.setRotationPoint(-1.0F, 12.0F, -1.0F); + this.HolderTop_1.addBox(0.0F, 0.0F, 0.0F, 1, 2, 1, 0.0F); + this.setRotateAngle(HolderTop_1, 0.0F, 1.5707963267948966F, 0.0F); + this.HolderTop = new ModelRenderer(this, 5, 17); + this.HolderTop.setRotationPoint(-1.0F, 12.0F, 2.0F); + this.HolderTop.addBox(0.0F, 0.0F, 0.0F, 1, 2, 1, 0.0F); + this.setRotateAngle(HolderTop, 0.0F, 1.5707963267948966F, 0.0F); + this.Post_1 = new ModelRenderer(this, 14, 0); + this.Post_1.setRotationPoint(-6.0F, 20.0F, 1.0F); + this.Post_1.addBox(0.0F, 0.0F, 0.0F, 2, 2, 3, 0.0F); + this.setRotateAngle(Post_1, 0.0F, 1.5707963267948966F, 0.0F); + this.Plate = new ModelRenderer(this, 24, 0); + this.Plate.setRotationPoint(-3.0F, 10.0F, 1.5F); + this.Plate.addBox(0.0F, 0.0F, 0.0F, 3, 14, 1, 0.0F); + this.setRotateAngle(Plate, 0.0F, 1.5707963267948966F, 0.0F); + this.HolderTop_2 = new ModelRenderer(this, 0, 17); + this.HolderTop_2.setRotationPoint(-2.0F, 12.0F, 2.0F); + this.HolderTop_2.addBox(0.0F, 0.0F, 0.0F, 4, 2, 1, 0.0F); + this.setRotateAngle(HolderTop_2, 0.0F, 1.5707963267948966F, 0.0F); + this.HolderBottom = new ModelRenderer(this, 5, 17); + this.HolderBottom.setRotationPoint(-1.0F, 20.0F, -1.0F); + this.HolderBottom.addBox(0.0F, 0.0F, 0.0F, 1, 2, 1, 0.0F); + this.setRotateAngle(HolderBottom, 0.0F, 1.5707963267948966F, 0.0F); + this.HolderBottom_1 = new ModelRenderer(this, 0, 17); + this.HolderBottom_1.setRotationPoint(-2.0F, 20.0F, 2.0F); + this.HolderBottom_1.addBox(0.0F, 0.0F, 0.0F, 4, 2, 1, 0.0F); + this.setRotateAngle(HolderBottom_1, 0.0F, 1.5707963267948966F, 0.0F); + this.Post = new ModelRenderer(this, 14, 0); + this.Post.setRotationPoint(-6.0F, 12.0F, 1.0F); + this.Post.addBox(0.0F, 0.0F, 0.0F, 2, 2, 3, 0.0F); + this.setRotateAngle(Post, 0.0F, 1.5707963267948966F, 0.0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.HolderBottom_2.render(f5); + this.Base.render(f5); + this.HolderTop_1.render(f5); + this.HolderTop.render(f5); + this.Post_1.render(f5); + this.Plate.render(f5); + this.HolderTop_2.render(f5); + this.HolderBottom.render(f5); + this.HolderBottom_1.render(f5); + this.Post.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/model/barricade_post.java b/src (1)/main/java/com/zivilon/cinder_loe/client/model/barricade_post.java new file mode 100644 index 0000000..49a0769 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/model/barricade_post.java @@ -0,0 +1,42 @@ +package com.zivilon.cinder_loe.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * cavalry_spikes - Cleric_red + * Created using Tabula 4.1.1 + */ +public class barricade_post extends ModelBase { + public ModelRenderer shape1; + public ModelRenderer shape1_1; + + public barricade_post() { + this.textureWidth = 64; + this.textureHeight = 32; + this.shape1_1 = new ModelRenderer(this, 0, 0); + this.shape1_1.setRotationPoint(-3.0F, 9.0F, 4.0F); + this.shape1_1.addBox(1.0F, 0.0F, 2.0F, 4, 18, 4, 0.0F); + this.setRotateAngle(shape1_1, -0.6981317007977318F, 0.0F, 0.0F); + this.shape1 = new ModelRenderer(this, 0, 0); + this.shape1.setRotationPoint(-3.0F, 13.0F, -8.5F); + this.shape1.addBox(1.0F, 0.0F, 0.0F, 4, 18, 4, 0.0F); + this.setRotateAngle(shape1, 0.6981317007977318F, 0.0F, 0.0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.shape1_1.render(f5); + this.shape1.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderBattleNun.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderBattleNun.java new file mode 100644 index 0000000..bb0cfae --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderBattleNun.java @@ -0,0 +1,38 @@ +package com.zivilon.cinder_loe.client.render; + +import com.zivilon.cinder_loe.entity.npc.good_human.BattleNun; +import lotr.client.model.LOTRModelHuman; +import lotr.client.render.entity.LOTRRenderBiped; +import lotr.client.render.entity.LOTRRandomSkins; +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 RenderBattleNun extends LOTRRenderBiped { + + public static LOTRRandomSkins skinsFemale; + + public ModelBiped outfitModel = (ModelBiped)new LOTRModelHuman(0.6F, false); + + public RenderBattleNun() { + super((ModelBiped)new LOTRModelHuman(), 0.5F); + setRenderPassModel((ModelBase)this.outfitModel); + skinsFemale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/arnorNun/arnorNun_female"); + } + + public ResourceLocation getEntityTexture(Entity entity) { + BattleNun battleNun = (BattleNun)entity; + if (((LOTREntityNPC)battleNun).familyInfo.isMale()) + return skinsFemale.getRandomSkin((LOTRRandomSkinEntity)battleNun); + return skinsFemale.getRandomSkin((LOTRRandomSkinEntity)battleNun); + } + + public int shouldRenderPass(EntityLiving entity, int pass, float f) { + BattleNun battleNun = (BattleNun)entity; + return super.shouldRenderPass((EntityLiving)battleNun, pass, f); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderDarkSpider.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderDarkSpider.java new file mode 100644 index 0000000..0dbe36d --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderDarkSpider.java @@ -0,0 +1,14 @@ +package com.zivilon.cinder_loe.client.render; + +import lotr.client.render.entity.LOTRRenderSpiderBase; +import lotr.client.render.entity.LOTRRenderUtumnoIceSpider; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class RenderDarkSpider extends LOTRRenderUtumnoIceSpider { + private static ResourceLocation spiderSkin = new ResourceLocation("cinder_loe:mob/spider/spider_dark.png"); + + protected ResourceLocation getEntityTexture(Entity entity) { + return spiderSkin; + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornAuroch.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornAuroch.java new file mode 100644 index 0000000..8378879 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornAuroch.java @@ -0,0 +1,26 @@ +package com.zivilon.cinder_loe.client.render; + +import lotr.client.render.entity.LOTRRandomSkins; +import lotr.common.entity.LOTRRandomSkinEntity; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +import com.zivilon.cinder_loe.client.model.ModelFangornAuroch; +import com.zivilon.cinder_loe.entity.npc.radagast.FangornAuroch; + +public class RenderFangornAuroch extends RenderLiving { + public static LOTRRandomSkins aurochsSkins; + + public RenderFangornAuroch() { + super((ModelBase)new ModelFangornAuroch(), 0.5F); + aurochsSkins = LOTRRandomSkins.loadSkinsList("lotr:mob/aurochs"); + } + + public ResourceLocation getEntityTexture(Entity entity) { + FangornAuroch aurochs = (FangornAuroch)entity; + ResourceLocation skin = aurochsSkins.getRandomSkin((LOTRRandomSkinEntity)aurochs); + return skin; + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornBear.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornBear.java new file mode 100644 index 0000000..332c86f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornBear.java @@ -0,0 +1,45 @@ +package com.zivilon.cinder_loe.client.render; + +import com.zivilon.cinder_loe.entity.npc.radagast.FangornBear; + +import java.util.HashMap; +import java.util.Map; +import lotr.client.model.LOTRModelBear; +import lotr.common.entity.animal.LOTREntityBear; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class RenderFangornBear extends RenderLiving { + public static Map bearSkins = new HashMap(); + + public RenderFangornBear() { + super((ModelBase)new LOTRModelBear(), 0.5F); + } + + protected ResourceLocation getEntityTexture(Entity entity) { + FangornBear bear = (FangornBear)entity; + return getBearSkin(bear.getBearType()); + } + public static ResourceLocation getBearSkin(LOTREntityBear.BearType type) { + String s = type.textureName(); + ResourceLocation skin = (ResourceLocation)bearSkins.get(s); + if (skin == null) { + skin = new ResourceLocation("lotr:mob/bear/" + s + ".png"); + bearSkins.put(s, skin); + } + return skin; + } + + public void preRenderCallback(EntityLivingBase entity, float f) { + scaleBearModel(); + } + + public static void scaleBearModel() { + float scale = 1.2F; + GL11.glScalef(scale, scale, scale); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornElk.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornElk.java new file mode 100644 index 0000000..a34b632 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornElk.java @@ -0,0 +1,29 @@ +package com.zivilon.cinder_loe.client.render; + +import lotr.common.entity.LOTRRandomSkinEntity; +import lotr.client.render.entity.LOTRRandomSkins; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +import com.zivilon.cinder_loe.client.model.ModelFangornElk; +import com.zivilon.cinder_loe.entity.npc.radagast.FangornElk; + +public class RenderFangornElk extends RenderLiving { + private static LOTRRandomSkins elkSkins; + + private static ResourceLocation saddleTexture = new ResourceLocation("lotr:mob/elk/saddle.png"); + + public RenderFangornElk() { + super((ModelBase)new ModelFangornElk(), 0.5F); + setRenderPassModel((ModelBase)new ModelFangornElk(0.5F)); + elkSkins = LOTRRandomSkins.loadSkinsList("lotr:mob/elk/elk"); + } + + public ResourceLocation getEntityTexture(Entity entity) { + FangornElk elk = (FangornElk)entity; + ResourceLocation elkSkin = elkSkins.getRandomSkin((LOTRRandomSkinEntity)elk); + return elkSkin; + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornWildBoar.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornWildBoar.java new file mode 100644 index 0000000..b6dd3e0 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornWildBoar.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.client.render; + +import lotr.client.model.LOTRModelBoar; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class RenderFangornWildBoar extends RenderLiving { + public static ResourceLocation boarSkin = new ResourceLocation("lotr:mob/boar/boar.png"); + + public RenderFangornWildBoar() { + super((ModelBase)new LOTRModelBoar(), 0.7F); + setRenderPassModel((ModelBase)new LOTRModelBoar(0.5F)); + } + + protected ResourceLocation getEntityTexture(Entity entity) { + return boarSkin; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornWolf.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornWolf.java new file mode 100644 index 0000000..454233e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderFangornWolf.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.client.render; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +import com.zivilon.cinder_loe.client.model.ModelFangornWolf; + +public class RenderFangornWolf extends RenderLiving { + public static final ResourceLocation wolfSkin = new ResourceLocation("minecraft:textures/entity/wolf/wolf.png"); + + public RenderFangornWolf() { + super((ModelBase)new ModelFangornWolf(), 0.7F); + setRenderPassModel((ModelBase)new ModelFangornWolf()); + } + + protected ResourceLocation getEntityTexture(Entity entity) { + return wolfSkin; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderLimwaith.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderLimwaith.java new file mode 100644 index 0000000..df82b8e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderLimwaith.java @@ -0,0 +1,41 @@ +package com.zivilon.cinder_loe.client.render; + +import lotr.client.model.LOTRModelHuman; +import lotr.client.render.entity.LOTRRenderBiped; +import lotr.client.render.entity.LOTRRandomSkins; +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; + +import com.zivilon.cinder_loe.entity.npc.evil_human.Limwaith; + +public class RenderLimwaith extends LOTRRenderBiped { + public static LOTRRandomSkins skinsMale; + + public static LOTRRandomSkins skinsFemale; + + public ModelBiped outfitModel = (ModelBiped)new LOTRModelHuman(0.6F, false); + + public RenderLimwaith() { + super((ModelBiped)new LOTRModelHuman(), 0.5F); + setRenderPassModel((ModelBase)this.outfitModel); + skinsMale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/limwaith/limwaith_male"); + skinsFemale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/limwaith/limwaith_female"); + } + + public ResourceLocation getEntityTexture(Entity entity) { + Limwaith limwaith = (Limwaith)entity; + if (((LOTREntityNPC)limwaith).familyInfo.isMale()) + return skinsMale.getRandomSkin((LOTRRandomSkinEntity)limwaith); + return skinsFemale.getRandomSkin((LOTRRandomSkinEntity)limwaith); + } + + public int shouldRenderPass(EntityLiving entity, int pass, float f) { + Limwaith limwaith = (Limwaith)entity; + return super.shouldRenderPass((EntityLiving)limwaith, pass, f); + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderLimwaithShaman.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderLimwaithShaman.java new file mode 100644 index 0000000..7b92011 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderLimwaithShaman.java @@ -0,0 +1,25 @@ +package com.zivilon.cinder_loe.client.render; + +import com.zivilon.cinder_loe.entity.npc.evil_human.Limwaith; +import lotr.client.render.entity.LOTRRandomSkins; +import net.minecraft.client.model.ModelBase; +import net.minecraft.entity.EntityLiving; + +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 (1)/main/java/com/zivilon/cinder_loe/client/render/RenderRenegade.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderRenegade.java new file mode 100644 index 0000000..37b9ae3 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderRenegade.java @@ -0,0 +1,50 @@ +package com.zivilon.cinder_loe.client.render; + +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; + +import com.zivilon.cinder_loe.entity.Renegade; + +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; + +public class RenderRenegade extends LOTRRenderBiped { + + private static LOTRRandomSkins skinsMale; + + private static LOTRRandomSkins skinsFemale; + + private static LOTRRandomSkins headwearFemale; + + protected ModelBiped outfitModel = (ModelBiped) new LOTRModelHuman(0.6F, false); + + public RenderRenegade() { + super((ModelBiped) new LOTRModelHuman(), 0.5F); + skinsMale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/renegade/renegade_male"); + skinsFemale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/renegade/renegade_female"); + headwearFemale = LOTRRandomSkins.loadSkinsList("cinder_loe:mob/renegade/headwear_female"); + } + + public ResourceLocation getEntityTexture(Entity entity) { + Renegade man = (Renegade) entity; + if (((LOTREntityNPC) man).familyInfo.isMale()) return skinsMale.getRandomSkin((LOTRRandomSkinEntity) man); + return skinsFemale.getRandomSkin((LOTRRandomSkinEntity) man); + } + + public int shouldRenderPass(EntityLiving entity, int pass, float f) { + Renegade man = (Renegade) entity; + if (pass == 0 && man.getEquipmentInSlot(4) == null) if (!((LOTREntityNPC) man).familyInfo.isMale() + && LOTRRandomSkins.nextInt((LOTRRandomSkinEntity) man, 4) == 0) { + setRenderPassModel((ModelBase) this.outfitModel); + bindTexture(headwearFemale.getRandomSkin((LOTRRandomSkinEntity) man)); + return 1; + } + return super.shouldRenderPass((EntityLiving) man, pass, f); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderSarumanFireball.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderSarumanFireball.java new file mode 100644 index 0000000..fad8631 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderSarumanFireball.java @@ -0,0 +1,50 @@ +package com.zivilon.cinder_loe.client.render; + +import lotr.client.LOTRClientProxy; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +import com.zivilon.cinder_loe.entity.SarumanFireball; + +public class RenderSarumanFireball extends Render { + public static final ResourceLocation particlesTexture = new ResourceLocation("cinder_loe:misc/particles.png"); + + protected ResourceLocation getEntityTexture(Entity entity) { + return particlesTexture; + } + + public void doRender(Entity entity, double d, double d1, double d2, float f, float f1) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)d, (float)d1, (float)d2); + GL11.glEnable(32826); + bindEntityTexture(entity); + Tessellator tessellator = Tessellator.instance; + drawSprite(tessellator, 24 + ((SarumanFireball)entity).animationTick); + GL11.glDisable(32826); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } + + private void drawSprite(Tessellator tessellator, int index) { + float f = (index % 8 * 16 + 0) / 128.0F; + float f1 = (index % 8 * 16 + 16) / 128.0F; + float f2 = (index / 8 * 16 + 0) / 128.0F; + float f3 = (index / 8 * 16 + 16) / 128.0F; + float f4 = 1.0F; + float f5 = 0.5F; + float f6 = 0.25F; + GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + tessellator.setBrightness(15728880); + tessellator.addVertexWithUV((0.0F - f5), (0.0F - f6), 0.0D, f, f3); + tessellator.addVertexWithUV((f4 - f5), (0.0F - f6), 0.0D, f1, f3); + tessellator.addVertexWithUV((f4 - f5), (f4 - f6), 0.0D, f1, f2); + tessellator.addVertexWithUV((0.0F - f5), (f4 - f6), 0.0D, f, f2); + tessellator.draw(); + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderSarumanWhiteFireball.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderSarumanWhiteFireball.java new file mode 100644 index 0000000..ec581ab --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderSarumanWhiteFireball.java @@ -0,0 +1,50 @@ +package com.zivilon.cinder_loe.client.render; + +import lotr.client.LOTRClientProxy; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +import com.zivilon.cinder_loe.entity.SarumanWhiteFireball; + +public class RenderSarumanWhiteFireball extends Render { + public static final ResourceLocation particlesTexture = new ResourceLocation("cinder_loe:misc/particles.png"); + + protected ResourceLocation getEntityTexture(Entity entity) { + return particlesTexture; + } + + public void doRender(Entity entity, double d, double d1, double d2, float f, float f1) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)d, (float)d1, (float)d2); + GL11.glEnable(32826); + bindEntityTexture(entity); + Tessellator tessellator = Tessellator.instance; + drawSprite(tessellator, 32 + ((SarumanWhiteFireball)entity).animationTick); + GL11.glDisable(32826); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } + + private void drawSprite(Tessellator tessellator, int index) { + float f = (index % 8 * 16 + 0) / 128.0F; + float f1 = (index % 8 * 16 + 16) / 128.0F; + float f2 = (index / 8 * 16 + 0) / 128.0F; + float f3 = (index / 8 * 16 + 16) / 128.0F; + float f4 = 1.0F; + float f5 = 0.5F; + float f6 = 0.25F; + GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + tessellator.setBrightness(15728880); + tessellator.addVertexWithUV((0.0F - f5), (0.0F - f6), 0.0D, f, f3); + tessellator.addVertexWithUV((f4 - f5), (0.0F - f6), 0.0D, f1, f3); + tessellator.addVertexWithUV((f4 - f5), (f4 - f6), 0.0D, f1, f2); + tessellator.addVertexWithUV((0.0F - f5), (f4 - f6), 0.0D, f, f2); + tessellator.draw(); + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderTamedCrocodile.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderTamedCrocodile.java new file mode 100644 index 0000000..8aefe9c --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderTamedCrocodile.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.client.render; + +import lotr.client.model.LOTRModelBoar; +import lotr.client.model.LOTRModelCrocodile; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class RenderTamedCrocodile extends RenderLiving { + public static ResourceLocation crocskin = new ResourceLocation("lotr:mob/crocodile.png"); + + public RenderTamedCrocodile() { + super((ModelBase)new LOTRModelCrocodile(), 0.7F); + setRenderPassModel((ModelBase)new LOTRModelCrocodile()); + } + + protected ResourceLocation getEntityTexture(Entity entity) { + return crocskin; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderUtumnoSlave.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderUtumnoSlave.java new file mode 100644 index 0000000..ecabba9 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderUtumnoSlave.java @@ -0,0 +1,33 @@ +package com.zivilon.cinder_loe.client.render; + +import lotr.client.model.LOTRModelHuman; +import lotr.client.render.entity.LOTRRenderBiped; +import lotr.client.render.entity.LOTRRandomSkins; +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 RenderUtumnoSlave extends LOTRRenderBiped { + public static LOTRRandomSkins skins; + + public ModelBiped outfitModel = (ModelBiped)new LOTRModelHuman(0.6F, false); + + public RenderUtumnoSlave() { + super((ModelBiped)new LOTRModelHuman(), 0.5F); + setRenderPassModel((ModelBase)this.outfitModel); + skins = LOTRRandomSkins.loadSkinsList("lotr:mob/scrapTrader"); + } + + public ResourceLocation getEntityTexture(Entity entity) { + LOTREntityNPC lotrEntity = (LOTREntityNPC) entity; + return skins.getRandomSkin(lotrEntity); + } + + public int shouldRenderPass(EntityLiving entity, int pass, float f) { + return super.shouldRenderPass(entity, pass, f); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderWraith.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderWraith.java new file mode 100644 index 0000000..d9ad866 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/RenderWraith.java @@ -0,0 +1,43 @@ +package com.zivilon.cinder_loe.client.render; + +import lotr.client.model.LOTRModelMarshWraith; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +import com.zivilon.cinder_loe.entity.Wraith; + +public class RenderWraith extends RenderLiving { + private static ResourceLocation skin = new ResourceLocation("cinder_loe:mob/wraith/wraith.png"); + + public RenderWraith() { + super((ModelBase)new LOTRModelMarshWraith(), 0.5F); + } + + protected ResourceLocation getEntityTexture(Entity entity) { + return skin; + } + + protected void preRenderCallback(EntityLivingBase entity, float f) { + super.preRenderCallback(entity, f); + float f1 = 0.9375F; + float hover = MathHelper.sin((((Entity)entity).ticksExisted + f) * 0.15F) * 0.2F - 0.5F; + GL11.glScalef(f1, f1, f1); + GL11.glTranslatef(0.0F, hover, 0.0F); + Wraith wraith = (Wraith)entity; + if (wraith.getDeathFadeTime() > 0) { + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + GL11.glEnable(3008); + GL11.glColor4f(1.0F, 1.0F, 1.0F, wraith.getDeathFadeTime() / 30.0F); + } + } + + protected float getDeathMaxRotation(EntityLivingBase entity) { + return 0.0F; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/block/RenderMistBlock.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/block/RenderMistBlock.java new file mode 100644 index 0000000..6c2a61a --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/block/RenderMistBlock.java @@ -0,0 +1,43 @@ +package com.zivilon.cinder_loe.client.render.block; + +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import org.lwjgl.opengl.GL11; +import com.zivilon.cinder_loe.tileentity.TileEntityMistBlock; +import lotr.client.render.tileentity.LOTRRenderUtumnoPortal; + +public class RenderMistBlock extends TileEntitySpecialRenderer { + public void renderTileEntityAt(TileEntity tileentity, double d, double d1, double d2, float f) { + TileEntityMistBlock mist = (TileEntityMistBlock)tileentity; + GL11.glPushMatrix(); + GL11.glDisable(2884); + GL11.glDisable(3553); + GL11.glDisable(2896); + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + GL11.glDepthMask(false); + int passes = 60; + for (int i = 0; i < passes; i++) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)d + 0.5F, (float)d1 + 1.0F + i * 0.5F, (float)d2 + 0.5F); + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.setColorRGBA_F(mist.color_red, mist.color_green, mist.color_blue, (passes - i) / passes); + double width = 0.5D; + tessellator.addVertexWithUV(width, 0.0D, width, 0.0D, 0.0D); + tessellator.addVertexWithUV(width, 0.0D, -width, 0.0D, 0.0D); + tessellator.addVertexWithUV(-width, 0.0D, -width, 0.0D, 0.0D); + tessellator.addVertexWithUV(-width, 0.0D, width, 0.0D, 0.0D); + tessellator.draw(); + GL11.glPopMatrix(); + } + GL11.glDepthMask(true); + GL11.glEnable(3553); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(3042); + GL11.glEnable(2896); + GL11.glEnable(2884); + GL11.glPopMatrix(); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/block/Renderverticalweaponrack.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/block/Renderverticalweaponrack.java new file mode 100644 index 0000000..dcbc34e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/block/Renderverticalweaponrack.java @@ -0,0 +1,144 @@ +package com.zivilon.cinder_loe.client.render.block; + +import com.zivilon.cinder_loe.client.model.Modelverticalweaponrack; +import com.zivilon.cinder_loe.tileentity.TileEntityMistBlock; +import lotr.client.model.LOTRModelWeaponRack; +import lotr.client.render.item.LOTRRenderBow; +import lotr.common.tileentity.LOTRTileEntityWeaponRack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import org.lwjgl.opengl.GL11; + +public class Renderverticalweaponrack extends TileEntitySpecialRenderer { + private static ResourceLocation rackTexture = new ResourceLocation("lotr:item/verticalweaponRack.png"); + private static Modelverticalweaponrack rackModel = new Modelverticalweaponrack(); + public void renderTileEntityAt(TileEntity tileentity, double d, double d1, double d2, float f) { + LOTRTileEntityWeaponRack weaponRack = (LOTRTileEntityWeaponRack)tileentity; + GL11.glPushMatrix(); + GL11.glDisable((int)2884); + GL11.glEnable((int)32826); + GL11.glEnable((int)3008); + GL11.glTranslatef((float)((float)d + 0.5f), (float)((float)d1 + 1.5f), (float)((float)d2 + 0.5f)); + int meta = weaponRack.getBlockMetadata(); + int dir = meta & 3; + boolean wall = (meta & 4) != 0; + switch (dir) { + case 0: { + GL11.glRotatef((float)0.0f, (float)0.0f, (float)1.0f, (float)0.0f); + break; + } + case 1: { + GL11.glRotatef((float)270.0f, (float)0.0f, (float)1.0f, (float)0.0f); + break; + } + case 2: { + GL11.glRotatef((float)180.0f, (float)0.0f, (float)1.0f, (float)0.0f); + break; + } + case 3: { + GL11.glRotatef((float)90.0f, (float)0.0f, (float)1.0f, (float)0.0f); + } + } + if (wall) { + GL11.glTranslatef((float)0.0f, (float)0.375f, (float)-0.5f); + } + GL11.glScalef((float)-1.0f, (float)-1.0f, (float)1.0f); + float scale = 0.0625f; + this.bindTexture(rackTexture); + Renderverticalweaponrack.rackModel.onWall = wall; + rackModel.render(null, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, scale); + ItemStack weaponItem = weaponRack.getWeaponItem(); + if (weaponItem != null) { + float weaponScale = 0.625f; + GL11.glScalef((float)weaponScale, (float)weaponScale, (float)weaponScale); + GL11.glScalef((float)-1.0f, (float)1.0f, (float)1.0f); + GL11.glTranslatef((float)0.0f, (float)0.52f, (float)0.0f); + if (wall) { + GL11.glTranslatef((float)0.0f, (float)1.1f, (float)0.51f); + } + GL11.glRotatef((float)45.0f, (float)0.0f, (float)0.0f, (float)1.0f); + GL11.glTranslatef((float)0.9375f, (float)0.0625f, (float)0.0f); + GL11.glRotatef((float)-335.0f, (float)0.0f, (float)0.0f, (float)1.0f); + GL11.glRotatef((float)-50.0f, (float)0.0f, (float)1.0f, (float)0.0f); + GL11.glScalef((float)0.6666667f, (float)0.6666667f, (float)0.6666667f); + GL11.glTranslatef((float)0.0f, (float)0.3f, (float)0.0f); + RenderManager renderManager = RenderManager.instance; + int passes = 1; + if (weaponItem.getItem().requiresMultipleRenderPasses()) { + passes = weaponItem.getItem().getRenderPasses(weaponItem.getItemDamage()); + } + LOTRRenderBow.renderingWeaponRack = true; + for (int pass = 0; pass < passes; ++pass) { + int color = weaponItem.getItem().getColorFromItemStack(weaponItem, pass); + float r = (float)(color >> 16 & 0xFF) / 255.0f; + float g = (float)(color >> 8 & 0xFF) / 255.0f; + float b = (float)(color & 0xFF) / 255.0f; + GL11.glColor4f((float)r, (float)g, (float)b, (float)1.0f); + renderManager.itemRenderer.renderItem(weaponRack.getEntityForRender(), weaponItem, 0, IItemRenderer.ItemRenderType.EQUIPPED); + } + LOTRRenderBow.renderingWeaponRack = false; + } + GL11.glEnable((int)2884); + GL11.glDisable((int)32826); + GL11.glPopMatrix(); + this.renderWeaponName(weaponRack, d + 0.5, d1 + 0.75, d2 + 0.5); + } + + private void renderWeaponName(LOTRTileEntityWeaponRack rack, double d, double d1, double d2) { + MovingObjectPosition mop = Minecraft.getMinecraft().objectMouseOver; + if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mop.blockX == rack.xCoord && mop.blockY == rack.yCoord && mop.blockZ == rack.zCoord) { + ItemStack weaponItem = rack.getWeaponItem(); + if (Minecraft.isGuiEnabled() && weaponItem != null && weaponItem.hasDisplayName()) { + float f2; + RenderManager renderManager = RenderManager.instance; + FontRenderer fontRenderer = this.func_147498_b(); + float f = 1.6f; + float f1 = 0.016666668f * f; + double dSq = renderManager.livingPlayer.getDistanceSq((double)rack.xCoord + 0.5, (double)rack.yCoord + 0.5, (double)rack.zCoord); + if (dSq < (double)((f2 = 64.0f) * f2)) { + String name = weaponItem.getDisplayName(); + GL11.glPushMatrix(); + GL11.glTranslatef((float)((float)d), (float)((float)d1 + 0.5f), (float)((float)d2)); + GL11.glNormal3f((float)0.0f, (float)1.0f, (float)0.0f); + GL11.glRotatef((float)(-renderManager.playerViewY), (float)0.0f, (float)1.0f, (float)0.0f); + GL11.glRotatef((float)renderManager.playerViewX, (float)1.0f, (float)0.0f, (float)0.0f); + GL11.glScalef((float)(-f1), (float)(-f1), (float)f1); + GL11.glDisable((int)2896); + GL11.glDepthMask((boolean)false); + GL11.glDisable((int)2929); + GL11.glEnable((int)3042); + OpenGlHelper.glBlendFunc((int)770, (int)771, (int)1, (int)0); + Tessellator tessellator = Tessellator.instance; + int b0 = 0; + GL11.glDisable((int)3553); + tessellator.startDrawingQuads(); + int j = fontRenderer.getStringWidth(name) / 2; + tessellator.setColorRGBA_F(0.0f, 0.0f, 0.0f, 0.25f); + tessellator.addVertex((double)(-j - 1), (double)(-1 + b0), 0.0); + tessellator.addVertex((double)(-j - 1), (double)(8 + b0), 0.0); + tessellator.addVertex((double)(j + 1), (double)(8 + b0), 0.0); + tessellator.addVertex((double)(j + 1), (double)(-1 + b0), 0.0); + tessellator.draw(); + GL11.glEnable((int)3553); + fontRenderer.drawString(name, -fontRenderer.getStringWidth(name) / 2, b0, 0x20FFFFFF); + GL11.glEnable((int)2929); + GL11.glDepthMask((boolean)true); + fontRenderer.drawString(name, -fontRenderer.getStringWidth(name) / 2, b0, -1); + GL11.glEnable((int)2896); + GL11.glDisable((int)3042); + GL11.glColor4f((float)1.0f, (float)1.0f, (float)1.0f, (float)1.0f); + GL11.glPopMatrix(); + } + } + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptDwarf.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptDwarf.java new file mode 100644 index 0000000..d69e84b --- /dev/null +++ b/src (1)/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 (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptElf.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptElf.java new file mode 100644 index 0000000..419b2fd --- /dev/null +++ b/src (1)/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 (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptEnt.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptEnt.java new file mode 100644 index 0000000..b6275e7 --- /dev/null +++ b/src (1)/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 (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptHobbit.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptHobbit.java new file mode 100644 index 0000000..116ced5 --- /dev/null +++ b/src (1)/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 (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptMan.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptMan.java new file mode 100644 index 0000000..eb187fd --- /dev/null +++ b/src (1)/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 (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptOrc.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptOrc.java new file mode 100644 index 0000000..ae51dce --- /dev/null +++ b/src (1)/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 (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptSkeleton.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptSkeleton.java new file mode 100644 index 0000000..f827d0b --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/corrupt/RenderCorruptSkeleton.java @@ -0,0 +1,36 @@ +package com.zivilon.cinder_loe.client.render.corrupt; + +import com.zivilon.cinder_loe.client.model.ModelFangornElk; +import com.zivilon.cinder_loe.client.model.ModelSunkenSkeleton; +import com.zivilon.cinder_loe.entity.corrupt.CorruptMan; +import lotr.client.model.LOTRModelHuman; +import lotr.client.model.LOTRModelSkeleton; +import lotr.client.render.entity.LOTRRandomSkins; +import lotr.client.render.entity.LOTRRenderBiped; +import lotr.client.render.entity.LOTRRenderGondorMan; +import lotr.client.render.entity.LOTRRenderSkeleton; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.entity.RenderBiped; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.ResourceLocation; + +public class RenderCorruptSkeleton extends RenderBiped { + + private static ResourceLocation skin = new ResourceLocation("textures/entity/skeleton/skeleton.png"); + + public RenderCorruptSkeleton() { + super(new ModelSunkenSkeleton(), 0.5F); + } + + protected void func_82421_b() { + this.field_82423_g = new ModelSunkenSkeleton(1.0F); + this.field_82425_h = new ModelSunkenSkeleton(0.5F); + } + + protected ResourceLocation func_110775_a(Entity entity) { + return skin; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/item/RenderHelper.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/item/RenderHelper.java new file mode 100644 index 0000000..1d55579 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/item/RenderHelper.java @@ -0,0 +1,151 @@ +package com.zivilon.cinder_loe.client.render.item; + +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Dynamic; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; + +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; + +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.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemCloth; +import net.minecraft.item.ItemMap; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.MapData; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.RenderBlocks; + +import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.IItemRenderer.ItemRenderType; +import net.minecraftforge.client.MinecraftForgeClient; +import static net.minecraftforge.client.IItemRenderer.ItemRenderType.*; +import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.*; + +public class RenderHelper extends ItemRenderer { + public RenderHelper() { + super(Minecraft.getMinecraft()); + } + + public static void customRenderItemIn2D(Tessellator p_78439_0_, float p_78439_1_, float p_78439_2_, float p_78439_3_, float p_78439_4_, int p_78439_5_, int p_78439_6_, float p_78439_7_, boolean enchant) { + if (!enchant) GL11.glPushMatrix(); // Save the current OpenGL state + if (!enchant) GL11.glEnable(GL11.GL_BLEND); // Enable blending + if (!enchant) OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); // Apply your custom blend function for semi-transparency + + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(0.0F, 0.0F, 1.0F); + p_78439_0_.addVertexWithUV(0.0D, 0.0D, 0.0D, (double)p_78439_1_, (double)p_78439_4_); + p_78439_0_.addVertexWithUV(1.0D, 0.0D, 0.0D, (double)p_78439_3_, (double)p_78439_4_); + p_78439_0_.addVertexWithUV(1.0D, 1.0D, 0.0D, (double)p_78439_3_, (double)p_78439_2_); + p_78439_0_.addVertexWithUV(0.0D, 1.0D, 0.0D, (double)p_78439_1_, (double)p_78439_2_); + p_78439_0_.draw(); + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(0.0F, 0.0F, -1.0F); + p_78439_0_.addVertexWithUV(0.0D, 1.0D, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)p_78439_2_); + p_78439_0_.addVertexWithUV(1.0D, 1.0D, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)p_78439_2_); + p_78439_0_.addVertexWithUV(1.0D, 0.0D, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)p_78439_4_); + p_78439_0_.addVertexWithUV(0.0D, 0.0D, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)p_78439_4_); + p_78439_0_.draw(); + + + float f5 = 0.5F * (p_78439_1_ - p_78439_3_) / (float)p_78439_5_; + float f6 = 0.5F * (p_78439_4_ - p_78439_2_) / (float)p_78439_6_; + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(-1.0F, 0.0F, 0.0F); + int k; + float f7; + float f8; + + for (k = 0; k < p_78439_5_; ++k) + { + f7 = (float)k / (float)p_78439_5_; + f8 = p_78439_1_ + (p_78439_3_ - p_78439_1_) * f7 - f5; + p_78439_0_.addVertexWithUV((double)f7, 0.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_4_); + p_78439_0_.addVertexWithUV((double)f7, 0.0D, 0.0D, (double)f8, (double)p_78439_4_); + p_78439_0_.addVertexWithUV((double)f7, 1.0D, 0.0D, (double)f8, (double)p_78439_2_); + p_78439_0_.addVertexWithUV((double)f7, 1.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_2_); + } + + p_78439_0_.draw(); + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(1.0F, 0.0F, 0.0F); + float f9; + + for (k = 0; k < p_78439_5_; ++k) + { + f7 = (float)k / (float)p_78439_5_; + f8 = p_78439_1_ + (p_78439_3_ - p_78439_1_) * f7 - f5; + f9 = f7 + 1.0F / (float)p_78439_5_; + p_78439_0_.addVertexWithUV((double)f9, 1.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_2_); + p_78439_0_.addVertexWithUV((double)f9, 1.0D, 0.0D, (double)f8, (double)p_78439_2_); + p_78439_0_.addVertexWithUV((double)f9, 0.0D, 0.0D, (double)f8, (double)p_78439_4_); + p_78439_0_.addVertexWithUV((double)f9, 0.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_4_); + } + + p_78439_0_.draw(); + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(0.0F, 1.0F, 0.0F); + + for (k = 0; k < p_78439_6_; ++k) + { + f7 = (float)k / (float)p_78439_6_; + f8 = p_78439_4_ + (p_78439_2_ - p_78439_4_) * f7 - f6; + f9 = f7 + 1.0F / (float)p_78439_6_; + p_78439_0_.addVertexWithUV(0.0D, (double)f9, 0.0D, (double)p_78439_1_, (double)f8); + p_78439_0_.addVertexWithUV(1.0D, (double)f9, 0.0D, (double)p_78439_3_, (double)f8); + p_78439_0_.addVertexWithUV(1.0D, (double)f9, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)f8); + p_78439_0_.addVertexWithUV(0.0D, (double)f9, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)f8); + } + + p_78439_0_.draw(); + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(0.0F, -1.0F, 0.0F); + + for (k = 0; k < p_78439_6_; ++k) + { + f7 = (float)k / (float)p_78439_6_; + f8 = p_78439_4_ + (p_78439_2_ - p_78439_4_) * f7 - f6; + p_78439_0_.addVertexWithUV(1.0D, (double)f7, 0.0D, (double)p_78439_3_, (double)f8); + p_78439_0_.addVertexWithUV(0.0D, (double)f7, 0.0D, (double)p_78439_1_, (double)f8); + p_78439_0_.addVertexWithUV(0.0D, (double)f7, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)f8); + p_78439_0_.addVertexWithUV(1.0D, (double)f7, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)f8); + } + + p_78439_0_.draw(); + if (!enchant) GL11.glPopMatrix(); // Restore the saved OpenGL state + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/client/render/projectile/RenderWarDart.java b/src (1)/main/java/com/zivilon/cinder_loe/client/render/projectile/RenderWarDart.java new file mode 100644 index 0000000..86bef56 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/client/render/projectile/RenderWarDart.java @@ -0,0 +1,53 @@ +package com.zivilon.cinder_loe.client.render.projectile; + +import com.zivilon.cinder_loe.entity.projectile.EntityWarDart; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation;import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import org.lwjgl.opengl.GL11; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.ItemRenderer; + +public class RenderWarDart extends Render { + + protected ResourceLocation getEntityTexture(Entity entity) { + return TextureMap.locationItemsTexture; + } + + @Override + public void doRender(Entity entity, double d, double d1, double d2, float f, float f1) { + EntityWarDart dart = (EntityWarDart)entity; + GL11.glPushMatrix(); + GL11.glTranslatef((float)d, (float)d1, (float)d2); + GL11.glRotatef(dart.prevRotationYaw + (dart.rotationYaw - dart.prevRotationYaw) * f1 - 90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(dart.prevRotationPitch + (dart.rotationPitch - dart.prevRotationPitch) * f1, 0.0F, 0.0F, 1.0F); + GL11.glEnable(32826); + GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, -1.0F, 0.0F); + float scale = 0.6F; + GL11.glScalef(scale, scale, scale); + GL11.glTranslatef(0.0F, 0.8F, 0.0F); + + if (dart.item != null) { + IIcon icon = dart.getDartIcon(); + if (icon != null) { + Tessellator tessellator = Tessellator.instance; + float minU = icon.getMinU(); + float maxU = icon.getMaxU(); + float minV = icon.getMinV(); + float maxV = icon.getMaxV(); + int width = icon.getIconWidth(); + int height = icon.getIconHeight(); + bindTexture(getEntityTexture((Entity)dart)); + ItemRenderer.renderItemIn2D(tessellator, maxU, minV, minU, maxV, width, height, 0.0625F); + } + } + + GL11.glDisable(32826); + GL11.glPopMatrix(); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/command/CommandCinderCharacter.java b/src (1)/main/java/com/zivilon/cinder_loe/command/CommandCinderCharacter.java new file mode 100644 index 0000000..971886e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/command/CommandCinderCharacter.java @@ -0,0 +1,81 @@ +package com.zivilon.cinder_loe.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ChatComponentText; + +import com.zivilon.cinder_loe.character.CharacterRoleAPI; +import com.zivilon.cinder_loe.util.Utilities; + +import java.util.UUID; + +public class CommandCinderCharacter extends CommandBase { + + @Override + public String getCommandName() { + return "cinder_character"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "/cinder_character [player_name]"; + } + + @Override + public int getRequiredPermissionLevel() { + return 4; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + if(args.length < 2) { + sender.addChatMessage(new ChatComponentText("Incorrect arguments. Usage: " + getCommandUsage(sender))); + return; + } + + String action = args[0]; + String character = args[1]; + + if (action.equals("set")) { + if(args.length < 3) { + // Set character UUID to player UUID + sender.addChatMessage(new ChatComponentText("Incorrect arguments. Please specify player: " + getCommandUsage(sender))); + } else { + String player = args[2]; + EntityPlayerMP player_entity = MinecraftServer.getServer().getConfigurationManager().func_152612_a(player); + if (player_entity == null) { + sender.addChatMessage(new ChatComponentText("Invalid player name")); + } else { + sender.addChatMessage(new ChatComponentText("Setting player " + player_entity.getCommandSenderName() + " as " + character)); + CharacterRoleAPI.setCharacterRoleUUID(character, player_entity.getUniqueID()); + } + } + } else if (action.equals("remove")) { + UUID uuid = CharacterRoleAPI.getCharacterRoleUUID(character); + if (uuid == null) { + sender.addChatMessage(new ChatComponentText("Invalid character name")); + return; + } + + sender.addChatMessage(new ChatComponentText("Cleared player for character " + character)); + CharacterRoleAPI.removeCharacterRole(character); + } else if (action.equals("get")) { + UUID uuid = CharacterRoleAPI.getCharacterRoleUUID(character); + if (uuid == null) { + sender.addChatMessage(new ChatComponentText("Character " + character + " is unclaimed")); + return; + } + String player_name = Utilities.getPlayerByUUID(uuid).getCommandSenderName(); + if (player_name != null) { + sender.addChatMessage(new ChatComponentText("Character " + character + " is currently set to " + player_name)); + return; + } + sender.addChatMessage(new ChatComponentText("Character " + character + " is currently set to offline player " + uuid.toString())); + } else { + sender.addChatMessage(new ChatComponentText("Incorrect arguments. Usage: " + getCommandUsage(sender))); + return; + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/coremod/CoreMod.java b/src (1)/main/java/com/zivilon/cinder_loe/coremod/CoreMod.java new file mode 100644 index 0000000..7a0c855 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/coremod/CoreMod.java @@ -0,0 +1,43 @@ +package com.zivilon.cinder_loe.coremod; + +import cpw.mods.fml.relauncher.IFMLLoadingPlugin; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin.SortingIndex; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions; +import org.spongepowered.asm.launch.MixinBootstrap; +import org.spongepowered.asm.mixin.Mixins; +import java.util.Map; + +@TransformerExclusions({"com.zivilon.cinder_loe.coremod"}) +@SortingIndex(1001) +@MCVersion("1.7.10") +public class CoreMod implements IFMLLoadingPlugin { + @Override + public String[] getASMTransformerClass() { + return new String[] {"com.zivilon.cinder_loe.coremod.LOTRMaterialTransformer","com.zivilon.cinder_loe.coremod.LOTRWeaponLinker", "com.zivilon.cinder_loe.coremod.LOTRBannerAdder", "com.zivilon.cinder_loe.coremod.LOTRSpawnListLinker", "com.zivilon.cinder_loe.coremod.OptiFinePatcher"}; + } + + @Override + public String getModContainerClass() { + // Return the class name of your @Mod class + return null; + } + + @Override + public String getSetupClass() { + // Return the class name that sets up coremod environment, or null if none + return null; + } + + @Override + public void injectData(Map data) { + MixinBootstrap.init(); + Mixins.addConfiguration("mixins.cinder_loe.json"); + } + + @Override + public String getAccessTransformerClass() { + // Return the class name of your access transformer or null if none + return null; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRBannerAdder.java b/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRBannerAdder.java new file mode 100644 index 0000000..55d227f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRBannerAdder.java @@ -0,0 +1,168 @@ +package com.zivilon.cinder_loe.coremod; + +import net.minecraft.launchwrapper.IClassTransformer; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.FieldNode; +import org.objectweb.asm.tree.InsnList; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.IntInsnNode; +import org.objectweb.asm.tree.TypeInsnNode; +import org.objectweb.asm.tree.InsnNode; +import org.objectweb.asm.tree.LdcInsnNode; +import org.objectweb.asm.tree.FieldInsnNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; + +import java.util.List; +import java.util.ArrayList; + +public class LOTRBannerAdder implements IClassTransformer { + public static List custom_banners = new ArrayList<>(); + + public void registerBanners() { + custom_banners = new ArrayList<>(); + // Arguments: enum name, texture name, ID, faction name + register("RED_DWARF", "redDwarf", 42, "DURINS_FOLK"); + register("LIMWAITH", "limwaith", 43, "MORWAITH"); + register("RED", "red", 44, "GONDOR"); + register("BLUE", "blue", 45, "GONDOR"); + register("GREEN", "green", 46, "GONDOR"); +// register("TEST", "test", 43, "GONDOR"); + } + + @Override + public byte[] transform(String name, String transformedName, byte[] basicClass) { + if ("lotr.common.item.LOTRItemBanner$BannerType".equals(transformedName)) { + registerBanners(); + + // Get class + ClassReader classReader = new ClassReader(basicClass); + ClassNode classNode = new ClassNode(); + classReader.accept(classNode, 0); + + + // Add the new enum constant + for (BannerInfo banner : custom_banners) { + FieldNode newEnumConstant = new FieldNode( + Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC + Opcodes.ACC_FINAL + Opcodes.ACC_ENUM, + banner.enum_name, + "Llotr/common/item/LOTRItemBanner$BannerType;", + null, + null + ); + classNode.fields.add(newEnumConstant); + } + + + // Locate + MethodNode clinit = null; + for (MethodNode method : classNode.methods) { + if ("".equals(method.name)) { + clinit = method; + break; + } + } + + InsnList insns = clinit.instructions; + AbstractInsnNode constructor_injection_point = null; + + for (int i = 0; i < insns.size(); i++) { + AbstractInsnNode insn = insns.get(i); + // Check if the instruction is a BIPUSH + if (insn.getOpcode() == Opcodes.BIPUSH) { + IntInsnNode intInsn = (IntInsnNode) insn; + // Check if the operand is 42, indicating the size of the $VALUES array + if (intInsn.operand == 42) { + // Found the instruction to modify + constructor_injection_point = insn; + // Modify the operand from 42 to 43 to account for the new enum constant + intInsn.operand = 42 + custom_banners.size(); + System.out.println("Enum array length set to " + intInsn.operand); + System.out.println("Banner list size: " + custom_banners.size()); + break; + } + } + } + + // Create the constructor instructions to add new banner + InsnList constructor_injection = new InsnList(); + for (BannerInfo banner : custom_banners) { + constructor_injection.add(new TypeInsnNode(Opcodes.NEW, "lotr/common/item/LOTRItemBanner$BannerType")); + constructor_injection.add(new InsnNode(Opcodes.DUP)); + System.out.println("Registering with enum " + banner.enum_name); + constructor_injection.add(new LdcInsnNode(banner.enum_name)); + System.out.println("Registering with ordinal " + banner.ordinal); + constructor_injection.add(new IntInsnNode(Opcodes.BIPUSH, banner.ordinal)); + constructor_injection.add(new IntInsnNode(Opcodes.BIPUSH, banner.ordinal)); + System.out.println("Registering with identifier " + banner.identifier); + constructor_injection.add(new LdcInsnNode(banner.identifier)); + constructor_injection.add(new FieldInsnNode(Opcodes.GETSTATIC, "lotr/common/fac/LOTRFaction", banner.faction, "Llotr/common/fac/LOTRFaction;")); + constructor_injection.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, "lotr/common/item/LOTRItemBanner$BannerType", "", "(Ljava/lang/String;IILjava/lang/String;Llotr/common/fac/LOTRFaction;)V", false)); + constructor_injection.add(new FieldInsnNode(Opcodes.PUTSTATIC, "lotr/common/item/LOTRItemBanner$BannerType", banner.enum_name, "Llotr/common/item/LOTRItemBanner$BannerType;")); + } + // Insert the new instructions + if (constructor_injection_point != null) { + insns.insertBefore(constructor_injection_point, constructor_injection); + } + + + // Modifying the $VALUES array + // Create new instruction list to be injected later + InsnList values_array_injection = new InsnList(); + + // Add instructions to the instruction list + for (BannerInfo banner : custom_banners) { + values_array_injection.add(new InsnNode(Opcodes.DUP)); + values_array_injection.add(new IntInsnNode(Opcodes.BIPUSH, banner.ordinal)); + values_array_injection.add(new FieldInsnNode(Opcodes.GETSTATIC, "lotr/common/item/LOTRItemBanner$BannerType", banner.enum_name, "Llotr/common/item/LOTRItemBanner$BannerType;")); + values_array_injection.add(new InsnNode(Opcodes.AASTORE)); + } + + // Find the putstatic instruction for $VALUES + // This is where the fields are injected into a list, we want to inject our instructions before this + AbstractInsnNode values_injection_point = null; + + while (constructor_injection_point != null) { + constructor_injection_point = constructor_injection_point.getNext(); + if (constructor_injection_point.getOpcode() == Opcodes.PUTSTATIC) { + values_injection_point = constructor_injection_point; + break; + } + } + + // Insert the new instructions before the putstatic instruction + if (values_injection_point != null) { + insns.insertBefore(values_injection_point, values_array_injection); + } + + // Write the modified class back to a byte array + ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); + classNode.accept(classWriter); + return classWriter.toByteArray(); // Return the modified class + } + return basicClass; // Return the unmodified class for all other classes + } + + public void register(String enum_name, String identifier, int ordinal, String faction) { + System.out.println("Registering banner " + enum_name + " " + identifier); + custom_banners.add(new BannerInfo(enum_name, identifier, ordinal, faction)); + } + + public class BannerInfo { + String enum_name; + String identifier; + int ordinal; + String faction; + + public BannerInfo(String enum_name, String identifier, int ordinal, String faction) { + this.enum_name = enum_name; + this.identifier = identifier; + this.ordinal = ordinal; + this.faction = faction; + } + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java b/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java new file mode 100644 index 0000000..12f87c3 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java @@ -0,0 +1,159 @@ +package com.zivilon.cinder_loe.coremod; + +import net.minecraft.launchwrapper.IClassTransformer; + +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.*; + +import java.util.Iterator; + +public class LOTRMaterialTransformer implements IClassTransformer { + @Override + public byte[] transform(String name, String transformedName, byte[] classBytes) { + if (transformedName.equals("lotr.common.item.LOTRMaterial")) { + System.out.println("[CinderLoE] Transforming LOTRMaterial..."); + + ClassReader reader = new ClassReader(classBytes); + ClassNode classNode = new ClassNode(); + reader.accept(classNode, 0); + + + modifyMaterial("ANGMAR", 431, 0.6F, classNode); //Original Durability = 350 | Add 81 | 162 if Upgraded Armory | 1/4 (Unupgraded) + modifyMaterial("URUK", 606, 0.7F, classNode); //Original Durability = 550 | Add 56 | 112 if Upgraded Armory | 1/4 (Unupgraded) + modifyMaterial("BLACK_URUK", 662, 0.7F, classNode); //Original Durability = 550 | Add 56 | 112 if Upgraded Armory | 2/4 (Unupgraded) + modifyMaterial("HALF_TROLL", 387, 0.6F, classNode); //Original Durability = 300 | Add 87 | 175 if Upgraded Armory | 1/4 (Unupgraded) + + // Good Humans + modifyMaterial("DALE", 387, 0.6F, classNode); //Original Durability = 300 | Add 87 | 175 if Upgraded Armory | 1/4 (Unupgraded) + modifyMaterial("GONDOR", 654, 0.6F, classNode); //Original Durability = 450 | Add 68 | 137 if Upgraded Armory | 3/4 (Unupgraded) + modifyMaterial("DORWINION_ELF", 692, 0.6F, classNode); //Original Durability = 500 | Add 62 | 125 if Upgraded Armory | 3/4 (Unupgraded) + modifyMaterial("ROHAN", 300, 0.6F, classNode); //Original Durability = 300 | Add 87 | 175 if Upgraded Armory | 0/4 + modifyMaterial("TAUREDAIN", 300, 0.6F, classNode); //Original Durability = 300 | Add 87 | 175 if Upgraded Armory | 0/4 + modifyMaterial("DORWINION", 400, 0.6F, classNode); //Original Durability = 400 | Add 75 | 150 if Upgraded Armory | 0/4 + modifyMaterial("LOSSARNACH", 300, 0.6F, classNode); //Original Durability = 300 | Add 87 | 175 if Upgraded Armory 0/4 + modifyMaterial("LAMEDON", 300, 0.6F, classNode); //Original Durability = 300 | Add 87 | 175 if Upgraded Armory | 0/4 + + + // Evil Humans + modifyMaterial("RHUN_GOLD", 450, 0.6F, classNode); //Original Durability = 450 | Add 68 | 137 if Upgraded Armory | 0/4 + modifyMaterial("RHUN", 400, 0.6F, classNode); //Original Durability = 400 | Add 75 | 150 if Upgraded Armory | 0/4 + modifyMaterial("DUNLENDING", 343, 0.6F, classNode); //Original Durability = 250 | Add 93 | 187 if Upgraded Armory | 1/4 (Unupgraded) + modifyMaterial("NEAR_HARAD", 561, 0.6F, classNode); //Original Durability = 300 | Add 87 | 175 if Upgraded Armory | 3/4 (Unupgraded) + modifyMaterial("HARNEDOR", 250, 0.6F, classNode); //Original Durability = 250 | Add 93 | 187 if Upgraded Armory | 0/4 + modifyMaterial("CORSAIR", 300, 0.6F, classNode); //Original Durability = 300 | Add 87 | 175 if Upgraded Armory | 0/4 + modifyMaterial("GULF_HARAD", 350, 0.6F, classNode); //Original Durability = 350 | Add 81 | 162 if Upgraded Armory | 0/4 + modifyMaterial("UMBAR", 586, 0.6F, classNode); //Original Durability = 450 | Add 68 | 137 if Upgraded Armory | 2/4 (Unupgraded) + modifyMaterial("MOREDAIN", 250, 0.6F, classNode); //Original Durability = 250 | Add 93 | 187 if Upgraded Armory | 0/4 + + //Elves + modifyMaterial("WOOD_ELVEN", 748, 0.6F, classNode); //Original Durability = 500 | Add 62 | 125 if Upgraded Armory | 4/4 (Unupgraded) + + // Custom + modifyMaterial("UTUMNO", 1500, 0.7F, classNode); + + 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); + addMaterial("RHUDAUR", classNode); + addMaterial("SERPENT", classNode); + addMaterial("USURPER", classNode); + addMaterial("WARLORD",classNode); + addMaterial("JADE",classNode); + + // Protection Conversion + + // Convert your ClassNode back to byte array with ClassWriter + ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); + classNode.accept(writer); + + byte[] transformedBytes = writer.toByteArray(); + return transformedBytes; + } + return classBytes; + } + + public void addMaterial(String fieldName, ClassNode classNode) { + FieldNode field = new FieldNode( + Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, + fieldName, + "Llotr/common/item/LOTRMaterial;", // Adjust the descriptor based on the actual package name + null, + null + ); + classNode.fields.add(field); + } + + public void modifyMaterial(String fieldName, int durability, float protection, ClassNode classNode) { + MethodNode clinit = null; + boolean foundField = false; + boolean durabilityModified = false; + boolean protectionModified = false; + + // First, find the method + for (MethodNode method : classNode.methods) { + if (method.name.equals("")) { + clinit = method; + break; + } + } + + if (clinit == null) { + return; + } + + + Iterator iter = clinit.instructions.iterator(); + while (iter.hasNext()) { + AbstractInsnNode insn = iter.next(); + + if (insn instanceof LdcInsnNode && ((LdcInsnNode) insn).cst.equals(fieldName)) { + foundField = true; + } + if (foundField && insn instanceof MethodInsnNode && ((MethodInsnNode) insn).name.equals("setProtection")) { + AbstractInsnNode protectionInsn = insn.getPrevious(); + + if (protectionInsn instanceof LdcInsnNode) { + ((LdcInsnNode) protectionInsn).cst = protection; + System.out.println("[CinderLoE] Updated protection for " + fieldName + " to " + protection); + return; + } + } + + if (foundField && !durabilityModified && insn instanceof MethodInsnNode && ((MethodInsnNode) insn).name.equals("setUses")) { + AbstractInsnNode durabilityInsn = insn.getPrevious(); + + if (durabilityInsn instanceof IntInsnNode) { + ((IntInsnNode) durabilityInsn).operand = durability; + System.out.println("[CinderLoE] Updated durability for " + fieldName + " to " + durability); + durabilityModified = true; + } + } + + if (foundField && !protectionModified && insn instanceof MethodInsnNode && ((MethodInsnNode) insn).name.equals("setProtection")) { + AbstractInsnNode protectionInsn = insn.getPrevious(); + + if (protectionInsn instanceof LdcInsnNode) { + ((LdcInsnNode) protectionInsn).cst = protection; + System.out.println("[CinderLoE] Updated protection for " + fieldName + " to " + protection); + protectionModified = true; + } + } + + if (durabilityModified && protectionModified) { + return; + } + } + + if (!foundField) { + System.out.println("[CinderLoE] Field '" + fieldName + "' not found in ."); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRShieldAdder.java b/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRShieldAdder.java new file mode 100644 index 0000000..3143f28 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRShieldAdder.java @@ -0,0 +1,160 @@ +package com.zivilon.cinder_loe.coremod; + +import net.minecraft.launchwrapper.IClassTransformer; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.FieldNode; +import org.objectweb.asm.tree.InsnList; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.IntInsnNode; +import org.objectweb.asm.tree.TypeInsnNode; +import org.objectweb.asm.tree.InsnNode; +import org.objectweb.asm.tree.LdcInsnNode; +import org.objectweb.asm.tree.FieldInsnNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; + +import java.util.List; +import java.util.ArrayList; + +public class LOTRShieldAdder implements IClassTransformer { + public static List custom_banners = new ArrayList<>(); + + public void registerShields() { + custom_banners = new ArrayList<>(); + // Arguments: enum name, texture name, ID, faction name + register("RED_DWARF", "redDwarf", 42, "DURINS_FOLK"); +// register("TEST", "test", 43, "GONDOR"); + } + + @Override + public byte[] transform(String name, String transformedName, byte[] basicClass) { + if ("lotr.common.LOTRShields".equals(transformedName)) { + registerShields(); + + // Get class + ClassReader classReader = new ClassReader(basicClass); + ClassNode classNode = new ClassNode(); + classReader.accept(classNode, 0); + + + // Add the new enum constant + for (BannerInfo banner : custom_banners) { + FieldNode newEnumConstant = new FieldNode( + Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC + Opcodes.ACC_FINAL + Opcodes.ACC_ENUM, + banner.enum_name, + "Llotr/common/LOTRShields;", + null, + null + ); + classNode.fields.add(newEnumConstant); + } + + + // Locate + MethodNode clinit = null; + for (MethodNode method : classNode.methods) { + if ("".equals(method.name)) { + clinit = method; + break; + } + } + + InsnList insns = clinit.instructions; + AbstractInsnNode constructor_injection_point = null; + + for (int i = 0; i < insns.size(); i++) { + AbstractInsnNode insn = insns.get(i); + // Check if the instruction is a BIPUSH + if (insn.getOpcode() == Opcodes.BIPUSH) { + IntInsnNode intInsn = (IntInsnNode) insn; + // Check if the operand is 42, indicating the size of the $VALUES array + if (intInsn.operand == 42) { + // Found the instruction to modify + constructor_injection_point = insn; + // Modify the operand from 42 to 43 to account for the new enum constant + intInsn.operand = 42 + custom_banners.size(); + System.out.println("Enum array length set to " + intInsn.operand); + System.out.println("Banner list size: " + custom_banners.size()); + break; + } + } + } + + // Create the constructor instructions to add new banner + InsnList constructor_injection = new InsnList(); + for (BannerInfo banner : custom_banners) { + constructor_injection.add(new TypeInsnNode(Opcodes.NEW, "lotr/common/item/LOTRItemBanner$BannerType")); + constructor_injection.add(new InsnNode(Opcodes.DUP)); + System.out.println("Registering with enum " + banner.enum_name); + constructor_injection.add(new LdcInsnNode(banner.enum_name)); + System.out.println("Registering with identifier " + banner.identifier); + constructor_injection.add(new LdcInsnNode(banner.identifier)); + constructor_injection.add(new FieldInsnNode(Opcodes.GETSTATIC, "lotr/common/fac/LOTRFaction", banner.faction, "Llotr/common/fac/LOTRFaction;")); + constructor_injection.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, "lotr/common/item/LOTRItemBanner$BannerType", "", "(Ljava/lang/String;IILjava/lang/String;Llotr/common/fac/LOTRFaction;)V", false)); + constructor_injection.add(new FieldInsnNode(Opcodes.PUTSTATIC, "lotr/common/item/LOTRItemBanner$BannerType", banner.enum_name, "Llotr/common/item/LOTRItemBanner$BannerType;")); + } + // Insert the new instructions + if (constructor_injection_point != null) { + insns.insertBefore(constructor_injection_point, constructor_injection); + } + + + // Modifying the $VALUES array + // Create new instruction list to be injected later + InsnList values_array_injection = new InsnList(); + + // Add instructions to the instruction list + for (BannerInfo banner : custom_banners) { + values_array_injection.add(new InsnNode(Opcodes.DUP)); + values_array_injection.add(new FieldInsnNode(Opcodes.GETSTATIC, "lotr/common/item/LOTRItemBanner$BannerType", banner.enum_name, "Llotr/common/item/LOTRItemBanner$BannerType;")); + values_array_injection.add(new InsnNode(Opcodes.AASTORE)); + } + + // Find the putstatic instruction for $VALUES + // This is where the fields are injected into a list, we want to inject our instructions before this + AbstractInsnNode values_injection_point = null; + + while (constructor_injection_point != null) { + constructor_injection_point = constructor_injection_point.getNext(); + if (constructor_injection_point.getOpcode() == Opcodes.PUTSTATIC) { + values_injection_point = constructor_injection_point; + break; + } + } + + // Insert the new instructions before the putstatic instruction + if (values_injection_point != null) { + insns.insertBefore(values_injection_point, values_array_injection); + } + + // Write the modified class back to a byte array + ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); + classNode.accept(classWriter); + return classWriter.toByteArray(); // Return the modified class + } + return basicClass; // Return the unmodified class for all other classes + } + + public void register(String enum_name, String identifier, int ordinal, String faction) { + System.out.println("Registering banner " + enum_name + " " + identifier); + custom_banners.add(new BannerInfo(enum_name, identifier, ordinal, faction)); + } + + public class BannerInfo { + String enum_name; + String identifier; + int ordinal; + String faction; + + public BannerInfo(String enum_name, String identifier, int ordinal, String faction) { + this.enum_name = enum_name; + this.identifier = identifier; + this.ordinal = ordinal; + this.faction = faction; + } + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRSpawnListLinker.java b/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRSpawnListLinker.java new file mode 100644 index 0000000..917b82f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRSpawnListLinker.java @@ -0,0 +1,49 @@ +package com.zivilon.cinder_loe.coremod; + +import net.minecraft.launchwrapper.IClassTransformer; + +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.FieldNode; + +public class LOTRSpawnListLinker implements IClassTransformer { + + @Override + public byte[] transform(String name, String transformedName, byte[] basicClass) { + if ("lotr.common.world.spawning.LOTRSpawnList".equals(transformedName)) { + System.out.println("[CinderLoE] Linking CinderLoE spawn-lists to LOTRMod..."); + return addLinks(basicClass, "RED_DWARF", "LIMWAITH"); // Can add any number of items, append with comma + } + return basicClass; + } + + private byte[] addLinks(byte[] classBytes, String... fieldNames) { + ClassReader reader = new ClassReader(classBytes); + ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); + + reader.accept(new ClassVisitor(Opcodes.ASM5, writer) { + @Override + public void visitEnd() { + // Add each field specified in the fieldNames array + for (String fieldName : fieldNames) { + addSpawnListLink(fieldName, cv); + } + super.visitEnd(); + } + }, 0); + + return writer.toByteArray(); + } + + private void addSpawnListLink(String fieldName, ClassVisitor cv) { + // Define the field with public static access, name from the parameter, and type net.minecraft.item.Item + FieldVisitor fv = cv.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, fieldName, "Llotr/common/world/spawning/LOTRSpawnList;", null, null); + if (fv != null) { + fv.visitEnd(); + } + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRWeaponLinker.java b/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRWeaponLinker.java new file mode 100644 index 0000000..469b3de --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/coremod/LOTRWeaponLinker.java @@ -0,0 +1,58 @@ +package com.zivilon.cinder_loe.coremod; + +import net.minecraft.launchwrapper.IClassTransformer; + +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.FieldNode; + +public class LOTRWeaponLinker implements IClassTransformer { + + @Override + public byte[] transform(String name, String transformedName, byte[] basicClass) { + if ("lotr.common.LOTRMod".equals(transformedName)) { + System.out.println("[CinderLoE] Linking CinderLoE items to LOTRMod..."); + + // Can add any number of items, append with comma + return addLinks(basicClass, + "spearRedDwarf", "crossbowRedDwarf", "swordRedDwarf", "battleaxeRedDwarf", "pikeRedDwarf", "daggerRedDwarf", "daggerRedDwarfPoisoned", "hammerRedDwarf", + "radagastStaff", "alatarStaff", "pallandoStaff", "sarumanStaff", "maceWarlord", "sarumanWhiteStaff", + "spearLimwaith", "tridentLimwaith", "daggerLimwaith", "daggerLimwaithPoisoned", "truncheonLimwaith", "battleaxeLimwaith", "blowgunLimwaith", + "frostblade", "spearsolidgold", "whip", "spearUnnamed", "welfRelic", "daggerVoid", + "swordBree", + "maceArnor", + "daggerAsh","bowAsh","hammerAsh","pikeAsh","battleaxeAsh","swordAsh","spearAsh", "staffAsh", "cleaver"); + } + return basicClass; + } + + private byte[] addLinks(byte[] classBytes, String... fieldNames) { + ClassReader reader = new ClassReader(classBytes); + ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); + + reader.accept(new ClassVisitor(Opcodes.ASM5, writer) { + @Override + public void visitEnd() { + // Add each field specified in the fieldNames array + for (String fieldName : fieldNames) { + addItemLink(fieldName, cv); + } + super.visitEnd(); + } + }, 0); + + return writer.toByteArray(); + } + + private void addItemLink(String fieldName, ClassVisitor cv) { + // Define the field with public static access, name from the parameter, and type net.minecraft.item.Item + FieldVisitor fv = cv.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, fieldName, "Lnet/minecraft/item/Item;", null, null); + if (fv != null) { + fv.visitEnd(); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/coremod/OptiFinePatcher.java b/src (1)/main/java/com/zivilon/cinder_loe/coremod/OptiFinePatcher.java new file mode 100644 index 0000000..46d83c5 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/coremod/OptiFinePatcher.java @@ -0,0 +1,130 @@ +package com.zivilon.cinder_loe.coremod; + +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.FieldInsnNode; +import org.objectweb.asm.tree.FieldNode; +import org.objectweb.asm.tree.InsnList; +import org.objectweb.asm.tree.InsnNode; +import org.objectweb.asm.tree.LdcInsnNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; +import org.objectweb.asm.util.Printer; +import org.objectweb.asm.util.Textifier; +import org.objectweb.asm.util.TraceMethodVisitor; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Iterator; + +import net.minecraft.launchwrapper.IClassTransformer; + +public class OptiFinePatcher implements IClassTransformer { + @Override + public byte[] transform(String name, String transformedName, byte[] classBytes) { + if (transformedName.equals("ItemRendererOF")) { + System.out.println("[CinderLoE] Transforming ItemRendererOF..."); + + ClassReader reader = new ClassReader(classBytes); + ClassNode classNode = new ClassNode(); + reader.accept(classNode, 0); + + for (MethodNode method : classNode.methods) { + if (method.name.equals("func_78443_a") && method.desc.equals("(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;I)V")) { + InsnList instructions = method.instructions; + AbstractInsnNode currentNode = null; + Iterator nodes = instructions.iterator(); + + int occurrenceCounter = 0; + + while (nodes.hasNext()) { + currentNode = nodes.next(); + + if (currentNode.getOpcode() == Opcodes.INVOKESTATIC) { + MethodInsnNode methodCall = (MethodInsnNode) currentNode; + if (methodCall.owner.equals("ItemRendererOF") && methodCall.name.equals("func_78439_a") && methodCall.desc.equals("(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) { + occurrenceCounter++; + + InsnNode bool = null; + + if (occurrenceCounter == 1) { + bool = new InsnNode(Opcodes.ICONST_0); + instructions.insertBefore(currentNode, bool); + MethodInsnNode newMethodCall = new MethodInsnNode(Opcodes.INVOKESTATIC, "com/zivilon/cinder_loe/client/render/item/RenderHelper", "customRenderItemIn2D", "(Lnet/minecraft/client/renderer/Tessellator;FFFFIIFZ)V", false); + instructions.set(currentNode, newMethodCall); + } + + if (occurrenceCounter == 2) { + bool = new InsnNode(Opcodes.ICONST_1); + instructions.insertBefore(currentNode, bool); + MethodInsnNode newMethodCall = new MethodInsnNode(Opcodes.INVOKESTATIC, "com/zivilon/cinder_loe/client/render/item/RenderHelper", "customRenderItemIn2D", "(Lnet/minecraft/client/renderer/Tessellator;FFFFIIFZ)V", false); + instructions.set(currentNode, newMethodCall); + } + + // Modify only the second occurrence + if (occurrenceCounter == 3) { + bool = new InsnNode(Opcodes.ICONST_1); + instructions.insertBefore(currentNode, bool); + MethodInsnNode newMethodCall = new MethodInsnNode(Opcodes.INVOKESTATIC, "com/zivilon/cinder_loe/client/render/item/RenderHelper", "customRenderItemIn2D", "(Lnet/minecraft/client/renderer/Tessellator;FFFFIIFZ)V", false); + instructions.set(currentNode, newMethodCall); + break; + } + } + } + } + // Color code here + int index = -1; + + for (int i = 0; i < instructions.size(); i++) { + currentNode = instructions.get(i); + if (currentNode.getOpcode() == Opcodes.LDC && ((LdcInsnNode) currentNode).cst.equals(0.7599999904632568f)) { + System.out.println("[CinderLoE-Coremod] Found Optifine code to remove..."); + index = i; + break; + } + } + + if (index != -1) { + for (int i = 0; i < 15; i++) { + AbstractInsnNode targetNode = instructions.get(index); + System.out.println(insnToString(targetNode)); + instructions.remove(targetNode); + } + + InsnList toInject = new InsnList(); + toInject.add(new FieldInsnNode(Opcodes.GETSTATIC, "com/zivilon/cinder_loe/CinderLoE_Config", "enchantment_color_red", "F")); + toInject.add(new FieldInsnNode(Opcodes.GETSTATIC, "com/zivilon/cinder_loe/CinderLoE_Config", "enchantment_color_green", "F")); + toInject.add(new FieldInsnNode(Opcodes.GETSTATIC, "com/zivilon/cinder_loe/CinderLoE_Config", "enchantment_color_blue", "F")); + toInject.add(new InsnNode(Opcodes.FCONST_1)); + toInject.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "org/lwjgl/opengl/GL11", "glColor4f", "(FFFF)V", false)); + + instructions.insertBefore(instructions.get(index), toInject); + break; + } + } + } + + ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); + classNode.accept(writer); // Liine 104 + + byte[] transformedBytes = writer.toByteArray(); + return transformedBytes; + } + return classBytes; + } + + // Method to convert an instruction node to string + public static String insnToString(AbstractInsnNode insn){ + insn.accept(new TraceMethodVisitor(new Textifier())); + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + Textifier textifier = new Textifier(); + TraceMethodVisitor tmv = new TraceMethodVisitor(textifier); + insn.accept(tmv); + textifier.print(pw); + return sw.toString(); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/droptables/DropContext.java b/src (1)/main/java/com/zivilon/cinder_loe/droptables/DropContext.java new file mode 100644 index 0000000..90548eb --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/droptables/DropContext.java @@ -0,0 +1,13 @@ +package com.zivilon.cinder_loe.droptables; + +public enum DropContext { + KILLED, + KILLED_BY_PLAYER, + KILLED_BY_ENTITY, + KILLED_BY_FIRE, + KILLED_BY_WITHER, + KILLED_BY_DROWNING, + KILLED_BY_EXPLOSION, + PICKPOCKET, + LOOTING_ACTIVE; +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/droptables/DropTable.java b/src (1)/main/java/com/zivilon/cinder_loe/droptables/DropTable.java new file mode 100644 index 0000000..b472e03 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/droptables/DropTable.java @@ -0,0 +1,280 @@ +package com.zivilon.cinder_loe.droptables; + +import com.zivilon.cinder_loe.util.ILootableEntity; +import com.zivilon.cinder_loe.util.Utilities; +import com.zivilon.cinder_loe.CinderLoE; + +import net.minecraft.nbt.*; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import cpw.mods.fml.common.registry.FMLControlledNamespacedRegistry; + +import lotr.common.entity.npc.LOTREntityNPC; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +public class DropTable { + public static Random random = new Random(); + public List drop_list; + + public DropTable() { + drop_list = new ArrayList(); + } + + public static void drop_items(LOTREntityNPC entity, DropContext[] context_flags, int looting_level) { + List drops = generate_drops(entity, context_flags, looting_level); + if (drops == null) return; + for (ItemStack drop : drops) { + entity.npcDropItem(drop, 0.0F, false, false); + } + } + + public static List generate_drops(LOTREntityNPC entity, DropContext[] context_flags, int looting_level) { + DropTable table = ((ILootableEntity)entity).get_drop_table(); + if (table == null) return null; + if (context_flags == null) context_flags = new DropContext[0]; + + List results = new ArrayList<>(); + for (DropInstance drop : table.drop_list) { + ItemStack stack = get_drop(drop, looting_level, context_flags); + if (stack != null) { + results.add(stack); + } + } + return results; + } + + public static ItemStack get_drop(DropInstance drop, int looting_level, DropContext[] context) { + if (!(Utilities.array_contains_array(drop.conditions, context))) return null; + + if (drop instanceof SingleItemDrop) { + return get_single_drop((SingleItemDrop)drop, looting_level); + } + if (drop instanceof ItemGroup) { + return get_group_drop((ItemGroup)drop, looting_level); + } + return null; + } + + public static ItemStack get_single_drop(SingleItemDrop drop, int looting_level) { + float chance = drop.drop_chance; + if (drop.looting_affects_chance) + chance = 1.0F - (float)Math.pow(1.0F - chance, 1.0F + 0.1F * looting_level); + if (chance < random.nextFloat()) return null; + + int range = drop.max_amount - drop.min_amount + 1; + if (drop.looting_affects_quantity && looting_level > 0) + range = (int)Math.ceil(range * (1.25F * looting_level)); + int count = random.nextInt(range) + drop.min_amount; + ItemStack stack = new ItemStack(drop.item, count); + if (drop.nbt != null) + stack.setTagCompound((NBTTagCompound)drop.nbt.copy()); + return stack; + } + + public static ItemStack get_group_drop(ItemGroup drop, int looting_level) { + float chance = drop.drop_chance; + if (drop.looting_affects_chance) + chance = 1.0F - (float)Math.pow(1.0F - chance, 1.0F + 0.1F * looting_level); + if (chance < random.nextFloat()) return null; + + int total_weight = drop.entries.stream().mapToInt(e -> e.weight).sum(); + int pick = random.nextInt(total_weight); + for (ItemGroupEntry entry : drop.entries) { + if (pick < entry.weight) { + int range = entry.max_amount - entry.min_amount + 1; + if (entry.looting_affects_quantity && looting_level > 0) + range = (int)Math.ceil(range * (1.25F * looting_level)); + int count = random.nextInt(range) + entry.min_amount; + ItemStack stack = new ItemStack(entry.item, count); + if (entry.nbt != null) + stack.setTagCompound((NBTTagCompound)entry.nbt.copy()); + return stack; + } + pick -= entry.weight; + } + return null; + } + + public static NBTTagCompound serialize_to_nbt(DropTable table) { + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagList drop_list = new NBTTagList(); + for (DropInstance drop : table.drop_list) { + NBTTagCompound drop_tag = new NBTTagCompound(); + drop_tag.setString("type", drop instanceof ItemGroup ? "group" : "single"); + drop_tag.setFloat("drop_chance", drop.drop_chance); + drop_tag.setInteger("min_amount", drop.min_amount); + drop_tag.setInteger("max_amount", drop.max_amount); + drop_tag.setBoolean("looting_affects_chance", drop.looting_affects_chance); + NBTTagList condition_list = new NBTTagList(); + if (drop instanceof SingleItemDrop) { + SingleItemDrop single = (SingleItemDrop)drop; + Item drop_item = single.item; + if (CinderLoE.DEBUG && drop_item == null) System.out.println("[DropTable_serializer] Item is null"); + if (CinderLoE.DEBUG && drop_item != null) System.out.println("[DropTable_serializer] item " + single.item.getUnlocalizedName()); + drop_tag.setBoolean("looting_affects_quantity", single.looting_affects_quantity); + drop_tag.setInteger("id", ((FMLControlledNamespacedRegistry)Item.itemRegistry).getId(drop_item)); + if (single.nbt != null) + drop_tag.setTag("nbt", single.nbt); + } + if (drop instanceof ItemGroup) { + ItemGroup group = (ItemGroup) drop; + NBTTagList entries = new NBTTagList(); + for (ItemGroupEntry entry : group.entries) { + NBTTagCompound entry_tag = new NBTTagCompound(); + entry_tag.setInteger("id", Item.getIdFromItem(entry.item)); + entry_tag.setInteger("weight", entry.weight); + entry_tag.setInteger("min", entry.min_amount); + entry_tag.setInteger("max", entry.max_amount); + entry_tag.setBoolean("looting_quantity", entry.looting_affects_quantity); + if (entry.nbt != null) { + entry_tag.setTag("nbt", entry.nbt.copy()); + } + entries.appendTag(entry_tag); + } + drop_tag.setTag("entries", entries); + } + for (DropContext condition : drop.conditions) { + condition_list.appendTag(new NBTTagString(condition.name())); + } + drop_tag.setTag("conditions", condition_list); + drop_list.appendTag(drop_tag); + nbt.setTag("Drops", drop_list); + } + return nbt; + } + + public static DropTable deserialize_from_nbt(NBTTagCompound tag) { + DropTable table = new DropTable(); + + if (!tag.hasKey("Drops")) return table; + + NBTTagList drop_list = tag.getTagList("Drops", 10); + + for (int i = 0; i < drop_list.tagCount(); i++) { + NBTTagCompound drop_tag = drop_list.getCompoundTagAt(i); + String type = drop_tag.getString("type"); + + float drop_chance = drop_tag.getFloat("drop_chance"); + int min = drop_tag.getInteger("min_amount"); + int max = drop_tag.getInteger("max_amount"); + boolean looting_chance = drop_tag.getBoolean("looting_affects_chance"); + + // Read conditions + DropContext[] conditions; + if (drop_tag.hasKey("conditions")) { + NBTTagList cond_list = drop_tag.getTagList("conditions", 8); + conditions = new DropContext[cond_list.tagCount()]; + for (int j = 0; j < cond_list.tagCount(); j++) { + String ctx = cond_list.getStringTagAt(j); + conditions[j] = DropContext.valueOf(ctx); + } + } else { + conditions = new DropContext[0]; + } + + // Construct drop + if (type.equals("single")) { + Item item = Item.getItemById(drop_tag.getInteger("id")); + boolean looting_quantity = drop_tag.hasKey("looting_affects_quantity") && drop_tag.getBoolean("looting_affects_quantity"); + NBTTagCompound nbt = drop_tag.hasKey("nbt") ? drop_tag.getCompoundTag("nbt") : null; + SingleItemDrop single = new SingleItemDrop(item, nbt, drop_chance, min, max, looting_quantity, looting_chance, conditions); + if (single != null) table.drop_list.add(single); + if (single == null) System.out.println("[DropTable_deserializer] WARNING: Single drop was null!"); + } else if (type.equals("group")) { + List entries = new ArrayList<>(); + if (drop_tag.hasKey("entries")) { + NBTTagList entry_list = drop_tag.getTagList("entries", 10); // 10 = compound + for (int j = 0; j < entry_list.tagCount(); j++) { + NBTTagCompound entry_tag = entry_list.getCompoundTagAt(j); + Item item = Item.getItemById(entry_tag.getInteger("id")); + int weight = entry_tag.getInteger("weight"); + int minAmt = entry_tag.getInteger("min"); + int maxAmt = entry_tag.getInteger("max"); + boolean lootQty = entry_tag.getBoolean("looting_quantity"); + NBTTagCompound nbt = entry_tag.hasKey("nbt") ? entry_tag.getCompoundTag("nbt") : null; + entries.add(new ItemGroupEntry(item, nbt, weight, minAmt, maxAmt, lootQty)); + } + } + ItemGroup group = new ItemGroup(drop_chance, min, max, looting_chance, conditions, entries.toArray(new ItemGroupEntry[0])); + if (group != null) table.drop_list.add(group); + if (group == null) System.out.println("[DropTable_deserializer] WARNING: Group drop was null!"); + } + } + + return table; + } + + + public static class DropInstance { + public float drop_chance; + public int min_amount; + public int max_amount; + public boolean looting_affects_chance; + public DropContext[] conditions; + + public DropInstance(float drop_chance, int min_amount, int max_amount, boolean looting_chance, DropContext[] conditions) { + this.drop_chance = drop_chance; + this.min_amount = min_amount; + this.max_amount = max_amount; + this.looting_affects_chance = looting_chance; + this.conditions = conditions; + } + } + public static class SingleItemDrop extends DropInstance { + public Item item; + public NBTTagCompound nbt; + boolean looting_affects_quantity; + + public SingleItemDrop(Item item, NBTTagCompound nbt, float chance, int min, int max, boolean looting_quantity, boolean looting_chance, DropContext[] conditions) { + super(chance, min, max, looting_chance, conditions); + this.item = item; + this.nbt = nbt; + this.looting_affects_quantity = looting_quantity; + } + public SingleItemDrop(Item item, NBTTagCompound nbt, float chance, DropContext[] conditions) { + super(chance, 1, 1, false, conditions); + this.item = item; + this.nbt = nbt; + this.looting_affects_quantity = false; + } + } + public static class ItemGroup extends DropInstance { + public List entries; + + public ItemGroup(float chance, int min, int max, boolean looting_chance, DropContext[] conditions, ItemGroupEntry... drops) { + super(chance, min, max, looting_chance, conditions); + this.entries = Arrays.asList(drops); + } + } + + public static class ItemGroupEntry { + public Item item; + public int min_amount; + public int max_amount; + public NBTTagCompound nbt; + public int weight; + public boolean looting_affects_quantity; + + public ItemGroupEntry(Item item, NBTTagCompound nbt, int weight, int min_amount, int max_amount, boolean looting_quantity) { + this.item = item; + this.nbt = nbt; + this.weight = weight; + this.min_amount = min_amount; + this.max_amount = max_amount; + this.looting_affects_quantity = looting_quantity; + } + public ItemGroupEntry(Item item, NBTTagCompound nbt, int weight) { + this.item = item; + this.nbt = nbt; + this.weight = weight; + this.min_amount = 1; + this.max_amount = 1; + this.looting_affects_quantity = false; + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/droptables/DropTableHandler.java b/src (1)/main/java/com/zivilon/cinder_loe/droptables/DropTableHandler.java new file mode 100644 index 0000000..f4ddd6b --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/droptables/DropTableHandler.java @@ -0,0 +1,5 @@ +package com.zivilon.cinder_loe.droptables; + +public class DropTableHandler { + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/enchants/LOTREnchantmentArmorSpecial.java b/src (1)/main/java/com/zivilon/cinder_loe/enchants/LOTREnchantmentArmorSpecial.java new file mode 100644 index 0000000..5c47a42 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/enchants/LOTREnchantmentArmorSpecial.java @@ -0,0 +1,80 @@ +package com.zivilon.cinder_loe.enchants; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import lotr.common.LOTRDamage; +import lotr.common.enchant.LOTREnchantment; +import lotr.common.enchant.LOTREnchantmentBane; +import lotr.common.enchant.LOTREnchantmentType; +import lotr.common.item.LOTRWeaponStats; +import lotr.common.network.LOTRPacketHandler; +import lotr.common.network.LOTRPacketWeaponFX; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.StatCollector; +import net.minecraft.item.ItemStack; + +public class LOTREnchantmentArmorSpecial extends LOTREnchantment { + private boolean compatibleBane = true; + + private boolean compatibleOtherSpecial = false; + + public LOTREnchantmentArmorSpecial(String s) { + super(s, new LOTREnchantmentType[] { LOTREnchantmentType.ARMOR, LOTREnchantmentType.ARMOR_FEET, LOTREnchantmentType.ARMOR_LEGS, LOTREnchantmentType.ARMOR_BODY, LOTREnchantmentType.ARMOR_HEAD, }); + setValueModifier(3.0F); + setBypassAnvilLimit(); + } + + public LOTREnchantmentArmorSpecial setIncompatibleBane() { + this.compatibleBane = false; + return this; + } + + public LOTREnchantmentArmorSpecial setCompatibleOtherSpecial() { + this.compatibleOtherSpecial = true; + return this; + } + + public String getDescription(ItemStack itemstack) { + return StatCollector.translateToLocalFormatted("lotr.enchant." + this.enchantName + ".desc", new Object[0]); +} + + public boolean isBeneficial() { + return true; + } + + public boolean canApply(ItemStack itemstack, boolean considering) { + if (super.canApply(itemstack, considering)) { + Item item = itemstack.getItem(); + /*if (item instanceof lotr.common.item.LOTRItemBalrogWhip && (this == LOTREnchantment.fire || this == LOTREnchantment.chill))*/ + return true; + } + return false; + } + + public boolean isCompatibleWith(LOTREnchantment other) { + if (!this.compatibleBane) + if (other instanceof LOTREnchantmentBane) + return false; + if (!this.compatibleOtherSpecial) + if (other instanceof LOTREnchantmentArmorSpecial && !((LOTREnchantmentArmorSpecial)other).compatibleOtherSpecial) + return false; + return true; + } + + public static int getFireAmount() { + return 2; + } + + /*public static void doChillAttack(EntityLivingBase entity) { + if (entity instanceof EntityPlayerMP) + LOTRDamage.doFrostDamage((EntityPlayerMP)entity); + int duration = 5; + entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, duration * 20, 1)); + LOTRPacketWeaponFX packet = new LOTRPacketWeaponFX(LOTRPacketWeaponFX.Type.CHILLING, (Entity)entity); + LOTRPacketHandler.networkWrapper.sendToAllAround((IMessage)packet, LOTRPacketHandler.nearEntity((Entity)entity, 64.0D));*/ + } \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/enchants/LOTREnchantmentWeakProtectionRanged.java b/src (1)/main/java/com/zivilon/cinder_loe/enchants/LOTREnchantmentWeakProtectionRanged.java new file mode 100644 index 0000000..d4fac14 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/enchants/LOTREnchantmentWeakProtectionRanged.java @@ -0,0 +1,50 @@ +package com.zivilon.cinder_loe.enchants; + +import lotr.common.enchant.LOTREnchantmentProtectionRanged; +import lotr.common.enchant.LOTREnchantmentProtectionSpecial; +import lotr.common.item.LOTRMaterial; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.StatCollector; + +public class LOTREnchantmentWeakProtectionRanged extends LOTREnchantmentProtectionSpecial { + + public LOTREnchantmentWeakProtectionRanged(String s, int level) { + super(s, level); + } + + @Override + public String getDescription(ItemStack itemstack) { + return StatCollector.translateToLocalFormatted((String)"lotr.enchant.protectRanged.desc", (Object[])new Object[]{this.formatAdditiveInt(this.calcIntProtection())}); + } + + @Override + public boolean canApply(ItemStack itemstack, boolean considering) { + if (super.canApply(itemstack, considering)) { + Item item = itemstack.getItem(); + return !(item instanceof ItemArmor) || ((ItemArmor)item).getArmorMaterial() != LOTRMaterial.GALVORN.toArmorMaterial(); + } + return false; + } + + + @Override + public boolean isBeneficial() { + // This enchantment is detrimental, so return false + return false; + } + + @Override + protected boolean protectsAgainst(DamageSource damageSource) { + return false; + } + + @Override + protected int calcIntProtection() { + return this.protectLevel; + } +} + + diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/DarkSpider.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/DarkSpider.java new file mode 100644 index 0000000..d5c1b68 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/DarkSpider.java @@ -0,0 +1,91 @@ +package com.zivilon.cinder_loe.entity; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.*; +import lotr.common.entity.animal.LOTREntityHorse; +import lotr.common.entity.npc.*; +import lotr.common.fac.LOTRFaction; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.*; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import java.util.Arrays; +import java.util.List; + +public class DarkSpider extends LOTREntitySpiderBase { + public static int VENOM_DARK = 3; + public DarkSpider(World world) { + super(world); + } + @Override + protected int getRandomSpiderScale() { + return this.rand.nextInt(4); + } + @Override + protected int getRandomSpiderType() { + return VENOM_DARK; + } + @Override + public LOTRFaction getFaction() { + return LOTRFaction.UTUMNO; + } + + @Override + public boolean attackEntityAsMob(Entity entity) { + if (super.attackEntityAsMob(entity)) { + if (entity instanceof EntityLivingBase) { + ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.blindness.id, 200, 0)); + } + return true; + } + return false; + } + @Override + protected boolean canRideSpider() { + return false; + } + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } + @Override + public boolean attackEntityFrom(DamageSource source, float amount) { + if (source.getEntity() instanceof EntityLivingBase) { + EntityLivingBase attacker = (EntityLivingBase) source.getEntity(); + if (attacker instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) attacker; + if (this.getSpiderScale() > 4 && this.rand.nextDouble() < 0.5) { + spawnDarkSpiders(player); + } + } + } + return super.attackEntityFrom(source, amount); + } + private void spawnDarkSpiders(EntityPlayer player) { + World world = player.worldObj; + for (int i = 0; i < 10; i++) { + DarkSpider babySpider = new DarkSpider(world); + babySpider.setLocationAndAngles(player.posX, player.posY, player.posZ, player.rotationYaw, 0.0F); + babySpider.setSpiderScale(0); + babySpider.setHealth(10); + world.spawnEntityInWorld(babySpider); + } + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return null; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/Renegade.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/Renegade.java new file mode 100644 index 0000000..2f02a1d --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/Renegade.java @@ -0,0 +1,193 @@ +package com.zivilon.cinder_loe.entity; + +import com.zivilon.cinder_loe.CinderLoE; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIOpenDoor; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityAIWatchClosest2; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.ai.LOTREntityAIDrink; +import lotr.common.entity.ai.LOTREntityAIEat; +import lotr.common.entity.ai.LOTREntityAIFollowHiringPlayer; +import lotr.common.entity.ai.LOTREntityAIHiredRemainStill; +import lotr.common.entity.animal.LOTREntityHorse; +import lotr.common.entity.npc.LOTREntityMan; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.npc.LOTRNPCMount; +import lotr.common.entity.npc.LOTRNames; +import lotr.common.fac.LOTRFaction; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +public class Renegade extends LOTREntityMan { + + public Renegade(World world) { + super(world); + setSize(0.6F, 1.8F); + getNavigator().setAvoidsWater(true); + getNavigator().setBreakDoors(true); + ((EntityLiving) this).tasks.addTask(0, (EntityAIBase) new EntityAISwimming((EntityLiving) this)); + ((EntityLiving) this).tasks.addTask(1, (EntityAIBase) new LOTREntityAIHiredRemainStill(this)); + ((EntityLiving) this).tasks.addTask(2, (EntityAIBase) new LOTREntityAIAttackOnCollide(this, 1.3D, false)); + ((EntityLiving) this).tasks.addTask(3, (EntityAIBase) new LOTREntityAIFollowHiringPlayer(this)); + ((EntityLiving) this).tasks.addTask(4, (EntityAIBase) new EntityAIOpenDoor((EntityLiving) this, true)); + ((EntityLiving) this).tasks.addTask(6, (EntityAIBase) new LOTREntityAIEat(this, LOTRFoods.DUNLENDING, 8000)); + ((EntityLiving) this).tasks.addTask(6, (EntityAIBase) new LOTREntityAIDrink(this, LOTRFoods.DUNLENDING_DRINK, 8000)); + ((EntityLiving) this).tasks.addTask(7, (EntityAIBase) new EntityAIWatchClosest2((EntityLiving) this, EntityPlayer.class, 8.0F, 0.02F)); + ((EntityLiving) this).tasks.addTask(7, (EntityAIBase) new EntityAIWatchClosest2((EntityLiving) this, LOTREntityNPC.class, 5.0F, 0.02F)); + ((EntityLiving) this).tasks.addTask(8, (EntityAIBase) new EntityAIWatchClosest((EntityLiving) this, EntityLiving.class, 8.0F, 0.02F)); + ((EntityLiving) this).tasks.addTask(9, (EntityAIBase) new EntityAILookIdle((EntityLiving) this)); + addTargetTasks(true); + } + + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) { + // Do nothing + } + + public LOTRNPCMount createMountToRide() { + LOTREntityHorse horse = (LOTREntityHorse) super.createMountToRide(); + horse.setMountArmor(new ItemStack(LOTRMod.horseArmorIron)); + return (LOTRNPCMount) horse; + } + + public void setupNPCGender() { + this.familyInfo.setMale(this.rand.nextBoolean()); + } + + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0D); + getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D); + } + + public LOTRFaction getFaction() { + return LOTRFaction.UTUMNO; + } + + public String getNPCName() { + return this.familyInfo.getName(); + } + + public String getNPCFormattedName(String npcName, String entityName) { + if (getClass() == Renegade.class) return StatCollector + .translateToLocalFormatted("entity.cinder_loe.Renegade.entityName", new Object[] { npcName }); + return super.getNPCFormattedName(npcName, entityName); + } + + protected void onAttackModeChange(LOTREntityNPC.AttackMode mode, boolean mounted) { + if (mode == LOTREntityNPC.AttackMode.IDLE) { + setCurrentItemOrArmor(0, this.npcItemsInv.getIdleItem()); + } else { + setCurrentItemOrArmor(0, this.npcItemsInv.getMeleeWeapon()); + ((EntityLiving) this).tasks.addTask(5, (EntityAIBase) new EntityAIWander(this, 1.0D)); + } + } + + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + int bones = this.rand.nextInt(2) + this.rand.nextInt(i + 1); + for (int l = 0; l < bones; l++) dropItem(Items.bone, 1); + } + + public boolean getCanSpawnHere() { + return false; + } + + public String getSpeechBank(EntityPlayer entityplayer) { + if (isDrunkard()) return "renegade/drunkard/neutral"; + return "renegade/man/hostile"; + } + + List codeOptions = Arrays.asList(() -> { + this.familyInfo.setName(LOTRNames.getGondorName(this.rand, this.familyInfo.isMale())); + }, () -> { + this.familyInfo.setName(LOTRNames.getBreeName(this.rand, this.familyInfo.isMale())); + }, () -> { + this.familyInfo.setName(LOTRNames.getRhudaurName(this.rand, this.familyInfo.isMale())); + }, () -> { + this.familyInfo.setName(LOTRNames.getRohirricName(this.rand, this.familyInfo.isMale())); + }, + /* + * () -> { + * System.out.println("[CinderCore] Executing GondorName"); + * this.familyInfo.setName(LOTRNames.getDunlendingName(this.rand, this.familyInfo.isMale())), + * } + * () -> { + * System.out.println("[CinderCore] Executing GondorName"); + * this.familyInfo.setName(LOTRNames.getDorwinionName(this.rand, this.familyInfo.isMale())), + * } + * () -> { + * System.out.println("[CinderCore] Executing GondorName"); + * this.familyInfo.setName(LOTRNames.getDalishName(this.rand, this.familyInfo.isMale())), + * } + * () -> { + * System.out.println("[CinderCore] Executing GondorName"); + * this.familyInfo.setName(LOTRNames.getRhunicName(this.rand, this.familyInfo.isMale())), + * } + * () -> { + * System.out.println("[CinderCore] Executing GondorName"); + * this.familyInfo.setName(LOTRNames.getUmbarName(this.rand, this.familyInfo.isMale())), + * } + * () -> { + * System.out.println("[CinderCore] Executing GondorName"); + * this.familyInfo.setName(LOTRNames.getHarnennorName(this.rand, this.familyInfo.isMale())), + * } + * () -> { + * System.out.println("[CinderCore] Executing GondorName"); + * this.familyInfo.setName(LOTRNames.getSouthronCoastName(this.rand, this.familyInfo.isMale())), + * } + * () -> { + * System.out.println("[CinderCore] Executing GondorName"); + * this.familyInfo.setName(LOTRNames.getNomadName(this.rand, this.familyInfo.isMale())), + * } + * () -> { + * System.out.println("[CinderCore] Executing GondorName"); + * this.familyInfo.setName(LOTRNames.getGulfHaradName(this.rand, this.familyInfo.isMale())), + * } + * () -> { + * System.out.println("[CinderCore] Executing GondorName"); + * this.familyInfo.setName(LOTRNames.getMoredainName(this.rand, this.familyInfo.isMale())), + * } + */ + () -> { + this.familyInfo.setName(LOTRNames.getTauredainName(this.rand, this.familyInfo.isMale())); + }); + + public void setupNPCName() { + if (this.familyInfo == null) System.out.println("[CinderCore] Family info is null"); + if (this.rand == null) System.out.println("[CinderCore] rand is null"); + Boolean gender = this.familyInfo.isMale(); + if (gender == null) System.out.println("[CinderCore] Gender is null"); + /* + * int randomIndex = this.rand.nextInt(codeOptions.size()); + * codeOptions.get(randomIndex) + * .run();; + */ + this.familyInfo.setName(LOTRNames.getDorwinionName(this.rand, this.familyInfo.isMale())); + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 0); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/RenegadeCaptain.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/RenegadeCaptain.java new file mode 100644 index 0000000..fe397d2 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/RenegadeCaptain.java @@ -0,0 +1,38 @@ +package com.zivilon.cinder_loe.entity; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.*; +import lotr.common.entity.animal.LOTREntityHorse; +import lotr.common.entity.npc.LOTREntityMan; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.npc.LOTRNPCMount; +import lotr.common.entity.npc.LOTRNames; +import lotr.common.fac.LOTRFaction; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.*; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import java.util.Arrays; +import java.util.List; + +public class RenegadeCaptain extends Renegade { + + public RenegadeCaptain(World world) { + super(world); + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 1); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/SarumanFireball.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/SarumanFireball.java new file mode 100644 index 0000000..7f7fab7 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/SarumanFireball.java @@ -0,0 +1,102 @@ +package com.zivilon.cinder_loe.entity; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; + +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.animal.LOTREntityHorse; +import lotr.common.entity.projectile.LOTREntityGandalfFireball; +import lotr.common.fac.LOTRFaction; +import lotr.common.network.LOTRPacketHandler; +import lotr.common.network.LOTRPacketWeaponFX; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; + +public class SarumanFireball extends LOTREntityGandalfFireball { + public SarumanFireball(World world) { + super(world); + } + + public SarumanFireball(World world, EntityLivingBase entityliving) { + super(world, entityliving); + } + + public SarumanFireball(World world, double d, double d1, double d2) { + super(world, d, d1, d2); + } + + protected void onImpact(MovingObjectPosition m) { + if (!((Entity)this).worldObj.isRemote) + if (m.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + explode((Entity)null); + } else if (m.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY) { + explode(m.entityHit); + } + } + + private void explode(Entity target) { + if (((Entity)this).worldObj.isRemote) + return; + ((Entity)this).worldObj.playSoundAtEntity((Entity)this, "lotr:item.gandalfFireball", 4.0F, (rand.nextFloat() - rand.nextFloat()) * 0.2F + 1.0F); + + List entities = ((Entity)this).worldObj.getEntitiesWithinAABB(EntityLiving.class, ((Entity)this).boundingBox.expand(6.0D, 6.0D, 6.0D)); + + if (!entities.isEmpty()) + for (int i = 0; i < entities.size(); i++) { + Entity entity = entities.get(i); + if (entity instanceof EntityLiving && !(entity instanceof EntityPlayer) && !(entity instanceof LOTREntityHorse && ((LOTREntityHorse)entity).getBelongsToNPC() == true)) { + targetRandomEntity((EntityLiving)entity); + } + } + setDead(); + } + + public void targetRandomEntity(EntityLiving npc) { + LOTRFaction faction = null; + if (npc instanceof LOTREntityNPC) { + LOTREntityNPC lotrNpc = (LOTREntityNPC) npc; + faction = lotrNpc.getFaction(); + } + + // Define the search area based on the npc's location + IAttributeInstance followRangeAttribute = npc.getEntityAttribute(SharedMonsterAttributes.followRange); + double range = followRangeAttribute != null ? followRangeAttribute.getAttributeValue() : 12.0D; // Default to 12 if attribute is not found + + AxisAlignedBB searchArea = npc.boundingBox.expand(range, 4.0D, range); + + // Filter potential targets to not include hiring player or NPCs from same faction + List allTargets = npc.worldObj.getEntitiesWithinAABB(EntityLiving.class, searchArea); + List validTargets = new ArrayList<>(); + + for (EntityLiving potentialTarget : allTargets) { + Entity entity = (Entity)potentialTarget; // Because for some reason I can't directly check if EntityLiving is instance of EntityPlayer + if (entity != npc && + !(entity instanceof EntityPlayer) && + !(entity instanceof LOTREntityNPC && faction != null && ((LOTREntityNPC)entity).getFaction() == faction) && + !(entity instanceof LOTREntityHorse && ((LOTREntityHorse)entity).getBelongsToNPC() == true)) { + validTargets.add(potentialTarget); + } + } + + // Randomly select a new target from the filtered list + if (!validTargets.isEmpty()) { + EntityLiving newTarget = validTargets.get(npc.getRNG().nextInt(validTargets.size())); + npc.setAttackTarget(newTarget); // Set the new attack target + } + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/SarumanWhiteFireball.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/SarumanWhiteFireball.java new file mode 100644 index 0000000..f1882f2 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/SarumanWhiteFireball.java @@ -0,0 +1,92 @@ +package com.zivilon.cinder_loe.entity; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; + +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.animal.LOTREntityHorse; +import lotr.common.entity.projectile.LOTREntityGandalfFireball; +import lotr.common.fac.LOTRFaction; +import lotr.common.network.LOTRPacketHandler; +import lotr.common.network.LOTRPacketWeaponFX; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; + +public class SarumanWhiteFireball extends LOTREntityGandalfFireball { + public SarumanWhiteFireball(World world) { + super(world); + } + + public SarumanWhiteFireball(World world, EntityLivingBase entityliving) { + super(world, entityliving); + } + + public SarumanWhiteFireball(World world, double d, double d1, double d2) { + super(world, d, d1, d2); + } + + protected void onImpact(MovingObjectPosition m) { + if (!this.worldObj.isRemote) + if (m.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + explode((Entity)null); + } else if (m.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY) { + Entity entity = m.entityHit; + if (isEntityVulnerable(entity)) + explode(entity); + } + } + + private void explode(Entity target) { + if (this.worldObj.isRemote) + return; + this.worldObj.playSoundAtEntity((Entity)this, "lotr:item.gandalfFireball", 4.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + LOTRPacketWeaponFX packet = new LOTRPacketWeaponFX(LOTRPacketWeaponFX.Type.MACE_SAURON, (Entity)this); + LOTRPacketHandler.networkWrapper.sendToAllAround((IMessage)packet, LOTRPacketHandler.nearEntity((Entity)this, 64.0D)); + if (target != null && isEntityVulnerable(target)) + target.attackEntityFrom(DamageSource.causeMobDamage(getThrower()), 10.0F); + List entities = this.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, this.boundingBox.expand(6.0D, 6.0D, 6.0D)); + if (!entities.isEmpty()) + for (int i = 0; i < entities.size(); i++) { + EntityLivingBase entity = entities.get(i); + if (entity != target && isEntityVulnerable((Entity)entity)) { + float damage = 10.0F - getDistanceToEntity((Entity)entity) * 0.5F; + if (damage > 0.0F) + entity.attackEntityFrom(DamageSource.causeMobDamage(getThrower()), damage); + } + } + setDead(); + } + + private boolean isEntityVulnerable(Entity entity) { + if (entity == getThrower()) + return false; + if (!(entity instanceof EntityLivingBase)) + return false; + if (entity instanceof EntityPlayer) + return (LOTRLevelData.getData((EntityPlayer)entity).getAlignment(LOTRFaction.HIGH_ELF) < 0.0F); + return !LOTRFaction.HIGH_ELF.isGoodRelation(LOTRMod.getNPCFaction(entity)); + } + + protected float func_70182_d() { + return 1.5F; + } + + protected float getGravityVelocity() { + return 0.0F; + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/SpeechBankModifier.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/SpeechBankModifier.java new file mode 100644 index 0000000..8fc5cc5 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/SpeechBankModifier.java @@ -0,0 +1,111 @@ +package com.zivilon.cinder_loe.entity; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +import com.zivilon.cinder_loe.CinderLoE; + +import cpw.mods.fml.common.ModContainer; + +public class SpeechBankModifier { + + public static List loadSpeechLines(String speechBankName) { + String speechPath = "assets/cinder_loe/speech/" + speechBankName + ".txt"; + List lines = new ArrayList<>(); + ZipFile zip = null; + + try { + ModContainer modContainer = CinderLoE.getModContainer(); + zip = new ZipFile(modContainer.getSource()); + + Enumeration entries = zip.entries(); + while (entries.hasMoreElements()) { + ZipEntry entry = entries.nextElement(); + if (entry.getName() + .startsWith(speechPath) + && entry.getName() + .endsWith(".txt")) { + InputStream inputStream = zip.getInputStream(entry); + BufferedReader reader = new BufferedReader( + new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + + String line; + while ((line = reader.readLine()) != null) { + lines.add(line); + } + reader.close(); + } + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (zip != null) { + try { + zip.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + return lines; + } + + public static Map> loadSpeechBanks() { + Map> speechBanks = new HashMap<>(); + speechBanks.put("renegade/man/hostile", loadSpeechLines("renegade/man/hostile")); + speechBanks.put("renegade/drunkard/neutral", loadSpeechLines("renegade/drunkard/neutral")); + speechBanks.put("limwaith/moredain/friendly", loadSpeechLines("limwaith/moredain/friendly")); + speechBanks.put("limwaith/moredain/hired", loadSpeechLines("limwaith/moredain/hired")); + speechBanks.put("limwaith/moredain/hostile", loadSpeechLines("limwaith/moredain/hostile")); + speechBanks.put("limwaith/chieftain/friendly", loadSpeechLines("limwaith/chieftain/friendly")); + speechBanks.put("limwaith/chieftain/neutral", loadSpeechLines("limwaith/chieftain/neutral")); + speechBanks.put("arnorSoldier/captain/friendly", loadSpeechLines("arnorSoldier/captain/friendly")); + speechBanks.put("arnorSoldier/captain/neutral", loadSpeechLines("arnorSoldier/captain/neutral")); + speechBanks.put("arnorSoldier/soldier/friendly", loadSpeechLines("arnorSoldier/soldier/friendly")); + speechBanks.put("arnorSoldier/soldier/hired", loadSpeechLines("arnorSoldier/soldier/hired")); + speechBanks.put("arnorSoldier/soldier/hostile", loadSpeechLines("arnorSoldier/soldier/hostile")); + speechBanks.put("corruptSpeak/all/neutral", loadSpeechLines("corruptSpeak/all/neutral")); + speechBanks.put("corruptSpeak/all/hostile", loadSpeechLines("corruptSpeak/all/hostile")); + speechBanks.put("corruptSpeak/all/skeleton", loadSpeechLines("corruptSpeak/all/skeleton")); + return speechBanks; + } + + + public static void insertSpeechBanks() { + Map> speechBanks = loadSpeechBanks(); + + try { + Class lotrSpeechClass = Class.forName("lotr.common.entity.npc.LOTRSpeech"); + Class speechBankClass = Class.forName("lotr.common.entity.npc.LOTRSpeech$SpeechBank"); + + Constructor speechBankConstructor = speechBankClass.getDeclaredConstructor(String.class, boolean.class, List.class); + speechBankConstructor.setAccessible(true); + + Field allSpeechBanksField = lotrSpeechClass.getDeclaredField("allSpeechBanks"); + allSpeechBanksField.setAccessible(true); + + Map allSpeechBanks = (Map) allSpeechBanksField.get(null); + + for (Map.Entry> entry : speechBanks.entrySet()) { + Object speechBank = speechBankConstructor.newInstance(entry.getKey(), true, entry.getValue()); + allSpeechBanks.put(entry.getKey(), speechBank); + } + + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/UtumnoSlaveTrader.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/UtumnoSlaveTrader.java new file mode 100644 index 0000000..0523831 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/UtumnoSlaveTrader.java @@ -0,0 +1,164 @@ +package com.zivilon.cinder_loe.entity; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.mixins.MixinLOTRTradeEntries; + +import lotr.common.entity.ai.LOTREntityAIEat; +import lotr.common.entity.npc.LOTREntityMan; +import lotr.common.entity.npc.LOTRTradeEntries; +import lotr.common.entity.npc.LOTRTradeEntries.TradeType; +import lotr.common.entity.npc.LOTRTradeable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.fac.LOTRFaction; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.item.ItemStack; +import lotr.common.entity.npc.LOTRTradeEntry; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.init.Items; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAIPanic; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import lotr.common.entity.ai.LOTREntityAIEat; +import lotr.common.entity.ai.LOTREntityAIDrink; +import net.minecraft.entity.ai.EntityAIWatchClosest2; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityAILookIdle; +import lotr.common.entity.npc.LOTREntityNPC; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.util.StatCollector; +import net.minecraft.nbt.NBTTagCompound; + + +public class UtumnoSlaveTrader extends LOTREntityMan implements LOTRTradeable.Smith { + public static LOTRTradeEntries UTUMNO_SLAVE_BUY; + public static LOTRTradeEntries UTUMNO_SLAVE_SELL; + + public boolean bound = true; + + public UtumnoSlaveTrader(World world) { + super(world); + setSize(0.6F, 1.8F); + ((EntityLiving)this).tasks.addTask(1, (EntityAIBase)new EntityAIPanic(this, 1.6D)); + ((EntityLiving)this).tasks.addTask(2, (EntityAIBase)new EntityAIWander(this, 1.0D)); + ((EntityLiving)this).tasks.addTask(3, (EntityAIBase)new EntityAIAvoidEntity(this, EntityPlayer.class, 12.0F, 1.5D, 1.8D)); + ((EntityLiving)this).tasks.addTask(4, (EntityAIBase)new LOTREntityAIEat(this, LOTRFoods.NURN_SLAVE, 8000)); + ((EntityLiving)this).tasks.addTask(4, (EntityAIBase)new LOTREntityAIDrink(this, LOTRFoods.NURN_SLAVE_DRINK, 8000)); + ((EntityLiving)this).tasks.addTask(5, (EntityAIBase)new EntityAIWatchClosest2((EntityLiving)this, EntityPlayer.class, 10.0F, 0.1F)); + ((EntityLiving)this).tasks.addTask(5, (EntityAIBase)new EntityAIWatchClosest2((EntityLiving)this, LOTREntityNPC.class, 5.0F, 0.05F)); + ((EntityLiving)this).tasks.addTask(6, (EntityAIBase)new EntityAIWatchClosest((EntityLiving)this, EntityLiving.class, 8.0F, 0.02F)); + ((EntityLiving)this).tasks.addTask(7, (EntityAIBase)new EntityAILookIdle((EntityLiving)this)); + addTargetTasks(false); + } + + public LOTRFaction getFaction() { + if (bound) return LOTRFaction.UTUMNO; + return LOTRFaction.UNALIGNED; + } + + @Override + public String getNPCFormattedName(String npcName, String entityName) { + if (bound) entityName = "entity.cinder_loe.UtumnoSlaveTrader.bound.name"; + return StatCollector.translateToLocal(entityName); + } + + public boolean interact(EntityPlayer entityplayer) { + boolean flag = super.interact(entityplayer); + if (bound) { + bound = false; + return false; + } + return flag; + } + + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0D); + getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D); + } + + public boolean canTradeWith(EntityPlayer entityplayer) { + return !bound; + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.pouch)); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + return data; + } + + public LOTRTradeEntries getBuyPool() { + return UTUMNO_SLAVE_BUY; + } + + public LOTRTradeEntries getSellPool() { + return UTUMNO_SLAVE_SELL; + } + + // Replace with correct speechbanks + public String getSpeechBank(EntityPlayer entityplayer) { + if (isFriendlyAndAligned(entityplayer)) { + if (canTradeWith(entityplayer)) + return "utumno/slaveTrader/friendly"; + return "utumno/slaveTrader/neutral"; + } + return "utumno/slaveTrader/hostile"; + } + + static { + UTUMNO_SLAVE_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry[] { + new LOTRTradeEntry(new ItemStack(Items.arrow), 1), + new LOTRTradeEntry(new ItemStack(Items.iron_ingot), 6), + new LOTRTradeEntry(new ItemStack(LOTRMod.orcSteel), 6), + new LOTRTradeEntry(new ItemStack(LOTRMod.mugOrcDraught, 1, 4), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.modTemplate), 20) + } + ); + ((MixinLOTRTradeEntries)UTUMNO_SLAVE_BUY).vessels(LOTRFoods.NURN_SLAVE_DRINK); + + UTUMNO_SLAVE_SELL = new LOTRTradeEntries(TradeType.SELL, + new LOTRTradeEntry[] { + new LOTRTradeEntry(new ItemStack(Items.bread), 3), + new LOTRTradeEntry(new ItemStack(Items.iron_ingot), 5), + new LOTRTradeEntry(new ItemStack(Items.gold_ingot), 17), + new LOTRTradeEntry(new ItemStack(Items.stick, 4), 1), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronze), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.orcSteel), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.amber), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.ruby), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.amethyst), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.mugWater), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.wargBone), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.orcBone), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.trollBone), 4) + } + ); + } + + @Override + public void onPlayerTrade(EntityPlayer entityplayer, LOTRTradeEntries.TradeType type, ItemStack itemstack) { + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } + + public void writeEntityToNBT(NBTTagCompound nbt) { + super.writeEntityToNBT(nbt); + nbt.setByte("Bound", (byte)(bound ? 1 : 0)); + } + + + public void readEntityFromNBT(NBTTagCompound nbt) { + super.readEntityFromNBT(nbt); + bound = nbt.getByte("Bound") != 0; + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/Wraith.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/Wraith.java new file mode 100644 index 0000000..a391618 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/Wraith.java @@ -0,0 +1,178 @@ +package com.zivilon.cinder_loe.entity; + +import java.util.UUID; + +import lotr.common.LOTRAchievement; +import lotr.common.enchant.LOTREnchantment; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.ai.LOTREntityAIDrink; +import lotr.common.entity.ai.LOTREntityAIEat; +import lotr.common.entity.ai.LOTREntityAIFollowHiringPlayer; +import lotr.common.entity.ai.LOTREntityAIHiredRemainStill; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.projectile.LOTREntityMarshWraithBall; +import lotr.common.fac.LOTRFaction; +import lotr.common.world.structure.LOTRChestContents; + + + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +import com.zivilon.cinder_loe.CinderLoE; + +public class Wraith extends LOTREntityNPC { + + public Wraith(World world) { + super(world); + setSize(0.8F, 2.5F); + ((EntityLiving) this).tasks.addTask(1, (EntityAIBase) new LOTREntityAIHiredRemainStill(this)); + ((EntityLiving) this).tasks.addTask(2, (EntityAIBase) new LOTREntityAIAttackOnCollide(this, 1.3D, false)); + ((EntityLiving) this).tasks.addTask(3, (EntityAIBase) new LOTREntityAIFollowHiringPlayer(this)); + ((EntityLiving) this).tasks.addTask(5, (EntityAIBase) new EntityAIWander(this, 1.0D)); + ((EntityLiving) this).tasks.addTask(9, (EntityAIBase) new EntityAILookIdle((EntityLiving) this)); + addTargetTasks(true); + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(17, Integer.valueOf(0)); + } + + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(50.0D); + getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D); + } + + public int getDeathFadeTime() { + return this.dataWatcher.getWatchableObjectInt(17); + } + + public void setDeathFadeTime(int i) { + this.dataWatcher.updateObject(17, Integer.valueOf(i)); + } + + public LOTRFaction getFaction() { + return LOTRFaction.HOSTILE; + } + + public void writeEntityToNBT(NBTTagCompound nbt) { + super.writeEntityToNBT(nbt); + nbt.setInteger("DeathFadeTime", getDeathFadeTime()); + } + + public void readEntityFromNBT(NBTTagCompound nbt) { + super.readEntityFromNBT(nbt); + setDeathFadeTime(nbt.getInteger("DeathFadeTime")); + } + + @Override + public void moveEntityWithHeading(float strafe, float forward) { + // First, call the super method to preserve normal movement behavior + super.moveEntityWithHeading(strafe, forward); + + // Check for water at the entity's feet + int x = MathHelper.floor_double(this.posX); + int y = MathHelper.floor_double(this.posY); + int z = MathHelper.floor_double(this.posZ); + + boolean isWater = this.worldObj.getBlock(x, y, z).getMaterial() == Material.water || + this.worldObj.getBlock(x, y - 1, z).getMaterial() == Material.water; // Check below the entity too + + if (isWater) { + this.onGround = true; // Treat water as solid ground + this.motionY = 0.0; // Stop falling/sinking + this.setPosition(this.posX, y + 1, this.posZ); // Adjust position to stay on top of the water + } + } + + + public void setInWeb() {} + + public void onLivingUpdate() { + super.onLivingUpdate(); + if (rand.nextBoolean()) + ((Entity)this).worldObj.spawnParticle("smoke", ((Entity)this).posX + (rand.nextDouble() - 0.5D) * ((Entity)this).width, ((Entity)this).posY + rand.nextDouble() * ((Entity)this).height, ((Entity)this).posZ + (rand.nextDouble() - 0.5D) * ((Entity)this).width, 0.0D, 0.0D, 0.0D); + if (!((Entity)this).worldObj.isRemote) { + if (getDeathFadeTime() > 0) + setDeathFadeTime(getDeathFadeTime() - 1); + if (getDeathFadeTime() == 1) + setDead(); + } + } + + public boolean attackEntityFrom(DamageSource damagesource, float f) { + boolean vulnerable = false; + Entity entity = damagesource.getEntity(); + if (entity instanceof EntityLivingBase && entity == damagesource.getSourceOfDamage()) { + ItemStack itemstack = ((EntityLivingBase)entity).getHeldItem(); + if (itemstack != null && LOTREnchantmentHelper.hasEnchant(itemstack, LOTREnchantment.baneWraith)) + vulnerable = true; + } + if (vulnerable && getDeathFadeTime() == 0) { + boolean flag = super.attackEntityFrom(damagesource, f); + return flag; + } + return false; + } + + public void onDeath(DamageSource damagesource) { + super.onDeath(damagesource); + if (!((Entity)this).worldObj.isRemote) + setDeathFadeTime(30); + } + + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + int flesh = 1 + rand.nextInt(3) + rand.nextInt(i + 1); + for (int l = 0; l < flesh; l++) + dropItem(Items.rotten_flesh, 1); + dropChestContents(LOTRChestContents.MARSH_REMAINS, 1, 3 + i); + } + + public EnumCreatureAttribute getCreatureAttribute() { + return EnumCreatureAttribute.UNDEAD; + } + + protected String getHurtSound() { + return "lotr:wight.hurt"; + } + + protected String getDeathSound() { + return "lotr:wight.death"; + } + + public boolean handleWaterMovement() { + return false; + } + + protected void func_145780_a(int i, int j, int k, Block block) {} + + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) { + // Do nothing + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 3); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/ai/LoEPreciseAttackOnCollide.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/ai/LoEPreciseAttackOnCollide.java new file mode 100644 index 0000000..aa9265d --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/ai/LoEPreciseAttackOnCollide.java @@ -0,0 +1,98 @@ +package com.zivilon.cinder_loe.entity.ai; + +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.projectile.LOTREntitySpear; +import lotr.common.item.LOTRItemSpear; +import lotr.common.item.LOTRWeaponStats; + +import net.minecraft.item.ItemStack; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EntityLiving; +import net.minecraft.pathfinding.PathEntity; + +import java.util.List; + +public class LoEPreciseAttackOnCollide extends LOTREntityAIAttackOnCollide { + public double attack_range; + public int attack_cooldown; + + public LoEPreciseAttackOnCollide(EntityCreature entity, double speed, double reach, int delay, boolean flag) { + super(entity, speed, flag); + attack_range = reach; + attack_cooldown = delay; + } + + @Override + public void updateTask() { + updateLookAndPathing(); + if (this.attackTick > 0) + this.attackTick--; + ItemStack weapon = this.theOwner.getHeldItem(); + + // Throw a throwing spear if available + if (weapon != null && weapon.getItem() instanceof LOTRItemSpear && this.attackTick <= 0 && this.theOwner instanceof LOTREntityNPC) { + LOTREntityNPC theNPC = (LOTREntityNPC)this.theOwner; + ItemStack spearBackup = theNPC.npcItemsInv.getSpearBackup(); + + if (spearBackup != null) { + LOTRItemSpear spearItem = (LOTRItemSpear)weapon.getItem(); + double d = this.theOwner.getDistanceToEntity((Entity)this.attackTarget); + double range = this.theOwner.getNavigator().getPathSearchRange(); + if (d > 5.0D && d < range * 0.75D) { + LOTREntitySpear spear = new LOTREntitySpear(this.worldObj, (EntityLivingBase)this.theOwner, this.attackTarget, weapon.copy(), 0.75F + (float)d * 0.025F, 0.5F); + this.worldObj.playSoundAtEntity((Entity)this.theOwner, "random.bow", 1.0F, 1.0F / (this.worldObj.rand.nextFloat() * 0.4F + 1.2F) + 0.25F); + this.worldObj.spawnEntityInWorld((Entity)spear); + this.attackTick = 30 + this.theOwner.getRNG().nextInt(20); + if (ItemStack.areItemStacksEqual(theNPC.npcItemsInv.getIdleItem(), theNPC.npcItemsInv.getMeleeWeapon())) + theNPC.npcItemsInv.setIdleItem(spearBackup); + theNPC.npcItemsInv.setMeleeWeapon(spearBackup); + theNPC.npcItemsInv.setSpearBackup(null); + return; + } + } + } + float weaponReach = 1.0F; + if (this.theOwner.ridingEntity != null) + weaponReach = LOTREntityNPC.MOUNT_RANGE_BONUS; + if (weapon == null) { + weaponReach = (float)attack_range; + } else { + weaponReach *= LOTRWeaponStats.getMeleeReachFactor(weapon); + } + + float meleeRange = (float)this.theOwner.boundingBox.getAverageEdgeLength() + weaponReach; + double distanceSq = this.theOwner.getDistanceSqToEntity((Entity)this.attackTarget); + + if (distanceSq <= (meleeRange * meleeRange) || this.theOwner.boundingBox.intersectsWith(this.attackTarget.boundingBox)) { + if (this.attackTick <= 0) { + this.attackTick = (weapon == null) ? attack_cooldown : LOTRWeaponStats.getAttackTimeMob(weapon); // Apply cooldown here + this.theOwner.attackEntityAsMob((Entity)this.attackTarget); + this.theOwner.swingItem(); + } + } + } + + @Override + protected void updateLookAndPathing() { + this.theOwner.getLookHelper().setLookPositionWithEntity((Entity)this.attackTarget, 30.0F, 30.0F); + if (this.theOwner.riddenByEntity != null && this.theOwner.riddenByEntity instanceof EntityLiving) { + ((EntityLiving)this.theOwner.riddenByEntity).rotationYaw = this.theOwner.rotationYaw; + ((EntityLiving)this.theOwner.riddenByEntity).rotationYawHead = this.theOwner.rotationYawHead; + } + if ((this.sightNotRequired || this.theOwner.getEntitySenses().canSee((Entity)this.attackTarget)) && --this.pathCheckTimer <= 0) { + this.pathCheckTimer = 2; + PathEntity path = getPathEntity(); + if (path != null) + this.theOwner.getNavigator().setPath(path, this.moveSpeed); + } + } + + public PathEntity getPathEntity() { + if (this.theOwner.ridingEntity != null) + return this.worldObj.getPathEntityToEntity((Entity)this.theOwner, (Entity)this.attackTarget, this.theOwner.getNavigator().getPathSearchRange(), true, this.theOwner.getNavigator().getCanBreakDoors(), this.theOwner.getNavigator().getAvoidsWater(), false); + return this.theOwner.getNavigator().getPathToEntityLiving((Entity)this.attackTarget); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptDwarf.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptDwarf.java new file mode 100644 index 0000000..23547e9 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptDwarf.java @@ -0,0 +1,63 @@ +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) { + return null; + } + @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 "corruptSpeak/all/neutral"; + } + return "corruptSpeak/all/hostile"; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptElf.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptElf.java new file mode 100644 index 0000000..765578f --- /dev/null +++ b/src (1)/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 "corruptSpeak/all/neutral"; + } + return "corruptSpeak/all/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 (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptEnt.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptEnt.java new file mode 100644 index 0000000..3773fbf --- /dev/null +++ b/src (1)/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 (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptHobbit.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptHobbit.java new file mode 100644 index 0000000..36021e6 --- /dev/null +++ b/src (1)/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 "corruptSpeak/all/neutral"; + } + return "corruptSpeak/all/hostile"; + } + @Override + protected void dropFewItems(boolean flag, int i) { + } + + protected void dropHobbitItems(boolean flag, int i) { + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptMan.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptMan.java new file mode 100644 index 0000000..0a46069 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptMan.java @@ -0,0 +1,106 @@ +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 + 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 "corruptSpeak/all/neutral"; + } + return "corruptSpeak/all/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 (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptOrc.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptOrc.java new file mode 100644 index 0000000..6c973fb --- /dev/null +++ b/src (1)/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 "corruptSpeak/all/neutral"; + } + return "corruptSpeak/all/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 (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptSkeleton.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptSkeleton.java new file mode 100644 index 0000000..94777c3 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptSkeleton.java @@ -0,0 +1,87 @@ +package com.zivilon.cinder_loe.entity.corrupt; + +import com.zivilon.cinder_loe.CinderLoE_Config; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityGondorMan; +import lotr.common.entity.npc.LOTRNames; +import lotr.common.fac.LOTRFaction; +import lotr.common.quest.LOTRMiniQuest; +import lotr.common.quest.LOTRMiniQuestFactory; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class CorruptSkeleton extends CorruptMan { + + public CorruptSkeleton(World world) { + super(world); + this.addTargetTasks(true); + } + @Override + public void setupNPCName() { + this.familyInfo.setName(LOTRNames.getGondorName(this.rand, this.familyInfo.isMale())); + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(70.0); + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + return null; + } + + @Override + public LOTRFaction getFaction() { + return LOTRFaction.UTUMNO; + } + + @Override + public String getNPCName() { + return this.familyInfo.getName(); + } + @Override + protected float getSoundPitch() { + return super.getSoundPitch() * 0.65f; + } + @Override + public String getHurtSound() { + return "mob.skeleton.hurt"; + } + @Override + public String getDeathSound() { + return "mob.skeleton.death"; + } + + public String getLivingSound() { + return "mob.skeleton.say"; + } + + @Override + public String getAttackSound() { + return "mob.skeleton.say"; + } + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + return "corruptSpeak/all/skeleton"; + } + return "corruptSpeak/all/skeleton"; + } + @Override + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + int bones = this.rand.nextInt(3) + this.rand.nextInt(i + 1); + for (int l = 0; l < bones; ++l) { + this.dropItem(Items.bone, 1); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptSkeletonArcher.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptSkeletonArcher.java new file mode 100644 index 0000000..58ef61e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/corrupt/CorruptSkeletonArcher.java @@ -0,0 +1,81 @@ +package com.zivilon.cinder_loe.entity.corrupt; + +import com.zivilon.cinder_loe.CinderLoE_Config; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.ai.LOTREntityAIRangedAttack; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.npc.LOTRNames; +import lotr.common.fac.LOTRFaction; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class CorruptSkeletonArcher extends CorruptSkeleton { + + public CorruptSkeletonArcher(World world) { + super(world); + ((EntityLiving)this).tasks.addTask(0, (EntityAIBase)new LOTREntityAIRangedAttack(this, 1.4, 30, 50, 16.0f)); + } + + + @Override + public void setupNPCName() { + this.familyInfo.setName(LOTRNames.getGondorName(this.rand, this.familyInfo.isMale())); + } + + public void attackEntityWithRangedAttack(EntityLivingBase target, float f) { + npcArrowAttack(target, f); + } + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setRangedWeapon(new ItemStack(Items.bow)); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getRangedWeapon()); + return data; + } + + @Override + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + this.dropNPCArrows(i); + } + + @Override + protected void onAttackModeChange(LOTREntityNPC.AttackMode mode, boolean mounted) { + if (mode == LOTREntityNPC.AttackMode.IDLE) { + this.setCurrentItemOrArmor(0, this.npcItemsInv.getIdleItem()); + } else { + this.setCurrentItemOrArmor(0, this.npcItemsInv.getRangedWeapon()); + } + } + + + @Override + public LOTRFaction getFaction() { + return LOTRFaction.UTUMNO; + } + + @Override + public String getNPCName() { + return this.familyInfo.getName(); + } + @Override + protected float getSoundPitch() { + return super.getSoundPitch() * 0.65f; + } + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + return "corruptSpeak/all/skeleton"; + } + return "corruptSpeak/all/skeleton"; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/HobbitBannerBearer.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/HobbitBannerBearer.java new file mode 100644 index 0000000..bfcdd91 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/HobbitBannerBearer.java @@ -0,0 +1,29 @@ +package com.zivilon.cinder_loe.entity.npc; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.entity.npc.LOTRBannerBearer; +import lotr.common.entity.npc.LOTREntityHobbitBounder; +import lotr.common.item.LOTRItemBanner; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class HobbitBannerBearer extends LOTREntityHobbitBounder implements LOTRBannerBearer { + public HobbitBannerBearer(World world) { + super(world); + } + @Override + public LOTRItemBanner.BannerType getBannerType() { + return LOTRItemBanner.BannerType.HOBBIT; + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 16); + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfArbalest.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfArbalest.java new file mode 100644 index 0000000..055b0ea --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfArbalest.java @@ -0,0 +1,47 @@ +package com.zivilon.cinder_loe.entity.npc.dwarf; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.entity.npc.LOTREntityDwarfAxeThrower; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIRangedAttack; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.init.Items; +import net.minecraft.util.MovingObjectPosition; + + +public class RedDwarfArbalest extends LOTREntityDwarfAxeThrower { + public RedDwarfArbalest(World world) { + super(world); + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = rand.nextInt(5); + this.npcItemsInv.setRangedWeapon(new ItemStack(CinderLoE.crossbowRedDwarf)); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getRangedWeapon()); + setCurrentItemOrArmor(1, new ItemStack(CinderLoE.bootsRedDwarf)); + setCurrentItemOrArmor(2, new ItemStack(CinderLoE.legsRedDwarf)); + setCurrentItemOrArmor(3, new ItemStack(CinderLoE.bodyRedDwarf)); + setCurrentItemOrArmor(4, null); + if (rand.nextInt(10) != 0) + setCurrentItemOrArmor(4, new ItemStack(CinderLoE.helmetRedDwarf)); + return data; + } + public void attackEntityWithRangedAttack(EntityLivingBase target, float f) { + npcCrossbowAttack(target, f); + } + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + dropNPCCrossbowBolts(i); + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 11); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfBannerBearer.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfBannerBearer.java new file mode 100644 index 0000000..b04e6d1 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfBannerBearer.java @@ -0,0 +1,30 @@ +package com.zivilon.cinder_loe.entity.npc.dwarf; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.item.LOTRItemBanner; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import lotr.common.entity.npc.LOTRBannerBearer; +import net.minecraft.util.MovingObjectPosition; + + +public class RedDwarfBannerBearer extends RedDwarfWarrior implements LOTRBannerBearer { + public RedDwarfBannerBearer(World world) { + super(world); + } + + public LOTRItemBanner.BannerType getBannerType() { + return LOTRItemBanner.BannerType.forID(42); + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 12); + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfCommander.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfCommander.java new file mode 100644 index 0000000..2c7fdb9 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfCommander.java @@ -0,0 +1,57 @@ +package com.zivilon.cinder_loe.entity.npc.dwarf; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRMod; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import lotr.common.entity.npc.LOTREntityDwarfCommander; +import lotr.common.entity.npc.LOTRUnitTradeable; +import lotr.common.entity.npc.LOTRUnitTradeEntries; +import net.minecraft.util.MovingObjectPosition; + + +public class RedDwarfCommander extends LOTREntityDwarfCommander implements LOTRUnitTradeable { + public RedDwarfCommander(World world) { + super(world); + addTargetTasks(false); + } + + public LOTRUnitTradeEntries getUnits() { + return CinderLoE.RED_DWARF_COMMANDER; + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = rand.nextInt(5); + if (i == 0) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.swordRedDwarf)); + } else if (i == 1 || i == 2) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.battleaxeRedDwarf)); + } else if (i == 3 || i == 4) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.spearRedDwarf)); + } + if (rand.nextInt(6) == 0) { + this.npcItemsInv.setSpearBackup(this.npcItemsInv.getMeleeWeapon()); + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.spearRedDwarf)); + } + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + setCurrentItemOrArmor(1, new ItemStack(CinderLoE.bootsRedDwarf)); + setCurrentItemOrArmor(2, new ItemStack(CinderLoE.legsRedDwarf)); + setCurrentItemOrArmor(3, new ItemStack(CinderLoE.bodyRedDwarf)); + setCurrentItemOrArmor(4, null); + if (rand.nextInt(10) != 0) + setCurrentItemOrArmor(4, new ItemStack(CinderLoE.helmetRedDwarf)); + return data; + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 13); + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfWarrior.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfWarrior.java new file mode 100644 index 0000000..93adfa8 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/dwarf/RedDwarfWarrior.java @@ -0,0 +1,57 @@ +package com.zivilon.cinder_loe.entity.npc.dwarf; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.entity.npc.LOTREntityDwarfWarrior; +import lotr.common.LOTRMod; +import lotr.common.LOTRShields; +import net.minecraft.entity.Entity; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraft.item.Item; + + +public class RedDwarfWarrior extends LOTREntityDwarfWarrior { + public RedDwarfWarrior(World world) { + super(world); + + this.npcShield = LOTRShields.ALIGNMENT_DWARF; + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = rand.nextInt(6); + if (i == 0) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.swordRedDwarf)); + } else if (i == 1 || i == 2) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.battleaxeRedDwarf)); + } else if (i == 3 || i == 4) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.pikeRedDwarf)); + } else if (i == 5) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.hammerRedDwarf)); + } + if (rand.nextInt(6) == 0) { + this.npcItemsInv.setSpearBackup(this.npcItemsInv.getMeleeWeapon()); + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.spearRedDwarf)); + } + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + setCurrentItemOrArmor(1, new ItemStack(CinderLoE.bootsRedDwarf)); + setCurrentItemOrArmor(2, new ItemStack(CinderLoE.legsRedDwarf)); + setCurrentItemOrArmor(3, new ItemStack(CinderLoE.bodyRedDwarf)); + setCurrentItemOrArmor(4, null); + if (rand.nextInt(10) != 0) + setCurrentItemOrArmor(4, new ItemStack(CinderLoE.helmetRedDwarf)); + return data; + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 10); + } + + @Override + protected Item getDwarfSteelDrop() { + return CinderLoE.redDwarfSteel; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/elf/Sirrandrai.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/elf/Sirrandrai.java new file mode 100644 index 0000000..467a10f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/elf/Sirrandrai.java @@ -0,0 +1,82 @@ +package com.zivilon.cinder_loe.entity.npc.elf; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRAchievement; +import lotr.common.LOTRMod; +import lotr.common.LOTRShields; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityHighElf; +import lotr.common.entity.npc.LOTREntityHighElfWarrior; +import lotr.common.entity.npc.LOTREntityMoredain; +import lotr.common.entity.npc.LOTRNPCMount; +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 Sirrandrai extends LOTREntityHighElfWarrior { + public Sirrandrai(World world) { + super(world); + this.tasks.addTask(2, this.meleeAttackAI); + this.spawnRidingHorse = this.rand.nextInt(4) == 0; + this.npcShield = LOTRShields.ALIGNMENT_HIGH_ELF; + } + @Override + protected EntityAIBase createElfMeleeAttackAI() { + return new LOTREntityAIAttackOnCollide(this, 1.5, false); + } + + @Override + protected EntityAIBase createElfRangedAttackAI() { + return this.createElfMeleeAttackAI(); + } + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(24.0); + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = this.rand.nextInt(2); + if (i == 0) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.polearmHighElven)); + if (this.rand.nextInt(5) == 0) { + this.npcItemsInv.setSpearBackup(this.npcItemsInv.getMeleeWeapon()); + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.spearHighElven)); + } + } else if (i == 1) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.spearHighElven)); + this.npcItemsInv.setSpearBackup(null); + } + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + this.npcItemsInv.setRangedWeapon(this.npcItemsInv.getMeleeWeapon()); + this.setCurrentItemOrArmor(1, new ItemStack(LOTRMod.bootsHighElven)); + this.setCurrentItemOrArmor(2, new ItemStack(LOTRMod.legsHighElven)); + this.setCurrentItemOrArmor(3, new ItemStack(LOTRMod.bodyHighElven)); + this.setCurrentItemOrArmor(4, new ItemStack(LOTRMod.helmetHighElven)); + return data; + } + + @Override + public float getAlignmentBonus() { + return 3.0f; + } + + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + if (this.hiredNPCInfo.getHiringPlayer() == entityplayer) { + return "highElf/elf/hired"; + } + return "highElf/warrior/friendly"; + } + return "highElf/warrior/hostile"; + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/Limwaith.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/Limwaith.java new file mode 100644 index 0000000..f9a0e1f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/Limwaith.java @@ -0,0 +1,76 @@ +package com.zivilon.cinder_loe.entity.npc.evil_human; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.entity.npc.LOTREntityMoredain; +import lotr.common.entity.npc.LOTRNPCMount; +import lotr.common.LOTRAchievement; +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.ai.LOTREntityAIDrink; +import lotr.common.entity.ai.LOTREntityAIEat; +import lotr.common.entity.ai.LOTREntityAIFollowHiringPlayer; +import lotr.common.entity.ai.LOTREntityAIHiredRemainStill; +import lotr.common.entity.animal.LOTREntityZebra; +import lotr.common.fac.LOTRFaction; +import lotr.common.quest.LOTRMiniQuest; +import lotr.common.quest.LOTRMiniQuestFactory; +import lotr.common.world.structure.LOTRChestContents; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIOpenDoor; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityAIWatchClosest2; +import net.minecraft.entity.player.EntityPlayer; +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; + + +public class Limwaith extends LOTREntityMoredain { + public Limwaith(World world) { + super(world); + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.daggerLimwaith)); + this.npcItemsInv.setIdleItem(null); + return data; + } + + protected LOTRAchievement getKillAchievement() { + return null; + } + + public LOTRNPCMount createMountToRide() { + return null; +// return (LOTRNPCMount)new LimwaithCrocodile(((Entity)this).worldObj); + } + + public String getSpeechBank(EntityPlayer entityplayer) { + if (isFriendlyAndAligned(entityplayer)) { + if (this.hiredNPCInfo.getHiringPlayer() == entityplayer) + return "limwaith/moredain/hired"; + return "limwaith/moredain/friendly"; + } + return "limwaith/moredain/hostile"; + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 4); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithBannerBearer.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithBannerBearer.java new file mode 100644 index 0000000..6b3a364 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithBannerBearer.java @@ -0,0 +1,29 @@ +package com.zivilon.cinder_loe.entity.npc.evil_human; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.entity.npc.LOTRBannerBearer; +import lotr.common.item.LOTRItemBanner; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.item.ItemStack; + + +public class LimwaithBannerBearer extends LimwaithWarrior implements LOTRBannerBearer { + public LimwaithBannerBearer(World world) { + super(world); + } + + public LOTRItemBanner.BannerType getBannerType() { + return LOTRItemBanner.BannerType.forID(43); + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 8); + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithBlowgunner.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithBlowgunner.java new file mode 100644 index 0000000..aa3f99e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithBlowgunner.java @@ -0,0 +1,67 @@ +package com.zivilon.cinder_loe.entity.npc.evil_human; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIRangedAttack; +import lotr.common.entity.projectile.LOTREntityDart; +import lotr.common.item.LOTRItemBlowgun; +import lotr.common.item.LOTRItemDart; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + + +public class LimwaithBlowgunner extends Limwaith { + public LimwaithBlowgunner(World world) { + super(world); + } + + public EntityAIBase createHaradrimAttackAI() { + return (EntityAIBase)new LOTREntityAIRangedAttack(this, 1.5D, 10, 30, 16.0F); + } + + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(24.0D); + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.blowgunLimwaith)); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + setCurrentItemOrArmor(1, new ItemStack(CinderLoE.bootsLimwaith)); + setCurrentItemOrArmor(2, new ItemStack(CinderLoE.legsLimwaith)); + setCurrentItemOrArmor(3, new ItemStack(CinderLoE.bodyLimwaith)); + return data; + } + + public void attackEntityWithRangedAttack(EntityLivingBase target, float f) { + ItemStack heldItem = getHeldItem(); + float str = 1.0F + getDistanceToEntity((Entity)target) / 16.0F * 0.015F; + str *= LOTRItemBlowgun.getBlowgunLaunchSpeedFactor(heldItem); + LOTREntityDart dart = ((LOTRItemDart)LOTRMod.tauredainDart).createDart(((Entity)this).worldObj, (EntityLivingBase)this, target, new ItemStack(LOTRMod.tauredainDart), str, 1.0F); + if (heldItem != null) + LOTRItemBlowgun.applyBlowgunModifiers(dart, heldItem); + playSound("lotr:item.dart", 1.0F, 1.0F / (rand.nextFloat() * 0.4F + 1.2F) + 0.5F); + ((Entity)this).worldObj.spawnEntityInWorld((Entity)dart); + } + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + dropNPCAmmo(LOTRMod.tauredainDart, i); + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 7); + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithBoneWarrior.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithBoneWarrior.java new file mode 100644 index 0000000..4b83e65 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithBoneWarrior.java @@ -0,0 +1,47 @@ +package com.zivilon.cinder_loe.entity.npc.evil_human; + +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.spawnEgg, 1, 5); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithChieftain.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithChieftain.java new file mode 100644 index 0000000..a09775d --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithChieftain.java @@ -0,0 +1,62 @@ +package com.zivilon.cinder_loe.entity.npc.evil_human; + +import com.zivilon.cinder_loe.CinderLoE; + +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; +import net.minecraft.util.MovingObjectPosition; + +import lotr.common.LOTRLevelData; +import lotr.common.entity.npc.LOTRUnitTradeable; +import lotr.common.entity.npc.LOTRUnitTradeEntries; +import lotr.common.world.spawning.LOTRInvasions; + + +public class LimwaithChieftain extends LimwaithBoneWarrior implements LOTRUnitTradeable { + public LimwaithChieftain(World world) { + super(world); + addTargetTasks(false); + } + + public float getAlignmentBonus() { + return 5.0F; + } + + public LOTRUnitTradeEntries getUnits() { + return CinderLoE.LIMWAITH_COMMANDER; + } + + public LOTRInvasions getWarhorn() { + return LOTRInvasions.MOREDAIN; + } + + 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)); + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 9); + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithWarrior.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithWarrior.java new file mode 100644 index 0000000..9399238 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/LimwaithWarrior.java @@ -0,0 +1,54 @@ +package com.zivilon.cinder_loe.entity.npc.evil_human; + +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 LimwaithWarrior extends Limwaith { + public LimwaithWarrior(World world) { + super(world); + this.npcShield = LOTRShields.ALIGNMENT_MOREDAIN; + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = rand.nextInt(7); + 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 if (i == 5) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.battleaxeLimwaith)); + } else if (i == 6) { + if (rand.nextInt(2) == 0) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.daggerLimwaith)); + } else { + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.daggerLimwaithPoisoned)); + } + } + + 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.bootsLimwaith)); + setCurrentItemOrArmor(2, new ItemStack(CinderLoE.legsLimwaith)); + setCurrentItemOrArmor(3, new ItemStack(CinderLoE.bodyLimwaith)); + if (rand.nextInt(10) != 0) + setCurrentItemOrArmor(4, new ItemStack(CinderLoE.helmetLimwaith)); + return data; + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 6); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/RhudaurSoldier.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/RhudaurSoldier.java new file mode 100644 index 0000000..0231a7b --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/evil_human/RhudaurSoldier.java @@ -0,0 +1,44 @@ +package com.zivilon.cinder_loe.entity.npc.evil_human; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRMod; +import lotr.common.LOTRShields; +import lotr.common.entity.npc.LOTREntityAngmarHillmanWarrior; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + + +public class RhudaurSoldier extends LOTREntityAngmarHillmanWarrior { + + private static ItemStack[] weapons = new ItemStack[]{new ItemStack(LOTRMod.swordAngmar), new ItemStack(LOTRMod.battleaxeAngmar), new ItemStack(LOTRMod.hammerAngmar), new ItemStack(LOTRMod.polearmAngmar), new ItemStack(LOTRMod.spearAngmar)}; + private static ItemStack[] helmets = new ItemStack[]{new ItemStack(CinderLoE.helmetRhudaur)}; + private static ItemStack[] bodies = new ItemStack[]{new ItemStack(CinderLoE.bodyRhudaur)}; + private static ItemStack[] legs = new ItemStack[]{new ItemStack(CinderLoE.legsRhudaur)}; + private static ItemStack[] boots = new ItemStack[]{new ItemStack(CinderLoE.bootsRhudaur)}; + + public RhudaurSoldier(World world) { + super(world); + this.npcShield = LOTRShields.ALIGNMENT_MORDOR; + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = this.rand.nextInt(weapons.length); + this.npcItemsInv.setMeleeWeapon(weapons[i].copy()); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + i = this.rand.nextInt(boots.length); + this.setCurrentItemOrArmor(1, boots[i].copy()); + i = this.rand.nextInt(legs.length); + this.setCurrentItemOrArmor(2, legs[i].copy()); + i = this.rand.nextInt(bodies.length); + this.setCurrentItemOrArmor(3, bodies[i].copy()); + if (this.rand.nextInt(5) != 0) { + i = this.rand.nextInt(helmets.length); + this.setCurrentItemOrArmor(4, helmets[i].copy()); + } + return data; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorBannerBearer.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorBannerBearer.java new file mode 100644 index 0000000..d61a3b0 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorBannerBearer.java @@ -0,0 +1,22 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.entity.npc.LOTRBannerBearer; +import lotr.common.item.LOTRItemBanner; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class ArnorBannerBearer extends ArnorSoldier implements LOTRBannerBearer { + public ArnorBannerBearer(World world) { + super(world); + } + @Override + public LOTRItemBanner.BannerType getBannerType() { + return LOTRItemBanner.BannerType.RANGER_NORTH; + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 16); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorCaptain.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorCaptain.java new file mode 100644 index 0000000..9900921 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorCaptain.java @@ -0,0 +1,73 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRCapes; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTRUnitTradeEntries; +import lotr.common.entity.npc.LOTRUnitTradeable; +import lotr.common.world.spawning.LOTRInvasions; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class ArnorCaptain extends ArnorSoldier implements LOTRUnitTradeable { + public ArnorCaptain(World world) { + super(world); + addTargetTasks(false); + this.npcCape = LOTRCapes.RANGER; + } + + public float getAlignmentBonus() { + return 5.0F; + } + + public LOTRUnitTradeEntries getUnits() { + return CinderLoE.ARNOR_CAPTAIN; + } + + public LOTRInvasions getWarhorn() { + return LOTRInvasions.RANGER_NORTH; + } + + public void onUnitTrade(EntityPlayer entityplayer) { + } + + public boolean canTradeWith(EntityPlayer entityplayer) { + return (LOTRLevelData.getData(entityplayer).getAlignment(getFaction()) >= 150.0F && isFriendlyAndAligned(entityplayer)); + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 18); + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = rand.nextInt(4); + if (i == 0) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.swordArnor)); + } else if (i == 1 || i == 2) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.daggerArnor)); + } else if (i == 3 || i == 4) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.spearArnor)); + } + if (rand.nextInt(4) == 0) { + this.npcItemsInv.setSpearBackup(this.npcItemsInv.getMeleeWeapon()); + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.spearArnor)); + } + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + setCurrentItemOrArmor(1, new ItemStack(LOTRMod.bootsArnor)); + setCurrentItemOrArmor(2, new ItemStack(LOTRMod.legsArnor)); + setCurrentItemOrArmor(3, new ItemStack(LOTRMod.bodyArnor)); + setCurrentItemOrArmor(4, null); + return data; + } + public String getSpeechBank(EntityPlayer entityplayer) { + if (isFriendlyAndAligned(entityplayer)) { + return "arnorSoldier/captain/friendly"; + } + return "arnorSoldier/captain/neutral"; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorSoldier.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorSoldier.java new file mode 100644 index 0000000..c2a6459 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorSoldier.java @@ -0,0 +1,96 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityDunedain; +import lotr.common.entity.npc.LOTREntityDwarfWarrior; +import lotr.common.LOTRMod; +import lotr.common.LOTRShields; +import lotr.common.entity.npc.LOTREntityGondorSoldier; +import lotr.common.fac.LOTRFaction; +import lotr.common.quest.LOTRMiniQuest; +import lotr.common.quest.LOTRMiniQuestFactory; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +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 com.zivilon.cinder_loe.CinderLoE; + +public class ArnorSoldier extends LOTREntityDunedain { + public ArnorSoldier(World world) { + super(world); + this.npcShield = LOTRShields.ALIGNMENT_RANGER; + } + + @Override + public void setupNPCGender() { + this.familyInfo.setMale(true); + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = rand.nextInt(4); + if (i == 0) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.swordArnor)); + } else if (i == 1 || i == 2) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.swordArnor)); + } else if (i == 3 || i == 4) { + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.spearArnor)); + } + if (rand.nextInt(4) == 0) { + this.npcItemsInv.setSpearBackup(this.npcItemsInv.getMeleeWeapon()); + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.spearArnor)); + } + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + setCurrentItemOrArmor(1, new ItemStack(LOTRMod.bootsArnor)); + setCurrentItemOrArmor(2, new ItemStack(LOTRMod.legsArnor)); + setCurrentItemOrArmor(3, new ItemStack(LOTRMod.bodyArnor)); + setCurrentItemOrArmor(4, new ItemStack(LOTRMod.helmetArnor)); + return data; + } + + @Override + public LOTRFaction getFaction() { + return LOTRFaction.RANGER_NORTH; + } + + @Override + public float getAlignmentBonus() { + return 2.0f; + } + + public String getSpeechBank(EntityPlayer entityplayer) { + if (isFriendlyAndAligned(entityplayer)) { + if (this.hiredNPCInfo.getHiringPlayer() == entityplayer) + return "arnorSoldier/soldier/hired"; + return "arnorSoldier/soldier/friendly"; + } + return "arnorSoldier/soldier/hostile"; + } + + @Override + public LOTRMiniQuest createMiniQuest() { + if (rand.nextInt(8) == 0) { + return LOTRMiniQuestFactory.RANGER_NORTH_ARNOR_RELIC.createQuest(this); + } + return LOTRMiniQuestFactory.RANGER_NORTH.createQuest(this); + } + + @Override + public LOTRMiniQuestFactory getBountyHelpSpeechDir() { + return LOTRMiniQuestFactory.RANGER_NORTH; + } + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 14); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorSoldierArcher.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorSoldierArcher.java new file mode 100644 index 0000000..41d712e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/ArnorSoldierArcher.java @@ -0,0 +1,55 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIRangedAttack; +import lotr.common.entity.npc.LOTREntityNPC; +import net.minecraft.entity.*; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.util.MovingObjectPosition; + +public class ArnorSoldierArcher extends ArnorSoldier { + + public ArnorSoldierArcher(World world) { + super(world); + this.spawnRidingHorse = false; + ((EntityLiving)this).tasks.addTask(0, (EntityAIBase)new LOTREntityAIRangedAttack(this, 1.3, 30, 50, 16.0f)); + this.npcShield = null; + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setRangedWeapon(new ItemStack(LOTRMod.rangerBow)); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getRangedWeapon()); + return data; + } + + @Override + protected void onAttackModeChange(LOTREntityNPC.AttackMode mode, boolean mounted) { + if (mode == LOTREntityNPC.AttackMode.IDLE) { + this.setCurrentItemOrArmor(0, this.npcItemsInv.getIdleItem()); + } else { + this.setCurrentItemOrArmor(0, this.npcItemsInv.getRangedWeapon()); + } + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase target, float f) { + npcArrowAttack(target, f); + } + @Override + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + this.dropNPCArrows(i); + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 15); + } +} + diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BattleNun.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BattleNun.java new file mode 100644 index 0000000..129ed38 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BattleNun.java @@ -0,0 +1,50 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.quest.LOTRMiniQuest; +import lotr.common.quest.LOTRMiniQuestFactory; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.world.World; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; + +public class BattleNun extends ArnorSoldier { + public BattleNun(World world) { + super(world); + this.spawnRidingHorse = false; + this.questInfo.setOfferChance(4000); + this.questInfo.setMinAlignment(150.0f); + this.npcShield = null; + } + + @Override + public void setupNPCGender() { + this.familyInfo.setMale(false); + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setMeleeWeapon(new ItemStack(CinderLoE.maceArnor)); + this.npcItemsInv.setIdleItem(new ItemStack(CinderLoE.maceArnor)); + setCurrentItemOrArmor(1, new ItemStack(CinderLoE.bootsArnorBanner)); + setCurrentItemOrArmor(2, new ItemStack(CinderLoE.legsArnorBanner)); + setCurrentItemOrArmor(3, new ItemStack(CinderLoE.bodyArnorBanner)); + if (this.rand.nextBoolean()) { + this.setCurrentItemOrArmor(4, new ItemStack(CinderLoE.helmetArnorBanner)); + } else { + this.setCurrentItemOrArmor(4, null); + } + return data; + } + + @Override + public LOTRMiniQuest createMiniQuest() { + return LOTRMiniQuestFactory.RANGER_NORTH.createQuest(this); + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 17); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeCaptain.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeCaptain.java new file mode 100644 index 0000000..db118f9 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeCaptain.java @@ -0,0 +1,65 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRAchievement; +import lotr.common.LOTRCapes; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTRUnitTradeEntries; +import lotr.common.entity.npc.LOTRUnitTradeable; +import lotr.common.item.LOTRItemLeatherHat; +import lotr.common.world.spawning.LOTRInvasions; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class BreeCaptain extends BreeSoldier implements LOTRUnitTradeable { + public BreeCaptain(World world) { + super(world); + addTargetTasks(false); + this.npcCape = LOTRCapes.RANGER; + } + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setIdleItem(new ItemStack(Items.writable_book)); + ItemStack hat = new ItemStack(LOTRMod.leatherHat); + LOTRItemLeatherHat.setHatColor(hat, 6834742); + LOTRItemLeatherHat.setFeatherColor(hat, 40960); + this.setCurrentItemOrArmor(4, hat); + return data; + } + public float getAlignmentBonus() { + return 5.0F; + } + + public LOTRUnitTradeEntries getUnits() { + return CinderLoE.BREE_CAPTAIN; + } + + public LOTRInvasions getWarhorn() { + return LOTRInvasions.BREE; + } + + public void onUnitTrade(EntityPlayer entityplayer) { + LOTRLevelData.getData(entityplayer).addAchievement(LOTRAchievement.tradeBreeCaptain); + } + + public boolean canTradeWith(EntityPlayer entityplayer) { + return (LOTRLevelData.getData(entityplayer).getAlignment(getFaction()) >= 150.0F && isFriendlyAndAligned(entityplayer)); + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 23); + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeCrossbowman.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeCrossbowman.java new file mode 100644 index 0000000..3db873b --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeCrossbowman.java @@ -0,0 +1,58 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIRangedAttack; +import lotr.common.entity.npc.LOTREntityNPC; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.util.MovingObjectPosition; + +public class BreeCrossbowman extends BreeSoldier { + + public BreeCrossbowman(World world) { + super(world); + this.npcShield = null; + } + + protected int addBreeAttackAI(int prio) { + ((EntityLiving)this).tasks.addTask(prio, (EntityAIBase)new LOTREntityAIRangedAttack(this, 1.25, 30, 50, 16.0f)); + return prio; + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setRangedWeapon(new ItemStack(LOTRMod.ironCrossbow)); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getRangedWeapon()); + return data; + } + + @Override + protected void onAttackModeChange(LOTREntityNPC.AttackMode mode, boolean mounted) { + if (mode == LOTREntityNPC.AttackMode.IDLE) { + this.setCurrentItemOrArmor(0, this.npcItemsInv.getIdleItem()); + } else { + this.setCurrentItemOrArmor(0, this.npcItemsInv.getRangedWeapon()); + } + } + + public void attackEntityWithRangedAttack(EntityLivingBase target, float f) { + npcCrossbowAttack(target, f); + } + + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + dropNPCCrossbowBolts(i); + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 20); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeOutrider.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeOutrider.java new file mode 100644 index 0000000..d9a6922 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeOutrider.java @@ -0,0 +1,184 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.*; +import lotr.common.entity.ai.*; +import lotr.common.entity.animal.LOTREntityHorse; +import lotr.common.entity.npc.*; +import lotr.common.fac.LOTRFaction; +import lotr.common.quest.LOTRMiniQuest; +import lotr.common.quest.LOTRMiniQuestFactory; +import lotr.common.world.structure.LOTRChestContents; +import net.minecraft.entity.*; +import net.minecraft.entity.ai.*; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class BreeOutrider extends LOTREntityBreeGuard { + private EntityAIBase rangedAttackAI = this.createBreeRangedAttackAI(); + private EntityAIBase meleeAttackAI = this.addBreeAttackAI(); + private static ItemStack[] guardWeapons = new ItemStack[]{new ItemStack(CinderLoE.swordBree), new ItemStack(CinderLoE.swordBree), new ItemStack(LOTRMod.pikeIron)}; + public BreeOutrider(World world) { + super(world); + this.setSize(0.6f, 1.8f); + this.getNavigator().setAvoidsWater(true); + this.getNavigator().setBreakDoors(true); + ((EntityLiving)this).tasks.addTask(0, new EntityAISwimming((EntityLiving)this)); + ((EntityLiving)this).tasks.addTask(1, new LOTREntityAIHiredRemainStill(this)); + ((EntityLiving)this).tasks.addTask(2, this.addBreeAttackAI()); + ((EntityLiving)this).tasks.addTask(2, this.createBreeRangedAttackAI()); + ((EntityLiving)this).tasks.addTask(3, new LOTREntityAIFollowHiringPlayer(this)); + ((EntityLiving)this).tasks.addTask(4, new EntityAIOpenDoor((EntityLiving)this, true)); + ((EntityLiving)this).tasks.addTask(5, new EntityAIWander((EntityCreature)this, 1.0)); + ((EntityLiving)this).tasks.addTask(6, new LOTREntityAIEat(this, LOTRFoods.BREE, 8000)); + ((EntityLiving)this).tasks.addTask(6, new LOTREntityAIDrink(this, LOTRFoods.BREE_DRINK, 6000)); + ((EntityLiving)this).tasks.addTask(6, new LOTREntityAIHobbitSmoke(this, 12000)); + ((EntityLiving)this).tasks.addTask(7, new EntityAIWatchClosest2((EntityLiving)this, EntityPlayer.class, 10.0f, 0.02f)); + ((EntityLiving)this).tasks.addTask(7, (EntityAIBase)new EntityAIWatchClosest2((EntityLiving)this, LOTREntityNPC.class, 5.0f, 0.02f)); + ((EntityLiving)this).tasks.addTask(8, (EntityAIBase)new EntityAIWatchClosest((EntityLiving)this, EntityLiving.class, 8.0f, 0.02f)); + ((EntityLiving)this).tasks.addTask(9, (EntityAIBase)new EntityAILookIdle((EntityLiving)this)); + this.addTargetTasks(true); + } + protected EntityAIBase createBreeRangedAttackAI() { + return new LOTREntityAIRangedAttack(this, 1.25, 30, 40, 16.0f); + } + protected EntityAIBase addBreeAttackAI() { + return new LOTREntityAIAttackOnCollide(this, 1.5, true); + + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2); + } + @Override + public LOTRFaction getFaction() { + return LOTRFaction.BREE; + } + + @Override + public void setupNPCGender() { + this.familyInfo.setMale((this).rand.nextBoolean()); + } + + @Override + public void setupNPCName() { + this.familyInfo.setName(LOTRNames.getBreeName((this).rand, this.familyInfo.isMale())); + } + @Override + public String getNPCName() { + return this.familyInfo.getName(); + } + @Override + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + int bones = (this).rand.nextInt(2) + (this).rand.nextInt(i + 1); + for (int l = 0; l < bones; ++l) { + this.dropItem(Items.bone, 1); + } + this.dropBreeItems(flag, i); + dropNPCCrossbowBolts(i); + } + @Override + protected LOTRAchievement getKillAchievement() { + return LOTRAchievement.killBreelander; + } + + protected void dropBreeItems(boolean flag, int i) { + if ((this).rand.nextInt(6) == 0) { + this.dropChestContents(LOTRChestContents.BREE_HOUSE, 1, 2 + i); + } + } + + + @Override + protected void entityInit() { + super.entityInit(); + ((Entity) this).getDataWatcher().addObject(22, (Object)0); + ((Entity) this).getDataWatcher().addObject(23, (Object)0); + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = (rand.nextInt(guardWeapons.length)); + this.npcItemsInv.setMeleeWeapon(guardWeapons[i].copy()); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + setCurrentItemOrArmor(1, new ItemStack(CinderLoE.bootsBree)); + setCurrentItemOrArmor(2, new ItemStack(CinderLoE.legsBree)); + setCurrentItemOrArmor(3, new ItemStack(CinderLoE.bodyBree)); + setCurrentItemOrArmor(4, new ItemStack(CinderLoE.helmetBreeKettle)); + this.npcItemsInv.setRangedWeapon(new ItemStack(LOTRMod.ironCrossbow)); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + return data; + } + + @Override + public void onAttackModeChange(LOTREntityNPC.AttackMode mode, boolean mounted) { + if (mode == LOTREntityNPC.AttackMode.IDLE) { + ((EntityLiving)this).tasks.removeTask(this.meleeAttackAI); + ((EntityLiving)this).tasks.removeTask(this.rangedAttackAI); + this.setCurrentItemOrArmor(0, this.npcItemsInv.getIdleItem()); + } + if (mode == LOTREntityNPC.AttackMode.MELEE) { + ((EntityLiving)this).tasks.removeTask(this.meleeAttackAI); + ((EntityLiving)this).tasks.removeTask(this.rangedAttackAI); + ((EntityLiving)this).tasks.addTask(2, this.meleeAttackAI); + this.setCurrentItemOrArmor(0, this.npcItemsInv.getMeleeWeapon()); + } + if (mode == LOTREntityNPC.AttackMode.RANGED) { + ((EntityLiving)this).tasks.removeTask(this.meleeAttackAI); + ((EntityLiving)this).tasks.removeTask(this.rangedAttackAI); + ((EntityLiving)this).tasks.addTask(2, this.rangedAttackAI); + this.setCurrentItemOrArmor(0, this.npcItemsInv.getRangedWeapon()); + } + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 21); + } + @Override + public LOTRNPCMount createMountToRide() { + LOTREntityHorse horse = (LOTREntityHorse)super.createMountToRide(); + horse.setMountArmor(new ItemStack(LOTRMod.horseArmorIron)); + return horse; + } + + public void attackEntityWithRangedAttack(EntityLivingBase target, float f) { + npcCrossbowAttack(target, f); + } + @Override + public float getAlignmentBonus() { + return 3.0f; + } + + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + if (this.hiredNPCInfo.getHiringPlayer() == entityplayer) { + return "bree/guard/hired"; + } + return "bree/guard/friendly"; + } + return "bree/guard/hostile"; + } + + @Override + public LOTRMiniQuest createMiniQuest() { + return LOTRMiniQuestFactory.BREE.createQuest(this); + } + + @Override + public LOTRMiniQuestFactory getBountyHelpSpeechDir() { + return LOTRMiniQuestFactory.BREE; + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeSoldier.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeSoldier.java new file mode 100644 index 0000000..8fb5ab3 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeSoldier.java @@ -0,0 +1,36 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTREntityBreeGuard; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.util.MovingObjectPosition; + +public class BreeSoldier extends LOTREntityBreeGuard { + private static ItemStack[] guardWeapons = new ItemStack[]{new ItemStack(CinderLoE.swordBree), new ItemStack(CinderLoE.swordBree), new ItemStack(LOTRMod.pikeIron)}; + + public BreeSoldier(World world) { + super(world); + this.spawnRidingHorse = false; + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = (rand.nextInt(guardWeapons.length)); + this.npcItemsInv.setMeleeWeapon(guardWeapons[i].copy()); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + setCurrentItemOrArmor(1, new ItemStack(CinderLoE.bootsBree)); + setCurrentItemOrArmor(2, new ItemStack(CinderLoE.legsBree)); + setCurrentItemOrArmor(3, new ItemStack(CinderLoE.bodyBree)); + setCurrentItemOrArmor(4, new ItemStack(CinderLoE.helmetBree)); + return data; + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 19); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeSoldierBannerBearer.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeSoldierBannerBearer.java new file mode 100644 index 0000000..3ec0345 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/BreeSoldierBannerBearer.java @@ -0,0 +1,29 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.entity.npc.LOTRBannerBearer; +import lotr.common.item.LOTRItemBanner; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.item.ItemStack; + +public class BreeSoldierBannerBearer extends BreeSoldier implements LOTRBannerBearer { + public BreeSoldierBannerBearer(World world) { + super(world); + } + @Override + public LOTRItemBanner.BannerType getBannerType() { + return LOTRItemBanner.BannerType.BREE; + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 22); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/EsgarothSoldier.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/EsgarothSoldier.java new file mode 100644 index 0000000..7604a04 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/EsgarothSoldier.java @@ -0,0 +1,23 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRMod; +import lotr.common.LOTRShields; +import lotr.common.entity.npc.LOTREntityDaleSoldier; +import lotr.common.entity.npc.LOTREntityDunedain; +import lotr.common.fac.LOTRFaction; +import lotr.common.quest.LOTRMiniQuest; +import lotr.common.quest.LOTRMiniQuestFactory; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class EsgarothSoldier extends LOTREntityDaleSoldier { + public EsgarothSoldier(World world) { + super(world); + this.npcShield = LOTRShields.ALIGNMENT_ESGAROTH; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/TauredainTrueBlood.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/TauredainTrueBlood.java new file mode 100644 index 0000000..eacff72 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/good_human/TauredainTrueBlood.java @@ -0,0 +1,54 @@ +package com.zivilon.cinder_loe.entity.npc.good_human; + +import lotr.common.LOTRMod; +import lotr.common.LOTRShields; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.npc.LOTREntityDaleSoldier; +import lotr.common.entity.npc.LOTREntityTauredain; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class TauredainTrueBlood extends LOTREntityTauredain { + public TauredainTrueBlood(World world) { + super(world); + this.npcShield = LOTRShields.ALIGNMENT_TAUREDAIN; + } + @Override + public EntityAIBase createHaradrimAttackAI() { + return new LOTREntityAIAttackOnCollide(this, 1.7, false); + } + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(26.0); + this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(24.0); + this.getEntityAttribute(npcAttackDamageExtra).setBaseValue(2.0); + } + + private static ItemStack[] weapons = new ItemStack[]{new ItemStack(LOTRMod.swordTauredain), new ItemStack(LOTRMod.battleaxeTauredain), new ItemStack(LOTRMod.hammerTauredain), new ItemStack(LOTRMod.spearTauredain), new ItemStack(LOTRMod.pikeTauredain)}; + private static ItemStack[] helmets = new ItemStack[]{new ItemStack(LOTRMod.helmetTauredainChieftain), new ItemStack(LOTRMod.helmetTauredainChieftain), new ItemStack(LOTRMod.helmetTauredainGold, 0)}; + private static ItemStack[] bodies = new ItemStack[]{new ItemStack(LOTRMod.bodyTauredain), new ItemStack(LOTRMod.bodyTauredain), new ItemStack(LOTRMod.bodyTauredainGold, 0)}; + private static ItemStack[] legs = new ItemStack[]{new ItemStack(LOTRMod.legsTauredain), new ItemStack(LOTRMod.legsTauredain), new ItemStack(LOTRMod.legsTauredainGold, 0)}; + private static ItemStack[] boots = new ItemStack[]{new ItemStack(LOTRMod.bootsTauredain), new ItemStack(LOTRMod.bootsTauredain), new ItemStack(LOTRMod.bootsTauredainGold, 0)}; + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = this.rand.nextInt(weapons.length); + this.npcItemsInv.setMeleeWeapon(weapons[i].copy()); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + i = this.rand.nextInt(boots.length); + this.setCurrentItemOrArmor(1, boots[i].copy()); + i = this.rand.nextInt(legs.length); + this.setCurrentItemOrArmor(2, legs[i].copy()); + i = this.rand.nextInt(bodies.length); + this.setCurrentItemOrArmor(3, bodies[i].copy()); + if (this.rand.nextInt(5) != 0) { + i = this.rand.nextInt(helmets.length); + this.setCurrentItemOrArmor(4, helmets[i].copy()); + } + return data; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/orc/MorgulOrc.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/orc/MorgulOrc.java new file mode 100644 index 0000000..f054cdd --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/orc/MorgulOrc.java @@ -0,0 +1,13 @@ +package com.zivilon.cinder_loe.entity.npc.orc; + +import lotr.common.LOTRShields; +import lotr.common.entity.npc.LOTREntityMordorOrc; +import net.minecraft.world.World; + + +public class MorgulOrc extends LOTREntityMordorOrc { + public MorgulOrc(World world) { + super(world); + this.npcShield = LOTRShields.ALIGNMENT_MINAS_MORGUL; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/orc/NorthernOrc.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/orc/NorthernOrc.java new file mode 100644 index 0000000..04f7608 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/orc/NorthernOrc.java @@ -0,0 +1,74 @@ +package com.zivilon.cinder_loe.entity.npc.orc; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.LOTRShields; +import lotr.common.entity.npc.LOTREntityAngmarHillmanWarrior; +import lotr.common.entity.npc.LOTREntityGundabadUruk; +import lotr.common.fac.LOTRFaction; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + + +public class NorthernOrc extends LOTREntityGundabadUruk { + + private static ItemStack[] weapons = new ItemStack[]{new ItemStack(LOTRMod.swordAngmar), new ItemStack(LOTRMod.battleaxeAngmar), new ItemStack(LOTRMod.hammerGundabadUruk), new ItemStack(LOTRMod.polearmAngmar), new ItemStack(LOTRMod.spearAngmar), new ItemStack(LOTRMod.swordGundabadUruk)}; + private static ItemStack[] helmets = new ItemStack[]{new ItemStack(LOTRMod.helmetAngmar), new ItemStack(LOTRMod.helmetGundabadUruk), new ItemStack(LOTRMod.helmetBone)}; + private static ItemStack[] bodies = new ItemStack[]{new ItemStack(LOTRMod.bodyAngmar), new ItemStack(LOTRMod.bodyGundabadUruk), new ItemStack(LOTRMod.bodyUruk)}; + private static ItemStack[] legs = new ItemStack[]{new ItemStack(LOTRMod.legsAngmar), new ItemStack(LOTRMod.legsGundabadUruk), new ItemStack(LOTRMod.legsUruk)}; + private static ItemStack[] boots = new ItemStack[]{new ItemStack(LOTRMod.bootsAngmar), new ItemStack(LOTRMod.bootsGundabadUruk), new ItemStack(LOTRMod.bootsUruk)}; + + public NorthernOrc(World world) { + super(world); + this.setSize(0.6f, 1.8f); + this.isWeakOrc = false; + this.npcShield = LOTRShields.ALIGNMENT_ANGMAR; + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + int i = this.rand.nextInt(weapons.length); + this.npcItemsInv.setMeleeWeapon(weapons[i].copy()); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + i = this.rand.nextInt(boots.length); + this.setCurrentItemOrArmor(1, boots[i].copy()); + i = this.rand.nextInt(legs.length); + this.setCurrentItemOrArmor(2, legs[i].copy()); + i = this.rand.nextInt(bodies.length); + this.setCurrentItemOrArmor(3, bodies[i].copy()); + if (this.rand.nextInt(5) != 0) { + i = this.rand.nextInt(helmets.length); + this.setCurrentItemOrArmor(4, helmets[i].copy()); + } + return data; + } + + @Override + public LOTRFaction getFaction() { + return LOTRFaction.ANGMAR; + } + + @Override + public String getSpeechBank(EntityPlayer entityplayer) { + if (this.isFriendlyAndAligned(entityplayer)) { + if (this.hiredNPCInfo.getHiringPlayer() == entityplayer) { + return "angmar/orc/hired"; + } + if (LOTRLevelData.getData(entityplayer).getAlignment(this.getFaction()) >= 100.0f) { + return "angmar/orc/friendly"; + } + return "angmar/orc/neutral"; + } + return "angmar/orc/hostile"; + } + + @Override + public boolean canOrcSkirmish() { + return false; + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornAnimal.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornAnimal.java new file mode 100644 index 0000000..cf67672 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornAnimal.java @@ -0,0 +1,87 @@ +package com.zivilon.cinder_loe.entity.npc.radagast; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRAchievement; +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.entity.ai.LOTREntityAIFollowHiringPlayer; +import lotr.common.entity.ai.LOTREntityAIHiredRemainStill; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.fac.LOTRFaction; +import lotr.common.quest.LOTRMiniQuest; +import lotr.common.quest.LOTRMiniQuestFactory; +import lotr.common.world.LOTRWorldChunkManager; +import lotr.common.world.biome.LOTRBiome; +import lotr.common.world.biome.variant.LOTRBiomeVariant; +import lotr.common.world.structure.LOTRChestContents; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +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.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIOpenDoor; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityAIWatchClosest2; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MathHelper; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.biome.WorldChunkManager; + +public abstract class FangornAnimal extends LOTREntityNPC { + public FangornAnimal(World world) { + super(world); + setSize(1.6F, 1.8F); + getNavigator().setAvoidsWater(true); + ((EntityLiving)this).tasks.addTask(0, (EntityAIBase)new EntityAISwimming((EntityLiving)this)); + ((EntityLiving)this).tasks.addTask(1, (EntityAIBase)new LOTREntityAIHiredRemainStill(this)); + ((EntityLiving)this).tasks.addTask(2, (EntityAIBase)new LOTREntityAIAttackOnCollide(this, 1.6D, false)); + ((EntityLiving)this).tasks.addTask(3, (EntityAIBase)new LOTREntityAIFollowHiringPlayer(this)); + ((EntityLiving)this).tasks.addTask(4, (EntityAIBase)new EntityAIWander(this, 1.0D)); + ((EntityLiving)this).tasks.addTask(5, (EntityAIBase)new EntityAIWatchClosest2((EntityLiving)this, EntityPlayer.class, 8.0F, 0.02F)); + ((EntityLiving)this).tasks.addTask(6, (EntityAIBase)new EntityAIWatchClosest2((EntityLiving)this, LOTREntityNPC.class, 5.0F, 0.02F)); + ((EntityLiving)this).tasks.addTask(7, (EntityAIBase)new EntityAIWatchClosest((EntityLiving)this, EntityLiving.class, 8.0F, 0.02F)); + ((EntityLiving)this).tasks.addTask(8, (EntityAIBase)new EntityAILookIdle((EntityLiving)this)); + addTargetTasks(true); + } + + public boolean canWorldGenSpawnAt(int i, int j, int k, LOTRBiome biome, LOTRBiomeVariant variant) { + int trees = biome.decorator.getVariantTreesPerChunk(variant); + return (trees >= 1); + } + + public LOTRFaction getFaction() { + return LOTRFaction.FANGORN; + } + + public float getAlignmentBonus() { + return 0.0F; + } + + public boolean getCanSpawnHere() { + WorldChunkManager worldChunkMgr = ((Entity)this).worldObj.getWorldChunkManager(); + if (worldChunkMgr instanceof LOTRWorldChunkManager) { + int i = MathHelper.floor_double(((Entity)this).posX); + int j = MathHelper.floor_double(((Entity)this).boundingBox.minY); + int k = MathHelper.floor_double(((Entity)this).posZ); + LOTRBiome biome = (LOTRBiome)((Entity)this).worldObj.getBiomeGenForCoords(i, k); + LOTRBiomeVariant variant = ((LOTRWorldChunkManager)worldChunkMgr).getBiomeVariantAt(i, k); + return (super.getCanSpawnHere() && canWorldGenSpawnAt(i, j, k, biome, variant)); + } + return super.getCanSpawnHere(); + } + + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornAuroch.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornAuroch.java new file mode 100644 index 0000000..b177518 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornAuroch.java @@ -0,0 +1,73 @@ +package com.zivilon.cinder_loe.entity.npc.radagast; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRMod; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import net.minecraft.util.MovingObjectPosition; + + +public class FangornAuroch extends FangornAnimal { + public FangornAuroch(World world) { + super(world); + setSize(1.5F, 1.7F); + } + + public void entityInit() { + super.entityInit(); + } + + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(30.0D); + getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D); + getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(8.0D); + } + + public boolean attackEntityAsMob(Entity entity) { + float f = (float)getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); + return entity.attackEntityFrom(DamageSource.causeMobDamage((EntityLivingBase)this), f); + } + + protected void dropFewItems(boolean flag, int i) { + int hides = 2 + rand.nextInt(3) + rand.nextInt(1 + i); + for (int l = 0; l < hides; l++) + dropItem(Items.leather, 1); + int meats = 2 + rand.nextInt(3) + rand.nextInt(1 + i); + for (int j = 0; j < meats; j++) { + if (isBurning()) { + dropItem(Items.cooked_beef, 1); + } else { + dropItem(Items.beef, 1); + } + } + dropItem(LOTRMod.horn, 1); + } + + protected String getLivingSound() { + return "lotr:aurochs.say"; + } + + protected String getHurtSound() { + return "lotr:aurochs.hurt"; + } + + protected String getDeathSound() { + return "lotr:aurochs.hurt"; + } + + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) { + // No ranged attack implemented + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 30); + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornBear.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornBear.java new file mode 100644 index 0000000..d4c06c9 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornBear.java @@ -0,0 +1,145 @@ +package com.zivilon.cinder_loe.entity.npc.radagast; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRMod; +import lotr.common.entity.animal.LOTREntityBear; +import lotr.common.entity.animal.LOTREntityBear.BearType; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +import java.util.List; + +public class FangornBear extends FangornAnimal { + public FangornBear(World world) { + super(world); + setSize(1.6F, 1.8F); + } + private int hostileTick = 0; + + public void entityInit() { + super.entityInit(); + dataWatcher.addObject(18, Byte.valueOf((byte)0)); + dataWatcher.addObject(20, Byte.valueOf((byte)0)); + setBearType(LOTREntityBear.BearType.forID(rand.nextInt((BearType.values()).length))); + } + + public BearType getBearType() { + int i = dataWatcher.getWatchableObjectByte(18); + return BearType.forID(i); + } + + public void setBearType(BearType t) { + dataWatcher.updateObject(18, Byte.valueOf((byte)t.bearID)); + } + + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(40.0D); + getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D); + getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(8.0D); + } + + public static class BearGroupSpawnData implements IEntityLivingData { + private BearGroupSpawnData() {} + + public int numSpawned = 0; + } + + public boolean attackEntityAsMob(Entity entity) { + float f = (float)getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); + return entity.attackEntityFrom(DamageSource.causeMobDamage((EntityLivingBase)this), f); + } + public boolean attackEntityFrom(DamageSource damagesource, float f) { + boolean flag = super.attackEntityFrom(damagesource, f); + if (flag) { + Entity attacker = damagesource.getEntity(); + if (attacker instanceof EntityLivingBase) + if (isChild()) { + double range = 12.0D; + List list = ((Entity)this).worldObj.getEntitiesWithinAABBExcludingEntity((Entity)this, ((Entity)this).boundingBox.expand(range, range, range)); + for (Object obj : list) { + Entity entity = (Entity)obj; + if (entity instanceof FangornBear) { + FangornBear bear = (FangornBear)entity; + if (!bear.isChild()) + bear.becomeAngryAt((EntityLivingBase)attacker); + } + } + } else { + becomeAngryAt((EntityLivingBase)attacker); + } + } + return flag; + } + + private void becomeAngryAt(EntityLivingBase entity) { + setAttackTarget(entity); + this.hostileTick = 200; + } + + public void writeEntityToNBT(NBTTagCompound nbt) { + super.writeEntityToNBT(nbt); + nbt.setByte("BearType", (byte)(getBearType()).bearID); + nbt.setInteger("Angry", this.hostileTick); + } + + public void readEntityFromNBT(NBTTagCompound nbt) { + super.readEntityFromNBT(nbt); + if (nbt.hasKey("BearType")) + setBearType(BearType.forID(nbt.getByte("BearType"))); + this.hostileTick = nbt.getInteger("Angry"); + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + if (data == null) { + data = new BearGroupSpawnData(); + ((BearGroupSpawnData)data).numSpawned = 1; + } else if (data instanceof BearGroupSpawnData) { + BearGroupSpawnData bgsd = (BearGroupSpawnData)data; + bgsd.numSpawned++; + } + if (rand.nextInt(10000) == 0) setCustomNameTag("Wojtek"); + return data; + } + + protected void dropFewItems(boolean flag, int i) { + int furs = 1 + rand.nextInt(3) + rand.nextInt(i + 1); + for (int l = 0; l < furs; l++) + dropItem(LOTRMod.fur, 1); + if (flag) { + int rugChance = 30 - i * 5; + rugChance = Math.max(rugChance, 1); + if (rand.nextInt(rugChance) == 0) + entityDropItem(new ItemStack(LOTRMod.bearRug, 1, (getBearType()).bearID), 0.0F); + } + } + protected String getLivingSound() { + return "lotr:bear.say"; + } + + protected String getHurtSound() { + return "lotr:bear.hurt"; + } + + protected String getDeathSound() { + return "lotr:bear.death"; + } + + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) { + // No ranged attack implemented + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 27); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornElk.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornElk.java new file mode 100644 index 0000000..cb0a08f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornElk.java @@ -0,0 +1,79 @@ +package com.zivilon.cinder_loe.entity.npc.radagast; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRMod; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +import java.util.UUID; + + +public class FangornElk extends FangornAnimal { + public FangornElk(World world) { + super(world); + setSize(1.6F, 1.8F); + } + + public void entityInit() { + super.entityInit(); + } + + public void setUniqueID(UUID uuid) { + entityUniqueID = uuid; + } + + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(35.0D); + getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D); + getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(8.0D); + } + + + public boolean attackEntityAsMob(Entity entity) { + float f = (float)getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); + return entity.attackEntityFrom(DamageSource.causeMobDamage((EntityLivingBase)this), f); + } + + protected void dropFewItems(boolean flag, int i) { + int hide = rand.nextInt(3) + rand.nextInt(1 + i); + for (int l = 0; l < hide; l++) + dropItem(Items.leather, 1); + int meat = rand.nextInt(3) + rand.nextInt(1 + i); + for (int j = 0; j < meat; j++) { + if (isBurning()) { + dropItem(LOTRMod.deerCooked, 1); + } else { + dropItem(LOTRMod.deerRaw, 1); + } + } + } + + protected String getLivingSound() { + return "lotr:elk.say"; + } + + protected String getHurtSound() { + return "lotr:elk.hurt"; + } + + protected String getDeathSound() { + return "lotr:elk.death"; + } + + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) { + // No ranged attack implemented + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 26); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornWildBoar.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornWildBoar.java new file mode 100644 index 0000000..2605334 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornWildBoar.java @@ -0,0 +1,67 @@ +package com.zivilon.cinder_loe.entity.npc.radagast; + +import com.zivilon.cinder_loe.CinderLoE; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + + +public class FangornWildBoar extends FangornAnimal { + public FangornWildBoar(World world) { + super(world); + setSize(0.9F, 0.8F); + } + + public void entityInit() { + super.entityInit(); + } + + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0D); + getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D); + getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(8.0D); + } + + public boolean attackEntityAsMob(Entity entity) { + float f = (float)getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); + return entity.attackEntityFrom(DamageSource.causeMobDamage((EntityLivingBase)this), f); + } + + protected void dropFewItems(boolean flag, int i) { + int meat = rand.nextInt(3) + 1 + rand.nextInt(1 + i); + for (int l = 0; l < meat; l++) { + if (isBurning()) { + dropItem(Items.cooked_porkchop, 1); + } else { + dropItem(Items.porkchop, 1); + } + } + } + protected String getLivingSound() { + return "mob.pig.say"; + } + + protected String getHurtSound() { + return "mob.pig.say"; + } + + protected String getDeathSound() { + return "mob.pig.death"; + } + + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) { + // No ranged attack implemented + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 28); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornWolf.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornWolf.java new file mode 100644 index 0000000..d7fde98 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/npc/radagast/FangornWolf.java @@ -0,0 +1,66 @@ +package com.zivilon.cinder_loe.entity.npc.radagast; + +import com.zivilon.cinder_loe.CinderLoE; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.init.Items; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; + +public class FangornWolf extends FangornAnimal { + public FangornWolf(World world) { + super(world); + setSize(0.6F, 0.8F); + } + + public void entityInit() { + super.entityInit(); + } + + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(10.0D); + getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.25D); + getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(6.0D); + } + + public boolean attackEntityAsMob(Entity entity) { + float f = (float)getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); + return entity.attackEntityFrom(DamageSource.causeMobDamage((EntityLivingBase)this), f); + } + + protected void dropFewItems(boolean flag, int i) { + int meat = rand.nextInt(3) + 1 + rand.nextInt(1 + i); + for (int l = 0; l < meat; l++) { + if (isBurning()) { + dropItem(Items.cooked_porkchop, 1); + } else { + dropItem(Items.porkchop, 1); + } + } + } + protected String getLivingSound() { + return "mob.wolf.growl"; + } + + protected String getHurtSound() { + return "mob.wolf.hurt"; + } + + protected String getDeathSound() { + return "mob.wolf.death"; + } + + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) { + // No ranged attack implemented + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 29); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/projectile/EntityWarDart.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/projectile/EntityWarDart.java new file mode 100644 index 0000000..e736e01 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/projectile/EntityWarDart.java @@ -0,0 +1,173 @@ +package com.zivilon.cinder_loe.entity.projectile; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.items.WarDart; +import lotr.common.entity.projectile.LOTREntityProjectileBase; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; + +public class EntityWarDart extends LOTREntityProjectileBase { + + public static int POSITION_WATCHER_ID = 20; + public static int ITEMSTACK_WATCHER_ID = 18; + + public int xTile = -1; + public int yTile = -1; + public int zTile = -1; + public Block inTile; + public int inData = 0; + public boolean inGround = false; + public int shake = 0; + public Entity shootingEntity; + public int ticksInGround; + public int ticksInAir = 0; + public int canBePickedUp = 0; + public int knockbackStrength = 0; + + public ItemStack item; + public double damage; + public int dart_type; + + public EntityWarDart(World world) { + super(world); + } + + public EntityWarDart(World world, EntityLivingBase thrower, ItemStack item) { + super(world, thrower, item, 3.0F); + this.item = item.copy(); // Store a copy of the item stack + this.item.stackSize = 1; + this.damage = WarDart.getDamageFromMeta(item.getItemDamage()); + this.dart_type = item.getItemDamage(); + } + + @Override + protected void entityInit() { + this.dataWatcher.addObject(17, Byte.valueOf((byte)0)); + this.dataWatcher.addObjectByDataType(ITEMSTACK_WATCHER_ID, 5); + this.dataWatcher.addObject(POSITION_WATCHER_ID, ""); // Test adding object with ID + } + + @Override + public void setThrowableHeading(double x, double y, double z, float velocity, float inaccuracy) { + float f2 = MathHelper.sqrt_double(x * x + y * y + z * z); + x /= f2; + y /= f2; + z /= f2; + x += this.rand.nextGaussian() * 0.0075D * inaccuracy; + y += this.rand.nextGaussian() * 0.0075D * inaccuracy; + z += this.rand.nextGaussian() * 0.0075D * inaccuracy; + x *= velocity; + y *= velocity; + z *= velocity; + this.motionX = x; + this.motionY = y; + this.motionZ = z; + float f3 = MathHelper.sqrt_double(x * x + z * z); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(x, z) * 180.0D / Math.PI); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(y, f3) * 180.0D / Math.PI); + this.ticksInGround = 0; + } + + @Override + public void onUpdate() { + super.onUpdate(); + + if (!this.worldObj.isRemote) { + this.dataWatcher.updateObject(ITEMSTACK_WATCHER_ID, this.item); + if (this.inGround) { + String posString = this.xTile + "," + this.yTile + "," + this.zTile; + this.dataWatcher.updateObject(POSITION_WATCHER_ID, posString); + } + } else { + this.item = this.dataWatcher.getWatchableObjectItemStack(ITEMSTACK_WATCHER_ID); + String posString = this.dataWatcher.getWatchableObjectString(POSITION_WATCHER_ID); + if (!posString.equals("")) { + String[] coords = posString.split(","); + this.xTile = Integer.parseInt(coords[0]); + this.yTile = Integer.parseInt(coords[1]); + this.zTile = Integer.parseInt(coords[2]); + } + } + + // Ensure proper synchronization of position + if (this.inGround) { + this.motionX = this.motionY = this.motionZ = 0; + this.posX = this.xTile + 0.5; + this.posY = this.yTile + 0.5; + this.posZ = this.zTile + 0.5; + } + } + + @Override + protected void onCollideWithTarget(Entity entity) { + super.onCollideWithTarget(entity); + if (entity instanceof EntityLivingBase) + if (this.dart_type == 14) { + ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(Potion.wither.id, 160)); + } + } + + @Override + public float getBaseImpactDamage(Entity entity, ItemStack itemStack) { + return (float)this.damage; + } + + @Override + public void writeEntityToNBT(NBTTagCompound tagCompound) { + // Do not call super.writeEntityToNBT to avoid recursion issues + tagCompound.setInteger("xTile", this.xTile); + tagCompound.setInteger("yTile", this.yTile); + tagCompound.setInteger("zTile", this.zTile); + tagCompound.setInteger("inTile", Block.getIdFromBlock(this.inTile)); + tagCompound.setByte("inData", (byte)this.inData); + tagCompound.setByte("shake", (byte)this.shake); + tagCompound.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + tagCompound.setByte("pickup", (byte)this.canBePickedUp); + tagCompound.setByte("Knockback", (byte)this.knockbackStrength); + if (this.item != null) { + NBTTagCompound itemTag = new NBTTagCompound(); + this.item.writeToNBT(itemTag); + tagCompound.setTag("Item", itemTag); + } + } + + @Override + public void readEntityFromNBT(NBTTagCompound tagCompound) { + // Do not call super.readEntityFromNBT to avoid recursion issues + this.xTile = tagCompound.getInteger("xTile"); + this.yTile = tagCompound.getInteger("yTile"); + this.zTile = tagCompound.getInteger("zTile"); + this.inTile = Block.getBlockById(tagCompound.getInteger("inTile")); + this.inData = tagCompound.getByte("inData"); + this.shake = tagCompound.getByte("shake"); + this.inGround = tagCompound.getByte("inGround") == 1; + this.canBePickedUp = tagCompound.getByte("pickup"); + this.knockbackStrength = tagCompound.getByte("Knockback"); + if (tagCompound.hasKey("Item")) { + this.item = ItemStack.loadItemStackFromNBT(tagCompound.getCompoundTag("Item")); + if (this.item != null) { + this.damage = WarDart.getDamageFromMeta(this.item.getItemDamage()); + this.dart_type = this.item.getItemDamage(); + this.dataWatcher.updateObject(ITEMSTACK_WATCHER_ID, this.item); // Ensure DataWatcher is updated with the deserialized ItemStack + } + } + } + + + + + public IIcon getDartIcon() { + WarDart itemDart = (WarDart) CinderLoE.warDart; + return itemDart.getIconFromDamage(this.item.getItemDamage()); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/BladorthinSmith.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/BladorthinSmith.java new file mode 100644 index 0000000..1d01f60 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/BladorthinSmith.java @@ -0,0 +1,107 @@ +package com.zivilon.cinder_loe.entity.trader; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.LOTRFoods; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.*; +import lotr.common.entity.npc.LOTRTradeEntries.TradeType; +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.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class BladorthinSmith extends LOTREntityDorwinionElf implements LOTRTradeable.Smith { + public static LOTRTradeEntries BLADORTHIN_SMITH_BUY; + public static LOTRTradeEntries BLADORTHIN_SMITH_SELL; + + public BladorthinSmith(World world) { + super(world); + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.blacksmithHammer)); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + return data; + } + + public LOTRTradeEntries getBuyPool() { + return BLADORTHIN_SMITH_BUY; + } + + public LOTRTradeEntries getSellPool() { + return BLADORTHIN_SMITH_SELL; + } + + public float getAlignmentBonus() { + return 2.0F; + } + + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + } + + public boolean canTradeWith(EntityPlayer entityplayer) { + return (LOTRLevelData.getData(entityplayer).getAlignment(getFaction()) >= 100.0F && isFriendlyAndAligned(entityplayer)); + } + + static { + BLADORTHIN_SMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry[] { + new LOTRTradeEntry(new ItemStack(LOTRMod.dorwinionTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordDorwinionElf), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerDorwinionElf), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearBladorthin), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetDorwinionElf), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyDorwinionElf), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsDorwinionElf), 22), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsDorwinionElf), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.dorwinionElfBow), 15), + new LOTRTradeEntry(new ItemStack(Items.arrow, 4), 3) + } + ); + + BLADORTHIN_SMITH_SELL = new LOTRTradeEntries(TradeType.SELL, + new LOTRTradeEntry[] { + new LOTRTradeEntry(new ItemStack(Blocks.iron_ore), 5), + new LOTRTradeEntry(new ItemStack(Blocks.gold_ore), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.oreCopper), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.oreTin), 5), + new LOTRTradeEntry(new ItemStack(Items.iron_ingot), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.elfSteel), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronze), 3), + new LOTRTradeEntry(new ItemStack(Items.gold_ingot), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.diamond), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.emerald), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.ruby), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.opal), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.amber), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.topaz), 8), + new LOTRTradeEntry(new ItemStack(Items.coal, 2, Short.MAX_VALUE), 1), + new LOTRTradeEntry(new ItemStack(Items.lava_bucket), 16), + new LOTRTradeEntry(new ItemStack(Items.stick, 8), 1), + new LOTRTradeEntry(new ItemStack(Items.string, 3), 1), + new LOTRTradeEntry(new ItemStack(LOTRMod.mithrilNugget), 35) + } + ); + } + + @Override + public void onPlayerTrade(EntityPlayer entityplayer, TradeType type, ItemStack itemstack) { + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 31); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/LimwaithFishmonger.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/LimwaithFishmonger.java new file mode 100644 index 0000000..889b98a --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/LimwaithFishmonger.java @@ -0,0 +1,71 @@ +package com.zivilon.cinder_loe.entity.trader; + +import com.zivilon.cinder_loe.CinderLoE; + +import com.zivilon.cinder_loe.entity.npc.evil_human.Limwaith; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTRTradeEntries; +import lotr.common.entity.npc.LOTRTradeEntries.TradeType; +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.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.util.MovingObjectPosition; + +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_) { + } + + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 32); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/LimwaithShaman.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/LimwaithShaman.java new file mode 100644 index 0000000..8d6c002 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/LimwaithShaman.java @@ -0,0 +1,116 @@ +package com.zivilon.cinder_loe.entity.trader; + +import com.zivilon.cinder_loe.CinderLoE; + +import com.zivilon.cinder_loe.entity.npc.evil_human.Limwaith; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +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 net.minecraft.util.MovingObjectPosition; + +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"; + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 33); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/RedDwarfSmith.java b/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/RedDwarfSmith.java new file mode 100644 index 0000000..074ea5d --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/entity/trader/RedDwarfSmith.java @@ -0,0 +1,133 @@ +package com.zivilon.cinder_loe.entity.trader; + +import com.zivilon.cinder_loe.CinderLoE; + +import lotr.common.entity.npc.LOTRTradeEntries; +import lotr.common.entity.npc.LOTRTradeEntries.TradeType; +import lotr.common.entity.npc.LOTRTradeable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import lotr.common.LOTRMod; +import lotr.common.fac.LOTRFaction; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Item; +import lotr.common.entity.npc.LOTRTradeEntry; +import net.minecraft.init.Items; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import lotr.common.LOTRLevelData; +import lotr.common.entity.npc.LOTREntityDwarf; +import net.minecraft.util.MovingObjectPosition; + + +public class RedDwarfSmith extends LOTREntityDwarf implements LOTRTradeable.Smith { + public static LOTRTradeEntries RED_DWARF_SMITH_BUY; + public static LOTRTradeEntries RED_DWARF_SMITH_SELL; + + public RedDwarfSmith(World world) { + super(world); + } + + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + data = super.onSpawnWithEgg(data); + this.npcItemsInv.setMeleeWeapon(new ItemStack(LOTRMod.blacksmithHammer)); + this.npcItemsInv.setIdleItem(this.npcItemsInv.getMeleeWeapon()); + return data; + } + + public LOTRTradeEntries getBuyPool() { + return RED_DWARF_SMITH_BUY; + } + + public LOTRTradeEntries getSellPool() { + return RED_DWARF_SMITH_SELL; + } + + public float getAlignmentBonus() { + return 2.0F; + } + + protected void dropFewItems(boolean flag, int i) { + super.dropFewItems(flag, i); + dropItem(getDwarfSteelDrop(), 1 + rand.nextInt(3) + rand.nextInt(i + 1)); + } + + public boolean canTradeWith(EntityPlayer entityplayer) { + return (LOTRLevelData.getData(entityplayer).getAlignment(getFaction()) >= 100.0F && isFriendlyAndAligned(entityplayer)); + } + + static { + RED_DWARF_SMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry[] { + new LOTRTradeEntry(new ItemStack(LOTRMod.dwarvenTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.dwarvenRing), 20), + new LOTRTradeEntry(new ItemStack(CinderLoE.swordRedDwarf), 16), + new LOTRTradeEntry(new ItemStack(CinderLoE.spearRedDwarf), 18), + new LOTRTradeEntry(new ItemStack(CinderLoE.battleaxeRedDwarf), 18), + new LOTRTradeEntry(new ItemStack(CinderLoE.hammerRedDwarf), 18), + new LOTRTradeEntry(new ItemStack(CinderLoE.pikeRedDwarf), 18), + new LOTRTradeEntry(new ItemStack(CinderLoE.daggerRedDwarf), 13), + new LOTRTradeEntry(new ItemStack(CinderLoE.crossbowRedDwarf), 15), + new LOTRTradeEntry(new ItemStack(CinderLoE.helmetRedDwarf), 25), + new LOTRTradeEntry(new ItemStack(CinderLoE.bodyRedDwarf), 36), + new LOTRTradeEntry(new ItemStack(CinderLoE.legsRedDwarf), 30), + new LOTRTradeEntry(new ItemStack(CinderLoE.bootsRedDwarf), 22), + new LOTRTradeEntry(new ItemStack(CinderLoE.boarArmorRedDwarf), 25), + new LOTRTradeEntry(new ItemStack(CinderLoE.barsRedDwarf, 8), 20) + } + ); + + RED_DWARF_SMITH_SELL = new LOTRTradeEntries(TradeType.SELL, + new LOTRTradeEntry[] { + new LOTRTradeEntry(new ItemStack(Items.iron_ingot), 3), + new LOTRTradeEntry(new ItemStack(CinderLoE.redDwarfSteel), 3), + new LOTRTradeEntry(new ItemStack(Items.coal, 2, 32767), 1), + new LOTRTradeEntry(new ItemStack(Items.gold_ingot), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.copper), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.tin), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronze), 3), + new LOTRTradeEntry(new ItemStack(Items.string, 3), 1), + new LOTRTradeEntry(new ItemStack(LOTRMod.diamond), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.emerald), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.sapphire), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.ruby), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.opal), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.amber), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.amethyst), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.topaz), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.pearl), 25), + new LOTRTradeEntry(new ItemStack(Items.cooked_beef), 3), + new LOTRTradeEntry(new ItemStack(Items.cooked_porkchop), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.muttonCooked), 3), + new LOTRTradeEntry(new ItemStack(Items.cooked_chicken), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.gammon), 3), + new LOTRTradeEntry(new ItemStack(Items.cooked_fished), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.rabbitCooked), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.deerCooked), 3), + new LOTRTradeEntry(new ItemStack(Items.bread), 2), + new LOTRTradeEntry(new ItemStack(Items.lava_bucket), 16) + + } + ); + } + + @Override + public void onPlayerTrade(EntityPlayer entityplayer, LOTRTradeEntries.TradeType type, ItemStack itemstack) { + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + } + + @Override + protected Item getDwarfSteelDrop() { + return CinderLoE.redDwarfSteel; + } + @Override + public ItemStack getPickedResult(MovingObjectPosition target) { + return new ItemStack(CinderLoE.spawnEgg, 1, 34); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/AlatarStaff.java b/src (1)/main/java/com/zivilon/cinder_loe/items/AlatarStaff.java new file mode 100644 index 0000000..751b1d4 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/AlatarStaff.java @@ -0,0 +1,71 @@ +package com.zivilon.cinder_loe.items; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import java.util.List; +import lotr.common.LOTRCreativeTabs; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.fac.LOTRFaction; +import lotr.common.network.LOTRPacketHandler; +import lotr.common.network.LOTRPacketWeaponFX; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.Potion; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +import com.zivilon.cinder_loe.items.WizardStaff; + +public class AlatarStaff extends WizardStaff { + public AlatarStaff() { + super(); + } + + 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 = getFaction(entityplayer); + 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); + 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; + + 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)); + } + return itemstack; + } + + private LOTRFaction getFaction(EntityPlayer player) { + LOTRFaction faction = LOTRLevelData.getData(player).getPledgeFaction(); + if (faction == null) { + faction = LOTRFaction.DORWINION; + } + return faction; + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/BrokenHalo.java b/src (1)/main/java/com/zivilon/cinder_loe/items/BrokenHalo.java new file mode 100644 index 0000000..1c59bd7 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/BrokenHalo.java @@ -0,0 +1,29 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.entity.corrupt.CorruptMan; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import lotr.common.item.LOTRItemArmor; +import lotr.common.item.LOTRMaterial; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; + +import java.util.Random; + +public class BrokenHalo extends LOTRItemArmor { + + public BrokenHalo(LOTRMaterial material, int slotType, String s) { + super(material, slotType, s); + + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/CinderBow.java b/src (1)/main/java/com/zivilon/cinder_loe/items/CinderBow.java new file mode 100644 index 0000000..aab8116 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/CinderBow.java @@ -0,0 +1,39 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.CinderLoE; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.fac.LOTRFaction; +import lotr.common.item.LOTRItemBow; +import lotr.common.item.LOTRMaterial; +import lotr.common.network.LOTRPacketHandler; +import lotr.common.network.LOTRPacketWeaponFX; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Overwrite; + +import java.util.List; + +public class CinderBow extends LOTRItemBow { + + + public CinderBow(LOTRMaterial material, double d) { + super(material, d); + } + + @Override + public boolean getIsRepairable(ItemStack itemstack, ItemStack repairItem) { + return repairItem.getItem() == CinderLoE.ingotAsh || super.getIsRepairable(itemstack, repairItem); + } + + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/CinderFurItem.java b/src (1)/main/java/com/zivilon/cinder_loe/items/CinderFurItem.java new file mode 100644 index 0000000..fd7f897 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/CinderFurItem.java @@ -0,0 +1,56 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import java.util.List; + +public class CinderFurItem extends Item { + public IIcon[] icons; + + public CinderFurItem() { + super(); + this.setCreativeTab(LoECreativeTabs.tabMiscLoE); + setHasSubtypes(true); + } + + @Override + public void registerIcons(IIconRegister iconRegister) { + icons = new IIcon[7]; + for (int i = 0; i < 7; i++) { + icons[i] = iconRegister.registerIcon("lotr:cinder_fur_item_" + i); + } + } + + @Override + public String getUnlocalizedName(ItemStack item) { + return "item.cinder_fur_item_" + item.getItemDamage(); + } + + @Override + public IIcon getIconIndex(ItemStack item) { + return getIcon(item, 0); + } + + @Override + public IIcon getIcon(ItemStack stack, int renderPass) { + int dmg = stack.getItemDamage(); + + // Ensure dmg is within the expected range of subtypes + if (dmg < 7) { + return icons[dmg]; + } + return icons[0]; // Default to 0 if out of bounds + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < 7; i++) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/CinderItemFood.java b/src (1)/main/java/com/zivilon/cinder_loe/items/CinderItemFood.java new file mode 100644 index 0000000..6e7c463 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/CinderItemFood.java @@ -0,0 +1,44 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRAchievement; +import lotr.common.LOTRCreativeTabs; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.item.LOTRItemFood; +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.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemFood; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +public class CinderItemFood extends LOTRItemFood { + + private int damageAmount; + public CinderItemFood(int healAmount, float saturation, boolean canWolfEat) { + super(healAmount, saturation, canWolfEat); + } + + public CinderItemFood setdamageAmount(int i) { + this.damageAmount = i; + return this; + } + @Override + public ItemStack onEaten(ItemStack itemstack, World world, EntityPlayer entityplayer) { + if (!world.isRemote && this == LOTRMod.maggotyBread) { + LOTRLevelData.getData(entityplayer).addAchievement(LOTRAchievement.eatMaggotyBread); + } + if (this.damageAmount > 0) { + entityplayer.attackEntityFrom(DamageSource.onFire, (float)this.damageAmount); + } + return super.onEaten(itemstack, world, entityplayer); + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/CinderLoESpawnEgg.java b/src (1)/main/java/com/zivilon/cinder_loe/items/CinderLoESpawnEgg.java new file mode 100644 index 0000000..9a63149 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/CinderLoESpawnEgg.java @@ -0,0 +1,145 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.entity.*; +import com.zivilon.cinder_loe.entity.corrupt.*; +import com.zivilon.cinder_loe.entity.npc.*; +import com.zivilon.cinder_loe.entity.npc.dwarf.RedDwarfArbalest; +import com.zivilon.cinder_loe.entity.npc.dwarf.RedDwarfBannerBearer; +import com.zivilon.cinder_loe.entity.npc.dwarf.RedDwarfCommander; +import com.zivilon.cinder_loe.entity.npc.dwarf.RedDwarfWarrior; +import com.zivilon.cinder_loe.entity.npc.evil_human.*; +import com.zivilon.cinder_loe.entity.npc.good_human.*; +import com.zivilon.cinder_loe.entity.npc.radagast.*; +import com.zivilon.cinder_loe.entity.trader.*; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; + +public class CinderLoESpawnEgg extends Item { + public static List> ENTITY_CLASSES = new ArrayList<>(); + public String entity_type; + + public CinderLoESpawnEgg() { + this.setTextureName("lotr:spawn_egg"); + this.setCreativeTab(LoECreativeTabs.tabSpawnLoE); + setHasSubtypes(true); + } + + @Override + public String getUnlocalizedName(ItemStack item) { + return "item.spawn_egg_" + getEntityUnlocalizedName(item.getItemDamage()).replaceFirst("^cinder_loe\\.", ""); + } + + public static Class getEntityClass(int meta) { + if (meta >= 0 && meta < ENTITY_CLASSES.size()) { + return ENTITY_CLASSES.get(meta); + } + return Renegade.class; + } + + public static String getEntityUnlocalizedName(int meta) { + Class entityClass = getEntityClass(meta); + String unlocalizedName = (String) EntityList.classToStringMapping.get(entityClass); + return unlocalizedName != null ? unlocalizedName : "Unknown"; + } + + static { + ENTITY_CLASSES.add(Renegade.class); + ENTITY_CLASSES.add(RenegadeCaptain.class); + ENTITY_CLASSES.add(DarkSpider.class); + ENTITY_CLASSES.add(Wraith.class); + ENTITY_CLASSES.add(Limwaith.class); + ENTITY_CLASSES.add(LimwaithBoneWarrior.class); + ENTITY_CLASSES.add(LimwaithWarrior.class); + ENTITY_CLASSES.add(LimwaithBlowgunner.class); + ENTITY_CLASSES.add(LimwaithBannerBearer.class); + ENTITY_CLASSES.add(LimwaithChieftain.class); + ENTITY_CLASSES.add(RedDwarfWarrior.class); + ENTITY_CLASSES.add(RedDwarfArbalest.class); + ENTITY_CLASSES.add(RedDwarfBannerBearer.class); + ENTITY_CLASSES.add(RedDwarfCommander.class); + ENTITY_CLASSES.add(ArnorSoldier.class); + ENTITY_CLASSES.add(ArnorSoldierArcher.class); + ENTITY_CLASSES.add(ArnorBannerBearer.class); + ENTITY_CLASSES.add(BattleNun.class); + ENTITY_CLASSES.add(ArnorCaptain.class); + ENTITY_CLASSES.add(BreeSoldier.class); + ENTITY_CLASSES.add(BreeCrossbowman.class); + ENTITY_CLASSES.add(BreeOutrider.class); + ENTITY_CLASSES.add(BreeSoldierBannerBearer.class); + ENTITY_CLASSES.add(BreeCaptain.class); + ENTITY_CLASSES.add(FangornElk.class); + ENTITY_CLASSES.add(FangornBear.class); + ENTITY_CLASSES.add(FangornWildBoar.class); + ENTITY_CLASSES.add(FangornWolf.class); + ENTITY_CLASSES.add(FangornAuroch.class); + ENTITY_CLASSES.add(BladorthinSmith.class); + ENTITY_CLASSES.add(LimwaithFishmonger.class); + ENTITY_CLASSES.add(LimwaithShaman.class); + ENTITY_CLASSES.add(RedDwarfSmith.class); + ENTITY_CLASSES.add(CorruptDwarf.class); + ENTITY_CLASSES.add(CorruptElf.class); + ENTITY_CLASSES.add(CorruptEnt.class); + ENTITY_CLASSES.add(CorruptHobbit.class); + ENTITY_CLASSES.add(CorruptMan.class); + ENTITY_CLASSES.add(CorruptOrc.class); + ENTITY_CLASSES.add(HobbitBannerBearer.class); + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < ENTITY_CLASSES.size(); i++) { + list.add(new ItemStack(item, 1, i)); + } + } + + public static void spawnCustomCreature(World world, Entity entity) { + if (entity instanceof EntityLiving) { + EntityLiving entityLiving = (EntityLiving)entity; + + entityLiving.onSpawnWithEgg(null); + + world.spawnEntityInWorld(entity); + entityLiving.playLivingSound(); + } + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { + if (!world.isRemote) { + MovingObjectPosition target = getMovingObjectPositionFromPlayer(world, player, true); + + if (target != null && target.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + int x = target.blockX; + int y = target.blockY; + int z = target.blockZ; + + y += 1; + + try { + Entity entity = getEntityClass(itemStack.getItemDamage()).getConstructor(World.class).newInstance(world); + entity.setLocationAndAngles(x + 0.5, y, z + 0.5, MathHelper.wrapAngleTo180_float(world.rand.nextFloat() * 360.0F), 0.0F); + spawnCustomCreature(world, entity); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + if (!player.capabilities.isCreativeMode) { + --itemStack.stackSize; + } + return itemStack; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/ForgingKit.java b/src (1)/main/java/com/zivilon/cinder_loe/items/ForgingKit.java new file mode 100644 index 0000000..29c4b06 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/ForgingKit.java @@ -0,0 +1,58 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRItemSword; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import java.util.List; + +public class ForgingKit extends Item { + public IIcon[] icons; + + public ForgingKit() { + this.setHasSubtypes(true); + setMaxStackSize(64); + this.setMaxDamage(0); + setCreativeTab(LoECreativeTabs.tabMiscLoE); + } + + @Override + public IIcon getIconFromDamage(int damage) { + if (damage < 0 || damage >= icons.length) { + damage = 0; + } + return this.icons[damage]; + } + + @Override + public void registerIcons(IIconRegister iconRegister) { + this.icons = new IIcon[2]; + this.icons[0] = iconRegister.registerIcon("lotr:repair_kit"); + this.icons[1] = iconRegister.registerIcon("lotr:upgrade_kit"); + } + + @Override + public String getUnlocalizedName(ItemStack item) { + switch(item.getItemDamage()) { + case 0: + return "item.repair_kit"; + case 1: + return "item.upgrade_kit"; + default: + return "item.repair_kit"; + } + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < icons.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/LoEArmor.java b/src (1)/main/java/com/zivilon/cinder_loe/items/LoEArmor.java new file mode 100644 index 0000000..087e536 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/LoEArmor.java @@ -0,0 +1,40 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRItemArmor; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class LoEArmor extends LOTRItemArmor { + public Item repair_item; + + public LoEArmor(LOTRMaterial material, int slotType) { + this(material, slotType, ""); + } + public LoEArmor(LOTRMaterial material, int slotType, String s) { + this(material, slotType, s, (Item) null); + } + public LoEArmor(LOTRMaterial material, int slotType, Item item) { + this(material, slotType, "", item); + } + public LoEArmor(LOTRMaterial material, int slotType, Block block) { + this(material, slotType, "", block); + } + public LoEArmor(LOTRMaterial material, int slotType, String s, Block block) { + this(material, slotType, s, Item.getItemFromBlock(block)); + } + public LoEArmor(LOTRMaterial material, int slotType, String s, Item item) { + super(material, slotType, s); + repair_item = item; + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + @Override + public boolean getIsRepairable(ItemStack item, ItemStack repair_material) { + if (repair_material.getItem() == repair_item) + return true; + return false; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/LoEBow.java b/src (1)/main/java/com/zivilon/cinder_loe/items/LoEBow.java new file mode 100644 index 0000000..c412569 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/LoEBow.java @@ -0,0 +1,43 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRItemBow; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class LoEBow extends LOTRItemBow { + public Item repair_item; + + public LoEBow(LOTRMaterial material) { + this(material, (Item) null, 1.0D); + } + public LoEBow(LOTRMaterial material, Block repair_block) { + this(material, Item.getItemFromBlock(repair_block), 1.0D); + } + public LoEBow(LOTRMaterial material, Block repair_block, double damage) { + this(material, Item.getItemFromBlock(repair_block), damage); + } + public LoEBow(LOTRMaterial material, double damage, Block repair_block) { + this(material, Item.getItemFromBlock(repair_block), damage); + } + public LoEBow(LOTRMaterial material, double damage) { + this(material, (Item) null, damage); + } + public LoEBow(LOTRMaterial material, double damage, Item item) { + this(material, item, damage); + } + public LoEBow(LOTRMaterial material, Item item, double damage) { + super(material, damage); + repair_item = item; + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + @Override + public boolean getIsRepairable(ItemStack item, ItemStack repair_material) { + if (repair_material.getItem() == repair_item) + return true; + return false; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/LoEHammer.java b/src (1)/main/java/com/zivilon/cinder_loe/items/LoEHammer.java new file mode 100644 index 0000000..a035da6 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/LoEHammer.java @@ -0,0 +1,31 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRItemHammer; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class LoEHammer extends LOTRItemHammer { + public Item repair_item; + + public LoEHammer(LOTRMaterial material) { + this(material, (Item) null); + } + public LoEHammer(LOTRMaterial material, Block repair_block) { + this(material, Item.getItemFromBlock(repair_block)); + } + public LoEHammer(LOTRMaterial material, Item item) { + super(material); + repair_item = item; + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + @Override + public boolean getIsRepairable(ItemStack item, ItemStack repair_material) { + if (repair_material.getItem() == repair_item) + return true; + return false; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/LoEItemMug.java b/src (1)/main/java/com/zivilon/cinder_loe/items/LoEItemMug.java new file mode 100644 index 0000000..5d39b8b --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/LoEItemMug.java @@ -0,0 +1,103 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.LoECreativeTabs; +import com.zivilon.cinder_loe.potion.LoEPotions; + +import lotr.common.item.LOTRItemMug; +import lotr.common.item.LOTRItemMug.Vessel; +import lotr.client.render.LOTRDrinkIcons; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class LoEItemMug extends LOTRItemMug { + public boolean is_toxic = false; + + @SideOnly(Side.CLIENT) + public IIcon[] drinkIcons; + + @SideOnly(Side.CLIENT) + public IIcon liquidIcon; + + public LoEItemMug(boolean full, boolean food) { + super(full, food, false, 0.0F); + } + + public LoEItemMug(float alc) { + this(true, false, true, alc); + } + + public LoEItemMug(boolean full, boolean food, boolean brew, float alc) { + super(full, food, brew, alc); + setCreativeTab(LoECreativeTabs.tabFoodLoE); + } + + public void setTextureNameFromUnlocalizedName() { + String textureName = getUnlocalizedName().substring("item.".length()); // Strip the "item." prefix + this.setTextureName(textureName); + } + + public LoEItemMug addPotionEffect(int effect_id, int seconds) { + return (LoEItemMug)super.addPotionEffect(effect_id, seconds); + } + public LoEItemMug addPotionEffect(int effect_id, int seconds, int amplifier) { + this.potionEffects.add(new PotionEffect(effect_id, seconds * 20, amplifier)); + return this; + } + + public LoEItemMug setDrinkStats(int i, float f) { + return (LoEItemMug)super.setDrinkStats(i, f); + } + public void registerIcons(IIconRegister iconregister) { + if (this.isFullMug) { + this.drinkIcons = new IIcon[(Vessel.values()).length]; + for (int i = 0; i < (Vessel.values()).length; i++) { + this.drinkIcons[i] = LOTRDrinkIcons.registerDrinkIcon(iconregister, this, getIconString(), (Vessel.values()[i]).name); + } + this.liquidIcon = LOTRDrinkIcons.registerLiquidIcon(iconregister, this, getIconString()); + barrelGui_emptyBucketSlotIcon = iconregister.registerIcon("lotr:barrel_emptyBucketSlot"); + barrelGui_emptyMugSlotIcon = iconregister.registerIcon("lotr:barrel_emptyMugSlot"); + } else { + super.registerIcons(iconregister); + } + } + + public IIcon getIconFromDamage(int i) { + if (this.isFullMug) { + if (i == -1) + return this.liquidIcon; + int vessel = (getVessel(i)).id; + return this.drinkIcons[vessel]; + } + return super.getIconFromDamage(i); + } + + public static Vessel getVessel(int damage) { + int i = damage / vesselMeta; + return Vessel.forMeta(i); + } + public LoEItemMug toxic() { + is_toxic = true; + return this; + } + public ItemStack onEaten(ItemStack itemstack, World world, EntityPlayer entityplayer) { + if (is_toxic) + increment_toxin(entityplayer); + return super.onEaten(itemstack, world, entityplayer); + } + public void increment_toxin(EntityPlayer player) { + int effect_duration = 7200; // 360 seconds * 20 ticks + int effect_potency = 0; // Default to level 1 effect + PotionEffect potion = player.getActivePotionEffect(LoEPotions.herbal_poisoning); + if (potion != null) effect_potency = potion.getAmplifier() + 1; + player.addPotionEffect(new PotionEffect(LoEPotions.herbal_poisoning.id, effect_duration, effect_potency)); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/LoESpear.java b/src (1)/main/java/com/zivilon/cinder_loe/items/LoESpear.java new file mode 100644 index 0000000..e875371 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/LoESpear.java @@ -0,0 +1,31 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRItemSpear; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class LoESpear extends LOTRItemSpear { + public Item repair_item; + + public LoESpear(LOTRMaterial material) { + this(material, (Item) null); + } + public LoESpear(LOTRMaterial material, Block repair_block) { + this(material, Item.getItemFromBlock(repair_block)); + } + public LoESpear(LOTRMaterial material, Item item) { + super(material); + repair_item = item; + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + @Override + public boolean getIsRepairable(ItemStack item, ItemStack repair_material) { + if (repair_material.getItem() == repair_item) + return true; + return false; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/LoESword.java b/src (1)/main/java/com/zivilon/cinder_loe/items/LoESword.java new file mode 100644 index 0000000..395f37a --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/LoESword.java @@ -0,0 +1,36 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRItemSword; +import com.zivilon.cinder_loe.LoECreativeTabs; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class LoESword extends LOTRItemSword { + public Item repair_item; + + public LoESword(LOTRMaterial material) { + this(material, (Item) null); + } + public LoESword(LOTRMaterial material, Block repair_block) { + this(material, Item.getItemFromBlock(repair_block)); + } + public LoESword(LOTRMaterial material, Item item) { + super(material); + repair_item = item; + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + public LoESword setWeaponDamage(float damage) { + this.lotrWeaponDamage = damage; + return this; + } + + @Override + public boolean getIsRepairable(ItemStack item, ItemStack repair_material) { + if (repair_material.getItem() == repair_item) + return true; + return false; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/PallandoStaff.java b/src (1)/main/java/com/zivilon/cinder_loe/items/PallandoStaff.java new file mode 100644 index 0000000..6c06934 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/PallandoStaff.java @@ -0,0 +1,71 @@ +package com.zivilon.cinder_loe.items; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import java.util.List; +import lotr.common.LOTRCreativeTabs; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.fac.LOTRFaction; +import lotr.common.network.LOTRPacketHandler; +import lotr.common.network.LOTRPacketWeaponFX; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.Potion; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +import com.zivilon.cinder_loe.items.WizardStaff; + +public class PallandoStaff extends WizardStaff { + public PallandoStaff() { + super(); + } + + 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 = getFaction(entityplayer); + 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); + 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; + + entity.addPotionEffect(new PotionEffect(Potion.weakness.id, 1200, 0)); + entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 1200, 0)); + } + } + LOTRPacketWeaponFX packet = new LOTRPacketWeaponFX(LOTRPacketWeaponFX.Type.MACE_SAURON, (Entity)entityplayer); + LOTRPacketHandler.networkWrapper.sendToAllAround((IMessage)packet, LOTRPacketHandler.nearEntity((Entity)entityplayer, 64.0D)); + } + return itemstack; + } + + private LOTRFaction getFaction(EntityPlayer player) { + LOTRFaction faction = LOTRLevelData.getData(player).getPledgeFaction(); + if (faction == null) { + faction = LOTRFaction.RHUDEL; + } + return faction; + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/RadagastStaff.java b/src (1)/main/java/com/zivilon/cinder_loe/items/RadagastStaff.java new file mode 100644 index 0000000..8a469e9 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/RadagastStaff.java @@ -0,0 +1,87 @@ +package com.zivilon.cinder_loe.items; + + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +import com.zivilon.cinder_loe.util.BlockPos; +import com.zivilon.cinder_loe.entity.npc.radagast.FangornBear; +import com.zivilon.cinder_loe.entity.npc.radagast.FangornWildBoar; +import com.zivilon.cinder_loe.entity.npc.radagast.FangornAuroch; +import com.zivilon.cinder_loe.entity.npc.radagast.FangornElk; +import com.zivilon.cinder_loe.entity.npc.radagast.FangornAnimal; + +import java.util.Random; + + +import java.util.List; + +public class RadagastStaff extends WizardStaff { + public RadagastStaff() { + super(); + } + + public ItemStack onEaten(ItemStack itemstack, World world, EntityPlayer entityplayer) { + entityplayer.swingItem(); + itemstack.damageItem(2, (EntityLivingBase)entityplayer); + if (!world.isRemote) { + BlockPos location = BlockPos.findSafeSpawnLocation(world, entityplayer); + if (location != null && !isAreaCrowded(world, entityplayer)) { + world.playSoundAtEntity((Entity)entityplayer, "lotr:ent.mallorn.summonEnt", 2.0F, (Item.itemRand.nextFloat() - Item.itemRand.nextFloat()) * 0.2F + 1.0F); + spawnAnimal(location, world); + } else { + world.playSoundAtEntity((Entity)entityplayer, "lotr:item.puff", 1.0F, 2.0F); + } + } + return itemstack; + } + + public boolean isAreaCrowded(World world, EntityPlayer player) { + int radius = 30; // Check within 30 blocks + int maxEntities = 10; // Maximum allowed nearby entities + + AxisAlignedBB checkArea = AxisAlignedBB.getBoundingBox( + player.posX - radius, player.posY - radius, player.posZ - radius, + player.posX + radius, player.posY + radius, player.posZ + radius + ); + List listAnimals = world.getEntitiesWithinAABB(EntityAnimal.class, checkArea); + List listFangornBear = world.getEntitiesWithinAABB(FangornAnimal.class, checkArea); + + // Combine counts from both lists + int totalAnimals = listAnimals.size() + listFangornBear.size(); + + return totalAnimals >= maxEntities; + } + + public void spawnAnimal(BlockPos location, World world) { + Random rand = new Random(); + int choice = rand.nextInt(4); // Generate a random number between 0 and 2 + + EntityLivingBase entity = null; + switch (choice) { + case 0: + entity = new FangornBear(world); // Assuming FangornBear is your entity class for bears + break; + case 1: + entity = new FangornWildBoar(world); // Replace with your wild boar entity class + break; + case 2: + entity = new FangornAuroch(world); // Replace with your auroch entity class + break; + case 3: + entity = new FangornElk(world); // Replace with your auroch entity class + break; + } + + if (entity != null) { + entity.setPosition(location.x + 0.5, location.y, location.z + 0.5); // Center the entity on the block + world.spawnEntityInWorld(entity); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/SarumanStaff.java b/src (1)/main/java/com/zivilon/cinder_loe/items/SarumanStaff.java new file mode 100644 index 0000000..46f3878 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/SarumanStaff.java @@ -0,0 +1,46 @@ +package com.zivilon.cinder_loe.items; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import java.util.List; +import lotr.common.LOTRCreativeTabs; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.fac.LOTRFaction; +import lotr.common.network.LOTRPacketHandler; +import lotr.common.network.LOTRPacketWeaponFX; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.Potion; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +import com.zivilon.cinder_loe.items.WizardStaff; +import com.zivilon.cinder_loe.entity.SarumanFireball; + +public class SarumanStaff extends WizardStaff { + public SarumanStaff() { + super(); + } + + public ItemStack onEaten(ItemStack itemstack, World world, EntityPlayer entityplayer) { + entityplayer.swingItem(); + itemstack.damageItem(2, (EntityLivingBase)entityplayer); + world.playSoundAtEntity((Entity)entityplayer, "mob.ghast.fireball", 2.0F, (Item.itemRand.nextFloat() - Item.itemRand.nextFloat()) * 0.2F + 1.0F); + if (!world.isRemote) { + world.spawnEntityInWorld((Entity)new SarumanFireball(world, ((EntityLivingBase)entityplayer))); + 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 (1)/main/java/com/zivilon/cinder_loe/items/SarumanWhiteStaff.java b/src (1)/main/java/com/zivilon/cinder_loe/items/SarumanWhiteStaff.java new file mode 100644 index 0000000..68984f6 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/SarumanWhiteStaff.java @@ -0,0 +1,46 @@ +package com.zivilon.cinder_loe.items; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import java.util.List; +import lotr.common.LOTRCreativeTabs; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.fac.LOTRFaction; +import lotr.common.network.LOTRPacketHandler; +import lotr.common.network.LOTRPacketWeaponFX; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.Potion; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +import com.zivilon.cinder_loe.items.WizardStaff; +import com.zivilon.cinder_loe.entity.SarumanWhiteFireball; + +public class SarumanWhiteStaff extends WizardStaff { + public SarumanWhiteStaff() { + super(); + } + + public ItemStack onEaten(ItemStack itemstack, World world, EntityPlayer entityplayer) { + entityplayer.swingItem(); + itemstack.damageItem(2, (EntityLivingBase)entityplayer); + world.playSoundAtEntity((Entity)entityplayer, "mob.ghast.fireball", 2.0F, (itemRand.nextFloat() - itemRand.nextFloat()) * 0.2F + 1.0F); + if (!world.isRemote) { + world.spawnEntityInWorld((Entity)new SarumanWhiteFireball(world, (EntityLivingBase)entityplayer)); + 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 (1)/main/java/com/zivilon/cinder_loe/items/UnnamedSpear.java b/src (1)/main/java/com/zivilon/cinder_loe/items/UnnamedSpear.java new file mode 100644 index 0000000..877da04 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/UnnamedSpear.java @@ -0,0 +1,37 @@ +package com.zivilon.cinder_loe.items; + +import lotr.common.item.LOTRItemSpear; +import lotr.common.item.LOTRItemSword; +import lotr.common.item.LOTRMaterial; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public class UnnamedSpear extends LOTRItemSpear { + private static final double ARMOR_DAMAGE = 0.025; // Default is 5% + + public UnnamedSpear(LOTRMaterial material) { + super(material); + } + + @Override + public boolean hitEntity(ItemStack itemStack, EntityLivingBase target, EntityLivingBase attacker) { + if (target instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) target; + for (int i = 0; i < 4; i++) { + ItemStack armorPiece = player.getCurrentArmor(i); + if (armorPiece != null) { + int currentDurabilty = armorPiece.getMaxDamage() - armorPiece.getItemDamage(); + int damageAmount = (int) (currentDurabilty * ARMOR_DAMAGE); + + if (damageAmount < 1) { + damageAmount = 1; + } + + armorPiece.damageItem(damageAmount, player); + } + } + } + return true; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/VoidDagger.java b/src (1)/main/java/com/zivilon/cinder_loe/items/VoidDagger.java new file mode 100644 index 0000000..96f7c06 --- /dev/null +++ b/src (1)/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 (1)/main/java/com/zivilon/cinder_loe/items/WarDart.java b/src (1)/main/java/com/zivilon/cinder_loe/items/WarDart.java new file mode 100644 index 0000000..02e0e13 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/WarDart.java @@ -0,0 +1,164 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.entity.projectile.EntityWarDart; +import com.zivilon.cinder_loe.LoECreativeTabs; + +import lotr.common.dispenser.LOTRDispenseThrowingAxe; +import lotr.common.enchant.LOTREnchantment; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.entity.projectile.LOTREntityThrowingAxe; +import lotr.common.item.LOTRMaterial; +import lotr.common.recipe.LOTRRecipes; +import net.minecraft.block.BlockDispenser; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.creativetab.CreativeTabs; +import java.util.List; + +public class WarDart extends Item { + public IIcon[] icons; + + public WarDart() { + this.setHasSubtypes(true); + setMaxStackSize(4); + this.setMaxDamage(0); + setCreativeTab(LoECreativeTabs.tabCombatLoE); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { + if (itemStack.getItemDamage() > 0) { + if (!player.capabilities.isCreativeMode) { + --itemStack.stackSize; + } + + world.playSoundAtEntity(player, "lotr:item.dart", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F)); + + if (!world.isRemote) { + world.spawnEntityInWorld(new EntityWarDart(world, player, itemStack)); + } + } + return itemStack; + } + + @Override + public IIcon getIconFromDamage(int damage) { + if (damage < 0 || damage >= icons.length) { + damage = 0; + } + return this.icons[damage]; + } + + @Override + public void registerIcons(IIconRegister iconRegister) { + this.icons = new IIcon[15]; + this.icons[0] = iconRegister.registerIcon("lotr:war_dart_headless"); + this.icons[1] = iconRegister.registerIcon("lotr:war_dart_copper"); + this.icons[2] = iconRegister.registerIcon("lotr:war_dart_bronze"); + this.icons[3] = iconRegister.registerIcon("lotr:war_dart_iron"); + this.icons[4] = iconRegister.registerIcon("lotr:war_dart_orc"); + this.icons[5] = iconRegister.registerIcon("lotr:war_dart_dwarven"); + this.icons[6] = iconRegister.registerIcon("lotr:war_dart_uruk"); + this.icons[7] = iconRegister.registerIcon("lotr:war_dart_blue_dwarven"); + this.icons[8] = iconRegister.registerIcon("lotr:war_dart_black_uruk"); + this.icons[9] = iconRegister.registerIcon("lotr:war_dart_elven"); + this.icons[10] = iconRegister.registerIcon("lotr:war_dart_gilded_iron"); + this.icons[11] = iconRegister.registerIcon("lotr:war_dart_red_dwarven"); + this.icons[12] = iconRegister.registerIcon("lotr:war_dart_mithril"); + this.icons[13] = iconRegister.registerIcon("lotr:war_dart_ancient"); + this.icons[14] = iconRegister.registerIcon("lotr:war_dart_morgul"); + } + + public static String getDartMaterial(ItemStack item) { + switch(item.getItemDamage()) { + case 1: + return "copper"; + case 2: + return "bronze"; + case 3: + return "iron"; + case 4: + return "orc"; + case 5: + return "dwarven"; + case 6: + return "uruk"; + case 7: + return "blue_dwarven"; + case 8: + return "black_uruk"; + case 9: + return "elven"; + case 10: + return "gilded_iron"; + case 11: + return "red_dwarven"; + case 12: + return "mithril"; + case 13: + return "ancient"; + case 14: + return "morgul"; + default: + return "headless"; + } + } + + @Override + public String getUnlocalizedName(ItemStack item) { + return "item.war_dart_" + getDartMaterial(item); + } + + @Override + public int getMetadata(int damage) { + return damage; + } + + public static double getDamageFromMeta(int meta) { + switch(meta) { + case 1: return 5.5D; // Copper + case 2: return 5.5D; // Bronze + case 3: return 6.0D; // Iron + case 4: return 6.5D; // Orc + case 5: return 7.0D; // Dwarven + case 6: return 7.0D; // Uruk + case 7: return 7.0D; // Blue Dwarven + case 8: return 7.0D; // Black Uruk + case 9: return 7.0D; // Elven + case 10: return 6.5D; // Gilded Iron + case 11: return 7.0D; // Red Dwarven + case 12: return 9.0D; // Mithril + case 13: return 12.0D; // Ancient + case 14: return 6.5D; // Morgul + default: return 0.0D; + } + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean advanced) { + int damageMeta = stack.getItemDamage(); + if (damageMeta > 0) { + double damagePercent = getDamageFromMeta(damageMeta) * (1.0 / 8) * 100.0; + double roundedDamagePercent = 5 * Math.round(damagePercent / 5.0); + list.add(EnumChatFormatting.DARK_GREEN + "Ranged damage: " + roundedDamagePercent + "%"); + } + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < icons.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/WarDartHeads.java b/src (1)/main/java/com/zivilon/cinder_loe/items/WarDartHeads.java new file mode 100644 index 0000000..e5f5abd --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/WarDartHeads.java @@ -0,0 +1,89 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.LoECreativeTabs; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import java.util.List; + +public class WarDartHeads extends Item { + public IIcon[] icons; + + public WarDartHeads() { + super(); + this.setCreativeTab(LoECreativeTabs.tabMiscLoE); + setHasSubtypes(true); + } + + @Override + public void registerIcons(IIconRegister iconRegister) { + icons = new IIcon[12]; + for (int i = 0; i < 6; i++) { + icons[i] = iconRegister.registerIcon("lotr:war_dart_heads_" + i); + } + for (int i = 0; i < 6; i++) { + icons[i + 6] = iconRegister.registerIcon("lotr:war_dart_heads_" + i + "_morgul"); + } + } + + @Override + public String getUnlocalizedName(ItemStack item) { + return "item.war_dart_heads_" + WarDart.getDartMaterial(item); + } + + @Override + public int getColorFromItemStack(ItemStack stack, int renderPass) { + int damage = stack.getItemDamage(); + + switch (damage) { + case 1: return 0xCA6C40; // Copper + case 2: return 0xC28336; // Bronze + case 3: return 0xD8D8D8; // Iron + case 4: return 0x5D685A; // Orc + case 5: return 0x6B787A; // Dwarven + case 6: return 0x4C4D34; // Uruk + case 7: return 0x577287; // Blue Dwarven + case 8: return 0x444138; // Black Uruk + case 9: return 0xD0C9AC; // Elven + case 10: return 0xFFFFB0; // Gilded Iron + case 11: return 0xFFC48B; // Red dwarven + case 12: return 0xAFB3D3; // Mithril + case 13: return 0x335753; // Ancient + case 14: return 16777215; // Morgul + default: return 0xFFFFFF; // Blank + } + } + + @Override + public IIcon getIconIndex(ItemStack item) { + return getIcon(item, 0); + } + + @Override + public IIcon getIcon(ItemStack stack, int renderPass) { + int count = stack.stackSize; + int dmg = stack.getItemDamage(); + + if (count > 5 || count < 1) { + if (dmg == 14) + return icons[6]; + return icons[0]; + } else { + if (dmg == 14) + return icons[count + 6]; + return icons[count]; + } + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 1; i < 15; i++) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/Whip.java b/src (1)/main/java/com/zivilon/cinder_loe/items/Whip.java new file mode 100644 index 0000000..dc08139 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/Whip.java @@ -0,0 +1,62 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.LoECreativeTabs; + +import java.util.ArrayList; +import java.util.List; + +import lotr.common.LOTRBannerProtection; +import lotr.common.LOTRMod; +import lotr.common.enchant.LOTREnchantment; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.item.LOTRItemSword; +import lotr.common.item.LOTRMaterial; +import lotr.common.item.LOTRWeaponStats; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class Whip extends LOTRItemSword { + public Whip() { + super(LOTRMaterial.FUR); + this.setCreativeTab(LoECreativeTabs.tabCombatLoE); + this.lotrWeaponDamage = 4.0F; + LOTRWeaponStats.registerMeleeReach(Whip.class, 1.5F); + } + + public boolean func_77644_a(ItemStack itemstack, EntityLivingBase hitEntity, EntityLivingBase user) { + super.hitEntity(itemstack, hitEntity, user); + launchWhip(user, hitEntity); + return true; + } + + public EnumAction getItemUseAction(ItemStack itemstack) { + return EnumAction.none; + } + + private void launchWhip(EntityLivingBase user, EntityLivingBase hitEntity) { + World world = ((Entity)user).worldObj; + world.playSoundAtEntity((Entity)user, "lotr:item.balrogWhip", 2.0F, 0.7F + Item.itemRand.nextFloat() * 0.6F); + } + + public boolean getIsRepairable(ItemStack itemstack, ItemStack repairItem) { + return (repairItem.getItem() == Items.leather); + } + + private void checkIncompatibleModifiers(ItemStack itemstack) {} +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/WizardStaff.java b/src (1)/main/java/com/zivilon/cinder_loe/items/WizardStaff.java new file mode 100644 index 0000000..ffaa2df --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/WizardStaff.java @@ -0,0 +1,40 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.LoECreativeTabs; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import lotr.common.entity.projectile.LOTREntityGandalfFireball; +import lotr.common.network.LOTRPacketHandler; +import lotr.common.network.LOTRPacketWeaponFX; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import lotr.common.item.LOTRItemSword; +import lotr.common.item.LOTRStoryItem; + +import com.zivilon.cinder_loe.CinderLoE; + +public class WizardStaff extends LOTRItemSword implements LOTRStoryItem { + public WizardStaff() { + super(CinderLoE.getLOTRMaterialByName("WIZARD")); + this.setCreativeTab(LoECreativeTabs.tabCharacterLoE); + } + + public int getMaxItemUseDuration(ItemStack itemstack) { + return 40; + } + + public EnumAction getItemUseAction(ItemStack itemstack) { + return EnumAction.bow; + } + + public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { + entityplayer.setItemInUse(itemstack, getMaxItemUseDuration(itemstack)); + return itemstack; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/WoodElfRelic.java b/src (1)/main/java/com/zivilon/cinder_loe/items/WoodElfRelic.java new file mode 100644 index 0000000..60e0fe1 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/WoodElfRelic.java @@ -0,0 +1,67 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.CinderLoE; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.fac.LOTRFaction; +import lotr.common.item.LOTRItemSword; +import lotr.common.item.LOTRStoryItem; +import lotr.common.network.LOTRPacketHandler; +import lotr.common.network.LOTRPacketWeaponFX; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.World; + +import java.util.List; + +public class WoodElfRelic extends WizardStaff { + public WoodElfRelic() { + super(); + } + + + 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 = 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 (EntityLivingBase entity : entities) { + if (entity != entityplayer) { + if (entity instanceof EntityLiving) { + 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)); + } + return itemstack; + } +} \ No newline at end of file diff --git a/src (1)/main/java/com/zivilon/cinder_loe/items/unitLevelTool.java b/src (1)/main/java/com/zivilon/cinder_loe/items/unitLevelTool.java new file mode 100644 index 0000000..cadb92f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/items/unitLevelTool.java @@ -0,0 +1,82 @@ +package com.zivilon.cinder_loe.items; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.LoECreativeTabs; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.npc.LOTRHiredNPCInfo; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +public class unitLevelTool extends Item { + + public unitLevelTool() { + setCreativeTab(LoECreativeTabs.tabMiscLoE); + } + + public EnumAction getItemUseAction(ItemStack itemstack) { + return EnumAction.bow; + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { + List hiredNPCs = this.findHiredNPCsNearPlayer(player); + + if (!hiredNPCs.isEmpty()) { + for (LOTREntityNPC hiredNPC : hiredNPCs) { + if (hiredNPC != null && hiredNPC.hiredNPCInfo != null) { + try { + LOTRHiredNPCInfo npcInfo = hiredNPC.hiredNPCInfo; + + Method addExperienceMethod = LOTRHiredNPCInfo.class.getDeclaredMethod("addExperience", int.class); + addExperienceMethod.setAccessible(true); + + int xpToAdd = 1; + + try { + xpToAdd = Integer.parseInt(itemStack.getDisplayName()); + } catch (NumberFormatException e) { + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Tool name wasnt a number, applying 1 Xp instead")); + continue; + } + + addExperienceMethod.invoke(npcInfo, xpToAdd); + + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + } + return itemStack; + } + + private List findHiredNPCsNearPlayer(EntityPlayer player) { + // Logic to find all nearby hired NPCs within a certain range + double range = 20.0D; // Set the range within which the NPCs should be found + List nearbyHiredNPCs = new ArrayList<>(); + + for (Object entity : player.worldObj.getEntitiesWithinAABB(LOTREntityNPC.class, player.boundingBox.expand(range, range, range))) { + LOTREntityNPC npc = (LOTREntityNPC) entity; + + // Check if the player has sufficient permission level (admin tool usage) + if (npc.hiredNPCInfo.getHiringPlayerUUID() != null && player.canCommandSenderUseCommand(2, "")) { + nearbyHiredNPCs.add(npc); + } + } + + return nearbyHiredNPCs; + } + + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEnchantmentHelper.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEnchantmentHelper.java new file mode 100644 index 0000000..230f580 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEnchantmentHelper.java @@ -0,0 +1,27 @@ +package com.zivilon.cinder_loe.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import lotr.common.item.LOTRWeaponStats; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantment; +import lotr.common.enchant.LOTREnchantmentHelper; + +@Mixin(EnchantmentHelper.class) +public class MixinEnchantmentHelper { + + /** + * @author Shinare + * @reason Having full knockbackResistance attribute now negates bonus knockback as well + */ + @Overwrite + public static int getKnockbackModifier(EntityLivingBase attacker, EntityLivingBase target) { + int vanilla_ench_level = EnchantmentHelper.getEnchantmentLevel(Enchantment.knockback.effectId, attacker.getHeldItem()); + int base_extra_knockback = LOTRWeaponStats.getBaseExtraKnockback(attacker.getHeldItem()); + int modifier_extra_knockback = LOTREnchantmentHelper.calcExtraKnockback(attacker.getHeldItem()); + if (target.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).getAttributeValue() == 1.0D) return 0; + return vanilla_ench_level + base_extra_knockback + modifier_extra_knockback; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntity.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntity.java new file mode 100644 index 0000000..a1e4e4c --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntity.java @@ -0,0 +1,12 @@ +package com.zivilon.cinder_loe.mixins; + +import net.minecraft.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(Entity.class) +public interface MixinEntity { + + @Accessor("invulnerable") + void setInvulnerable(boolean invulnerable); +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntityArrow.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntityArrow.java new file mode 100644 index 0000000..bda8bc1 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntityArrow.java @@ -0,0 +1,305 @@ +package com.zivilon.cinder_loe.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; +import lotr.common.item.LOTRWeaponStats; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantment; +import lotr.common.enchant.LOTREnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.play.server.S2BPacketChangeGameState; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import java.util.List; +import net.minecraft.entity.monster.EntityEnderman; + +@Mixin(EntityArrow.class) +public abstract class MixinEntityArrow extends Entity { + + public MixinEntityArrow(World world) { + super(world); + } + + @Shadow + public abstract void setIsCritical(boolean p_70243_1_); + @Shadow + public abstract boolean getIsCritical(); + + @Shadow + private Block field_145790_g; + @Shadow + private int field_145791_d; + @Shadow + private int field_145792_e; + @Shadow + private int field_145789_f; + @Shadow + private boolean inGround; + @Shadow + public int arrowShake; + @Shadow + private int inData; + @Shadow + private int ticksInGround; + @Shadow + private int ticksInAir; + @Shadow + public Entity shootingEntity; + @Shadow + private int knockbackStrength; + @Shadow + private double damage; + + /** + * @author Shinare + * @reason Having full knockbackResistance attribute now negates bonus knockback as well + */ + @Overwrite + public void onUpdate() { + super.onUpdate(); + + EntityArrow arrow = (EntityArrow)(Object)this; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) { + float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f) * 180.0D / Math.PI); + } + + Block block = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f); + + if (block.getMaterial() != Material.air) { + block.setBlockBoundsBasedOnState(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f); + AxisAlignedBB axisalignedbb = block.getCollisionBoundingBoxFromPool(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f); + + if (axisalignedbb != null && axisalignedbb.isVecInside(Vec3.createVectorHelper(this.posX, this.posY, this.posZ))) { + this.inGround = true; + } + } + + if (this.arrowShake > 0) { + --this.arrowShake; + } + + if (this.inGround) { + int j = this.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f); + + if (block == this.field_145790_g && j == this.inData) { + ++this.ticksInGround; + + if (this.ticksInGround == 1200) { + this.setDead(); + } + } else { + this.inGround = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.ticksInGround = 0; + this.ticksInAir = 0; + } + } else { + ++this.ticksInAir; + Vec3 vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + Vec3 vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition movingobjectposition = this.worldObj.func_147447_a(vec31, vec3, false, true, false); + vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (movingobjectposition != null) { + vec3 = Vec3.createVectorHelper(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord); + } + + Entity entity = null; + List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double d0 = 0.0D; + int i; + float f1; + + for (i = 0; i < list.size(); ++i) { + Entity entity1 = (Entity)list.get(i); + + if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) { + f1 = 0.3F; + AxisAlignedBB axisalignedbb1 = entity1.boundingBox.expand((double)f1, (double)f1, (double)f1); + MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3); + + if (movingobjectposition1 != null) { + double d1 = vec31.distanceTo(movingobjectposition1.hitVec); + + if (d1 < d0 || d0 == 0.0D) { + entity = entity1; + d0 = d1; + } + } + } + } + + if (entity != null) { + movingobjectposition = new MovingObjectPosition(entity); + } + + if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer) { + EntityPlayer entityplayer = (EntityPlayer)movingobjectposition.entityHit; + + if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer)) { + movingobjectposition = null; + } + } + + float f2; + float f4; + + if (movingobjectposition != null) { + if (movingobjectposition.entityHit != null) { + f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + int k = MathHelper.ceiling_double_int((double)f2 * this.damage); + + if (this.getIsCritical()) { + k += this.rand.nextInt(k / 2 + 2); + } + + DamageSource damagesource = null; + + if (this.shootingEntity == null) { + damagesource = DamageSource.causeArrowDamage(arrow, this); + } else { + damagesource = DamageSource.causeArrowDamage(arrow, this.shootingEntity); + } + + if (arrow.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman)) { + movingobjectposition.entityHit.setFire(5); + } + + if (movingobjectposition.entityHit.attackEntityFrom(damagesource, (float)k)) { + if (movingobjectposition.entityHit instanceof EntityLivingBase) { + EntityLivingBase entitylivingbase = (EntityLivingBase)movingobjectposition.entityHit; + + if (!this.worldObj.isRemote) { + entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1); + } + + + double knockback_resistance = entitylivingbase.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).getAttributeValue(); + if (this.knockbackStrength > 0 && knockback_resistance < 1.0D) { + f4 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (f4 > 0.0F) { + entitylivingbase.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4); + } + } + + if (this.shootingEntity != null && this.shootingEntity instanceof EntityLivingBase) { + EnchantmentHelper.func_151384_a(entitylivingbase, this.shootingEntity); + EnchantmentHelper.func_151385_b((EntityLivingBase)this.shootingEntity, entitylivingbase); + } + + if (this.shootingEntity != null && entitylivingbase != this.shootingEntity && entitylivingbase instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP) { + ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(6, 0.0F)); + } + } + + arrow.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + + if (!(movingobjectposition.entityHit instanceof EntityEnderman)) { + arrow.setDead(); + } + } else { + this.motionX *= -0.10000000149011612D; + this.motionY *= -0.10000000149011612D; + this.motionZ *= -0.10000000149011612D; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + } + } else { + this.field_145791_d = movingobjectposition.blockX; + this.field_145792_e = movingobjectposition.blockY; + this.field_145789_f = movingobjectposition.blockZ; + this.field_145790_g = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f); + this.inData = arrow.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f); + this.motionX = (double)((float)(movingobjectposition.hitVec.xCoord - this.posX)); + this.motionY = (double)((float)(movingobjectposition.hitVec.yCoord - this.posY)); + this.motionZ = (double)((float)(movingobjectposition.hitVec.zCoord - this.posZ)); + f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / (double)f2 * 0.05000000074505806D; + this.posY -= this.motionY / (double)f2 * 0.05000000074505806D; + this.posZ -= this.motionZ / (double)f2 * 0.05000000074505806D; + this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.arrowShake = 7; + this.setIsCritical(false); + + if (this.field_145790_g.getMaterial() != Material.air) { + this.field_145790_g.onEntityCollidedWithBlock(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f, this); + } + } + } + + if (arrow.getIsCritical()) { + for (i = 0; i < 4; ++i) { + arrow.worldObj.spawnParticle("crit", arrow.posX + arrow.motionX * (double)i / 4.0D, arrow.posY + arrow.motionY * (double)i / 4.0D, arrow.posZ + arrow.motionZ * (double)i / 4.0D, -arrow.motionX, -arrow.motionY + 0.2D, -arrow.motionZ); + } + } + + arrow.posX += arrow.motionX; + arrow.posY += arrow.motionY; + arrow.posZ += arrow.motionZ; + f2 = MathHelper.sqrt_double(arrow.motionX * arrow.motionX + arrow.motionZ * arrow.motionZ); + arrow.rotationYaw = (float)(Math.atan2(arrow.motionX, arrow.motionZ) * 180.0D / Math.PI); + + for (arrow.rotationPitch = (float)(Math.atan2(arrow.motionY, (double)f2) * 180.0D / Math.PI); arrow.rotationPitch - arrow.prevRotationPitch < -180.0F; arrow.prevRotationPitch -= 360.0F) { + ; + } + + while (arrow.rotationPitch - arrow.prevRotationPitch >= 180.0F) { + arrow.prevRotationPitch += 360.0F; + } + + while (arrow.rotationYaw - arrow.prevRotationYaw < -180.0F) { + arrow.prevRotationYaw -= 360.0F; + } + + while (arrow.rotationYaw - arrow.prevRotationYaw >= 180.0F) { + arrow.prevRotationYaw += 360.0F; + } + + arrow.rotationPitch = arrow.prevRotationPitch + (arrow.rotationPitch - arrow.prevRotationPitch) * 0.2F; + arrow.rotationYaw = arrow.prevRotationYaw + (arrow.rotationYaw - arrow.prevRotationYaw) * 0.2F; + float f3 = 0.99F; + f1 = 0.05F; + + if (arrow.isInWater()) { + for (int l = 0; l < 4; ++l) { + f4 = 0.25F; + arrow.worldObj.spawnParticle("bubble", arrow.posX - arrow.motionX * (double)f4, arrow.posY - arrow.motionY * (double)f4, arrow.posZ - arrow.motionZ * (double)f4, arrow.motionX, arrow.motionY, arrow.motionZ); + } + + f3 = 0.8F; + } + + if (arrow.isWet()) { + arrow.extinguish(); + } + + arrow.motionX *= (double)f3; + arrow.motionY *= (double)f3; + arrow.motionZ *= (double)f3; + arrow.motionY -= (double)f1; + arrow.setPosition(arrow.posX, arrow.posY, arrow.posZ); + this.func_145775_I(); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntityLivingBase.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntityLivingBase.java new file mode 100644 index 0000000..b767d9f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntityLivingBase.java @@ -0,0 +1,335 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.util.*; + +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeHooks; + +import java.lang.reflect.*; +import java.util.List; +import java.util.UUID; + +@Mixin(EntityLivingBase.class) +public abstract class MixinEntityLivingBase extends Entity implements IEntityLivingBase { + private static boolean checked_cauldron = false; + private static Method cauldron_method; + + public int despawn_timer = -1; + public UUID warband_uuid = null; + + @Shadow + protected int entityAge; + @Shadow + public int maxHurtTime; + @Shadow + public float attackedAtYaw; + @Shadow + protected EntityPlayer attackingPlayer; + @Shadow + protected int recentlyHit; + @Shadow + public int hurtTime; + @Shadow + public float prevHealth; + @Shadow + protected float lastDamage; + @Shadow + public int maxHurtResistantTime; + @Shadow + public float limbSwingAmount; + + @Shadow + protected abstract float getSoundPitch(); + @Shadow + protected abstract float getSoundVolume(); + @Shadow + protected abstract String getHurtSound(); + @Shadow + public abstract void onDeath(DamageSource source); + @Shadow + protected abstract String getDeathSound(); + @Shadow + public abstract float getHealth(); + @Shadow + public abstract void knockBack(Entity entity, float strength, double direction_x, double direction_z); + @Shadow + public abstract void setRevengeTarget(EntityLivingBase p_70604_1_); + @Shadow + protected abstract void damageEntity(DamageSource p_70665_1_, float p_70665_2_); + @Shadow + public abstract ItemStack getEquipmentInSlot(int p_71124_1_); + @Shadow + public abstract boolean isPotionActive(int p_82165_1_); + @Shadow + public abstract boolean isPotionActive(Potion p_70644_1_); + + public MixinEntityLivingBase(World world) { + super(world); + } + + /** + * @author Shinare + * @reason Adding damage event method + */ + @Overwrite + public boolean attackEntityFrom(DamageSource source, float damage) { + if (ForgeHooks.onLivingAttack((EntityLivingBase)(Object)this, source, damage)) return false; + if (this.isEntityInvulnerable()) return false; + if (this.worldObj.isRemote) return false; + this.entityAge = 0; + + if (this.getHealth() <= 0.0F) return false; + if (source.isFireDamage() && isPotionActive(Potion.fireResistance)) return false; + + if (!(checked_cauldron)) { + check_cauldron(); + checked_cauldron = true; + } + + DamageEvent event = new DamageEvent(source, damage, (EntityLivingBase)(Object)this, source.getEntity()); + Pair result = DamageEvent.run_events(event); + if (result.value) return false; + damage = result.key.damage; + + if (cauldron_method == null) { + if ((source == DamageSource.anvil || source == DamageSource.fallingBlock) && this.getEquipmentInSlot(4) != null) { + this.getEquipmentInSlot(4).damageItem((int)(damage * 4.0F + this.rand.nextFloat() * damage * 2.0F), (EntityLivingBase)(Object)this); + damage *= 0.75F; + } + } + + this.limbSwingAmount = 1.5F; + boolean flag = true; + + if (this.hurtResistantTime > (float)this.maxHurtResistantTime / 2.0F) { + if (damage <= this.lastDamage) return false; + if (cauldron_method != null) { + boolean cauldron_cancel = entitydamage_cauldron(source, damage - this.lastDamage); + if (!cauldron_cancel) return false; + } else { + this.damageEntity(source, damage - this.lastDamage); + } + this.lastDamage = damage; + flag = false; + } else { + if (cauldron_method != null) { + float previousHealth = getHealth(); + boolean cauldron_cancel = entitydamage_cauldron(source, damage); + if (!cauldron_cancel) return false; + + this.lastDamage = damage; + this.prevHealth = previousHealth; + this.hurtResistantTime = this.maxHurtResistantTime; + this.hurtTime = this.maxHurtTime = 10; + } else { + this.lastDamage = damage; + this.prevHealth = this.getHealth(); + this.hurtResistantTime = this.maxHurtResistantTime; + this.damageEntity(source, damage); + this.hurtTime = this.maxHurtTime = 10; + } + } + + this.attackedAtYaw = 0.0F; + Entity entity = source.getEntity(); + + if (entity != null) { + if (entity instanceof EntityLivingBase) + this.setRevengeTarget((EntityLivingBase)entity); + + if (entity instanceof EntityPlayer) { + this.recentlyHit = 100; + this.attackingPlayer = (EntityPlayer)entity; + } else if (entity instanceof EntityTameable) { + EntityTameable entitywolf = (EntityTameable)entity; + + if (entitywolf.isTamed()) { + this.recentlyHit = 100; + this.attackingPlayer = null; + } + } + } + + if (flag) { + this.worldObj.setEntityState((Entity)this, (byte)2); + if (source != DamageSource.drown) + this.setBeenAttacked(); + + if (entity != null) { + double d1 = entity.posX - this.posX; + double d0; + + for (d0 = entity.posZ - this.posZ; d1 * d1 + d0 * d0 < 1.0E-4D; d0 = (Math.random() - Math.random()) * 0.01D) + d1 = (Math.random() - Math.random()) * 0.01D; + + this.attackedAtYaw = (float)(Math.atan2(d0, d1) * 180.0D / Math.PI) - this.rotationYaw; + this.knockBack(entity, damage, d1, d0); + } else { + this.attackedAtYaw = (float)((int)(Math.random() * 2.0D) * 180); + } + } + + String sound; + + if (getHealth() <= 0.0F) { + sound = getDeathSound(); + + if (flag && sound != null) + this.playSound(sound, getSoundVolume(), getSoundPitch()); + + onDeath(source); + } else { + sound = getHurtSound(); + + if (flag && sound != null) + this.playSound(sound, getSoundVolume(), getSoundPitch()); + } + + return true; + } + + @Dynamic + private void check_cauldron() { + try { + Class target_class = EntityLivingBase.class; + Method[] methods = target_class.getDeclaredMethods(); + + for (Method method : methods) { + if (method.getName().equals("damageEntity_CB")) { + cauldron_method = method; + return; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return; + } + + @Dynamic + public boolean entitydamage_cauldron(DamageSource source, float damage) { + boolean return_value = true; + if (cauldron_method != null) { + try { + Object result = cauldron_method.invoke(this, source, damage); + if (result instanceof Boolean) { // Check if the result is a boolean + return_value = (Boolean) result; + } + } catch (IllegalAccessException | InvocationTargetException e) { + } + } + return return_value; + } + + /** + * Add support for despawn after specified time loaded + * Add support for following a warband leader + */ + @Inject(method = "writeEntityToNBT", at = @At("TAIL")) + private void writeWarbandNBT(NBTTagCompound compound, CallbackInfo ci) { + compound.setInteger("DespawnTimer", despawn_timer); + compound.setString("WarbandLeader", warband_uuid != null ? warband_uuid.toString() : ""); + } + @Inject(method = "readEntityFromNBT", at = @At("TAIL")) + private void readWarbandNBT(NBTTagCompound compound, CallbackInfo ci) { + despawn_timer = compound.getInteger("DespawnTimer"); + if (compound.hasKey("WarbandLeader")) { + String idStr = compound.getString("WarbandLeader"); + if (!idStr.isEmpty()) warband_uuid = UUID.fromString(idStr); + } + + String sound; + + if (getHealth() <= 0.0F) { + sound = getDeathSound(); + + if (flag && sound != null) + this.playSound(sound, getSoundVolume(), getSoundPitch()); + + onDeath(source); + } else { + sound = getHurtSound(); + + if (flag && sound != null) + this.playSound(sound, getSoundVolume(), getSoundPitch()); + } + + return true; + } + + @Dynamic + private void check_cauldron() { + try { + Class target_class = EntityLivingBase.class; + Method[] methods = target_class.getDeclaredMethods(); + + for (Method method : methods) { + if (method.getName().equals("damageEntity_CB")) { + cauldron_method = method; + return; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return; + } + + @Dynamic + public boolean entitydamage_cauldron(DamageSource source, float damage) { + boolean return_value = true; + if (cauldron_method != null) { + try { + Object result = cauldron_method.invoke(this, source, damage); + if (result instanceof Boolean) { // Check if the result is a boolean + return_value = (Boolean) result; + } + } catch (IllegalAccessException | InvocationTargetException e) { + } + } + return return_value; + } + @Inject(method = "onUpdate", at = @At("TAIL")) + private void onUpdate(CallbackInfo ci) { + if (despawn_timer > -1) { + despawn_timer--; + if (despawn_timer == 0) { + if (warband_uuid == ((EntityLivingBase)(Object)this).getUniqueID()) { + MinecraftServer.getServer().getConfigurationManager().sendChatMsg(new ChatComponentText(EnumChatFormatting.GRAY + "Warband has disbanded")); + } + ((EntityLivingBase)(Object)this).setDead(); + } + } + } + @Override + public void set_despawn_timer(int ticks) { + this.despawn_timer = ticks; + } + @Override + public void set_warband_uuid(UUID uuid) { + this.warband_uuid = uuid; + } + @Override + public UUID get_warband_uuid() { + return this.warband_uuid; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntityPlayer.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntityPlayer.java new file mode 100644 index 0000000..9625c7e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinEntityPlayer.java @@ -0,0 +1,332 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.util.Pair; +import com.zivilon.cinder_loe.util.DamageEvent; +import com.zivilon.cinder_loe.util.IMixinEntityPlayer; +import com.zivilon.cinder_loe.potion.LoEPotions; +import com.zivilon.cinder_loe.potion.PotionHerbPoison; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.*; +import net.minecraft.entity.boss.EntityDragonPart; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.player.*; +import net.minecraft.entity.projectile.EntityFishHook; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryEnderChest; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.stats.*; +import net.minecraft.util.*; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.enchantment.EnchantmentHelper; + +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.ISpecialArmor.ArmorProperties; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.AttackEntityEvent; + +import com.mojang.authlib.GameProfile; + +import java.util.HashMap; +import java.util.List; + +@Mixin(EntityPlayer.class) +public abstract class MixinEntityPlayer extends EntityLivingBase implements IMixinEntityPlayer { + public int last_pickpocket_attempt = 0; + + public MixinEntityPlayer(World world, GameProfile p_i45324_2_) { + super(world); + } + + @Shadow + public static final String PERSISTED_NBT_TAG = "PlayerPersisted"; + @Shadow + private HashMap spawnChunkMap; + @Shadow + private HashMap spawnForcedMap; + @Shadow + public InventoryPlayer inventory; + @Shadow + private InventoryEnderChest theInventoryEnderChest; + @Shadow + public Container inventoryContainer; + @Shadow + public Container openContainer; + @Shadow + protected FoodStats foodStats; + @Shadow + protected int flyToggleTimer; + @Shadow + public float prevCameraYaw; + @Shadow + public float cameraYaw; + @Shadow + public int xpCooldown; + @Shadow + protected boolean sleeping; + @Shadow + public ChunkCoordinates playerLocation; + @Shadow + private int sleepTimer; + @Shadow + private ChunkCoordinates spawnChunk; + @Shadow + private boolean spawnForced; + @Shadow + private ChunkCoordinates startMinecartRidingCoordinate; + @Shadow + public PlayerCapabilities capabilities; + @Shadow + public int experienceLevel; + @Shadow + public int experienceTotal; + @Shadow + public float experience; + @Shadow + private ItemStack itemInUse; + @Shadow + private int itemInUseCount; + @Shadow + protected float speedOnGround; + @Shadow + protected float speedInAir; + @Shadow + public EntityFishHook fishEntity; + @Shadow + public void destroyCurrentEquippedItem() {} + @Shadow + public void addStat(StatBase p_71064_1_, int p_71064_2_) {} + @Shadow + public ItemStack getCurrentEquippedItem() { return null;} + @Shadow + public void onEnchantmentCritical(Entity p_71047_1_) {} + @Shadow + public void onCriticalHit(Entity p_71009_1_) {} + @Shadow + public void triggerAchievement(StatBase p_71029_1_) {} + @Shadow + public abstract void addExhaustion(float p_71020_1_); + + /** + * @author Shinare + * @reason Removed vanilla blocking damage reduction + */ + @Overwrite + protected void damageEntity(DamageSource source, float damage) { + if (!this.isEntityInvulnerable()) + { + damage = ForgeHooks.onLivingHurt(this, source, damage); + if (damage <= 0) return; + + damage = ArmorProperties.ApplyArmor(this, inventory.armorInventory, source, damage); + if (damage <= 0) return; + damage = this.applyPotionDamageCalculations(source, damage); + float f1 = damage; + damage = Math.max(damage - this.getAbsorptionAmount(), 0.0F); + this.setAbsorptionAmount(this.getAbsorptionAmount() - (f1 - damage)); + + if (damage != 0.0F) + { + this.addExhaustion(source.getHungerDamage()); + float f2 = this.getHealth(); + this.setHealth(this.getHealth() - damage); + this.func_110142_aN().func_94547_a(source, f2, damage); + } + } + } + @Override + public void set_last_pickpocket_attempt(int i) { + this.last_pickpocket_attempt = i; + } + @Override + public int get_last_pickpocket_attempt() { + return this.last_pickpocket_attempt; + } + /* Proper solution for later + @Redirect( + method = "func_71059_n", + at = @At(value = "FIELD", target = "Lnet/minecraft/entity/Entity;field_70143_R:F", remap = false) + ) + private float redirectFallDistanceForCrit(Entity instance) { + if (instance instanceof EntityPlayer) { + PotionEffect poison = ((EntityPlayer) instance).getActivePotionEffect(LoEPotions.herbal_poisoning); + if (poison != null && poison.getAmplifier() >= 1) { + System.out.println("Setting fall distance to 0.0F"); + return 0.0F; // no fall distance = no crit + } + } + System.out.println("Preserving fall distance."); + return instance.fallDistance; + }*/ + + @Overwrite + public void attackTargetEntityWithCurrentItem(Entity p_71059_1_) + { + if (MinecraftForge.EVENT_BUS.post(new AttackEntityEvent(((EntityPlayer)(Object)this), p_71059_1_))) + { + return; + } + ItemStack stack = getCurrentEquippedItem(); + if (stack != null && stack.getItem().onLeftClickEntity(stack, ((EntityPlayer)(Object)this), p_71059_1_)) + { + return; + } + if (p_71059_1_.canAttackWithItem()) + { + if (!p_71059_1_.hitByEntity(this)) + { + float f = (float)this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); + int i = 0; + float f1 = 0.0F; + + if (p_71059_1_ instanceof EntityLivingBase) + { + f1 = EnchantmentHelper.getEnchantmentModifierLiving(this, (EntityLivingBase)p_71059_1_); + i += EnchantmentHelper.getKnockbackModifier(this, (EntityLivingBase)p_71059_1_); + } + + if (this.isSprinting()) + { + ++i; + } + + if (f > 0.0F || f1 > 0.0F) + { + boolean flag = this.fallDistance > 0.0F && !this.onGround && !this.isOnLadder() && !this.isInWater() && !this.isPotionActive(Potion.blindness) && this.ridingEntity == null && p_71059_1_ instanceof EntityLivingBase; + System.out.println("Hello"); + if (PotionHerbPoison.should_cancel_crit((EntityPlayer)(Object)this)) { + flag = false; + } + + if (flag && f > 0.0F) + { + f *= 1.5F; + } + + f += f1; + boolean flag1 = false; + int j = EnchantmentHelper.getFireAspectModifier(((EntityPlayer)(Object)this)); + + if (p_71059_1_ instanceof EntityLivingBase && j > 0 && !p_71059_1_.isBurning()) + { + flag1 = true; + p_71059_1_.setFire(1); + } + + boolean flag2 = p_71059_1_.attackEntityFrom(DamageSource.causePlayerDamage(((EntityPlayer)(Object)this)), f); + + if (flag2) + { + if (i > 0) + { + p_71059_1_.addVelocity((double)(-MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F) * (float)i * 0.5F), 0.1D, (double)(MathHelper.cos(((EntityPlayer)(Object)this).rotationYaw * (float)Math.PI / 180.0F) * (float)i * 0.5F)); + ((EntityPlayer)(Object)this).motionX *= 0.6D; + ((EntityPlayer)(Object)this).motionZ *= 0.6D; + ((EntityPlayer)(Object)this).setSprinting(false); + } + + if (flag) + { + this.onCriticalHit(p_71059_1_); + } + + if (f1 > 0.0F) + { + this.onEnchantmentCritical(p_71059_1_); + } + + if (f >= 18.0F) + { + this.triggerAchievement(AchievementList.overkill); + } + + ((EntityPlayer)(Object)this).setLastAttacker(p_71059_1_); + + if (p_71059_1_ instanceof EntityLivingBase) + { + EnchantmentHelper.func_151384_a((EntityLivingBase)p_71059_1_, ((EntityPlayer)(Object)this)); + } + + EnchantmentHelper.func_151385_b(((EntityPlayer)(Object)this), p_71059_1_); + ItemStack itemstack = ((EntityPlayer)(Object)this).getCurrentEquippedItem(); + Object object = p_71059_1_; + + if (p_71059_1_ instanceof EntityDragonPart) + { + IEntityMultiPart ientitymultipart = ((EntityDragonPart)p_71059_1_).entityDragonObj; + + if (ientitymultipart != null && ientitymultipart instanceof EntityLivingBase) + { + object = (EntityLivingBase)ientitymultipart; + } + } + + if (itemstack != null && object instanceof EntityLivingBase) + { + itemstack.hitEntity((EntityLivingBase)object, ((EntityPlayer)(Object)this)); + + if (itemstack.stackSize <= 0) + { + ((EntityPlayer)(Object)this).destroyCurrentEquippedItem(); + } + } + + if (p_71059_1_ instanceof EntityLivingBase) + { + this.addStat(StatList.damageDealtStat, Math.round(f * 10.0F)); + + if (j > 0) + { + p_71059_1_.setFire(j * 4); + } + } + + this.addExhaustion(0.3F); + } + else if (flag1) + { + p_71059_1_.extinguish(); + } + } + } + } + } + + @Inject(method = "onLivingUpdate", at = @At("TAIL")) + public void disableHotbarSlotsHerbalPoisoning(CallbackInfo ci) { + EntityPlayer player = (EntityPlayer)(Object)this; + PotionEffect effect = player.getActivePotionEffect(LoEPotions.herbal_poisoning); + + if (effect != null && effect.getAmplifier() >= 2) { + int slot = player.inventory.currentItem; + if (slot >= 3 && slot <= 8) { + player.inventory.currentItem = 0; + } + } + } + public boolean canAttackWithItem() { + EntityPlayer player = (EntityPlayer)(Object)this; + PotionEffect effect = player.getActivePotionEffect(LoEPotions.herbal_poisoning); + + if (effect != null && effect.getAmplifier() >= 2) { + int slot = player.inventory.currentItem; + if (slot >= 3 && slot <= 8) { + if (CinderLoE.DEBUG) System.out.println("ATTACK DENIED"); + return false; + } + } + return super.canAttackWithItem(); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinFoodStats.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinFoodStats.java new file mode 100644 index 0000000..a616e15 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinFoodStats.java @@ -0,0 +1,75 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.potion.*; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemFood; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.potion.*; +import net.minecraft.util.*; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; + +@Mixin(FoodStats.class) +public class MixinFoodStats { + @Shadow + private int foodLevel = 20; + @Shadow + private float foodSaturationLevel = 5.0F; + @Shadow + private float foodExhaustionLevel; + @Shadow + private int foodTimer; + @Shadow + private int prevFoodLevel = 20; + @Shadow + public void addExhaustion(float p_71020_1_) {}; + + @Overwrite + public void onUpdate(EntityPlayer player) { + EnumDifficulty enumdifficulty = player.worldObj.difficultySetting; + this.prevFoodLevel = this.foodLevel; + + if (this.foodExhaustionLevel > 4.0F) { + this.foodExhaustionLevel -= 4.0F; + + if (this.foodSaturationLevel > 0.0F) { + this.foodSaturationLevel = Math.max(this.foodSaturationLevel - 1.0F, 0.0F); + } else if (enumdifficulty != EnumDifficulty.PEACEFUL) { + this.foodLevel = Math.max(this.foodLevel - 1, 0); + } + } + + if (player.worldObj.getGameRules().getGameRuleBooleanValue("naturalRegeneration") && this.foodLevel >= 18 && player.shouldHeal()) { + ++this.foodTimer; + + if (this.foodTimer >= 80) { + boolean has_herbal_poisoning = false; + PotionEffect potion = player.getActivePotionEffect(LoEPotions.herbal_poisoning); + if (potion == null || potion.getAmplifier() < 1) + player.heal(1.0F); + this.addExhaustion(3.0F); + this.foodTimer = 0; + } + } else if (this.foodLevel <= 0) { + ++this.foodTimer; + + if (this.foodTimer >= 80) { + if (player.getHealth() > 10.0F || enumdifficulty == EnumDifficulty.HARD || player.getHealth() > 1.0F && enumdifficulty == EnumDifficulty.NORMAL) { + player.attackEntityFrom(DamageSource.starve, 1.0F); + } + + this.foodTimer = 0; + } + } else { + this.foodTimer = 0; + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinItemRenderer.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..b44dd96 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinItemRenderer.java @@ -0,0 +1,284 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.CinderLoE_Config; +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import com.zivilon.cinder_loe.util.Utilities; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import org.spongepowered.asm.mixin.Dynamic; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +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.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemCloth; +import net.minecraft.item.ItemMap; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.MapData; +import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.IItemRenderer.ItemRenderType; +import net.minecraftforge.client.MinecraftForgeClient; + +import static net.minecraftforge.client.IItemRenderer.ItemRenderType.*; +import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.*; + +@Mixin(ItemRenderer.class) +public abstract class MixinItemRenderer { + + @Shadow + private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png"); + @Shadow + private ItemStack itemToRender; + @Shadow + private float equippedProgress; + @Shadow + private float prevEquippedProgress; + @Shadow + private RenderBlocks renderBlocksIr; + @Shadow + private Minecraft mc; + + /** + * Reimplements the default behavior of the renderItem method. + * + * @author Shinare + * @reason Added support for semi-transparent item textures + * @param p_78443_1_ Don't ask me it's default parameter + * @param p_78443_2_ Don't ask me it's default parameter + * @param type Don't ask me it's default parameter + */ + @Overwrite(remap = false) + public void renderItem(EntityLivingBase p_78443_1_, ItemStack p_78443_2_, int p_78443_3_, ItemRenderType type) { + GL11.glPushMatrix(); + TextureManager texturemanager = this.mc.getTextureManager(); + Item item = p_78443_2_.getItem(); + Block block = Block.getBlockFromItem(item); + + if (p_78443_2_ != null && block != null && block.getRenderBlockPass() != 0) { + GL11.glEnable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + } + IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(p_78443_2_, type); + if (customRenderer != null) { + texturemanager.bindTexture(texturemanager.getResourceLocation(p_78443_2_.getItemSpriteNumber())); + ForgeHooksClient.renderEquippedItem(type, customRenderer, renderBlocksIr, p_78443_1_, p_78443_2_); + } + else + if (p_78443_2_.getItemSpriteNumber() == 0 && item instanceof ItemBlock && RenderBlocks.renderItemIn3d(block.getRenderType())) { + texturemanager.bindTexture(texturemanager.getResourceLocation(0)); + + if (p_78443_2_ != null && block != null && block.getRenderBlockPass() != 0) { + GL11.glDepthMask(false); + this.renderBlocksIr.renderBlockAsItem(block, p_78443_2_.getItemDamage(), 1.0F); + GL11.glDepthMask(true); + } + else { + this.renderBlocksIr.renderBlockAsItem(block, p_78443_2_.getItemDamage(), 1.0F); + } + } + else { + IIcon iicon = p_78443_1_.getItemIcon(p_78443_2_, p_78443_3_); + + if (iicon == null) { + GL11.glPopMatrix(); + return; + } + + texturemanager.bindTexture(texturemanager.getResourceLocation(p_78443_2_.getItemSpriteNumber())); + TextureUtil.func_152777_a(false, false, 1.0F); + Tessellator tessellator = Tessellator.instance; + float f = iicon.getMinU(); + float f1 = iicon.getMaxU(); + float f2 = iicon.getMinV(); + float f3 = iicon.getMaxV(); + float f4 = 0.0F; + float f5 = 0.3F; + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glTranslatef(-f4, -f5, 0.0F); + float f6 = 1.5F; + GL11.glScalef(f6, f6, f6); + GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F); + + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, iicon.getIconWidth(), iicon.getIconHeight(), 0.0625F, false); + + if (p_78443_2_.hasEffect(p_78443_3_)) { + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_LIGHTING); + texturemanager.bindTexture(RES_ITEM_GLINT); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(768, 1, 1, 0); + GL11.glColor4f(CinderLoE_Config.enchantment_color_red, CinderLoE_Config.enchantment_color_green, CinderLoE_Config.enchantment_color_blue, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glPushMatrix(); + float f8 = 0.125F; + GL11.glScalef(f8, f8, f8); + float f9 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; + GL11.glTranslatef(f9, 0.0F, 0.0F); + GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); + + RenderHelper.customRenderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F, true); + + + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(f8, f8, f8); + f9 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; + GL11.glTranslatef(-f9, 0.0F, 0.0F); + GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); + + RenderHelper.customRenderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F, true); + + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + texturemanager.bindTexture(texturemanager.getResourceLocation(p_78443_2_.getItemSpriteNumber())); + TextureUtil.func_147945_b(); + } + + if (p_78443_2_ != null && block != null && block.getRenderBlockPass() != 0) { + GL11.glDisable(GL11.GL_BLEND); + } + + GL11.glPopMatrix(); + } + + private void customRenderItemIn2D(Tessellator p_78439_0_, float p_78439_1_, float p_78439_2_, float p_78439_3_, float p_78439_4_, int p_78439_5_, int p_78439_6_, float p_78439_7_, boolean enchant) { + if (!enchant) GL11.glPushMatrix(); // Save the current OpenGL state + if (!enchant) GL11.glEnable(GL11.GL_BLEND); // Enable blending + if (!enchant) OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); // Apply your custom blend function for semi-transparency + + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(0.0F, 0.0F, 1.0F); + p_78439_0_.addVertexWithUV(0.0D, 0.0D, 0.0D, (double)p_78439_1_, (double)p_78439_4_); + p_78439_0_.addVertexWithUV(1.0D, 0.0D, 0.0D, (double)p_78439_3_, (double)p_78439_4_); + p_78439_0_.addVertexWithUV(1.0D, 1.0D, 0.0D, (double)p_78439_3_, (double)p_78439_2_); + p_78439_0_.addVertexWithUV(0.0D, 1.0D, 0.0D, (double)p_78439_1_, (double)p_78439_2_); + p_78439_0_.draw(); + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(0.0F, 0.0F, -1.0F); + p_78439_0_.addVertexWithUV(0.0D, 1.0D, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)p_78439_2_); + p_78439_0_.addVertexWithUV(1.0D, 1.0D, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)p_78439_2_); + p_78439_0_.addVertexWithUV(1.0D, 0.0D, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)p_78439_4_); + p_78439_0_.addVertexWithUV(0.0D, 0.0D, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)p_78439_4_); + p_78439_0_.draw(); + + + float f5 = 0.5F * (p_78439_1_ - p_78439_3_) / (float)p_78439_5_; + float f6 = 0.5F * (p_78439_4_ - p_78439_2_) / (float)p_78439_6_; + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(-1.0F, 0.0F, 0.0F); + int k; + float f7; + float f8; + + for (k = 0; k < p_78439_5_; ++k) { + f7 = (float)k / (float)p_78439_5_; + f8 = p_78439_1_ + (p_78439_3_ - p_78439_1_) * f7 - f5; + p_78439_0_.addVertexWithUV((double)f7, 0.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_4_); + p_78439_0_.addVertexWithUV((double)f7, 0.0D, 0.0D, (double)f8, (double)p_78439_4_); + p_78439_0_.addVertexWithUV((double)f7, 1.0D, 0.0D, (double)f8, (double)p_78439_2_); + p_78439_0_.addVertexWithUV((double)f7, 1.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_2_); + } + + p_78439_0_.draw(); + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(1.0F, 0.0F, 0.0F); + float f9; + + for (k = 0; k < p_78439_5_; ++k) { + f7 = (float)k / (float)p_78439_5_; + f8 = p_78439_1_ + (p_78439_3_ - p_78439_1_) * f7 - f5; + f9 = f7 + 1.0F / (float)p_78439_5_; + p_78439_0_.addVertexWithUV((double)f9, 1.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_2_); + p_78439_0_.addVertexWithUV((double)f9, 1.0D, 0.0D, (double)f8, (double)p_78439_2_); + p_78439_0_.addVertexWithUV((double)f9, 0.0D, 0.0D, (double)f8, (double)p_78439_4_); + p_78439_0_.addVertexWithUV((double)f9, 0.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_4_); + } + + p_78439_0_.draw(); + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(0.0F, 1.0F, 0.0F); + + for (k = 0; k < p_78439_6_; ++k) { + f7 = (float)k / (float)p_78439_6_; + f8 = p_78439_4_ + (p_78439_2_ - p_78439_4_) * f7 - f6; + f9 = f7 + 1.0F / (float)p_78439_6_; + p_78439_0_.addVertexWithUV(0.0D, (double)f9, 0.0D, (double)p_78439_1_, (double)f8); + p_78439_0_.addVertexWithUV(1.0D, (double)f9, 0.0D, (double)p_78439_3_, (double)f8); + p_78439_0_.addVertexWithUV(1.0D, (double)f9, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)f8); + p_78439_0_.addVertexWithUV(0.0D, (double)f9, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)f8); + } + + p_78439_0_.draw(); + p_78439_0_.startDrawingQuads(); + p_78439_0_.setNormal(0.0F, -1.0F, 0.0F); + + for (k = 0; k < p_78439_6_; ++k) { + f7 = (float)k / (float)p_78439_6_; + f8 = p_78439_4_ + (p_78439_2_ - p_78439_4_) * f7 - f6; + p_78439_0_.addVertexWithUV(1.0D, (double)f7, 0.0D, (double)p_78439_3_, (double)f8); + p_78439_0_.addVertexWithUV(0.0D, (double)f7, 0.0D, (double)p_78439_1_, (double)f8); + p_78439_0_.addVertexWithUV(0.0D, (double)f7, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)f8); + p_78439_0_.addVertexWithUV(1.0D, (double)f7, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)f8); + } + + p_78439_0_.draw(); + if (!enchant) GL11.glPopMatrix(); // Restore the saved OpenGL state + } + + /** + * @author Shinare + * @reason Failsafe in case some @Redirect fails + */ + @Overwrite + public static void renderItemIn2D(Tessellator p_78439_0_, float p_78439_1_, float p_78439_2_, float p_78439_3_, float p_78439_4_, int p_78439_5_, int p_78439_6_, float p_78439_7_) { + // Redirect to new custom renderer. This should not be necessary but works as failsafe + RenderHelper.customRenderItemIn2D(p_78439_0_, p_78439_1_, p_78439_2_, p_78439_3_, p_78439_4_, p_78439_5_, p_78439_6_, p_78439_7_, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRArmorModels.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRArmorModels.java new file mode 100644 index 0000000..46bd3d1 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRArmorModels.java @@ -0,0 +1,114 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.client.model.*; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.HashMap; +import java.util.Map; + +import lotr.client.model.LOTRArmorModels; +import lotr.client.model.LOTRModelArnorHelmet; +import lotr.client.model.LOTRModelBlackNumenoreanHelmet; +import lotr.client.model.LOTRModelBlackUrukHelmet; +import lotr.client.model.LOTRModelDorwinionElfHelmet; +import lotr.client.model.LOTRModelEasterlingHelmet; +import lotr.client.model.LOTRModelGaladhrimHelmet; +import lotr.client.model.LOTRModelGemsbokHelmet; +import lotr.client.model.LOTRModelGondolinHelmet; +import lotr.client.model.LOTRModelGondorHelmet; +import lotr.client.model.LOTRModelGulfChestplate; +import lotr.client.model.LOTRModelGundabadUrukHelmet; +import lotr.client.model.LOTRModelHaradRobes; +import lotr.client.model.LOTRModelHaradTurban; +import lotr.client.model.LOTRModelHarnedorChestplate; +import lotr.client.model.LOTRModelHarnedorHelmet; +import lotr.client.model.LOTRModelHeadPlate; +import lotr.client.model.LOTRModelHighElvenHelmet; +import lotr.client.model.LOTRModelLeatherHat; +import lotr.client.model.LOTRModelMoredainLionHelmet; +import lotr.client.model.LOTRModelMorgulHelmet; +import lotr.client.model.LOTRModelNearHaradWarlordHelmet; +import lotr.client.model.LOTRModelPartyHat; +import lotr.client.model.LOTRModelRohanMarshalHelmet; +import lotr.client.model.LOTRModelSwanChestplate; +import lotr.client.model.LOTRModelSwanHelmet; +import lotr.client.model.LOTRModelTauredainChieftainHelmet; +import lotr.client.model.LOTRModelTauredainGoldHelmet; +import lotr.client.model.LOTRModelUmbarHelmet; +import lotr.client.model.LOTRModelUrukHelmet; +import lotr.client.model.LOTRModelWingedHelmet; +import lotr.common.LOTRMod; + +import net.minecraft.client.model.ModelBiped; +import net.minecraft.item.Item; + +@Mixin(LOTRArmorModels.class) +public class MixinLOTRArmorModels { + + @Shadow(remap = false) + private Map> specialArmorModels; + + @Shadow(remap = false) + public void copyModelRotations(ModelBiped target, ModelBiped src) { + } + + private Map getSpecialModels(ModelBiped key) { + Map map = this.specialArmorModels.get(key); + if (map == null) { + map = new HashMap(); + map.put(LOTRMod.leatherHat, new LOTRModelLeatherHat()); + map.put(LOTRMod.helmetGondor, new LOTRModelGondorHelmet(1.0F)); + map.put(LOTRMod.helmetElven, new LOTRModelGaladhrimHelmet(1.0F)); + map.put(LOTRMod.helmetGondorWinged, new LOTRModelWingedHelmet(1.0F)); + map.put(LOTRMod.helmetMorgul, new LOTRModelMorgulHelmet(1.0F)); + map.put(LOTRMod.helmetGemsbok, new LOTRModelGemsbokHelmet(1.0F)); + map.put(LOTRMod.helmetHighElven, new LOTRModelHighElvenHelmet(1.0F)); + map.put(LOTRMod.helmetBlackUruk, new LOTRModelBlackUrukHelmet(1.0F)); + map.put(LOTRMod.helmetUruk, new LOTRModelUrukHelmet(1.0F)); + map.put(LOTRMod.helmetNearHaradWarlord, new LOTRModelNearHaradWarlordHelmet(1.0F)); + map.put(LOTRMod.helmetDolAmroth, new LOTRModelSwanHelmet(1.0F)); + map.put(LOTRMod.bodyDolAmroth, new LOTRModelSwanChestplate(1.0F)); + map.put(LOTRMod.helmetMoredainLion, new LOTRModelMoredainLionHelmet(1.0F)); + map.put(LOTRMod.helmetHaradRobes, new LOTRModelHaradTurban()); + map.put(LOTRMod.bodyHaradRobes, new LOTRModelHaradRobes(1.0F)); + map.put(LOTRMod.legsHaradRobes, new LOTRModelHaradRobes(0.5F)); + map.put(LOTRMod.bootsHaradRobes, new LOTRModelHaradRobes(1.0F)); + map.put(LOTRMod.helmetGondolin, new LOTRModelGondolinHelmet(1.0F)); + map.put(LOTRMod.helmetRohanMarshal, new LOTRModelRohanMarshalHelmet(1.0F)); + map.put(LOTRMod.helmetTauredainChieftain, new LOTRModelTauredainChieftainHelmet(1.0F)); + map.put(LOTRMod.helmetTauredainGold, new LOTRModelTauredainGoldHelmet(1.0F)); + map.put(LOTRMod.helmetGundabadUruk, new LOTRModelGundabadUrukHelmet(1.0F)); + map.put(LOTRMod.helmetUrukBerserker, new LOTRModelUrukHelmet(1.0F)); + map.put(LOTRMod.helmetDorwinionElf, new LOTRModelDorwinionElfHelmet(1.0F)); + map.put(LOTRMod.partyHat, new LOTRModelPartyHat(0.6F)); + map.put(LOTRMod.helmetArnor, new LOTRModelArnorHelmet(1.0F)); + map.put(LOTRMod.helmetRhunGold, new LOTRModelEasterlingHelmet(1.0F, false)); + map.put(LOTRMod.helmetRhunWarlord, new LOTRModelEasterlingHelmet(1.0F, true)); + map.put(LOTRMod.helmetRivendell, new LOTRModelHighElvenHelmet(1.0F)); + map.put(LOTRMod.bodyGulfHarad, new LOTRModelGulfChestplate(1.0F)); + map.put(LOTRMod.helmetUmbar, new LOTRModelUmbarHelmet(1.0F)); + map.put(LOTRMod.helmetHarnedor, new LOTRModelHarnedorHelmet(1.0F)); + map.put(LOTRMod.bodyHarnedor, new LOTRModelHarnedorChestplate(1.0F)); + map.put(LOTRMod.helmetBlackNumenorean, new LOTRModelBlackNumenoreanHelmet(1.0F)); + map.put(CinderLoE.helmetRedDwarf, new ModelRedDwarfHelmet(1.0F)); + map.put(CinderLoE.helmetBreeKettle, new ModelBreeKettleHelmet(1.0F)); + map.put(CinderLoE.helmetbrokenhalo, new ModelBrokenHalo(1.0F)); + map.put(CinderLoE.helmetRhudaur, new ModelRhudaurHelmet(1.0F)); + map.put(CinderLoE.bodyserpent, new ModelBodySerpent(1.0F)); + map.put(CinderLoE.helmetUsurper, new ModelUsurperHelmet(1.0F)); + map.put(CinderLoE.helmetWarlord, new ModelWarlordHelmet(1.0f)); + map.put(CinderLoE.bodyJade, new ModelBodyJade(1.0f)); + map.put(CinderLoE.legsJade, new ModelLegsJade(1.0f)); + map.put(CinderLoE.helmetJade, new ModelJadeHelmet(1.0f)); + map.put(LOTRMod.plate, new LOTRModelHeadPlate()); + map.put(LOTRMod.woodPlate, new LOTRModelHeadPlate()); + map.put(LOTRMod.ceramicPlate, new LOTRModelHeadPlate()); + for (ModelBiped armorModel : map.values()) + copyModelRotations(armorModel, key); + this.specialArmorModels.put(key, map); + } + return map; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRBrewingRecipes.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRBrewingRecipes.java new file mode 100644 index 0000000..d82b743 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRBrewingRecipes.java @@ -0,0 +1,15 @@ +package com.zivilon.cinder_loe.mixins; + +import lotr.common.recipe.LOTRBrewingRecipes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; +import net.minecraft.item.ItemStack; + +@Mixin(LOTRBrewingRecipes.class) +public interface MixinLOTRBrewingRecipes { + + @Invoker(value = "addBrewingRecipe", remap = false) + static void addRecipe(ItemStack result, Object... ingredients) { + throw new UnsupportedOperationException(); // This is just to satisfy the compiler; it won't be used. + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRClientProxy.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRClientProxy.java new file mode 100644 index 0000000..15bf487 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRClientProxy.java @@ -0,0 +1,59 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import com.zivilon.cinder_loe.CinderLoE_Config; +import org.lwjgl.opengl.GL11; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.LOTRClientProxy; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.util.ResourceLocation; + +@Mixin(LOTRClientProxy.class) +public abstract class MixinLOTRClientProxy { + @Shadow(remap = false) + public static final ResourceLocation enchantmentTexture = new ResourceLocation("textures/misc/enchanted_item_glint.png"); + + /** + * @author Shinare + * @reason Added support for semi-transparent item textures + */ + @Overwrite(remap = false) + public static void renderEnchantmentEffect() { + Tessellator tessellator = Tessellator.instance; + TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager(); + GL11.glDepthFunc(514); + GL11.glDisable(2896); + texturemanager.bindTexture(enchantmentTexture); + GL11.glEnable(3042); + GL11.glBlendFunc(768, 1); + GL11.glColor4f(CinderLoE_Config.enchantment_color_red, CinderLoE_Config.enchantment_color_green, CinderLoE_Config.enchantment_color_blue, 1.0F); + GL11.glMatrixMode(5890); + GL11.glPushMatrix(); + float scale = 0.125F; + GL11.glScalef(scale, scale, scale); + float randomShift = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; + GL11.glTranslatef(randomShift, 0.0F, 0.0F); + GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); + RenderHelper.customRenderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F, true); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(scale, scale, scale); + randomShift = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; + GL11.glTranslatef(-randomShift, 0.0F, 0.0F); + GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); + RenderHelper.customRenderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F, true); + GL11.glPopMatrix(); + GL11.glMatrixMode(5888); + GL11.glDisable(3042); + GL11.glEnable(2896); + GL11.glDepthFunc(515); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRContainerAnvil.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRContainerAnvil.java new file mode 100644 index 0000000..fe07af1 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRContainerAnvil.java @@ -0,0 +1,537 @@ +package com.zivilon.cinder_loe.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import lotr.common.LOTRConfig; +import lotr.common.LOTRMod; +import lotr.common.enchant.LOTREnchantment; +import lotr.common.enchant.LOTREnchantmentCombining; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.entity.npc.LOTREntityScrapTrader; +import lotr.common.entity.npc.LOTRTradeable; +import lotr.common.inventory.LOTRContainerAnvil; +import lotr.common.item.AnvilNameColorProvider; +import lotr.common.item.LOTRItemEnchantment; +import lotr.common.item.LOTRItemModifierTemplate; +import lotr.common.item.LOTRMaterial; +import lotr.common.recipe.LOTRRecipePoisonWeapon; +import net.minecraft.init.Items; +import net.minecraft.inventory.IInventory; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.item.ItemTool; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.util.Utilities; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import org.apache.commons.lang3.StringUtils; + +@Mixin(LOTRContainerAnvil.class) +public abstract class MixinLOTRContainerAnvil { + @Shadow + public IInventory invInput; + @Shadow + public IInventory invOutput; + @Shadow + public LOTRTradeable theTrader; + @Shadow + public EntityPlayer thePlayer; + @Shadow + public int materialCost; + @Shadow + public int reforgeCost; + @Shadow + public int engraveOwnerCost; + @Shadow + public boolean isSmithScrollCombine; + @Shadow + public boolean isTrader; + @Shadow + private String repairedItemName; + @Shadow + abstract void detectAndSendChanges(); + @Shadow + abstract float getTraderMaterialPrice(ItemStack inputItem); + @Shadow + static boolean costsToRename(ItemStack itemstack) { + return false; + } + @Shadow + static String stripFormattingCodes(String name) { + return null; + } + @Shadow + static String applyFormattingCodes(String name, List colors) { + return null; + } + @Shadow + static List getAppliedFormattingCodes(String name) { + return null; + } + + + /** + * @author Shinare + * @reason KeyLime + */ + @Overwrite(remap = false) + public boolean isRepairMaterial(ItemStack inputItem, ItemStack materialItem) { + if (inputItem.getItem().getIsRepairable(inputItem, materialItem)) + return true; + Item item = inputItem.getItem(); + if (item == Items.bow && LOTRMod.rohanBow.getIsRepairable(inputItem, materialItem)) + return true; + if (item instanceof net.minecraft.item.ItemFishingRod && materialItem.getItem() == Items.string) + return true; + if (item instanceof net.minecraft.item.ItemShears && materialItem.getItem() == Items.iron_ingot) + return true; + if (item instanceof lotr.common.item.LOTRItemChisel && materialItem.getItem() == Items.iron_ingot) + return true; + if (item instanceof net.minecraft.item.ItemEnchantedBook && materialItem.getItem() == Items.paper) + return true; + Item.ToolMaterial material = null; + if (item instanceof ItemTool) { + material = Item.ToolMaterial.valueOf(((ItemTool)item).getToolMaterialName()); + } else if (item instanceof ItemSword) { + material = Item.ToolMaterial.valueOf(((ItemSword)item).getToolMaterialName()); + } + if (material == Item.ToolMaterial.WOOD || material == LOTRMaterial.MOREDAIN_WOOD.toToolMaterial()) + return LOTRMod.isOreNameEqual(materialItem, "plankWood"); + if (material == LOTRMaterial.MALLORN.toToolMaterial()) + return (materialItem.getItem() == Item.getItemFromBlock(LOTRMod.planks) && materialItem.getItemDamage() == 1); + if (material == LOTRMaterial.MALLORN_MACE.toToolMaterial()) + return (materialItem.getItem() == Item.getItemFromBlock(LOTRMod.wood) && materialItem.getItemDamage() == 1); + if (material == CinderLoE.MATERIAL_RED_DWARF.toToolMaterial()) + return (materialItem.getItem() == CinderLoE.redDwarfSteel); + if (material == CinderLoE.MATERIAL_ASH.toToolMaterial()) + return (materialItem.getItem() == CinderLoE.ingotAsh); + if (material == CinderLoE.MATERIAL_BONEMOLD.toToolMaterial()) + return (materialItem.getItem() == CinderLoE.bonemold); + if (material == CinderLoE.EVENT.toToolMaterial()) + return LOTRMod.isOreNameEqual(materialItem, "ice"); + if (material == CinderLoE.MATERIAL_BREE.toToolMaterial()) + return (materialItem.getItem() == Items.iron_ingot); + if (material == CinderLoE.MATERIAL_WARLORD.toToolMaterial()) + return (materialItem.getItem() == LOTRMod.bronze); + if (item instanceof ItemArmor armor) { + ItemArmor.ArmorMaterial armorMaterial = armor.getArmorMaterial(); + if (armorMaterial == LOTRMaterial.BONE.toArmorMaterial()) + return LOTRMod.isOreNameEqual(materialItem, "bone"); + if (armorMaterial == CinderLoE.MATERIAL_RED_DWARF.toArmorMaterial()) + return (materialItem.getItem() == CinderLoE.redDwarfSteel); + if (armorMaterial == CinderLoE.MATERIAL_LIMWAITH_WOOD.toArmorMaterial()) + return (materialItem.getItem() == Item.getItemFromBlock(LOTRMod.planks) && materialItem.getItemDamage() == 15); + if (armorMaterial == CinderLoE.MATERIAL_BREE.toArmorMaterial()) + return (materialItem.getItem() == Items.iron_ingot); + if (armorMaterial == CinderLoE.MATERIAL_BATTLENUN.toArmorMaterial()) + return (materialItem.getItem() == Items.iron_ingot); + if (armorMaterial == CinderLoE.MATERIAL_BONEMOLD.toArmorMaterial()) + return (materialItem.getItem() == CinderLoE.bonemold); + if (armorMaterial == CinderLoE.MATERIAL_RHUDAUR.toArmorMaterial()) + return (materialItem.getItem() == Items.iron_ingot); + if (armorMaterial == CinderLoE.MATERIAL_JADE.toArmorMaterial()) + return (materialItem.getItem() == LOTRMod.emerald); + if (armorMaterial == CinderLoE.MATERIAL_SERPENT.toArmorMaterial()) + return (materialItem.getItem() == LOTRMod.bronze); + if (armorMaterial == CinderLoE.MATERIAL_WARLORD.toArmorMaterial()) + return (materialItem.getItem() == LOTRMod.bronze); + if (armorMaterial == CinderLoE.MATERIAL_USURPER.toArmorMaterial()) + return (materialItem.getItem() == Items.iron_ingot); + } + + return false; + } + + /** + * @author Shinare + * @reason Adding repair kits and removing bad modifiers from 3 modifier limit + **/ + @Overwrite(remap = false) + private void updateRepairOutput() { + ItemStack inputItem = this.invInput.getStackInSlot(0); + this.materialCost = 0; + this.reforgeCost = 0; + this.engraveOwnerCost = 0; + this.isSmithScrollCombine = false; + int baseAnvilCost = 0; + int repairCost = 0; + int combineCost = 0; + int renameCost = 0; + if (inputItem == null) { + this.invOutput.setInventorySlotContents(0, null); + this.materialCost = 0; + } else { + ItemStack inputCopy = inputItem.copy(); + ItemStack combinerItem = this.invInput.getStackInSlot(1); + ItemStack materialItem = this.isTrader ? null : this.invInput.getStackInSlot(2); + Map inputEnchants = EnchantmentHelper.getEnchantments(inputCopy); + boolean enchantingWithBook = false; + List inputModifiers = LOTREnchantmentHelper.getEnchantList(inputCopy); + baseAnvilCost = LOTREnchantmentHelper.getAnvilCost(inputItem) + ((combinerItem == null) ? 0 : LOTREnchantmentHelper.getAnvilCost(combinerItem)); + this.materialCost = 0; + String previousDisplayName = inputCopy.getDisplayName(); + String defaultItemName = inputCopy.getItem().getItemStackDisplayName(inputCopy); + String nameToApply = this.repairedItemName; + String formattedNameToApply = nameToApply; + List colorsToApply = new ArrayList(); + colorsToApply.addAll(getAppliedFormattingCodes(inputCopy.getDisplayName())); + boolean alteringNameColor = false; + if (costsToRename(inputItem) && combinerItem != null) { + if (combinerItem.getItem() instanceof AnvilNameColorProvider) { + AnvilNameColorProvider nameColorProvider = (AnvilNameColorProvider)combinerItem.getItem(); + EnumChatFormatting newColor = nameColorProvider.getAnvilNameColor(); + boolean isDifferentColor = !colorsToApply.contains(newColor); + if (isDifferentColor) { + for (EnumChatFormatting ecf : EnumChatFormatting.values()) { + if (ecf.isColor()) + while (colorsToApply.contains(ecf)) + colorsToApply.remove(ecf); + } + colorsToApply.add(newColor); + alteringNameColor = true; + } + } else if (combinerItem.getItem() == Items.flint) { + if (!colorsToApply.isEmpty()) { + colorsToApply.clear(); + alteringNameColor = true; + } + } + if (alteringNameColor) + renameCost++; + } + if (!colorsToApply.isEmpty()) { + if (StringUtils.isBlank(formattedNameToApply)) + formattedNameToApply = defaultItemName; + formattedNameToApply = applyFormattingCodes(formattedNameToApply, colorsToApply); + } + boolean nameChange = false; + if (formattedNameToApply != null && !formattedNameToApply.equals(previousDisplayName)) + if (StringUtils.isBlank(formattedNameToApply) || formattedNameToApply.equals(defaultItemName)) { + if (inputCopy.hasDisplayName()) { + inputCopy.func_135074_t(); + if (!stripFormattingCodes(previousDisplayName).equals(stripFormattingCodes(formattedNameToApply))) + nameChange = true; + } + } else { + inputCopy.setStackDisplayName(formattedNameToApply); + if (!stripFormattingCodes(previousDisplayName).equals(stripFormattingCodes(formattedNameToApply))) + nameChange = true; + } + if (nameChange) { + boolean costRename = costsToRename(inputItem); + if (costRename) + renameCost++; + } + if (this.isTrader) { + LOTREnchantmentCombining.CombineRecipe scrollCombine = LOTREnchantmentCombining.getCombinationResult(inputItem, combinerItem); + if (scrollCombine != null) { + this.invOutput.setInventorySlotContents(0, scrollCombine.createOutputItem()); + this.materialCost = scrollCombine.cost; + this.reforgeCost = 0; + this.engraveOwnerCost = 0; + this.isSmithScrollCombine = true; + return; + } + } + boolean combining = false; + if (combinerItem != null) { + enchantingWithBook = (combinerItem.getItem() == Items.enchanted_book && Items.enchanted_book.func_92110_g(combinerItem).tagCount() > 0); + if (enchantingWithBook && !LOTRConfig.enchantingVanilla) { + this.invOutput.setInventorySlotContents(0, null); + this.materialCost = 0; + return; + } + LOTREnchantment combinerItemEnchant = null; + if (combinerItem.getItem() instanceof LOTRItemEnchantment) { + combinerItemEnchant = ((LOTRItemEnchantment)combinerItem.getItem()).theEnchant; + } else if (combinerItem.getItem() instanceof LOTRItemModifierTemplate) { + combinerItemEnchant = LOTRItemModifierTemplate.getModifier(combinerItem); + } + if (!enchantingWithBook && combinerItemEnchant == null) + if (inputCopy.isItemStackDamageable() && inputCopy.getItem() == combinerItem.getItem()) { + int inputUseLeft = inputItem.getMaxDamage() - inputItem.getItemDamageForDisplay(); + int combinerUseLeft = combinerItem.getMaxDamage() - combinerItem.getItemDamageForDisplay(); + int restoredUses = combinerUseLeft + inputCopy.getMaxDamage() * 12 / 100; + int newUsesLeft = inputUseLeft + restoredUses; + int newDamage = inputCopy.getMaxDamage() - newUsesLeft; + newDamage = Math.max(newDamage, 0); + if (newDamage < inputCopy.getItemDamage()) { + inputCopy.setItemDamage(newDamage); + int restoredUses1 = inputCopy.getMaxDamage() - inputUseLeft; + int restoredUses2 = inputCopy.getMaxDamage() - combinerUseLeft; + combineCost += Math.max(0, Math.min(restoredUses1, restoredUses2) / 100); + } + combining = true; + } else if (!alteringNameColor && combinerItem.getItem() != CinderLoE.forgingKit) { + this.invOutput.setInventorySlotContents(0, null); + this.materialCost = 0; + return; + } + Map outputEnchants = new HashMap(inputEnchants); + if (LOTRConfig.enchantingVanilla) { + Map combinerEnchants = EnchantmentHelper.getEnchantments(combinerItem); + for (Object obj : combinerEnchants.keySet()) { + int combinedEnchLevel, combinerEnchID = ((Integer)obj).intValue(); + Enchantment combinerEnch = Enchantment.enchantmentsList[combinerEnchID]; + int inputEnchLevel = 0; + if (outputEnchants.containsKey(Integer.valueOf(combinerEnchID))) + inputEnchLevel = ((Integer)outputEnchants.get(Integer.valueOf(combinerEnchID))).intValue(); + int combinerEnchLevel = ((Integer)combinerEnchants.get(Integer.valueOf(combinerEnchID))).intValue(); + if (inputEnchLevel == combinerEnchLevel) { + combinedEnchLevel = ++combinerEnchLevel; + } else { + combinedEnchLevel = Math.max(combinerEnchLevel, inputEnchLevel); + } + combinerEnchLevel = combinedEnchLevel; + int levelsAdded = combinerEnchLevel - inputEnchLevel; + boolean canApply = combinerEnch.canApply(inputItem); + if (this.thePlayer.capabilities.isCreativeMode || inputItem.getItem() == Items.enchanted_book) + canApply = true; + for (Object objIn : outputEnchants.keySet()) { + int inputEnchID = ((Integer)objIn).intValue(); + Enchantment inputEnch = Enchantment.enchantmentsList[inputEnchID]; + if (inputEnchID != combinerEnchID) + if (!combinerEnch.canApplyTogether(inputEnch) || !inputEnch.canApplyTogether(combinerEnch)) { + canApply = false; + combineCost += levelsAdded; + } + } + if (canApply) { + combinerEnchLevel = Math.min(combinerEnchLevel, combinerEnch.getMaxLevel()); + outputEnchants.put(Integer.valueOf(combinerEnchID), Integer.valueOf(combinerEnchLevel)); + int costPerLevel = 0; + int enchWeight = combinerEnch.getWeight(); + if (enchWeight == 1) { + costPerLevel = 8; + } else if (enchWeight == 2) { + costPerLevel = 4; + } else if (enchWeight == 5) { + costPerLevel = 2; + } else if (enchWeight == 10) { + costPerLevel = 1; + } + combineCost += costPerLevel * levelsAdded; + } + } + } else { + outputEnchants.clear(); + } + EnchantmentHelper.setEnchantments(outputEnchants, inputCopy); + int maxMods = 3; + List outputMods = new ArrayList(); + outputMods.addAll(inputModifiers); + List combinerMods = LOTREnchantmentHelper.getEnchantList(combinerItem); + if (combinerItemEnchant != null) { + combinerMods.add(combinerItemEnchant); + if (combinerItemEnchant == LOTREnchantment.fire) { + Item item = inputCopy.getItem(); + if (LOTRRecipePoisonWeapon.poisonedToInput.containsKey(item)) { + Item unpoisoned = (Item)LOTRRecipePoisonWeapon.poisonedToInput.get(item); + inputCopy.func_150996_a(unpoisoned); + } + } + } + for (LOTREnchantment combinerMod : combinerMods) { + boolean canApply = combinerMod.canApply(inputItem, false); + if (canApply) + for (LOTREnchantment mod : outputMods) { + if (!mod.isCompatibleWith(combinerMod) || !combinerMod.isCompatibleWith(mod)) + canApply = false; + } + int numOutputMods = 0; + for (LOTREnchantment mod : outputMods) { + if (!mod.bypassAnvilLimit()) + numOutputMods++; + } + if (!combinerMod.bypassAnvilLimit() && numOutputMods >= maxMods) + canApply = false; + if (canApply) { + outputMods.add(combinerMod); + if (combinerMod.isBeneficial()) + combineCost += Math.max(1, (int)combinerMod.getValueModifier()); + } + } + if (combinerItem.getItem() == CinderLoE.forgingKit) { + List newMods = new ArrayList(); + if (combinerItem.getItemDamage() == 0) { + for (LOTREnchantment mod : outputMods) { + if (Utilities.isBadEnch(mod)) { + combineCost += 2; + } else { + newMods.add(mod); + } + } + } else { + for (LOTREnchantment mod : outputMods) { + if (Utilities.upgradedEnchants.containsKey(mod.enchantName)) { + combineCost += 2; + newMods.add(Utilities.upgradeEnch(inputCopy, mod)); + } else { + newMods.add(mod); + } + } + } + outputMods = newMods; + } + LOTREnchantmentHelper.setEnchantList(inputCopy, outputMods); + } + if (combineCost > 0) + combining = true; + int numEnchants = 0; + for (Object obj : inputEnchants.keySet()) { + int enchID = ((Integer)obj).intValue(); + Enchantment ench = Enchantment.enchantmentsList[enchID]; + int enchLevel = ((Integer)inputEnchants.get(Integer.valueOf(enchID))).intValue(); + numEnchants++; + int costPerLevel = 0; + int enchWeight = ench.getWeight(); + if (enchWeight == 1) { + costPerLevel = 8; + } else if (enchWeight == 2) { + costPerLevel = 4; + } else if (enchWeight == 5) { + costPerLevel = 2; + } else if (enchWeight == 10) { + costPerLevel = 1; + } + baseAnvilCost += numEnchants + enchLevel * costPerLevel; + } + if (enchantingWithBook && !inputCopy.getItem().isBookEnchantable(inputCopy, combinerItem)) + inputCopy = null; + for (LOTREnchantment mod : inputModifiers) { + if (mod.isBeneficial()) + baseAnvilCost += Math.max(1, (int)mod.getValueModifier()); + } + if (inputCopy.isItemStackDamageable()) { + boolean canRepair = false; + int availableMaterials = 0; + if (this.isTrader) { + canRepair = (getTraderMaterialPrice(inputItem) > 0.0F); + availableMaterials = Integer.MAX_VALUE; + } else { + canRepair = (materialItem != null && isRepairMaterial(inputItem, materialItem)); + if (materialItem != null) + availableMaterials = materialItem.stackSize - combineCost - renameCost; + } + int oneItemRepair = Math.min(inputCopy.getItemDamageForDisplay(), inputCopy.getMaxDamage() / 4); + if (canRepair && availableMaterials > 0 && oneItemRepair > 0) { + availableMaterials -= baseAnvilCost; + if (availableMaterials > 0) { + int usedMaterials = 0; + while (oneItemRepair > 0 && usedMaterials < availableMaterials) { + int newDamage = inputCopy.getItemDamageForDisplay() - oneItemRepair; + inputCopy.setItemDamage(newDamage); + oneItemRepair = Math.min(inputCopy.getItemDamageForDisplay(), inputCopy.getMaxDamage() / 4); + usedMaterials++; + } + repairCost += usedMaterials; + } else if (!nameChange && !combining) { + repairCost = 1; + int newDamage = inputCopy.getItemDamageForDisplay() - oneItemRepair; + inputCopy.setItemDamage(newDamage); + } + } + } + boolean repairing = (repairCost > 0); + if (combining || repairing) { + this.materialCost = baseAnvilCost; + this.materialCost += combineCost + repairCost; + } else { + this.materialCost = 0; + } + this.materialCost += renameCost; + if (inputCopy != null) { + int nextAnvilCost = LOTREnchantmentHelper.getAnvilCost(inputItem); + if (combinerItem != null) { + int combinerAnvilCost = LOTREnchantmentHelper.getAnvilCost(combinerItem); + nextAnvilCost = Math.max(nextAnvilCost, combinerAnvilCost); + } + if (combining) { + nextAnvilCost += 2; + } else if (repairing) { + nextAnvilCost++; + } + nextAnvilCost = Math.max(nextAnvilCost, 0); + if (nextAnvilCost > 0) + LOTREnchantmentHelper.setAnvilCost(inputCopy, nextAnvilCost); + } + if (LOTREnchantmentHelper.isReforgeable(inputItem)) { + this.reforgeCost = 2; + if (inputItem.getItem() instanceof ItemArmor) + this.reforgeCost = 3; + if (inputItem.isItemStackDamageable()) { + ItemStack reforgeCopy = inputItem.copy(); + int oneItemRepair = Math.min(reforgeCopy.getItemDamageForDisplay(), reforgeCopy.getMaxDamage() / 4); + if (oneItemRepair > 0) { + int usedMaterials = 0; + while (oneItemRepair > 0) { + int newDamage = reforgeCopy.getItemDamageForDisplay() - oneItemRepair; + reforgeCopy.setItemDamage(newDamage); + oneItemRepair = Math.min(reforgeCopy.getItemDamageForDisplay(), reforgeCopy.getMaxDamage() / 4); + usedMaterials++; + } + this.reforgeCost += usedMaterials; + } + } + this.engraveOwnerCost = 2; + } else { + this.reforgeCost = 0; + this.engraveOwnerCost = 0; + } + if (isRepairMaterial(inputItem, new ItemStack(Items.string))) { + int stringFactor = 3; + this.materialCost *= stringFactor; + this.reforgeCost *= stringFactor; + this.engraveOwnerCost *= stringFactor; + } + if (this.isTrader) { + boolean isCommonRenameOnly = (nameChange && this.materialCost == 0); + float materialPrice = getTraderMaterialPrice(inputItem); + if (materialPrice > 0.0F) { + this.materialCost = Math.round(this.materialCost * materialPrice); + this.materialCost = Math.max(this.materialCost, 1); + this.reforgeCost = Math.round(this.reforgeCost * materialPrice); + this.reforgeCost = Math.max(this.reforgeCost, 1); + this.engraveOwnerCost = Math.round(this.engraveOwnerCost * materialPrice); + this.engraveOwnerCost = Math.max(this.engraveOwnerCost, 1); + if (this.theTrader instanceof LOTREntityScrapTrader) { + this.materialCost = MathHelper.ceiling_float_int(this.materialCost * 0.5F); + this.materialCost = Math.max(this.materialCost, 1); + this.reforgeCost = MathHelper.ceiling_float_int(this.reforgeCost * 0.5F); + this.reforgeCost = Math.max(this.reforgeCost, 1); + this.engraveOwnerCost = MathHelper.ceiling_float_int(this.engraveOwnerCost * 0.5F); + this.engraveOwnerCost = Math.max(this.engraveOwnerCost, 1); + } + } else if (!isCommonRenameOnly) { + this.invOutput.setInventorySlotContents(0, null); + this.materialCost = 0; + this.reforgeCost = 0; + this.engraveOwnerCost = 0; + return; + } + } + if (combining || repairing || nameChange || alteringNameColor) { + this.invOutput.setInventorySlotContents(0, inputCopy); + } else { + this.invOutput.setInventorySlotContents(0, null); + this.materialCost = 0; + } + detectAndSendChanges(); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREnchantment.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREnchantment.java new file mode 100644 index 0000000..c08d748 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREnchantment.java @@ -0,0 +1,92 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.enchants.LOTREnchantmentWeakProtectionRanged; +import com.zivilon.cinder_loe.enchants.LOTREnchantmentArmorSpecial; +import com.zivilon.cinder_loe.util.Utilities; +import lotr.common.enchant.*; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.lang.reflect.Field; +import java.util.Map; + +@Mixin(LOTREnchantment.class) +public class MixinLOTREnchantment { + @Shadow + private boolean bypassAnvilLimit; + + @Inject(method = "", at = @At("TAIL")) + private static void onStaticInit(CallbackInfo ci) { + // Add your new enchantments here + try { + LOTREnchantment protectRangedWeak1 = new LOTREnchantmentWeakProtectionRanged("protectRangedWeak1", -1).setEnchantWeight(0); + LOTREnchantment protectRangedWeak2 = new LOTREnchantmentWeakProtectionRanged("protectRangedWeak2", -2).setEnchantWeight(0); + LOTREnchantment rangedWeak3 = new LOTREnchantmentRangedDamage("rangedWeak3", 0.25f); + LOTREnchantment weak4 = new LOTREnchantmentDamage("weak4", -3.0f).setEnchantWeight(0); + LOTREnchantment chill = new LOTREnchantmentDamage("strong5", 3.25f).setEnchantWeight(0); + LOTREnchantment rangedStrong4 = new LOTREnchantmentRangedDamage("rangedStrong4", 1.4f).setEnchantWeight(0).setSkilful(); + LOTREnchantment meleeReach2 = new LOTREnchantmentMeleeReach("meleeReach2", 1.33f).setEnchantWeight(0).setSkilful(); + LOTREnchantment meleeSpeed2 = new LOTREnchantmentMeleeSpeed("meleeSpeed2", 1.33f).setEnchantWeight(0).setSkilful(); + LOTREnchantment Shinare = new LOTREnchantmentArmorSpecial("Shinare").setEnchantWeight(0).setSkilful(); + LOTREnchantment swiftness = new LOTREnchantmentArmorSpecial("swiftness").setEnchantWeight(0).setSkilful(); + LOTREnchantment fireRepair = new LOTREnchantmentArmorSpecial("fireRepair").setEnchantWeight(0).setSkilful(); + LOTREnchantment mountArmor = new LOTREnchantmentArmorSpecial("mountArmor").setEnchantWeight(0).setSkilful(); + LOTREnchantment stealth = new LOTREnchantmentArmorSpecial("stealth").setEnchantWeight(0).setSkilful(); + + + LOTREnchantment.allEnchantments.add(protectRangedWeak1); + LOTREnchantment.allEnchantments.add(protectRangedWeak2); + rangedWeak3.allEnchantments.add(rangedWeak3); + LOTREnchantment.allEnchantments.add(weak4); + LOTREnchantment.allEnchantments.add(chill); + LOTREnchantment.allEnchantments.add(rangedStrong4); + LOTREnchantment.allEnchantments.add(meleeReach2); + LOTREnchantment.allEnchantments.add(meleeSpeed2); + LOTREnchantment.allEnchantments.add(Shinare); + LOTREnchantment.allEnchantments.add(swiftness); + LOTREnchantment.allEnchantments.add(fireRepair); + LOTREnchantment.allEnchantments.add(mountArmor); + LOTREnchantment.allEnchantments.add(stealth); + + Field enchantsByNameField = LOTREnchantment.class.getDeclaredField("enchantsByName"); + enchantsByNameField.setAccessible(true); + @SuppressWarnings("unchecked") + Map enchantsByName = (Map) enchantsByNameField.get(null); + + enchantsByName.put(protectRangedWeak1.enchantName, protectRangedWeak1); + enchantsByName.put(protectRangedWeak2.enchantName, protectRangedWeak2); + enchantsByName.put(rangedWeak3.enchantName, rangedWeak3); + enchantsByName.put(weak4.enchantName, weak4); + enchantsByName.put(chill.enchantName, chill); + enchantsByName.put(rangedStrong4.enchantName, rangedStrong4); + enchantsByName.put(meleeReach2.enchantName, meleeReach2); + enchantsByName.put(meleeSpeed2.enchantName, meleeSpeed2); + enchantsByName.put(Shinare.enchantName, Shinare); + enchantsByName.put(swiftness.enchantName, swiftness); + enchantsByName.put(fireRepair.enchantName, fireRepair); + enchantsByName.put(mountArmor.enchantName, mountArmor); + enchantsByName.put(stealth.enchantName, stealth); + + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + /** + * @author MrJeep20 + * @reason Bad enchantments will not count towards 3 modifier limit now + **/ + @Overwrite(remap = false) + public boolean bypassAnvilLimit() { + if (Utilities.isBadEnch((LOTREnchantment)(Object)this)) + return true; + return this.bypassAnvilLimit; + } + +} + diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREnchantmentType.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREnchantmentType.java new file mode 100644 index 0000000..e871d08 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREnchantmentType.java @@ -0,0 +1,26 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.util.LOTREnchantmentExclusions; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import lotr.common.enchant.LOTREnchantmentType; +import lotr.common.item.LOTRWeaponStats; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; + +@Mixin(LOTREnchantmentType.class) +public class MixinLOTREnchantmentType { + + @Inject(method = "canApply", at = @At("HEAD"), cancellable = true, remap = false) + public void onCanApply(ItemStack itemstack, boolean considering, CallbackInfoReturnable cir) { + Item item = itemstack.getItem(); + if (LOTREnchantmentExclusions.exclusions.contains(item)) { + cir.setReturnValue(false); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityAIAttackOnCollide.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityAIAttackOnCollide.java new file mode 100644 index 0000000..a4af150 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityAIAttackOnCollide.java @@ -0,0 +1,107 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.client.model.*; +import com.zivilon.cinder_loe.entity.Renegade; +import com.zivilon.cinder_loe.util.IEntityLivingBase; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.projectile.LOTREntitySpear; +import lotr.common.entity.ai.LOTREntityAIAttackOnCollide; +import lotr.common.item.LOTRItemSpear; +import lotr.common.item.LOTRWeaponStats; + +import java.util.UUID; + +@Mixin(LOTREntityAIAttackOnCollide.class) +public class MixinLOTREntityAIAttackOnCollide { + + @Shadow + protected World worldObj; + @Shadow + protected EntityCreature theOwner; + @Shadow + protected EntityLivingBase attackTarget; + @Shadow + protected int attackTick; + @Shadow + protected void updateLookAndPathing() {} + public UUID leader_id; + public Entity leader; + + @Overwrite + public void updateTask() { + EntityCreature entity = this.theOwner; + UUID leader_id = ((IEntityLivingBase)entity).get_warband_uuid(); + + if (leader_id != null) { + if (leader == null) + leader = find_entity_by_uuid(entity.worldObj, leader_id); + if (leader != null && entity.getDistanceSqToEntity(leader) > 576.0D) { + entity.setAttackTarget(null); + entity.getNavigator().tryMoveToEntityLiving(leader, 1.3D); + return; // Return here to not run default logic + } + } + + update_vanilla_task(); + } + + private void update_vanilla_task() { + updateLookAndPathing(); + if (this.attackTick > 0) + this.attackTick--; + ItemStack weapon = this.theOwner.getHeldItem(); + if (weapon != null && weapon.getItem() instanceof LOTRItemSpear && this.attackTick <= 0 && this.theOwner instanceof LOTREntityNPC) { + LOTREntityNPC theNPC = (LOTREntityNPC)this.theOwner; + ItemStack spearBackup = theNPC.npcItemsInv.getSpearBackup(); + if (spearBackup != null) { + LOTRItemSpear spearItem = (LOTRItemSpear)weapon.getItem(); + double d = this.theOwner.getDistanceToEntity((Entity)this.attackTarget); + double range = this.theOwner.getNavigator().getPathSearchRange(); + if (d > 5.0D && d < range * 0.75D) { + LOTREntitySpear spear = new LOTREntitySpear(this.worldObj, (EntityLivingBase)this.theOwner, this.attackTarget, weapon.copy(), 0.75F + (float)d * 0.025F, 0.5F); + this.worldObj.playSoundAtEntity((Entity)this.theOwner, "random.bow", 1.0F, 1.0F / (this.worldObj.rand.nextFloat() * 0.4F + 1.2F) + 0.25F); + this.worldObj.spawnEntityInWorld((Entity)spear); + this.attackTick = 30 + this.theOwner.getRNG().nextInt(20); + if (ItemStack.areItemStacksEqual(theNPC.npcItemsInv.getIdleItem(), theNPC.npcItemsInv.getMeleeWeapon())) + theNPC.npcItemsInv.setIdleItem(spearBackup); + theNPC.npcItemsInv.setMeleeWeapon(spearBackup); + theNPC.npcItemsInv.setSpearBackup(null); + return; + } + } + } + float weaponReach = 1.0F; + if (this.theOwner.ridingEntity != null) + weaponReach = LOTREntityNPC.MOUNT_RANGE_BONUS; + weaponReach *= LOTRWeaponStats.getMeleeReachFactor(this.theOwner.getHeldItem()); + float meleeRange = (float)this.theOwner.boundingBox.getAverageEdgeLength() + weaponReach; + if (this.theOwner.getDistanceSqToEntity((Entity)this.attackTarget) <= (meleeRange * meleeRange)) + if (this.attackTick <= 0) { + this.attackTick = LOTRWeaponStats.getAttackTimeMob(weapon); + this.theOwner.attackEntityAsMob((Entity)this.attackTarget); + this.theOwner.swingItem(); + } + } + + private Entity find_entity_by_uuid(World world, UUID uuid) { + for (Object obj : world.loadedEntityList) { + if (obj instanceof Entity && uuid.equals(((Entity) obj).getUniqueID())) { + return (Entity)obj; + } + } + return null; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityAINearestAttackableTargetBasic.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityAINearestAttackableTargetBasic.java new file mode 100644 index 0000000..a3e8f1f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityAINearestAttackableTargetBasic.java @@ -0,0 +1,119 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.entity.Renegade; +import com.zivilon.cinder_loe.potion.LoEPotions; +import com.zivilon.cinder_loe.util.IEntityLivingBase; + +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.entity.ai.LOTREntityAINearestAttackableTargetBasic; +import lotr.common.entity.ai.LOTREntityAINearestAttackableTargetBasic.TargetSorter; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.npc.LOTREntityNPCRideable; + +import net.minecraft.command.IEntitySelector; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.ai.EntityAITarget; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; + +import java.util.UUID; +import java.util.Collections; +import java.util.List; + +@Mixin(LOTREntityAINearestAttackableTargetBasic.class) +public abstract class MixinLOTREntityAINearestAttackableTargetBasic extends EntityAITarget { + @Shadow + private final Class targetClass; + @Shadow + private EntityLivingBase targetEntity; + @Shadow + private final TargetSorter targetSorter; + @Shadow + private final IEntitySelector targetSelector; + @Shadow + private final int targetChance; + + public MixinLOTREntityAINearestAttackableTargetBasic(EntityCreature p_i1669_1_, boolean p_i1669_2_) { + super(p_i1669_1_, p_i1669_2_); + targetClass = null; // Should never get applied because constructors can't be overwritten + targetEntity = null; + targetSorter = null; + targetSelector = null; + targetChance = 0; + } + + @Overwrite(remap = true) + public boolean shouldExecute() { + EntityCreature self = taskOwner; + + if (!(self instanceof IEntityLivingBase)) return original_should_execute(); + + UUID leader_id = ((IEntityLivingBase) self).get_warband_uuid(); + if (leader_id == null) return original_should_execute(); + + Entity leader = find_entity_by_uuid(self.worldObj, leader_id); + if (leader == null) return original_should_execute(); + + double distance_squared = self.getDistanceSqToEntity(leader); + if (distance_squared > 576.0D) { + self.setAttackTarget(null); + self.getNavigator().tryMoveToEntityLiving(leader, 1.3D); + return false; + } + return original_should_execute(); + } + + public boolean original_should_execute() { + if (this.targetChance > 0 && this.taskOwner.getRNG().nextInt(this.targetChance) != 0) + return false; + if (this.taskOwner instanceof LOTREntityNPC) { + LOTREntityNPC npc = (LOTREntityNPC)this.taskOwner; + if (npc.hiredNPCInfo.isActive && npc.hiredNPCInfo.isHalted()) + return false; + if (npc.isChild()) + return false; + } + if (this.taskOwner instanceof LOTREntityNPCRideable) { + LOTREntityNPCRideable rideable = (LOTREntityNPCRideable)this.taskOwner; + if (rideable.isNPCTamed() || rideable.riddenByEntity instanceof EntityPlayer) + return false; + } + double range = getTargetDistance(); + double rangeY = Math.min(range, 8.0D); + List entities = this.taskOwner.worldObj.selectEntitiesWithinAABB(this.targetClass, this.taskOwner.boundingBox.expand(range, rangeY, range), this.targetSelector); + List entity_list = (List)entities; + Collections.sort(entity_list, this.targetSorter); + if (entities.isEmpty()) + return false; + this.targetEntity = (EntityLivingBase)entities.get(0); + return true; + } + + private Entity find_entity_by_uuid(World world, UUID uuid) { + for (Object obj : world.loadedEntityList) { + if (obj instanceof Entity && uuid.equals(((Entity) obj).getUniqueID())) { + return (Entity)obj; + } + } + return null; + } + + /** + * @author Shinare + * @reason Added corrupting potion effect that makes all NPCs hostile + */ + @Overwrite(remap = false) + protected boolean isPlayerSuitableAlignmentTarget(EntityPlayer entityplayer) { + float alignment = LOTRLevelData.getData(entityplayer).getAlignment(LOTRMod.getNPCFaction((Entity)this.taskOwner)); + if (entityplayer == null || LoEPotions.corrupting == null) return alignment < 0.0F; + boolean corrupting = entityplayer.isPotionActive(LoEPotions.corrupting); // Needs to be implemented + return (alignment < 0.0F || corrupting); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityBear.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityBear.java new file mode 100644 index 0000000..99d81f2 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityBear.java @@ -0,0 +1,63 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRMod; +import lotr.common.entity.animal.LOTREntityBear; +import lotr.common.entity.npc.LOTREntityWarg; +import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + + +@Mixin(LOTREntityBear.class) +public abstract class MixinLOTREntityBear extends Entity { + + public MixinLOTREntityBear(World worldIn) { + super(worldIn); + } + + /** + * @author KeyLime17 + * @reason Mevans + */ + + @Shadow + public abstract LOTREntityBear.BearType getBearType(); + + @Overwrite(remap = false) + protected void func_70628_a(boolean flag, int i) { + Item furItem = null; + int furMeta = 0; + switch(getBearType().bearID) { + case 0: + furItem = LOTRMod.fur; + break; + case 1: + furItem = CinderLoE.cinderFurItem; + furMeta = 5; + break; + case 2: + furItem = CinderLoE.cinderFurItem; + furMeta = 4; + break; + } + + int furs = 1 + this.rand.nextInt(3) + this.rand.nextInt(i + 1); + for (int l = 0; l < furs; l++) + entityDropItem(new ItemStack(furItem, 1, furMeta), 0.0F); + int bones = 2 + this.rand.nextInt(2) + this.rand.nextInt(i + 1); + for (int j = 0; j < bones; j++) + dropItem(LOTRMod.wargBone, 1); + if (flag) { + int rugChance = 50 - i * 8; + rugChance = Math.max(rugChance, 1); + if (this.rand.nextInt(rugChance) == 0) + entityDropItem(new ItemStack(LOTRMod.wargskinRug, 1, (getBearType()).bearID), 0.0F); + } + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityLioness.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityLioness.java new file mode 100644 index 0000000..76d5261 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityLioness.java @@ -0,0 +1,48 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRMod; +import lotr.common.entity.animal.LOTREntityBear; +import lotr.common.item.LOTRItemLionRug; +import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + + +@Mixin(LOTREntityBear.class) +public abstract class MixinLOTREntityLioness extends Entity { + + public MixinLOTREntityLioness(World worldIn) { + super(worldIn); + } + + /** + * @author KeyLime17 + * @reason Mevans + */ + + + protected LOTRItemLionRug.LionRugType getLionRugType() { + return LOTRItemLionRug.LionRugType.LIONESS; + } + + @Overwrite(remap = false) + protected void func_70628_a(boolean flag, int i) { + Item furItem = CinderLoE.cinderFurItem; + int furMeta = 6; + + int furs = 1 + this.rand.nextInt(3) + this.rand.nextInt(i + 1); + for (int l = 0; l < furs; l++) + entityDropItem(new ItemStack(furItem, 1, furMeta), 0.0F); + if (flag) { + int rugChance = 50 - i * 8; + rugChance = Math.max(rugChance, 1); + if (this.rand.nextInt(rugChance) == 0) + entityDropItem(new ItemStack(LOTRMod.lionRug, 1, (getLionRugType()).lionID), 0.0F); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityNPC.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityNPC.java new file mode 100644 index 0000000..47171fe --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityNPC.java @@ -0,0 +1,141 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.droptables.DropTable; +import com.zivilon.cinder_loe.droptables.DropContext; +import com.zivilon.cinder_loe.util.ILootableEntity; +import com.zivilon.cinder_loe.util.IMixinEntityPlayer; +import com.zivilon.cinder_loe.util.PickpocketUtils; +import com.zivilon.cinder_loe.CinderLoE; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.*; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.npc.LOTREntityQuestInfo; + +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; + +import java.util.ArrayList; +import java.util.List; + +@Mixin(LOTREntityNPC.class) +public abstract class MixinLOTREntityNPC extends EntityCreature implements ILootableEntity { + public DropTable drop_table = null; + public int last_pickpocket = 0; + public float pickpocket_chance = 0.0F; + + @Shadow + public LOTREntityQuestInfo questInfo; + @Shadow + public boolean speakTo(EntityPlayer entityplayer) {return false;} + @Shadow + public boolean canNPCTalk() {return false;} + + public MixinLOTREntityNPC(World world) { + super(world); + } + + @Overwrite + public boolean interact(EntityPlayer entityplayer) { + if (PickpocketUtils.can_pickpocket(entityplayer, (LOTREntityNPC)(Object)this)) { + boolean success = PickpocketUtils.pickpocket(entityplayer, (LOTREntityNPC)(Object)this); + ((IMixinEntityPlayer)entityplayer).set_last_pickpocket_attempt((int)(System.currentTimeMillis() / 1000L)); + if (success) { + List drops = DropTable.generate_drops((LOTREntityNPC)(Object)this, new DropContext[]{DropContext.PICKPOCKET}, 0); + ItemStack item = drops.get(DropTable.random.nextInt(drops.size())); + if (CinderLoE.DEBUG) System.out.println("[MixinLOTREntityNPC] Giving pickpocket reward " + item.getItem().getUnlocalizedName()); + if (entityplayer.inventory.addItemStackToInventory(item)) { + if (CinderLoE.DEBUG) System.out.println("[MixinLOTREntityNPC] Item successfully granted"); + last_pickpocket = (int)(System.currentTimeMillis() / 1000L); + } else { + if (CinderLoE.DEBUG) System.out.println("[MixinLOTREntityNPC] Item grant failed"); + } + } else { + last_pickpocket = (int)(System.currentTimeMillis() / 1000L); + ((LOTREntityNPC)(Object)this).setRevengeTarget(entityplayer); + if (CinderLoE.DEBUG) System.out.println("[MixinLOTREntityNPC] Pickpocket failed."); + } + return true; + } + if (CinderLoE.DEBUG) System.out.println("[MixinLOTREntityNPC] Pickpocket didn't happen."); + if (!this.worldObj.isRemote && canNPCTalk()) { + if (this.questInfo.interact(entityplayer)) + return true; + if (getAttackTarget() == null) + if (speakTo(entityplayer)) + return true; + } + return super.interact(entityplayer); + } + + @Inject(method = "func_110161_a", at = @At("HEAD"), remap = false) // onSpawnWithEgg + private void onSpawned(IEntityLivingData entity, CallbackInfoReturnable cir) { + PickpocketUtils.assign_drop_table((LOTREntityNPC)(Object)this); + } + + /** + * Add support for DropTables + */ + @Inject(method = "func_70628_a", at = @At("HEAD"), remap = false) // dropFewItems + private void loot_drop_table(boolean flag, int i, CallbackInfo ci) { + DropContext[] context = new DropContext[3]; + int len = 0; + context[len++] = DropContext.KILLED; + + if (((LOTREntityNPC)(Object)this).isBurning()) { + context[len++] = DropContext.KILLED_BY_FIRE; + } + if (flag) { + context[len++] = DropContext.KILLED_BY_PLAYER; + } + DropTable.drop_items((LOTREntityNPC)(Object)this, context, i); + } + @Inject(method = "func_70014_b", at = @At("TAIL"), remap = false) // writeEntityToNBT + private void write_drop_table(NBTTagCompound tag, CallbackInfo ci) { + if (drop_table != null) { + tag.setTag("DropTable", DropTable.serialize_to_nbt(drop_table)); + } + tag.setTag("last_pickpocket", new NBTTagInt(last_pickpocket)); + tag.setTag("pickpocket_chance", new NBTTagFloat(pickpocket_chance)); + } + @Inject(method = "func_70037_a", at = @At("TAIL"), remap = false) // readEntityFromNBT + private void read_drop_table(NBTTagCompound tag, CallbackInfo ci) { + if (tag.hasKey("DropTable")) { + this.drop_table = DropTable.deserialize_from_nbt(tag.getCompoundTag("DropTable")); + } + this.last_pickpocket = tag.getInteger("last_pickpocket"); + this.pickpocket_chance = tag.getFloat("pickpocket_chance"); + } + + @Override + public void set_drop_table(DropTable table) { + drop_table = table; + } + @Override + public DropTable get_drop_table() { + return drop_table; + } + @Override + public void set_last_pickpocket(int i) { + this.last_pickpocket = i; + } + @Override + public int get_last_pickpocket() { + return this.last_pickpocket; + } + @Override + public void set_pickpocket_chance(Float f) { + this.pickpocket_chance = f; + } + @Override + public Float get_pickpocket_chance() { + return this.pickpocket_chance; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityProjectileBase.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityProjectileBase.java new file mode 100644 index 0000000..47862ab --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityProjectileBase.java @@ -0,0 +1,261 @@ +package com.zivilon.cinder_loe.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; + +import lotr.common.item.LOTRWeaponStats; +import lotr.common.enchant.LOTREnchantmentHelper; +import lotr.common.entity.projectile.LOTREntityProjectileBase; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S2BPacketChangeGameState; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import java.util.List; + +@Mixin(LOTREntityProjectileBase.class) +public abstract class MixinLOTREntityProjectileBase extends Entity { + + public MixinLOTREntityProjectileBase(World world) { + super(world); + } + + @Shadow(remap = false) + public abstract void setIsCritical(boolean p_70243_1_); + @Shadow(remap = false) + public abstract boolean getIsCritical(); + @Shadow(remap = false) + public abstract float getSpeedReduction(); + @Shadow(remap = false) + public abstract String getImpactSound(); + @Shadow(remap = false) + protected abstract void onCollideWithTarget(Entity entity); + @Shadow(remap = false) + protected abstract float getKnockbackFactor(); + @Shadow(remap = false) + public abstract ItemStack getProjectileItem(); + @Shadow(remap = false) + public abstract DamageSource getDamageSource(); + @Shadow(remap = false) + public abstract int maxTicksInGround(); + @Shadow(remap = false) + public abstract float getBaseImpactDamage(Entity paramEntity, ItemStack paramItemStack); + + @Shadow(remap = false) + private int xTile = -1; + @Shadow(remap = false) + private int yTile = -1; + @Shadow(remap = false) + private int zTile = -1; + @Shadow(remap = false) + private Block inTile; + @Shadow(remap = false) + private int inData; + @Shadow(remap = false) + private boolean inGround; + @Shadow(remap = false) + public int shake; + @Shadow(remap = false) + public Entity shootingEntity; + @Shadow(remap = false) + private int ticksInGround; + @Shadow(remap = false) + private int ticksInAir; + @Shadow(remap = false) + private int knockbackStrength; + + + /** + * @author Shinare + * @reason Having full knockbackResistance attribute now negates bonus knockback as well + */ + @Overwrite(remap = false) + public void func_70071_h_() { + super.onUpdate(); + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) { + float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, f) * 180.0D / Math.PI); + } + Block block = this.worldObj.getBlock(this.xTile, this.yTile, this.zTile); + if (block != Blocks.air) { + block.setBlockBoundsBasedOnState((IBlockAccess)this.worldObj, this.xTile, this.yTile, this.zTile); + AxisAlignedBB axisalignedbb = block.getCollisionBoundingBoxFromPool(this.worldObj, this.xTile, this.yTile, this.zTile); + if (axisalignedbb != null && axisalignedbb.isVecInside(Vec3.createVectorHelper(this.posX, this.posY, this.posZ))) + this.inGround = true; + } + if (this.shake > 0) + this.shake--; + if (this.inGround) { + Block j = this.worldObj.getBlock(this.xTile, this.yTile, this.zTile); + int k = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile); + if (j == this.inTile && k == this.inData) { + this.ticksInGround++; + if (this.ticksInGround >= maxTicksInGround()) + setDead(); + } else { + this.inGround = false; + this.motionX *= (this.rand.nextFloat() * 0.2F); + this.motionY *= (this.rand.nextFloat() * 0.2F); + this.motionZ *= (this.rand.nextFloat() * 0.2F); + this.ticksInGround = 0; + this.ticksInAir = 0; + } + } else { + this.ticksInAir++; + Vec3 vec3d = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + Vec3 vec3d1 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition movingobjectposition = this.worldObj.func_147447_a(vec3d, vec3d1, false, true, false); + vec3d = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + vec3d1 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if (movingobjectposition != null) + vec3d1 = Vec3.createVectorHelper(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord); + Entity entity = null; + List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double d = 0.0D; + int l; + for (l = 0; l < list.size(); l++) { + Entity entity1 = list.get(l); + if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) { + float f5 = 0.3F; + AxisAlignedBB axisalignedbb1 = entity1.boundingBox.expand(f5, f5, f5); + MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec3d, vec3d1); + if (movingobjectposition1 != null) { + double d1 = vec3d.distanceTo(movingobjectposition1.hitVec); + if (d1 < d || d == 0.0D) { + entity = entity1; + d = d1; + } + } + } + } + if (entity != null) + movingobjectposition = new MovingObjectPosition(entity); + if (movingobjectposition != null && movingobjectposition.entityHit instanceof EntityPlayer) { + EntityPlayer entityplayer = (EntityPlayer)movingobjectposition.entityHit; + if (entityplayer.capabilities.disableDamage || (this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer))) + movingobjectposition = null; + } + if (movingobjectposition != null) { + Entity hitEntity = movingobjectposition.entityHit; + if (hitEntity != null) { + ItemStack itemstack = getProjectileItem(); + int damageInt = MathHelper.ceiling_double_int(getBaseImpactDamage(hitEntity, itemstack)); + int fireAspect = 0; + if (itemstack != null) + if (this.shootingEntity instanceof EntityLivingBase && hitEntity instanceof EntityLivingBase) { + this.knockbackStrength += EnchantmentHelper.getKnockbackModifier((EntityLivingBase)this.shootingEntity, (EntityLivingBase)hitEntity); + } else { + this.knockbackStrength += LOTRWeaponStats.getTotalKnockback(itemstack); + } + if (getIsCritical()) + damageInt += this.rand.nextInt(damageInt / 2 + 2); + double[] prevMotion = { hitEntity.motionX, hitEntity.motionY, hitEntity.motionZ }; + DamageSource damagesource = getDamageSource(); + if (hitEntity.attackEntityFrom(damagesource, damageInt)) { + double[] newMotion = { hitEntity.motionX, hitEntity.motionY, hitEntity.motionZ }; + float kbf = getKnockbackFactor(); + hitEntity.motionX = prevMotion[0] + (newMotion[0] - prevMotion[0]) * kbf; + hitEntity.motionY = prevMotion[1] + (newMotion[1] - prevMotion[1]) * kbf; + hitEntity.motionZ = prevMotion[2] + (newMotion[2] - prevMotion[2]) * kbf; + if (isBurning()) + hitEntity.setFire(5); + if (hitEntity instanceof EntityLivingBase) { + EntityLivingBase hitEntityLiving = (EntityLivingBase)hitEntity; + double knockback_resistance = hitEntityLiving.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).getAttributeValue(); + if (this.knockbackStrength > 0 && knockback_resistance < 1.0D) { + float knockback = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + if (knockback > 0.0F) + hitEntityLiving.addVelocity(this.motionX * this.knockbackStrength * 0.6D / knockback, 0.1D, this.motionZ * this.knockbackStrength * 0.6D / knockback); + } + if (fireAspect > 0) + hitEntityLiving.setFire(fireAspect * 4); + if (this.shootingEntity instanceof EntityLivingBase) { + EnchantmentHelper.func_151384_a(hitEntityLiving, this.shootingEntity); + EnchantmentHelper.func_151385_b((EntityLivingBase)this.shootingEntity, (Entity)hitEntityLiving); + } + if (this.shootingEntity instanceof EntityPlayerMP && hitEntityLiving instanceof EntityPlayer) + ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacket((Packet)new S2BPacketChangeGameState(6, 0.0F)); + } + this.worldObj.playSoundAtEntity(this, getImpactSound(), 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + onCollideWithTarget(hitEntity); + } else { + this.motionX *= -0.1D; + this.motionY *= -0.1D; + this.motionZ *= -0.1D; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + } + } else { + this.xTile = movingobjectposition.blockX; + this.yTile = movingobjectposition.blockY; + this.zTile = movingobjectposition.blockZ; + this.inTile = this.worldObj.getBlock(this.xTile, this.yTile, this.zTile); + this.inData = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile); + this.motionX = (float)(movingobjectposition.hitVec.xCoord - this.posX); + this.motionY = (float)(movingobjectposition.hitVec.yCoord - this.posY); + this.motionZ = (float)(movingobjectposition.hitVec.zCoord - this.posZ); + float f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / f2 * 0.05D; + this.posY -= this.motionY / f2 * 0.05D; + this.posZ -= this.motionZ / f2 * 0.05D; + this.worldObj.playSoundAtEntity(this, getImpactSound(), 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.shake = 7; + setIsCritical(false); + if (this.inTile.getMaterial() != Material.air) + this.inTile.onEntityCollidedWithBlock(this.worldObj, this.xTile, this.yTile, this.zTile, this); + } + } + if (getIsCritical()) + for (l = 0; l < 4; l++) + this.worldObj.spawnParticle("crit", this.posX + this.motionX * l / 4.0D, this.posY + this.motionY * l / 4.0D, this.posZ + this.motionZ * l / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ); + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float f3 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); + for (this.rotationPitch = (float)(Math.atan2(this.motionY, f3) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F); + for (; this.rotationPitch - this.prevRotationPitch >= 180.0F; this.prevRotationPitch += 360.0F); + for (; this.rotationYaw - this.prevRotationYaw < -180.0F; this.prevRotationYaw -= 360.0F); + for (; this.rotationYaw - this.prevRotationYaw >= 180.0F; this.prevRotationYaw += 360.0F); + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + float f4 = getSpeedReduction(); + if (isInWater()) { + for (int k1 = 0; k1 < 4; k1++) { + float f7 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * f7, this.posY - this.motionY * f7, this.posZ - this.motionZ * f7, this.motionX, this.motionY, this.motionZ); + } + f4 = 0.8F; + } + this.motionX *= f4; + this.motionY *= f4; + this.motionZ *= f4; + this.motionY -= 0.05000000074505806D; + setPosition(this.posX, this.posY, this.posZ); + func_145775_I(); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntitySauron.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntitySauron.java new file mode 100644 index 0000000..e0cba86 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntitySauron.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.npc.LOTREntitySauron; + +import net.minecraft.world.World; + +@Mixin(LOTREntitySauron.class) +public abstract class MixinLOTREntitySauron extends LOTREntityNPC { + MixinLOTREntitySauron(World world) { + super(world); + } + + public void setupNPCName() { + this.familyInfo.setName("Sauron"); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityWarg.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityWarg.java new file mode 100644 index 0000000..895c0d1 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTREntityWarg.java @@ -0,0 +1,77 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTREntityWarg; +import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + + +@Mixin(LOTREntityWarg.class) +public abstract class MixinLOTREntityWarg extends Entity { + + public MixinLOTREntityWarg(World worldIn) { + super(worldIn); + } + + /** + * @author KeyLime17 + * @reason Mevans + */ + + @Shadow + public abstract LOTREntityWarg.WargType getWargType(); + + @Overwrite(remap = false) + protected void func_70628_a(boolean flag, int i) { + Item furItem = null; + int furMeta = 0; + switch(getWargType().wargID) { + case 0: + furItem = LOTRMod.fur; + break; + case 1: + furItem = CinderLoE.cinderFurItem; + break; + case 2: + furItem = CinderLoE.cinderFurItem; + furMeta = 1; + break; + case 3: + furItem = CinderLoE.cinderFurItem; + furMeta = 2; + break; + case 4: + furItem = CinderLoE.cinderFurItem; + furMeta = 0; // Needs ice fur to be added + break; + case 5: + furItem = CinderLoE.cinderFurItem; + furMeta = 3; + break; + case 6: + furItem = CinderLoE.cinderFurItem; + furMeta = 0; // Needs fire fur to be added + break; + } + + int furs = 1 + this.rand.nextInt(3) + this.rand.nextInt(i + 1); + for (int l = 0; l < furs; l++) + entityDropItem(new ItemStack(furItem, 1, furMeta), 0.0F); + int bones = 2 + this.rand.nextInt(2) + this.rand.nextInt(i + 1); + for (int j = 0; j < bones; j++) + dropItem(LOTRMod.wargBone, 1); + if (flag) { + int rugChance = 50 - i * 8; + rugChance = Math.max(rugChance, 1); + if (this.rand.nextInt(rugChance) == 0) + entityDropItem(new ItemStack(LOTRMod.wargskinRug, 1, (getWargType()).wargID), 0.0F); + } + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRIntCache.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRIntCache.java new file mode 100644 index 0000000..eca9684 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRIntCache.java @@ -0,0 +1,72 @@ +package com.zivilon.cinder_loe.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import lotr.common.world.genlayer.LOTRIntCache; +import com.zivilon.cinder_loe.util.Utilities; + +import java.util.List; + +@Mixin(LOTRIntCache.class) +public abstract class MixinLOTRIntCache { + + @Shadow(remap = false) + private static LOTRIntCache SERVER; + @Shadow(remap = false) + private static LOTRIntCache CLIENT; + @Shadow(remap = false) + private int intCacheSize = 256; + @Shadow(remap = false) + private List freeSmallArrays; + @Shadow(remap = false) + private List inUseSmallArrays; + @Shadow(remap = false) + private List freeLargeArrays; + @Shadow(remap = false) + private List inUseLargeArrays; + + /** + * @author Shinare + * @reason Unsuccessfully trying to patch a crash bug + */ + @Overwrite(remap = false) + public int[] getIntArray(int size) { + try { + if (size <= 256) { + if (this.freeSmallArrays.isEmpty()) { + int[] arrayOfInt1 = new int[256]; + this.inUseSmallArrays.add(arrayOfInt1); + return cacheInts(arrayOfInt1); + } + int[] arrayOfInt = this.freeSmallArrays.remove(this.freeSmallArrays.size() - 1); + this.inUseSmallArrays.add(arrayOfInt); + return cacheInts(arrayOfInt); + } + if (size > this.intCacheSize) { + this.intCacheSize = size; + this.freeLargeArrays.clear(); + this.inUseLargeArrays.clear(); + int[] arrayOfInt = new int[this.intCacheSize]; + this.inUseLargeArrays.add(arrayOfInt); + return cacheInts(arrayOfInt); + } + if (this.freeLargeArrays.isEmpty()) { + int[] arrayOfInt = new int[this.intCacheSize]; + this.inUseLargeArrays.add(arrayOfInt); + return cacheInts(arrayOfInt); + } + int[] ints = this.freeLargeArrays.remove(this.freeLargeArrays.size() - 1); + this.inUseLargeArrays.add(ints); + return cacheInts(ints); + } catch (IndexOutOfBoundsException e) { + System.err.println("Caught IndexOutOfBoundsException in getIntArray: " + e.getMessage()); + return new int[size]; + } + } + + private int[] cacheInts(int[] ints) { + Utilities.LOTRIntCache = ints; + return ints; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRNPCRendering.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRNPCRendering.java new file mode 100644 index 0000000..24b7fcd --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRNPCRendering.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.render.entity.LOTRNPCRendering; + +import net.minecraft.client.renderer.Tessellator; + +@Mixin(LOTRNPCRendering.class) +public abstract class MixinLOTRNPCRendering { + @Redirect(method = "renderQuestBook(Llotr/common/entity/npc/LOTREntityNPC;DDD)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private static void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderArmorStand.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderArmorStand.java new file mode 100644 index 0000000..aab91db --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderArmorStand.java @@ -0,0 +1,154 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.CinderLoE_Config; +import org.lwjgl.opengl.GL11; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import io.gitlab.dwarfyassassin.lotrucp.client.util.FakeArmorStandEntity; + +import lotr.client.LOTRClientProxy; +import lotr.client.model.LOTRArmorModels; +import lotr.client.model.LOTRModelBiped; +import lotr.client.render.tileentity.LOTRRenderArmorStand; +import lotr.common.tileentity.LOTRTileEntityArmorStand; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.entity.RenderBiped; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.ForgeHooksClient; + +@Mixin(LOTRRenderArmorStand.class) +public abstract class MixinLOTRRenderArmorStand extends TileEntitySpecialRenderer { + + @Shadow(remap = false) + private static ModelBase standModel; + @Shadow(remap = false) + private static ResourceLocation standTexture; + @Shadow(remap = false) + private static ModelBiped modelBipedMain; + @Shadow(remap = false) + private static ModelBiped modelBiped1; + @Shadow(remap = false) + private static ModelBiped modelBiped2; + @Shadow(remap = false) + private static float BIPED_ARM_ROTATION; + @Shadow(remap = false) + private static float BIPED_TICKS_EXISTED; + + + /** + * @author Shinare + * @reason Added support configurable enchantment colour + */ + @Overwrite(remap = false) + public void func_147500_a(TileEntity tileentity, double d, double d1, double d2, float f) { + LOTRTileEntityArmorStand armorStand = (LOTRTileEntityArmorStand)tileentity; + FakeArmorStandEntity fakeArmorStandEntity = FakeArmorStandEntity.INSTANCE; + GL11.glPushMatrix(); + GL11.glDisable(2884); + GL11.glEnable(32826); + GL11.glEnable(3008); + GL11.glTranslatef((float)d + 0.5F, (float)d1 + 1.5F, (float)d2 + 0.5F); + switch (armorStand.getBlockMetadata() & 0x3) { + case 0: + GL11.glRotatef(0.0F, 0.0F, 1.0F, 0.0F); + break; + case 1: + GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); + break; + case 2: + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + break; + case 3: + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + break; + } + GL11.glScalef(-1.0F, -1.0F, 1.0F); + float scale = 0.0625F; + bindTexture(standTexture); + standModel.render((Entity)fakeArmorStandEntity, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, scale); + LOTRArmorModels.INSTANCE.setupModelForRender(modelBipedMain, null, (EntityLivingBase)fakeArmorStandEntity); + GL11.glTranslatef(0.0F, -0.1875F, 0.0F); + for (int slot = 0; slot < 4; slot++) { + ItemStack itemstack = armorStand.func_70301_a(slot); + if (itemstack != null && (itemstack.getItem() instanceof ItemArmor || itemstack.getItem() instanceof lotr.common.item.LOTRItemPlate)) { + boolean isArmor = itemstack.getItem() instanceof ItemArmor; + if (isArmor) + bindTexture(RenderBiped.getArmorResource((Entity)fakeArmorStandEntity, itemstack, slot, null)); + ModelBiped armorModel = (slot == 2) ? modelBiped2 : modelBiped1; + LOTRArmorModels.INSTANCE.setupArmorForSlot(armorModel, slot); + armorModel = ForgeHooksClient.getArmorModel((EntityLivingBase)fakeArmorStandEntity, itemstack, slot, armorModel); + ModelBiped specialModel = LOTRArmorModels.INSTANCE.getSpecialArmorModel(itemstack, slot, (EntityLivingBase)fakeArmorStandEntity, modelBipedMain); + if (specialModel != null) + armorModel = specialModel; + LOTRArmorModels.INSTANCE.setupModelForRender(armorModel, null, (EntityLivingBase)fakeArmorStandEntity); + float f1 = 1.0F; + boolean isColoredArmor = false; + if (isArmor) { + int j = ((ItemArmor)itemstack.getItem()).getColor(itemstack); + if (j != -1) { + float f2 = (j >> 16 & 0xFF) / 255.0F; + float f3 = (j >> 8 & 0xFF) / 255.0F; + float f4 = (j & 0xFF) / 255.0F; + GL11.glColor3f(f1 * f2, f1 * f3, f1 * f4); + isColoredArmor = true; + } else { + GL11.glColor3f(f1, f1, f1); + } + } else { + GL11.glColor3f(f1, f1, f1); + } + armorModel.render((Entity)fakeArmorStandEntity, BIPED_ARM_ROTATION, 0.0F, BIPED_TICKS_EXISTED, 0.0F, 0.0F, scale); + if (isColoredArmor) { + bindTexture(RenderBiped.getArmorResource(null, itemstack, slot, "overlay")); + f1 = 1.0F; + GL11.glColor3f(f1, f1, f1); + armorModel.render((Entity)fakeArmorStandEntity, BIPED_ARM_ROTATION, 0.0F, BIPED_TICKS_EXISTED, 0.0F, 0.0F, scale); + } + if (itemstack.isItemEnchanted()) { + float f2 = armorStand.ticksExisted + f; + bindTexture(LOTRClientProxy.enchantmentTexture); + GL11.glEnable(3042); + float f3 = 0.5F; + GL11.glColor4f(f3, f3, f3, 1.0F); + GL11.glDepthFunc(514); + GL11.glDepthMask(false); + for (int k = 0; k < 2; k++) { + GL11.glDisable(2896); + GL11.glColor4f(CinderLoE_Config.enchantment_color_red, CinderLoE_Config.enchantment_color_green, CinderLoE_Config.enchantment_color_blue, 1.0F); + GL11.glBlendFunc(768, 1); + GL11.glMatrixMode(5890); + GL11.glLoadIdentity(); + float f5 = 0.33333334F; + GL11.glScalef(f5, f5, f5); + GL11.glRotatef(30.0F - k * 60.0F, 0.0F, 0.0F, 1.0F); + float f6 = f2 * (0.001F + k * 0.003F) * 20.0F; + GL11.glTranslatef(0.0F, f6, 0.0F); + GL11.glMatrixMode(5888); + armorModel.render((Entity)fakeArmorStandEntity, BIPED_ARM_ROTATION, 0.0F, BIPED_TICKS_EXISTED, 0.0F, 0.0F, scale); + } + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glMatrixMode(5890); + GL11.glDepthMask(true); + GL11.glLoadIdentity(); + GL11.glMatrixMode(5888); + GL11.glEnable(2896); + GL11.glDisable(3042); + GL11.glDepthFunc(515); + } + } + } + GL11.glEnable(2884); + GL11.glDisable(32826); + GL11.glPopMatrix(); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderBlownItem.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderBlownItem.java new file mode 100644 index 0000000..3a426f7 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderBlownItem.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.render.item.LOTRRenderBlownItem; + +import net.minecraft.client.renderer.Tessellator; + +@Mixin(LOTRRenderBlownItem.class) +public abstract class MixinLOTRRenderBlownItem { + @Redirect(method = "renderItem(Lnet/minecraftforge/client/IItemRenderer$ItemRenderType;Lnet/minecraft/item/ItemStack;[Ljava/lang/Object;)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderBow.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderBow.java new file mode 100644 index 0000000..5733c81 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderBow.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.render.item.LOTRRenderBow; + +import net.minecraft.client.renderer.Tessellator; + +@Mixin(LOTRRenderBow.class) +public abstract class MixinLOTRRenderBow { + @Redirect(method = "renderItem(Lnet/minecraftforge/client/IItemRenderer$ItemRenderType;Lnet/minecraft/item/ItemStack;[Ljava/lang/Object;)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderCrossbow.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderCrossbow.java new file mode 100644 index 0000000..73300bb --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderCrossbow.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.render.item.LOTRRenderCrossbow; + +import net.minecraft.client.renderer.Tessellator; + +@Mixin(LOTRRenderCrossbow.class) +public abstract class MixinLOTRRenderCrossbow { + @Redirect(method = "renderItem(Lnet/minecraftforge/client/IItemRenderer$ItemRenderType;Lnet/minecraft/item/ItemStack;[Ljava/lang/Object;)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderDart.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderDart.java new file mode 100644 index 0000000..57502ae --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderDart.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.render.entity.LOTRRenderDart; + +import net.minecraft.client.renderer.Tessellator; + +@Mixin(LOTRRenderDart.class) +public abstract class MixinLOTRRenderDart { + @Redirect(method = "func_76986_a(Lnet/minecraft/entity/Entity;DDDFF)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderElf.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderElf.java new file mode 100644 index 0000000..0c98d8d --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderElf.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.render.entity.LOTRRenderElf; + +import net.minecraft.client.renderer.Tessellator; + +@Mixin(LOTRRenderElf.class) +public abstract class MixinLOTRRenderElf { + @Redirect(method = "func_77029_c(Lnet/minecraft/entity/EntityLivingBase;F)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderElvenBlade.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderElvenBlade.java new file mode 100644 index 0000000..02d86b7 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderElvenBlade.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.render.item.LOTRRenderElvenBlade; + +import net.minecraft.client.renderer.Tessellator; + +@Mixin(LOTRRenderElvenBlade.class) +public abstract class MixinLOTRRenderElvenBlade { + @Redirect(method = "renderItem(Lnet/minecraftforge/client/IItemRenderer$ItemRenderType;Lnet/minecraft/item/ItemStack;[Ljava/lang/Object;)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderLargeItem.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderLargeItem.java new file mode 100644 index 0000000..e7d994e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderLargeItem.java @@ -0,0 +1,44 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import lotr.client.render.item.LOTRRenderLargeItem; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.resources.IResource; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StringUtils; + +import net.minecraftforge.client.IItemRenderer; + +import java.io.IOException; +import java.util.Map; + +@Mixin(LOTRRenderLargeItem.class) +public abstract class MixinLOTRRenderLargeItem { + + /** + * @author Shinare + * @reason Added support for transparent textures + */ + @Redirect(method = "renderLargeItem(Lnet/minecraft/util/IIcon;)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderNPCRespawner.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderNPCRespawner.java new file mode 100644 index 0000000..4e99bd0 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderNPCRespawner.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.render.entity.LOTRRenderNPCRespawner; + +import net.minecraft.client.renderer.Tessellator; + +@Mixin(LOTRRenderNPCRespawner.class) +public abstract class MixinLOTRRenderNPCRespawner { + @Redirect(method = "func_76986_a(Lnet/minecraft/entity/Entity;DDDFF)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderPlateFood.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderPlateFood.java new file mode 100644 index 0000000..697587c --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderPlateFood.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.render.tileentity.LOTRRenderPlateFood; + +import net.minecraft.client.renderer.Tessellator; + +@Mixin(LOTRRenderPlateFood.class) +public abstract class MixinLOTRRenderPlateFood { + @Redirect(method = "func_147500_a(Lnet/minecraft/tileentity/TileEntity;DDDF)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderThrowingAxe.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderThrowingAxe.java new file mode 100644 index 0000000..94929d2 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderThrowingAxe.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.render.entity.LOTRRenderThrowingAxe; + +import net.minecraft.client.renderer.Tessellator; + +@Mixin(LOTRRenderThrowingAxe.class) +public abstract class MixinLOTRRenderThrowingAxe { + @Redirect(method = "func_76986_a(Lnet/minecraft/entity/Entity;DDDFF)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderTraderRespawn.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderTraderRespawn.java new file mode 100644 index 0000000..dabe6e2 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRRenderTraderRespawn.java @@ -0,0 +1,21 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import lotr.client.render.entity.LOTRRenderTraderRespawn; + +import net.minecraft.client.renderer.Tessellator; + +@Mixin(LOTRRenderTraderRespawn.class) +public abstract class MixinLOTRRenderTraderRespawn { + @Redirect(method = "func_76986_a(Lnet/minecraft/entity/Entity;DDDFF)V", remap = false, + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;func_78439_a(Lnet/minecraft/client/renderer/Tessellator;FFFFIIF)V")) + private void onRenderItemIn2D(Tessellator tessellator, float f1, float f2, float f, float f3, int width, int height, float thickness) { + RenderHelper.customRenderItemIn2D(tessellator, f1, f2, f, f3, width, height, thickness, false); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTileEntityDwarvenForge.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTileEntityDwarvenForge.java new file mode 100644 index 0000000..280162a --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTileEntityDwarvenForge.java @@ -0,0 +1,74 @@ +package com.zivilon.cinder_loe.mixins; + +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.init.Items; + +import net.minecraftforge.oredict.OreDictionary; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; + +import lotr.common.tileentity.LOTRTileEntityDwarvenForge; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.lang.reflect.Field; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRMod; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(LOTRTileEntityDwarvenForge.class) +public abstract class MixinLOTRTileEntityDwarvenForge { + protected boolean isCopper(ItemStack itemstack) { + return (LOTRMod.isOreNameEqual(itemstack, "oreCopper") || LOTRMod.isOreNameEqual(itemstack, "ingotCopper")); + } + + protected boolean isTin(ItemStack itemstack) { + return (LOTRMod.isOreNameEqual(itemstack, "oreTin") || LOTRMod.isOreNameEqual(itemstack, "ingotTin")); + } + + protected boolean isIron(ItemStack itemstack) { + return (LOTRMod.isOreNameEqual(itemstack, "oreIron") || LOTRMod.isOreNameEqual(itemstack, "ingotIron")); + } + + protected boolean isCoal(ItemStack itemstack) { + return (itemstack.getItem() == Items.coal); + } + + protected boolean isMithril(ItemStack itemstack) { + return itemstack.getItem() == Item.getItemFromBlock(LOTRMod.oreMithril) || itemstack.getItem() == LOTRMod.mithril; + } + + protected boolean isCoalBlock(ItemStack itemstack) { + return itemstack.getItem() == Item.getItemFromBlock(Blocks.coal_block); + } + + protected boolean isGoldNugget(ItemStack itemstack) { + return (itemstack.getItem() == Items.gold_nugget); + } + + /** + * @author Shinare + * @reason Added recipe for CinderLoE.ingotAsh and CinderLoE.redDwarfSteel + */ + @Overwrite(remap = false) + protected ItemStack getAlloySmeltingResult(ItemStack itemstack, ItemStack alloyItem) { + if (isIron(itemstack) && isCoal(alloyItem)) + return new ItemStack(LOTRMod.dwarfSteel); + if (isIron(itemstack) && alloyItem.getItem() == LOTRMod.quenditeCrystal) + return new ItemStack(LOTRMod.galvorn); + if (isIron(itemstack) && alloyItem.getItem() == Item.getItemFromBlock(LOTRMod.rock) && alloyItem.getItemDamage() == 3) + return new ItemStack(LOTRMod.blueDwarfSteel); + if (isCopper(itemstack) && alloyItem.getItem() == Item.getItemById(371)) + return new ItemStack(CinderLoE.redDwarfSteel); + if ((isCopper(itemstack) && isTin(alloyItem)) || (isTin(itemstack) && isCopper(alloyItem))) + return new ItemStack(LOTRMod.bronze, 2); + if (this.isMithril(itemstack) && this.isCoalBlock(alloyItem)) + return new ItemStack(CinderLoE.ingotAsh, 1); + return null; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTileEntityForgeBase.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTileEntityForgeBase.java new file mode 100644 index 0000000..458892e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTileEntityForgeBase.java @@ -0,0 +1,50 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.CinderLoE; +import lotr.common.LOTRMod; +import lotr.common.tileentity.LOTRTileEntityAlloyForgeBase; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(LOTRTileEntityAlloyForgeBase.class) +public abstract class MixinLOTRTileEntityForgeBase { + @Unique + protected boolean cinderLoE_Git$isMithril(ItemStack itemstack) { + return itemstack.getItem() == Item.getItemFromBlock(LOTRMod.oreMithril) || itemstack.getItem() == LOTRMod.mithril; + } + + @Unique + protected boolean cinderLoE_Git$isCoalBlock(ItemStack itemstack) { + return itemstack.getItem() == Item.getItemFromBlock(Blocks.coal_block); + } + protected boolean isCopper(ItemStack itemstack) { + return (LOTRMod.isOreNameEqual(itemstack, "oreCopper") || LOTRMod.isOreNameEqual(itemstack, "ingotCopper")); + } + protected boolean isTin(ItemStack itemstack) { + return (LOTRMod.isOreNameEqual(itemstack, "oreTin") || LOTRMod.isOreNameEqual(itemstack, "ingotTin")); + } + protected boolean isGoldNugget(ItemStack itemstack) { + return (itemstack.getItem() == Items.gold_nugget); + } + + /** + * @author Keylime + * @reason IDE demands it + */ + @Overwrite(remap = false) + protected ItemStack getAlloySmeltingResult(ItemStack itemstack, ItemStack alloyItem) { + if (this.cinderLoE_Git$isMithril(itemstack) && this.cinderLoE_Git$isCoalBlock(alloyItem)) + return new ItemStack(CinderLoE.ingotAsh, 1); + if ((isCopper(itemstack) && isTin(alloyItem)) || (isTin(itemstack) && isCopper(alloyItem))) + return new ItemStack(LOTRMod.bronze, 2); + return null; + } +} + + + diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTradeEntries.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTradeEntries.java new file mode 100644 index 0000000..580d433 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRTradeEntries.java @@ -0,0 +1,14 @@ +package com.zivilon.cinder_loe.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import lotr.common.entity.npc.LOTRTradeEntries; +import lotr.common.LOTRFoods; + +@Mixin(LOTRTradeEntries.class) +public interface MixinLOTRTradeEntries { + + @Invoker(value = "setVessels", remap = false) + public abstract LOTRTradeEntries vessels(LOTRFoods foods); +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRWorldGenMumakSkeleton.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRWorldGenMumakSkeleton.java new file mode 100644 index 0000000..89e5633 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRWorldGenMumakSkeleton.java @@ -0,0 +1,33 @@ +package com.zivilon.cinder_loe.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import lotr.common.world.structure2.LOTRWorldGenMumakSkeleton; + +import net.minecraft.block.Block; + +import java.util.Random; + +import com.zivilon.cinder_loe.CinderLoE; + +@Mixin(LOTRWorldGenMumakSkeleton.class) +public class MixinLOTRWorldGenMumakSkeleton { + + @Shadow(remap = false) + protected Block boneBlock; + + @Shadow(remap = false) + protected int boneMeta; + + /** + * @author Shinare + * @reason Replaces bone blocks with ivory blocks to make these structures unique + */ + @Overwrite(remap = false) + protected void setupRandomBlocks(Random random) { + this.boneBlock = CinderLoE.ivoryBlock; + this.boneMeta = 3; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinRenderItem.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinRenderItem.java new file mode 100644 index 0000000..2abbc2e --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinRenderItem.java @@ -0,0 +1,246 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.CinderLoE_Config; +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import com.zivilon.cinder_loe.util.Utilities; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; +import org.spongepowered.asm.mixin.Dynamic; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import java.util.Random; +import java.util.concurrent.Callable; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemCloth; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.ForgeHooksClient; + +@Mixin(RenderItem.class) +public abstract class MixinRenderItem extends Render { + @Shadow + private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png"); + + @Shadow + private Random random; + + @Shadow + public static boolean renderInFrame; + + @Shadow(remap = false) + public byte getMiniBlockCount(ItemStack stack, byte original) { + return 0; + } + + @Shadow(remap = false) + public byte getMiniItemCount(ItemStack stack, byte original) { + return 0; + } + + @Shadow(remap = false) + public boolean shouldSpreadItems() { + return false; + } + + @Shadow + private void renderGlint(int p_77018_1_, int p_77018_2_, int p_77018_3_, int p_77018_4_, int p_77018_5_) {} + + /** + * Reimplements the default behavior of the renderDroppedItem method. + * + * @author Shinare + * @reason Added support for semi-transparent item textures + * @param p_77020_1_ Don't ask me it's default parameter + * @param p_77020_2_ Don't ask me it's default parameter + * @param p_77020_3_ Don't ask me it's default parameter + * @param p_77020_4_ Don't ask me it's default parameter + * @param p_77020_5_ Don't ask me it's default parameter + * @param p_77020_6_ Don't ask me it's default parameter + * @param p_77020_7_ Don't ask me it's default parameter + * @param pass Don't ask me it's default parameter + */ + @Overwrite(remap = false) + private void renderDroppedItem(EntityItem p_77020_1_, IIcon p_77020_2_, int p_77020_3_, float p_77020_4_, float p_77020_5_, float p_77020_6_, float p_77020_7_, int pass) { + Tessellator tessellator = Tessellator.instance; + + if (p_77020_2_ == null) { + TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager(); + ResourceLocation resourcelocation = texturemanager.getResourceLocation(p_77020_1_.getEntityItem().getItemSpriteNumber()); + p_77020_2_ = ((TextureMap)texturemanager.getTexture(resourcelocation)).getAtlasSprite("missingno"); + } + + float f14 = ((IIcon)p_77020_2_).getMinU(); + float f15 = ((IIcon)p_77020_2_).getMaxU(); + float f4 = ((IIcon)p_77020_2_).getMinV(); + float f5 = ((IIcon)p_77020_2_).getMaxV(); + float f6 = 1.0F; + float f7 = 0.5F; + float f8 = 0.25F; + float f10; + + if (this.renderManager.options.fancyGraphics) { + GL11.glPushMatrix(); + + if (renderInFrame) { + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + } + else { + GL11.glRotatef((((float)p_77020_1_.age + p_77020_4_) / 20.0F + p_77020_1_.hoverStart) * (180F / (float)Math.PI), 0.0F, 1.0F, 0.0F); + } + + float f9 = 0.0625F; + f10 = 0.021875F; + ItemStack itemstack = p_77020_1_.getEntityItem(); + int j = itemstack.stackSize; + byte b0; + + if (j < 2) { + b0 = 1; + } + else if (j < 16) { + b0 = 2; + } + else if (j < 32) { + b0 = 3; + } + else { + b0 = 4; + } + + b0 = getMiniItemCount(itemstack, b0); + + GL11.glTranslatef(-f7, -f8, -((f9 + f10) * (float)b0 / 2.0F)); + + for (int k = 0; k < b0; ++k) { + // Makes items offset when in 3D, like when in 2D, looks much better. Considered a vanilla bug... + if (k > 0 && shouldSpreadItems()) { + float x = (random.nextFloat() * 2.0F - 1.0F) * 0.3F / 0.5F; + float y = (random.nextFloat() * 2.0F - 1.0F) * 0.3F / 0.5F; + float z = (random.nextFloat() * 2.0F - 1.0F) * 0.3F / 0.5F; + GL11.glTranslatef(x, y, f9 + f10); + } + else { + GL11.glTranslatef(0f, 0f, f9 + f10); + } + + if (itemstack.getItemSpriteNumber() == 0) { + this.bindTexture(TextureMap.locationBlocksTexture); + } + else { + this.bindTexture(TextureMap.locationItemsTexture); + } + + GL11.glColor4f(p_77020_5_, p_77020_6_, p_77020_7_, 1.0F); + RenderHelper.customRenderItemIn2D(tessellator, f15, f4, f14, f5, ((IIcon)p_77020_2_).getIconWidth(), ((IIcon)p_77020_2_).getIconHeight(), f9, false); + + if (itemstack.hasEffect(pass)) { + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_LIGHTING); + this.renderManager.renderEngine.bindTexture(RES_ITEM_GLINT); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); + GL11.glColor4f(CinderLoE_Config.enchantment_color_red, CinderLoE_Config.enchantment_color_green, CinderLoE_Config.enchantment_color_blue, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glPushMatrix(); + float f12 = 0.125F; + GL11.glScalef(f12, f12, f12); + float f13 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; + GL11.glTranslatef(f13, 0.0F, 0.0F); + GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); + RenderHelper.customRenderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, f9, true); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(f12, f12, f12); + f13 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; + GL11.glTranslatef(-f13, 0.0F, 0.0F); + GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); + RenderHelper.customRenderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, f9, true); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + } + + GL11.glPopMatrix(); + } + else { + for (int l = 0; l < p_77020_3_; ++l) { + GL11.glPushMatrix(); + + if (l > 0) { + f10 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + float f16 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + float f17 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + GL11.glTranslatef(f10, f16, f17); + } + + if (!renderInFrame) { + GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + } + + GL11.glColor4f(p_77020_5_, p_77020_6_, p_77020_7_, 1.0F); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + tessellator.addVertexWithUV((double)(0.0F - f7), (double)(0.0F - f8), 0.0D, (double)f14, (double)f5); + tessellator.addVertexWithUV((double)(f6 - f7), (double)(0.0F - f8), 0.0D, (double)f15, (double)f5); + tessellator.addVertexWithUV((double)(f6 - f7), (double)(1.0F - f8), 0.0D, (double)f15, (double)f4); + tessellator.addVertexWithUV((double)(0.0F - f7), (double)(1.0F - f8), 0.0D, (double)f14, (double)f4); + tessellator.draw(); + GL11.glPopMatrix(); + } + } + } + + /** + * @author Shinare + * @reason Added support for semi-transparent item textures + */ + @Overwrite(remap = false) + public void renderEffect(TextureManager manager, int x, int y) { + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDepthMask(false); + manager.bindTexture(RES_ITEM_GLINT); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(CinderLoE_Config.enchantment_color_red, CinderLoE_Config.enchantment_color_green, CinderLoE_Config.enchantment_color_blue, 1.0F); + this.renderGlint(x * 431278612 + y * 32178161, x - 2, y - 2, 20, 20); + GL11.glDepthMask(true); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinRendererLivingEntity.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinRendererLivingEntity.java new file mode 100644 index 0000000..03b56fc --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinRendererLivingEntity.java @@ -0,0 +1,306 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.CinderLoE_Config; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RendererLivingEntity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.RenderLivingEvent; +import net.minecraftforge.common.MinecraftForge; + +@Mixin(RendererLivingEntity.class) +public abstract class MixinRendererLivingEntity extends Render { + + @Shadow + protected ModelBase renderPassModel; + + @Shadow + protected ModelBase mainModel; + + @Shadow + private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png"); + + @Shadow + private static final Logger logger = LogManager.getLogger(); + + @Shadow + protected int inheritRenderPass(EntityLivingBase p_77035_1_, int p_77035_2_, float p_77035_3_) { + return 0; + } + + @Shadow + protected int getColorMultiplier(EntityLivingBase p_77030_1_, float p_77030_2_, float p_77030_3_) { + return 0; + } + + @Shadow + protected void func_82408_c(EntityLivingBase p_82408_1_, int p_82408_2_, float p_82408_3_) {} + + @Shadow + protected void renderEquippedItems(EntityLivingBase p_77029_1_, float p_77029_2_) {} + + @Shadow + protected float handleRotationFloat(EntityLivingBase p_77044_1_, float p_77044_2_) { + return 0.0F; + } + + @Shadow + protected void rotateCorpse(EntityLivingBase p_77043_1_, float p_77043_2_, float p_77043_3_, float p_77043_4_) {} + + @Shadow + protected void renderLivingAt(EntityLivingBase p_77039_1_, double p_77039_2_, double p_77039_4_, double p_77039_6_) {} + + @Shadow + protected void passSpecialRender(EntityLivingBase p_77033_1_, double p_77033_2_, double p_77033_4_, double p_77033_6_) {} + + @Shadow + protected int shouldRenderPass(EntityLivingBase p_77032_1_, int p_77032_2_, float p_77032_3_) { + return 0; + } + + @Shadow + protected void preRenderCallback(EntityLivingBase p_77041_1_, float p_77041_2_) {} + + @Shadow + private float interpolateRotation(float p_77034_1_, float p_77034_2_, float p_77034_3_) { + return 0.0F; + } + + @Shadow + protected void renderModel(EntityLivingBase p_77036_1_, float p_77036_2_, float p_77036_3_, float p_77036_4_, float p_77036_5_, float p_77036_6_, float p_77036_7_) {} + + @Shadow + protected float renderSwingProgress(EntityLivingBase p_77040_1_, float p_77040_2_) { + return 0.0F; + } + + /** + * @author Shinare + * @reason Added support for configurable enchantment colour + */ + @Overwrite + public void doRender(EntityLivingBase p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_) + { + if (MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Pre(p_76986_1_, (RendererLivingEntity)(Object)this, p_76986_2_, p_76986_4_, p_76986_6_))) return; + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + this.mainModel.onGround = this.renderSwingProgress(p_76986_1_, p_76986_9_); + + if (this.renderPassModel != null) + { + this.renderPassModel.onGround = this.mainModel.onGround; + } + + this.mainModel.isRiding = p_76986_1_.isRiding(); + + if (this.renderPassModel != null) + { + this.renderPassModel.isRiding = this.mainModel.isRiding; + } + + this.mainModel.isChild = p_76986_1_.isChild(); + + if (this.renderPassModel != null) + { + this.renderPassModel.isChild = this.mainModel.isChild; + } + + try + { + float f2 = this.interpolateRotation(p_76986_1_.prevRenderYawOffset, p_76986_1_.renderYawOffset, p_76986_9_); + float f3 = this.interpolateRotation(p_76986_1_.prevRotationYawHead, p_76986_1_.rotationYawHead, p_76986_9_); + float f4; + + if (p_76986_1_.isRiding() && p_76986_1_.ridingEntity instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase1 = (EntityLivingBase)p_76986_1_.ridingEntity; + f2 = this.interpolateRotation(entitylivingbase1.prevRenderYawOffset, entitylivingbase1.renderYawOffset, p_76986_9_); + f4 = MathHelper.wrapAngleTo180_float(f3 - f2); + + if (f4 < -85.0F) + { + f4 = -85.0F; + } + + if (f4 >= 85.0F) + { + f4 = 85.0F; + } + + f2 = f3 - f4; + + if (f4 * f4 > 2500.0F) + { + f2 += f4 * 0.2F; + } + } + + float f13 = p_76986_1_.prevRotationPitch + (p_76986_1_.rotationPitch - p_76986_1_.prevRotationPitch) * p_76986_9_; + this.renderLivingAt(p_76986_1_, p_76986_2_, p_76986_4_, p_76986_6_); + f4 = this.handleRotationFloat(p_76986_1_, p_76986_9_); + this.rotateCorpse(p_76986_1_, f4, f2, p_76986_9_); + float f5 = 0.0625F; + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + this.preRenderCallback(p_76986_1_, p_76986_9_); + GL11.glTranslatef(0.0F, -24.0F * f5 - 0.0078125F, 0.0F); + float f6 = p_76986_1_.prevLimbSwingAmount + (p_76986_1_.limbSwingAmount - p_76986_1_.prevLimbSwingAmount) * p_76986_9_; + float f7 = p_76986_1_.limbSwing - p_76986_1_.limbSwingAmount * (1.0F - p_76986_9_); + + if (p_76986_1_.isChild()) + { + f7 *= 3.0F; + } + + if (f6 > 1.0F) + { + f6 = 1.0F; + } + + GL11.glEnable(GL11.GL_ALPHA_TEST); + this.mainModel.setLivingAnimations(p_76986_1_, f7, f6, p_76986_9_); + this.renderModel(p_76986_1_, f7, f6, f4, f3 - f2, f13, f5); + int j; + float f8; + float f9; + float f10; + + for (int i = 0; i < 4; ++i) + { + j = this.shouldRenderPass(p_76986_1_, i, p_76986_9_); + + if (j > 0) + { + this.renderPassModel.setLivingAnimations(p_76986_1_, f7, f6, p_76986_9_); + this.renderPassModel.render(p_76986_1_, f7, f6, f4, f3 - f2, f13, f5); + + if ((j & 240) == 16) + { + this.func_82408_c(p_76986_1_, i, p_76986_9_); + this.renderPassModel.render(p_76986_1_, f7, f6, f4, f3 - f2, f13, f5); + } + + if ((j & 15) == 15) + { + f8 = (float)p_76986_1_.ticksExisted + p_76986_9_; + this.bindTexture(RES_ITEM_GLINT); + GL11.glEnable(GL11.GL_BLEND); + f9 = 0.5F; + GL11.glColor4f(f9, f9, f9, 1.0F); + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDepthMask(false); + + for (int k = 0; k < 2; ++k) + { + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glColor4f(CinderLoE_Config.enchantment_color_red, CinderLoE_Config.enchantment_color_green, CinderLoE_Config.enchantment_color_blue, 1.0F); + GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + float f11 = f8 * (0.001F + (float)k * 0.003F) * 20.0F; + float f12 = 0.33333334F; + GL11.glScalef(f12, f12, f12); + GL11.glRotatef(30.0F - (float)k * 60.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, f11, 0.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + this.renderPassModel.render(p_76986_1_, f7, f6, f4, f3 - f2, f13, f5); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glDepthMask(true); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + } + + GL11.glDepthMask(true); + this.renderEquippedItems(p_76986_1_, p_76986_9_); + float f14 = p_76986_1_.getBrightness(p_76986_9_); + j = this.getColorMultiplier(p_76986_1_, f14, p_76986_9_); + OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glDisable(GL11.GL_TEXTURE_2D); + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + + if ((j >> 24 & 255) > 0 || p_76986_1_.hurtTime > 0 || p_76986_1_.deathTime > 0) + { + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDepthFunc(GL11.GL_EQUAL); + + if (p_76986_1_.hurtTime > 0 || p_76986_1_.deathTime > 0) + { + GL11.glColor4f(f14, 0.0F, 0.0F, 0.4F); + this.mainModel.render(p_76986_1_, f7, f6, f4, f3 - f2, f13, f5); + + for (int l = 0; l < 4; ++l) + { + if (this.inheritRenderPass(p_76986_1_, l, p_76986_9_) >= 0) + { + GL11.glColor4f(f14, 0.0F, 0.0F, 0.4F); + this.renderPassModel.render(p_76986_1_, f7, f6, f4, f3 - f2, f13, f5); + } + } + } + + if ((j >> 24 & 255) > 0) + { + f8 = (float)(j >> 16 & 255) / 255.0F; + f9 = (float)(j >> 8 & 255) / 255.0F; + float f15 = (float)(j & 255) / 255.0F; + f10 = (float)(j >> 24 & 255) / 255.0F; + GL11.glColor4f(f8, f9, f15, f10); + this.mainModel.render(p_76986_1_, f7, f6, f4, f3 - f2, f13, f5); + + for (int i1 = 0; i1 < 4; ++i1) + { + if (this.inheritRenderPass(p_76986_1_, i1, p_76986_9_) >= 0) + { + GL11.glColor4f(f8, f9, f15, f10); + this.renderPassModel.render(p_76986_1_, f7, f6, f4, f3 - f2, f13, f5); + } + } + } + + GL11.glDepthFunc(GL11.GL_LEQUAL); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } + catch (Exception exception) + { + logger.error("Couldn\'t render entity", exception); + } + + OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glEnable(GL11.GL_TEXTURE_2D); + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPopMatrix(); + this.passSpecialRender(p_76986_1_, p_76986_2_, p_76986_4_, p_76986_6_); + MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Post(p_76986_1_, (RendererLivingEntity)(Object)this, p_76986_2_, p_76986_4_, p_76986_6_)); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinSlotCrafting.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinSlotCrafting.java new file mode 100644 index 0000000..2a8148c --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/MixinSlotCrafting.java @@ -0,0 +1,95 @@ +package com.zivilon.cinder_loe.mixins; + +import com.zivilon.cinder_loe.util.DurableItemCrafter; +import cpw.mods.fml.common.FMLCommonHandler; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.SlotCrafting; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent; +import org.spongepowered.asm.mixin.Dynamic; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Overwrite; + +import com.zivilon.cinder_loe.CinderLoE; + +@Mixin(SlotCrafting.class) +public abstract class MixinSlotCrafting { + @Shadow + private final IInventory craftMatrix; + @Shadow + private EntityPlayer thePlayer; + @Shadow + protected void onCrafting(ItemStack p_75210_1_) {} + + public MixinSlotCrafting() { + craftMatrix = null; + } + + /** + * @author Shinare + * @reason Added support for crafting with item durability. To register items for durability crafting, refer to com.zivilon.cinder_loe.util.DurableItemCrafter + */ + + @Overwrite + public void onPickupFromSlot(EntityPlayer p_82870_1_, ItemStack p_82870_2_) { + FMLCommonHandler.instance().firePlayerCraftingEvent(p_82870_1_, p_82870_2_, craftMatrix); + onCrafting(p_82870_2_); + boolean hasExceptionItem = false; + int arrow_count = 0; + + for (int i = 0; i < craftMatrix.getSizeInventory(); ++i) { + ItemStack itemstack1 = craftMatrix.getStackInSlot(i); + + if (itemstack1 != null && DurableItemCrafter.exceptionItems.contains(itemstack1.getItem())) { + hasExceptionItem = true; + } + if (itemstack1 != null && itemstack1.getItem() == Items.arrow) { + arrow_count++; + } + } + + for (int i = 0; i < craftMatrix.getSizeInventory(); ++i) { + ItemStack itemstack1 = craftMatrix.getStackInSlot(i); + + if (itemstack1 != null) { + if (!hasExceptionItem && DurableItemCrafter.customItems.contains(itemstack1.getItem())) { + damage_item(itemstack1, i, 1, craftMatrix); + } else { + craftMatrix.decrStackSize(i, 1); + } + + if (itemstack1 != null && itemstack1.getItem().hasContainerItem(itemstack1)) { + ItemStack itemstack2 = itemstack1.getItem().getContainerItem(itemstack1); + + if (itemstack2 != null && itemstack2.isItemStackDamageable() && itemstack2.getItemDamage() > itemstack2.getMaxDamage()) { + MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(thePlayer, itemstack2)); + continue; + } + + if (!itemstack1.getItem().doesContainerItemLeaveCraftingGrid(itemstack1) || !thePlayer.inventory.addItemStackToInventory(itemstack2)) { + if (craftMatrix.getStackInSlot(i) == null) { + craftMatrix.setInventorySlotContents(i, itemstack2); + } else { + thePlayer.dropPlayerItemWithRandomChoice(itemstack2, false); + } + } + } + } + } + } + + @Dynamic + public void damage_item(ItemStack item, int i, int damage, IInventory matrix) { + item.setItemDamage(item.getItemDamage() + damage); + if (item.getItemDamage() >= item.getMaxDamage()) { + matrix.setInventorySlotContents(i, null); // Item breaks and is removed + } else { + matrix.setInventorySlotContents(i, item); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRHiredNPCInfo.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRHiredNPCInfo.java new file mode 100644 index 0000000..0935a31 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRHiredNPCInfo.java @@ -0,0 +1,154 @@ +package com.zivilon.cinder_loe.mixins.overrides; + +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.entity.npc.LOTRHiredNPCInfo; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttribute; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.ai.attributes.RangedAttribute; +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; + +import java.util.UUID; + +@Mixin(LOTRHiredNPCInfo.class) +public class MixinLOTRHiredNPCInfo { + @Shadow + private LOTREntityNPC theEntity; + @Shadow + private UUID hiringPlayerUUID; + @Shadow + public int xpLevel = 1; + @Unique + public int levelUpCounter = 0; + + /** + * @author + * @reason + */ + @Overwrite(remap = false) + public void onLevelUp() { + EntityPlayer hirer; + rotateLevelUpStat(); + + Entity mount = this.theEntity.ridingEntity; + if (mount instanceof EntityLivingBase && !(mount instanceof LOTREntityNPC)) { + this.addLevelUpHealthGain((EntityLivingBase)mount); + } + if ((hirer = this.getHiringPlayer()) != null) { + hirer.addChatMessage((IChatComponent)new ChatComponentTranslation("lotr.hiredNPC.levelUp", new Object[]{this.theEntity.getCommandSenderName(), this.xpLevel})); + } + this.spawnLevelUpFireworks(); + } + + + public void rotateLevelUpStat() { + EntityLivingBase entity = (EntityLivingBase) this.theEntity; + + switch (levelUpCounter) { + case 0: + // +1 HP + this.addLevelUpHealthGain(entity); + break; + case 1: + // +0.25 Damage + this.increaseDamageGain(entity); + break; + case 2: + // +0.005 movement Speed + this.increaseMovementGain(entity); + break; + case 3: + // +0.1 knockback resistance + this.increaseKnockbackGain(entity); + break; + } + levelUpCounter = (levelUpCounter +1) % 4; + } + + /** + * @author + * @reason + */ + @Overwrite(remap = false) + public void addLevelUpHealthGain(EntityLivingBase gainingEntity) { + float healthBoost = 1.0f; + IAttributeInstance attrHealth = gainingEntity.getEntityAttribute(SharedMonsterAttributes.maxHealth); + attrHealth.setBaseValue(attrHealth.getBaseValue() + (double)healthBoost); + gainingEntity.heal(healthBoost); + } + + public void increaseDamageGain(EntityLivingBase gainingEntity) { + float damageBoost = 0.25f; + IAttributeInstance attribute = gainingEntity.getEntityAttribute(LOTREntityNPC.npcAttackDamage); + attribute.setBaseValue(attribute.getBaseValue() + (double)damageBoost); + } + + public void increaseMovementGain(EntityLivingBase gainingEntity) { + float movementBoost = 0.0025f; + IAttributeInstance attribute = gainingEntity.getEntityAttribute(SharedMonsterAttributes.movementSpeed); + attribute.setBaseValue(attribute.getBaseValue() + (double)movementBoost); + } + + public void increaseKnockbackGain(EntityLivingBase gainingEntity) { + float kbResBoost = 0.1f; + IAttributeInstance attribute = gainingEntity.getEntityAttribute(SharedMonsterAttributes.knockbackResistance); + attribute.setBaseValue(attribute.getBaseValue() + (double)kbResBoost); + } + + /** + * @author + * @reason + */ + @Overwrite(remap = false) + public EntityPlayer getHiringPlayer() { + if (this.hiringPlayerUUID == null) { + return null; + } + return this.theEntity.worldObj.func_152378_a(this.hiringPlayerUUID); + } + + public void spawnLevelUpFireworks() { + boolean bigLvlUp = this.xpLevel % 5 == 0; + World world = this.theEntity.worldObj; + ItemStack itemstack = new ItemStack(Items.fireworks); + NBTTagCompound itemData = new NBTTagCompound(); + NBTTagCompound fireworkData = new NBTTagCompound(); + NBTTagList explosionsList = new NBTTagList(); + int explosions = 1; + for (int l = 0; l < explosions; ++l) { + NBTTagCompound explosionData = new NBTTagCompound(); + explosionData.setBoolean("Flicker", true); + explosionData.setBoolean("Trail", bigLvlUp); + int[] colors = new int[]{0xFF5500, this.theEntity.getFaction().getFactionColor()}; + explosionData.setIntArray("Colors", colors); + boolean effectType = bigLvlUp; + explosionData.setByte("Type", (byte)(effectType ? 1 : 0)); + explosionsList.appendTag((NBTBase)explosionData); + } + fireworkData.setTag("Explosions", (NBTBase)explosionsList); + itemData.setTag("Fireworks", (NBTBase)fireworkData); + itemstack.setTagCompound(itemData); + EntityFireworkRocket firework = new EntityFireworkRocket(world, this.theEntity.posX, this.theEntity.boundingBox.minY + (double)this.theEntity.height, this.theEntity.posZ, itemstack); + NBTTagCompound fireworkNBT = new NBTTagCompound(); + firework.writeEntityToNBT(fireworkNBT); + fireworkNBT.setInteger("LifeTime", bigLvlUp ? 20 : 15); + firework.readEntityFromNBT(fireworkNBT); + world.spawnEntityInWorld((Entity)firework); + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRItemEntDraught.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRItemEntDraught.java new file mode 100644 index 0000000..d361b78 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRItemEntDraught.java @@ -0,0 +1,134 @@ +package com.zivilon.cinder_loe.mixins.overrides; + +import lotr.common.LOTRAchievement; +import lotr.common.LOTRLevelData; +import lotr.common.block.LOTRBlockSaplingBase; +import lotr.common.entity.npc.LOTREntityDarkHuorn; +import lotr.common.entity.npc.LOTREntityHuorn; +import lotr.common.entity.npc.LOTREntityTree; +import lotr.common.entity.npc.LOTRHiredNPCInfo; +import lotr.common.fac.LOTRAlignmentValues; +import lotr.common.fac.LOTRFaction; +import lotr.common.item.LOTRItemEntDraught; +import lotr.common.item.LOTRItemPotion; +import lotr.common.item.LOTRPoisonedDrinks; +import net.minecraft.block.Block; +import net.minecraft.block.BlockSapling; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.init.Items; + +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.*; +import net.minecraft.world.World; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; + +import java.util.List; +import java.util.Random; + +@Mixin(LOTRItemEntDraught.class) +public abstract class MixinLOTRItemEntDraught { + + + private LOTRItemEntDraught.DraughtInfo getDraughtInfo(ItemStack itemstack) { + int i = itemstack.getItemDamage(); + if (i >= LOTRItemEntDraught.draughtTypes.length) { + i = 0; + } + return LOTRItemEntDraught.draughtTypes[i]; + } + + + /** + * @author KeyLime17 + * @reason ??? + */ + @Overwrite(remap = false) + public ItemStack func_77654_b(ItemStack itemstack, World world, EntityPlayer entityplayer) { + + final Random rand = new Random(); + int chance = rand.nextInt(100); + + if (chance < 20) { + if (!world.isRemote) { + entityplayer.addPotionEffect(new PotionEffect(Potion.poison.id, 400)); + ChatComponentText message = new ChatComponentText("As you drink, you taste the bitter tears of Yavanna's Shepherds..."); + ChatStyle style = new ChatStyle(); + style.setColor(EnumChatFormatting.RED); // Set color to red + message.setChatStyle(style); + entityplayer.addChatMessage(message); + } + } else { + if (entityplayer.canEat(false)) { + entityplayer.getFoodStats().addStats(this.getDraughtInfo((ItemStack)itemstack).heal, this.getDraughtInfo((ItemStack)itemstack).saturation); + } + if (!world.isRemote) { + List effects = this.getDraughtInfo((ItemStack)itemstack).effects; + for (int i = 0; i < effects.size(); ++i) { + PotionEffect effect = (PotionEffect)effects.get(i); + entityplayer.addPotionEffect(new PotionEffect(effect.getPotionID(), effect.getDuration())); + } + } + if (!world.isRemote && entityplayer.getCurrentEquippedItem() == itemstack) { + LOTRLevelData.getData(entityplayer).addAchievement(LOTRAchievement.drinkEntDraught); + } + } + return !entityplayer.capabilities.isCreativeMode ? new ItemStack(Items.bowl) : itemstack; + } + + /** + * @author KeyLime17 + * @reason ??? + */ + @Overwrite(remap = false) + public boolean func_77648_a(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int side, float f, float f1, float f2) { + if (this.getDraughtInfo((ItemStack)itemstack).name.equals("gold")) { + if (LOTRLevelData.getData(entityplayer).getAlignment(LOTRFaction.FANGORN) < 500.0f) { + if (!world.isRemote) { + LOTRAlignmentValues.notifyAlignmentNotHighEnough(entityplayer, 500.0f, LOTRFaction.FANGORN); + } + return false; + } + Block block = world.getBlock(i, j, k); + int meta = world.getBlockMetadata(i, j, k); + if (block instanceof BlockSapling || block instanceof LOTRBlockSaplingBase) { + meta &= 7; + for (int huornType = 0; huornType < LOTREntityTree.TYPES.length; ++huornType) { + if (block != LOTREntityTree.SAPLING_BLOCKS[huornType] || meta != LOTREntityTree.SAPLING_META[huornType]) continue; + LOTREntityDarkHuorn darkhuorn = new LOTREntityDarkHuorn(world); + darkhuorn.setTreeType(huornType); + darkhuorn.isNPCPersistent = true; + darkhuorn.liftSpawnRestrictions = true; + darkhuorn.setLocationAndAngles((double)i + 0.5, j, (double)k + 0.5, 0.0f, 0.0f); + if (!darkhuorn.getCanSpawnHere()) continue; + if (!world.isRemote) { + world.spawnEntityInWorld((Entity)darkhuorn); + ChatComponentText message = new ChatComponentText("You have raised a Huorn.. However it cries for the deaths of its kin"); + ChatStyle style = new ChatStyle(); + style.setColor(EnumChatFormatting.RED); // Set color to red + message.setChatStyle(style); + entityplayer.addChatMessage(message); + LOTRLevelData.getData(entityplayer).addAchievement(LOTRAchievement.summonHuorn); + } + for (int l = 0; l < 24; ++l) { + double d = (double)i + 0.5 - world.rand.nextDouble() * 2.0 + world.rand.nextDouble() * 2.0; + double d1 = (double)j + world.rand.nextDouble() * 4.0; + double d2 = (double)k + 0.5 - world.rand.nextDouble() * 2.0 + world.rand.nextDouble() * 2.0; + world.spawnParticle("angryVillager", d, d1, d2, 0.0, 0.0, 0.0); + } + if (!entityplayer.capabilities.isCreativeMode) { + entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, new ItemStack(Items.bowl)); + } + return true; + } + } + } + return false; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRReplacedMethods.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRReplacedMethods.java new file mode 100644 index 0000000..772d827 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRReplacedMethods.java @@ -0,0 +1,25 @@ +package com.zivilon.cinder_loe.mixins.overrides; + +import lotr.common.coremod.LOTRReplacedMethods; +import lotr.common.enchant.LOTREnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +@Mixin(LOTRReplacedMethods.Enchants.class) +public class MixinLOTRReplacedMethods { + + /** + * @author Keylime + * @reason because Mixins complains + */ + @Overwrite(remap = false) + public static int getSpecialArmorProtection(int base, ItemStack[] armor, DamageSource source) { + int i = base; + i += LOTREnchantmentHelper.calcSpecialArmorSetProtection(armor, source); + //i = MathHelper.clamp_int(i, -25, 25); + return i; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRTradeEntriesOverrides.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRTradeEntriesOverrides.java new file mode 100644 index 0000000..a994822 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRTradeEntriesOverrides.java @@ -0,0 +1,756 @@ +package com.zivilon.cinder_loe.mixins.overrides; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.mixins.MixinLOTRTradeEntries; +import lotr.common.LOTRFoods; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTRTradeEntries; +import lotr.common.entity.npc.LOTRTradeEntry; +import lotr.common.entity.npc.LOTRTradeEntryBarrel; +import lotr.common.item.LOTRItemBanner; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.Arrays; + +import static lotr.common.entity.npc.LOTRTradeEntries.*; +import static lotr.common.entity.npc.LOTRTradeEntries.MOREDAIN_HUNTSMAN_BUY; + +@Mixin(LOTRTradeEntries.class) +public abstract class MixinLOTRTradeEntriesOverrides { + @Shadow + private LOTRTradeEntries setVessels(LOTRFoods foods) { + return null; + } + + @Shadow public static LOTRTradeEntries MORDOR_TRADER_BUY; + + @Shadow public static LOTRTradeEntries MORDOR_TRADER_SELL; + + @Shadow public static LOTRTradeEntries GONDOR_BLACKSMITH_SELL; + + @Shadow public static LOTRTradeEntries GALADHRIM_TRADER_BUY; + + @Shadow public static LOTRTradeEntries GALADHRIM_TRADER_SELL; + + @Shadow public static LOTRTradeEntries URUK_HAI_TRADER_SELL; + + @Shadow public static LOTRTradeEntries DWARF_MINER_BUY; + + @Shadow public static LOTRTradeEntries DWARF_MINER_SELL; + + @Shadow public static LOTRTradeEntries ROHAN_BLACKSMITH_SELL; + + @Shadow public static LOTRTradeEntries DUNLENDING_BARTENDER_BUY; + + @Shadow public static LOTRTradeEntries ROHAN_MEADHOST_BUY; + + @Shadow public static LOTRTradeEntries DUNLENDING_BARTENDER_SELL; + + @Shadow public static LOTRTradeEntries ROHAN_MEADHOST_SELL; + + @Shadow public static LOTRTradeEntries HOBBIT_ORCHARDER_BUY; + + @Shadow public static LOTRTradeEntries HOBBIT_ORCHARDER_SELL; + + @Shadow public static LOTRTradeEntries HOBBIT_FARMER_BUY; + + @Shadow public static LOTRTradeEntries HOBBIT_FARMER_SELL; + + @Shadow public static LOTRTradeEntries BLUE_DWARF_MINER_BUY; + + @Shadow public static LOTRTradeEntries BLUE_DWARF_MINER_SELL; + + @Shadow public static LOTRTradeEntries BLUE_DWARF_MERCHANT_BUY; + + @Shadow public static LOTRTradeEntries BLUE_DWARF_MERCHANT_SELL; + + @Shadow public static LOTRTradeEntries NEAR_HARAD_MERCHANT_BUY; + + @Shadow public static LOTRTradeEntries NEAR_HARAD_MERCHANT_SELL; + + @Shadow public static LOTRTradeEntries ANGMAR_TRADER_BUY; + + @Shadow public static LOTRTradeEntries ANGMAR_TRADER_SELL; + + @Shadow public static LOTRTradeEntries DOL_GULDUR_TRADER_BUY; + + @Shadow public static LOTRTradeEntries DOL_GULDUR_TRADER_SELL; + + @Shadow public static LOTRTradeEntries HALF_TROLL_SCAVENGER_BUY; + + @Shadow public static LOTRTradeEntries HALF_TROLL_SCAVENGER_SELL; + + @Shadow public static LOTRTradeEntries HIGH_ELF_SMITH_BUY; + + @Shadow public static LOTRTradeEntries HIGH_ELF_SMITH_SELL; + + @Shadow public static LOTRTradeEntries WOOD_ELF_SMITH_BUY; + + @Shadow public static LOTRTradeEntries MOREDAIN_HUNTSMAN_BUY; + + @Shadow public static LOTRTradeEntries MOREDAIN_HUTMAKER_BUY; + + @Shadow public static LOTRTradeEntries MOREDAIN_HUTMAKER_SELL; + + @Shadow public static LOTRTradeEntries IRON_HILLS_MERCHANT_BUY; + + @Shadow public static LOTRTradeEntries IRON_HILLS_MERCHANT_SELL; + + @Shadow public static LOTRTradeEntries TAUREDAIN_SHAMAN_BUY; + + @Shadow public static LOTRTradeEntries TAUREDAIN_SHAMAN_SELL; + + @Shadow public static LOTRTradeEntries TAUREDAIN_FARMER_BUY; + + @Shadow public static LOTRTradeEntries TAUREDAIN_FARMER_SELL; + + @Shadow public static LOTRTradeEntries DWARF_SMITH_BUY; + + @Shadow public static LOTRTradeEntries DWARF_SMITH_SELL; + + @Shadow public static LOTRTradeEntries BLUE_DWARF_SMITH_BUY; + + @Shadow public static LOTRTradeEntries DALE_BLACKSMITH_BUY; + + @Shadow public static LOTRTradeEntries DALE_BLACKSMITH_SELL; + + @Shadow public static LOTRTradeEntries WICKED_DWARF_BUY; + + /** + * @author + * @reason + */ + @Inject(method = "setupTrades1", at = @At("RETURN"), remap = false) + private static void newTrades(CallbackInfo ci) { + MORDOR_TRADER_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.morgulTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetOrc), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyOrc), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsOrc), 26), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsOrc), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.scimitarOrc), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.polearmOrc), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearOrc), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerOrc), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerOrcPoisoned), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeOrc), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.orcBomb), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.mugOrcDraught, 1, 9999), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.fur), 4), + new LOTRTradeEntry(new ItemStack(LOTRMod.orcBow), 16), + new LOTRTradeEntry(new ItemStack(Items.arrow, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeOrc), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.axeOrc), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.hammerOrc), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.maggotyBread), 4), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetFur), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyFur), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsFur), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsFur), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.wargArmorMordor), 25), + new LOTRTradeEntry(new ItemStack(CinderLoE.cinderFurItem, 1, 1), 2), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200)); + ((MixinLOTRTradeEntriesOverrides)(Object)MORDOR_TRADER_BUY).setVessels(LOTRFoods.ORC_DRINK); + GONDOR_BLACKSMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.gondorianTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordGondor), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerGondor), 9), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearGondor), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetGondor), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyGondor), 32), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsGondor), 26), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsGondor), 17), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(Blocks.iron_bars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.hammerGondor), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.ironCrossbow), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.horseArmorGondor), 25), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200)); + ((MixinLOTRTradeEntriesOverrides)(Object)GONDOR_BLACKSMITH_BUY).setVessels(LOTRFoods.GONDOR_DRINK); + URUK_HAI_TRADER_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.urukTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetUruk), 24), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyUruk), 36), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsUruk), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsUruk), 22), + new LOTRTradeEntry(new ItemStack(LOTRMod.scimitarUruk), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearUruk), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerUruk), 9), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerUrukPoisoned), 11), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeUruk), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.hammerUruk), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeUruk), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.orcBomb), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.mugOrcDraught, 1, 9999), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.fur), 4), + new LOTRTradeEntry(new ItemStack(LOTRMod.urukCrossbow), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeUruk), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.axeUruk), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.maggotyBread), 4), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetFur), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyFur), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsFur), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsFur), 12), + new LOTRTradeEntry(new ItemStack(CinderLoE.cinderFurItem, 1, 1), 2), + new LOTRTradeEntry(new ItemStack(CinderLoE.cinderFurItem, 1, 0), 2), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.wargArmorUruk), 25)); + ((MixinLOTRTradeEntriesOverrides)(Object)URUK_HAI_TRADER_BUY).setVessels(LOTRFoods.ORC_DRINK); + ROHAN_BLACKSMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.rohirricTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordRohan), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeRohan), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerRohan), 9), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearRohan), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetRohan), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyRohan), 28), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsRohan), 24), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsRohan), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetRohanMarshal), 45), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyRohanMarshal), 60), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsRohanMarshal), 55), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsRohanMarshal), 40), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(Blocks.iron_bars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20), + new LOTRTradeEntry(new ItemStack(Items.saddle), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.ironCrossbow), 15), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.horseArmorRohan), 25)); + ((MixinLOTRTradeEntriesOverrides)(Object)ROHAN_BLACKSMITH_BUY).setVessels(LOTRFoods.ROHAN_DRINK); + + ANGMAR_TRADER_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.angmarTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetAngmar), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyAngmar), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsAngmar), 26), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsAngmar), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordAngmar), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearAngmar), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerAngmar), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerAngmarPoisoned), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeAngmar), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.polearmAngmar), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.orcBomb), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.mugOrcDraught, 1, 9999), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.fur), 4), + new LOTRTradeEntry(new ItemStack(LOTRMod.orcBow), 16), + new LOTRTradeEntry(new ItemStack(Items.arrow, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeAngmar), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.axeAngmar), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.hammerAngmar), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.maggotyBread), 4), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetFur), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyFur), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsFur), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsFur), 12), + new LOTRTradeEntry(new ItemStack(CinderLoE.cinderFurItem, 1, 0), 2), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.wargArmorAngmar), 25)); + + DOL_GULDUR_TRADER_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.dolGuldurTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetDolGuldur), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyDolGuldur), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsDolGuldur), 26), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsDolGuldur), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordDolGuldur), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearDolGuldur), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerDolGuldur), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerDolGuldurPoisoned), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeDolGuldur), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeDolGuldur), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.orcBomb), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.mugOrcDraught, 1, 9999), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.orcBow), 16), + new LOTRTradeEntry(new ItemStack(Items.arrow, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeDolGuldur), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.axeDolGuldur), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.hammerDolGuldur), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.maggotyBread), 4), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(Items.string), 2)); + ((MixinLOTRTradeEntriesOverrides)(Object)ANGMAR_TRADER_BUY).setVessels(LOTRFoods.ORC_DRINK); + ((MixinLOTRTradeEntriesOverrides)(Object)DOL_GULDUR_TRADER_BUY).setVessels(LOTRFoods.ORC_DRINK); + GALADHRIM_SMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.elvenTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerElven), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.polearmElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.longspearElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.axeElven), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeElven), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.shovelElven), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyElven), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsElven), 22), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsElven), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.horseArmorGaladhrim), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.elvenBow), 20), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(Items.arrow, 4), 3)); + + HIGH_ELF_SMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.highElvenTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordHighElven), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.polearmHighElven), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.longspearHighElven), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerHighElven), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearHighElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.axeHighElven), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeHighElven), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.shovelHighElven), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetHighElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyHighElven), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsHighElven), 22), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsHighElven), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.horseArmorHighElven), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.highElvenBow), 20), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(Items.arrow, 4), 3)); + ((MixinLOTRTradeEntriesOverrides)(Object)GALADHRIM_SMITH_BUY).setVessels(LOTRFoods.ELF_DRINK); + ((MixinLOTRTradeEntriesOverrides)(Object)HIGH_ELF_SMITH_BUY).setVessels(LOTRFoods.ELF_DRINK); + ((MixinLOTRTradeEntriesOverrides)(Object)WOOD_ELF_SMITH_BUY).setVessels(LOTRFoods.WOOD_ELF_DRINK); + WOOD_ELF_SMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.woodElvenTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordWoodElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerWoodElven), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearWoodElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.polearmWoodElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.longspearWoodElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.axeWoodElven), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeWoodElven), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.shovelWoodElven), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetWoodElven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyWoodElven), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsWoodElven), 22), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsWoodElven), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.elkArmorWoodElven), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.mirkwoodBow), 15), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(Items.arrow, 4), 3)); + + DWARF_SMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.dwarvenTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.dwarvenRing), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordDwarven), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.hammerDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerDwarven), 13), + new LOTRTradeEntry(new ItemStack(LOTRMod.axeDwarven), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeDwarven), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.shovelDwarven), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.mattockDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.throwingAxeDwarven), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetDwarven), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyDwarven), 36), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsDwarven), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsDwarven), 22), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetDwarvenSilver), 50), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyDwarvenSilver), 60), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsDwarvenSilver), 55), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsDwarvenSilver), 50), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetDwarvenGold), 70), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyDwarvenGold), 80), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsDwarvenGold), 75), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsDwarvenGold), 70), + new LOTRTradeEntry(new ItemStack(LOTRMod.boarArmorDwarven), 25), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.dwarfBars, 8), 20)); + BLUE_DWARF_SMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.blueDwarvenTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.dwarvenRing), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordBlueDwarven), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearBlueDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeBlueDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.hammerBlueDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeBlueDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerBlueDwarven), 13), + new LOTRTradeEntry(new ItemStack(LOTRMod.axeBlueDwarven), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeBlueDwarven), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.shovelBlueDwarven), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.mattockBlueDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.throwingAxeBlueDwarven), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetBlueDwarven), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyBlueDwarven), 36), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsBlueDwarven), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsBlueDwarven), 22), + new LOTRTradeEntry(new ItemStack(LOTRMod.boarArmorBlueDwarven), 25), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.blueDwarfBars, 8), 20)); + ((MixinLOTRTradeEntriesOverrides)(Object)DWARF_SMITH_BUY).setVessels(LOTRFoods.DWARF_DRINK); + ((MixinLOTRTradeEntriesOverrides)(Object)BLUE_DWARF_SMITH_BUY).setVessels(LOTRFoods.DWARF_DRINK); + + DALE_BLACKSMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.daleTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordDale), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeDale), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerDale), 9), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearDale), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeDale), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetDale), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyDale), 28), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsDale), 24), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsDale), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(Blocks.iron_bars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20), + new LOTRTradeEntry(new ItemStack(Items.saddle), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.ironCrossbow), 15), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.horseArmorDale), 25)); + ((MixinLOTRTradeEntriesOverrides)(Object)DALE_BLACKSMITH_BUY).setVessels(LOTRFoods.DALE_DRINK); + + + DUNEDAIN_BLACKSMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.rangerTable), 100), + new LOTRTradeEntry(new ItemStack(Items.iron_sword), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerIron), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearIron), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeIron), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordBronze), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerBronze), 7), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearBronze), 13), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeBronze), 13), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetRanger), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyRanger), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsRanger), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsRanger), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 16), + new LOTRTradeEntry(new ItemStack(Blocks.iron_bars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.ironCrossbow), 15), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeCrossbow), 12)); + ((MixinLOTRTradeEntriesOverrides)(Object)DUNEDAIN_BLACKSMITH_BUY).setVessels(LOTRFoods.RANGER_DRINK); + + RHUN_BLACKSMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.rhunTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordRhun), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerRhun), 9), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearRhun), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeRhun), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.polearmRhun), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeRhun), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetRhun), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyRhun), 32), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsRhun), 26), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsRhun), 17), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetRhunGold), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyRhunGold), 45), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsRhunGold), 35), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsRhunGold), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(Blocks.iron_bars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.ironCrossbow), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeCrossbow), 12), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.horseArmorRhunGold), 25)); + ((MixinLOTRTradeEntriesOverrides)(Object)RHUN_BLACKSMITH_BUY).setVessels(LOTRFoods.RHUN_DRINK); + + + RIVENDELL_SMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.rivendellTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordRivendell), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.polearmRivendell), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.longspearRivendell), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerRivendell), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearRivendell), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.axeRivendell), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeRivendell), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.shovelRivendell), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetRivendell), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyRivendell), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsRivendell), 22), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsRivendell), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.horseArmorRivendell), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.rivendellBow), 20), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(Items.arrow, 4), 3)); + ((MixinLOTRTradeEntriesOverrides)(Object)RIVENDELL_SMITH_BUY).setVessels(LOTRFoods.ELF_DRINK); + GUNDABAD_TRADER_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.gundabadTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetBronze), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyBronze), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsBronze), 26), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsBronze), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordBronze), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearBronze), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerBronze), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerBronzePoisoned), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeBronze), 18), + new LOTRTradeEntry(new ItemStack(Items.iron_sword), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearIron), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerIron), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerIronPoisoned), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeIron), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.mugOrcDraught, 1, 9999), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.fur), 4), + new LOTRTradeEntry(new ItemStack(LOTRMod.orcBow), 16), + new LOTRTradeEntry(new ItemStack(Items.arrow, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeBronze), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.axeBronze), 14), + new LOTRTradeEntry(new ItemStack(Items.iron_pickaxe), 14), + new LOTRTradeEntry(new ItemStack(Items.iron_axe), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.maggotyBread), 4), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetFur), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyFur), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsFur), 16), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.cinderFurItem, 1, 1), 2), + new LOTRTradeEntry(new ItemStack(CinderLoE.cinderFurItem, 1, 0), 2), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsFur), 12)); + ((MixinLOTRTradeEntriesOverrides)(Object)GUNDABAD_TRADER_BUY).setVessels(LOTRFoods.ORC_DRINK); + } + + /** + * @author + * @reason + */ + @Inject(method = "setupTrades2", at = @At("RETURN"), remap = false) + private static void newTrades2(CallbackInfo ci) { + NEAR_HARAD_BLACKSMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.nearHaradTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.scimitarNearHarad), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerNearHarad), 9), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerNearHaradPoisoned), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearNearHarad), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeNearHarad), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.poleaxeNearHarad), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.maceNearHarad), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordHarad), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerHarad), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerHaradPoisoned), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearHarad), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeHarad), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetNearHarad), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyNearHarad), 32), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsNearHarad), 26), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsNearHarad), 17), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(Blocks.iron_bars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.ironCrossbow), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeCrossbow), 12), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.horseArmorNearHarad), 25)); + ((MixinLOTRTradeEntriesOverrides)(Object)NEAR_HARAD_BLACKSMITH_BUY).setVessels(LOTRFoods.SOUTHRON_DRINK); + HARNEDOR_BLACKSMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.nearHaradTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordHarad), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerHarad), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerHaradPoisoned), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearHarad), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeHarad), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetHarnedor), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyHarnedor), 32), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsHarnedor), 26), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsHarnedor), 17), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeCrossbow), 12)); + ((MixinLOTRTradeEntriesOverrides)(Object)HARNEDOR_BLACKSMITH_BUY).setVessels(LOTRFoods.HARNEDOR_DRINK); + UMBAR_BLACKSMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.umbarTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.scimitarNearHarad), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerNearHarad), 9), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerNearHaradPoisoned), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearNearHarad), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeNearHarad), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.poleaxeNearHarad), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.maceNearHarad), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetUmbar), 22), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyUmbar), 35), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsUmbar), 29), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsUmbar), 19), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordCorsair), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerCorsair), 9), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerCorsairPoisoned), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearCorsair), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeCorsair), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetCorsair), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyCorsair), 32), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsCorsair), 26), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsCorsair), 17), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(Blocks.iron_bars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.ironCrossbow), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeCrossbow), 12), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.horseArmorUmbar), 25)); + ((MixinLOTRTradeEntriesOverrides)(Object)UMBAR_BLACKSMITH_BUY).setVessels(LOTRFoods.SOUTHRON_DRINK); + GULF_BLACKSMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.gulfTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordGulfHarad), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerHarad), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerHaradPoisoned), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearHarad), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeHarad), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetGulfHarad), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyGulfHarad), 32), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsGulfHarad), 26), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsGulfHarad), 17), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeCrossbow), 12)); + ((MixinLOTRTradeEntriesOverrides)(Object)GULF_BLACKSMITH_BUY).setVessels(LOTRFoods.SOUTHRON_DRINK); + NOMAD_ARMOURER_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.nearHaradTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordHarad), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerHarad), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerHaradPoisoned), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearHarad), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeHarad), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetNomad), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyNomad), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsNomad), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsNomad), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetHaradRobes), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyHaradRobes), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsHaradRobes), 22), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsHaradRobes), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeCrossbow), 12)); + ((MixinLOTRTradeEntriesOverrides)(Object)NOMAD_ARMOURER_BUY).setVessels(LOTRFoods.NOMAD_DRINK); + + TAUREDAIN_SMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.tauredainTable), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordTauredain), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerTauredain), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearTauredain), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeTauredain), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.hammerTauredain), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeTauredain), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetTauredain), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bodyTauredain), 32), + new LOTRTradeEntry(new ItemStack(LOTRMod.legsTauredain), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.bootsTauredain), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.helmetTauredainChieftain), 40), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20)); + ((MixinLOTRTradeEntriesOverrides)(Object)TAUREDAIN_SMITH_BUY).setVessels(LOTRFoods.TAUREDAIN_DRINK); + WICKED_DWARF_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordDwarven), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeDwarven), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.hammerDwarven), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.pickaxeDwarven), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.mattockDwarven), 25), + new LOTRTradeEntry(new ItemStack(LOTRMod.throwingAxeDwarven), 18), + new LOTRTradeEntry(new ItemStack(LOTRMod.dwarfBars, 8), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.dwarvenForge), 100), + new LOTRTradeEntry(new ItemStack(LOTRMod.mugDwarvenAle, 1, 9999), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.mugDwarvenTonic, 1, 9999), 30), + new LOTRTradeEntry(new ItemStack(LOTRMod.brick, 8, 6), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.slabSingle, 16, 7), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.stairsDwarvenBrick, 5, 0), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.wall, 8, 7), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.brick2, 1, 12), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.pillar, 4, 0), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.slabSingle2, 8, 0), 5), + new LOTRTradeEntry(new ItemStack(LOTRMod.brick4, 8, 5), 2), + new LOTRTradeEntry(new ItemStack(LOTRMod.slabSingle7, 16, 6), 2), + new LOTRTradeEntry(new ItemStack(LOTRMod.stairsDwarvenBrickCracked, 5, 0), 2), + new LOTRTradeEntry(new ItemStack(LOTRMod.wall4, 8, 5), 2), + new LOTRTradeEntry(new ItemStack(LOTRMod.pillar2, 4, 0), 2), + new LOTRTradeEntry(new ItemStack(LOTRMod.slabSingle7, 8, 7), 2), + new LOTRTradeEntry(new ItemStack(LOTRMod.brick, 1, 8), 4), + new LOTRTradeEntry(new ItemStack(LOTRMod.brick, 1, 9), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.brick3, 1, 12), 4), + new LOTRTradeEntry(new ItemStack(LOTRMod.brick4, 8, 14), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.slabSingle8, 16, 6), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.stairsDwarvenBrickObsidian, 5, 0), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.wall4, 8, 6), 8), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.gateDwarven, 1, 0), 12)); + ((MixinLOTRTradeEntriesOverrides)(Object)WICKED_DWARF_BUY).setVessels(LOTRFoods.DWARF_DRINK); + BREE_BLACKSMITH_BUY = new LOTRTradeEntries(TradeType.BUY, + new LOTRTradeEntry(new ItemStack(LOTRMod.breeTable), 100), + new LOTRTradeEntry(new ItemStack(Items.iron_sword), 12), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerIron), 8), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearIron), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeIron), 15), + new LOTRTradeEntry(new ItemStack(LOTRMod.pikeIron), 16), + new LOTRTradeEntry(new ItemStack(LOTRMod.swordBronze), 10), + new LOTRTradeEntry(new ItemStack(LOTRMod.daggerBronze), 7), + new LOTRTradeEntry(new ItemStack(LOTRMod.spearBronze), 13), + new LOTRTradeEntry(new ItemStack(LOTRMod.battleaxeBronze), 13), + new LOTRTradeEntry(new ItemStack((Item)Items.iron_helmet), 16), + new LOTRTradeEntry(new ItemStack((Item)Items.iron_chestplate), 22), + new LOTRTradeEntry(new ItemStack((Item)Items.iron_leggings), 18), + new LOTRTradeEntry(new ItemStack((Item)Items.iron_boots), 14), + new LOTRTradeEntry(new ItemStack(CinderLoE.helmetBree), 16), + new LOTRTradeEntry(new ItemStack(CinderLoE.bodyBree), 22), + new LOTRTradeEntry(new ItemStack(CinderLoE.legsBree), 18), + new LOTRTradeEntry(new ItemStack(CinderLoE.bootsBree), 14), + new LOTRTradeEntry(new ItemStack(LOTRMod.blacksmithHammer), 16), + new LOTRTradeEntry(new ItemStack(Blocks.iron_bars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeBars, 8), 20), + new LOTRTradeEntry(new ItemStack(LOTRMod.crossbowBolt, 4), 3), + new LOTRTradeEntry(new ItemStack(LOTRMod.ironCrossbow), 15), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 1), 200), + new LOTRTradeEntry(new ItemStack(CinderLoE.forgingKit, 1, 0), 200), + new LOTRTradeEntry(new ItemStack(LOTRMod.bronzeCrossbow), 12)); + ((MixinLOTRTradeEntriesOverrides)(Object)BREE_BLACKSMITH_BUY).setVessels(LOTRFoods.BREE_DRINK); + } +} + diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRUnitTradeEntries.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRUnitTradeEntries.java new file mode 100644 index 0000000..5070c85 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinLOTRUnitTradeEntries.java @@ -0,0 +1,376 @@ +package com.zivilon.cinder_loe.mixins.overrides; + +import com.zivilon.cinder_loe.CinderUnitTradeEntry; +import com.zivilon.cinder_loe.entity.npc.HobbitBannerBearer; +import com.zivilon.cinder_loe.entity.npc.elf.Sirrandrai; +import com.zivilon.cinder_loe.entity.npc.evil_human.RhudaurSoldier; +import com.zivilon.cinder_loe.entity.npc.good_human.BattleNun; +import com.zivilon.cinder_loe.entity.npc.good_human.EsgarothSoldier; +import com.zivilon.cinder_loe.entity.npc.good_human.TauredainTrueBlood; +import com.zivilon.cinder_loe.entity.npc.orc.MorgulOrc; +import com.zivilon.cinder_loe.entity.npc.orc.NorthernOrc; +import lotr.common.LOTRMod; +import lotr.common.entity.animal.*; +import lotr.common.entity.npc.*; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(LOTRUnitTradeEntries.class) +public class MixinLOTRUnitTradeEntries { + + @Shadow + public static LOTRUnitTradeEntries MORDOR_ORC_MERCENARY_CAPTAIN = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityMordorOrc.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityMordorOrcArcher.class, 150, 50.0f), + new LOTRUnitTradeEntry(LOTREntityMordorOrcBombardier.class, 250, 400.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityMordorWarg.class, 100, 0.0f), + new LOTRUnitTradeEntry(LOTREntityMordorOrc.class, LOTREntityMordorWarg.class, "MordorOrc_Warg", 250, 100.0f).setMountArmor(LOTRMod.wargArmorMordor, 0.5f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityMordorOrcArcher.class, LOTREntityMordorWarg.class, "MordorOrcArcher_Warg", 250, 150.0f).setMountArmor(LOTRMod.wargArmorMordor, 0.5f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityMordorWargBombardier.class, 400, 250.0f), + new LOTRUnitTradeEntry(LOTREntityOlogHai.class, 800, 350.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityMordorBannerBearer.class, 150, 150.0f), + new LOTRUnitTradeEntry(LOTREntityMordorBannerBearer.class, LOTREntityMordorWarg.class, "Banner_Warg", 150, 250.0f).setMountArmor(LOTRMod.wargArmorMordor, 0.5f).setPledgeExclusive(), + new LOTRUnitTradeEntry(MorgulOrc.class, 130, 750.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(MorgulOrc.class, LOTREntityMordorWarg.class, "MordorOrc_Warg", 230, 750.0f).setPledgeExclusive().setMountArmor(LOTRMod.wargArmorMordor, 1.0f), + new LOTRUnitTradeEntry(LOTREntityMinasMorgulBannerBearer.class, 130, 150.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityMinasMorgulBannerBearer.class, LOTREntityMordorWarg.class, "Banner_Warg", 230, 750.0f).setPledgeExclusive().setMountArmor(LOTRMod.wargArmorMordor, 1.0f)); + @Shadow + public static LOTRUnitTradeEntries GONDORIAN_CAPTAIN = new LOTRUnitTradeEntries(200.0f, + new LOTRUnitTradeEntry(LOTREntityGondorLevyman.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityGondorSoldier.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityGondorArcher.class, 250, 100.0f), + new LOTRUnitTradeEntry(LOTREntityGondorSoldier.class, LOTREntityHorse.class, "GondorSoldier_Horse", 350, 150.0f).setMountArmor(LOTRMod.horseArmorGondor).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityGondorTowerGuard.class, 500, 250.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityGondorBannerBearer.class, 250, 200.0f), + new LOTRUnitTradeEntry(LOTREntityGondorBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 300.0f).setMountArmor(LOTRMod.horseArmorGondor).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries DWARF_COMMANDER = new LOTRUnitTradeEntries(200.0f, + new LOTRUnitTradeEntry(LOTREntityDwarf.class, 60, 0.0f), + new LOTRUnitTradeEntry(LOTREntityDwarfWarrior.class, 400, 50.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDwarfAxeThrower.class, 400, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDwarfWarrior.class, LOTREntityWildBoar.class, "DwarfWarrior_Boar", 500, 150.0f).setMountArmor(LOTRMod.boarArmorDwarven).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDwarfAxeThrower.class, LOTREntityWildBoar.class, "DwarfAxeThrower_Boar", 500, 200.0f).setMountArmor(LOTRMod.boarArmorDwarven).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDwarfBannerBearer.class, 400, 200.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDwarfBannerBearer.class, LOTREntityWildBoar.class, "Banner_Horse", 500, 300.0f).setMountArmor(LOTRMod.boarArmorDwarven).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries URUK_HAI_MERCENARY_CAPTAIN = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityIsengardSnaga.class, 100, 0.0f), + new LOTRUnitTradeEntry(LOTREntityIsengardSnagaArcher.class, 100, 50.0f), + new LOTRUnitTradeEntry(LOTREntityUrukHai.class, 500, 0.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityUrukHaiCrossbower.class, 500, 50.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityUrukHaiSapper.class, 600, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityUrukHaiBerserker.class, 600, 150.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityUrukWarg.class, 100, 0.0f), + new LOTRUnitTradeEntry(LOTREntityIsengardSnaga.class, LOTREntityUrukWarg.class, "IsengardSnaga_Warg", 200, 100.0f).setMountArmor(LOTRMod.wargArmorUruk, 0.5f), + new LOTRUnitTradeEntry(LOTREntityIsengardSnagaArcher.class, LOTREntityUrukWarg.class, "IsengardSnagaArcher_Warg", 200, 150.0f).setMountArmor(LOTRMod.wargArmorUruk, 0.5f), + new LOTRUnitTradeEntry(LOTREntityUrukWargBombardier.class, 400, 250.0f), + new LOTRUnitTradeEntry(LOTREntityUrukHaiBannerBearer.class, 500, 150.0f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries ELF_LORD = new LOTRUnitTradeEntries(300.0f, + new LOTRUnitTradeEntry(LOTREntityGaladhrimElf.class, 60, 0.0f), + new LOTRUnitTradeEntry(LOTREntityGaladhrimWarden.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityGaladhrimWarrior.class, 500, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityGaladhrimWarrior.class, LOTREntityHorse.class, "GaladhrimWarrior_Horse", 600, 200.0f).setMountArmor(LOTRMod.horseArmorGaladhrim).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityGaladhrimBannerBearer.class, 500, 250.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityGaladhrimBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 600, 350.0f).setMountArmor(LOTRMod.horseArmorGaladhrim).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries ROHIRRIM_MARSHAL = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityRohirrimWarrior.class, 250, 0.0f), + new LOTRUnitTradeEntry(LOTREntityRohirrimArcher.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityRohirrimWarrior.class, LOTREntityHorse.class, "Rohirrim_Horse", 350, 100.0f).setMountArmor(LOTRMod.horseArmorRohan).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityRohirrimArcher.class, LOTREntityHorse.class, "RohirrimArcher_Horse", 350, 150.0f).setMountArmor(LOTRMod.horseArmorRohan).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityRohanBannerBearer.class, 250, 150.0f), + new LOTRUnitTradeEntry(LOTREntityRohanBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 250.0f).setMountArmor(LOTRMod.horseArmorRohan).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries HOBBIT_SHIRRIFF = new LOTRUnitTradeEntries(50.0f, + new LOTRUnitTradeEntry(LOTREntityHobbitBounder.class, 60, 0.0f), + new LOTRUnitTradeEntry(LOTREntityHobbitBounder.class, LOTREntityShirePony.class, "HobbitBounder_Pony", 160, 50.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(HobbitBannerBearer.class, 60, 100.0f), + new LOTRUnitTradeEntry(HobbitBannerBearer.class, LOTREntityShirePony.class, "Banner_Horse", 160, 200.0f).setPledgeExclusive() + ); + @Shadow + public static LOTRUnitTradeEntries DUNLENDING_WARLORD = new LOTRUnitTradeEntries(100.0f, + new LOTRUnitTradeEntry(LOTREntityDunlending.class, 60, 0.0f), + new LOTRUnitTradeEntry(LOTREntityDunlendingWarrior.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityDunlendingArcher.class, 250, 100.0f), + new LOTRUnitTradeEntry(LOTREntityDunlendingAxeThrower.class, 250, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDunlendingBerserker.class, 400, 200.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDunlendingBannerBearer.class, 250, 200.0f)); + @Shadow + public static LOTRUnitTradeEntries WOOD_ELF_CAPTAIN = new LOTRUnitTradeEntries(250.0f, + new LOTRUnitTradeEntry(LOTREntityWoodElf.class, 60, 0.0f), + new LOTRUnitTradeEntry(LOTREntityWoodElfScout.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityWoodElfWarrior.class, 500, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityWoodElfWarrior.class, LOTREntityElk.class, "WoodElfWarrior_Elk", 600, 200.0f).setMountArmor(LOTRMod.elkArmorWoodElven).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityWoodElfBannerBearer.class, 500, 250.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityWoodElfBannerBearer.class, LOTREntityElk.class, "Banner_Horse", 600, 350.0f).setMountArmor(LOTRMod.elkArmorWoodElven).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries ANGMAR_ORC_MERCENARY_CAPTAIN = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityAngmarOrc.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityAngmarOrcArcher.class, 150, 50.0f), + new LOTRUnitTradeEntry(LOTREntityAngmarOrcBombardier.class, 250, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityAngmarWarg.class, 100, 0.0f), + new LOTRUnitTradeEntry(LOTREntityAngmarOrc.class, LOTREntityAngmarWarg.class, "AngmarOrc_Warg", 250, 100.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.5f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityAngmarOrcArcher.class, LOTREntityAngmarWarg.class, "AngmarOrcArcher_Warg", 250, 150.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.5f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityAngmarWargBombardier.class, 400, 250.0f), + new LOTRUnitTradeEntry(LOTREntityTroll.class, 500, 250.0f), + new LOTRUnitTradeEntry(LOTREntityMountainTroll.class, 600, 350.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityAngmarBannerBearer.class, 150, 150.0f), + new LOTRUnitTradeEntry(LOTREntityAngmarBannerBearer.class, LOTREntityAngmarWarg.class, "Banner_Warg", 250, 250.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.5f).setPledgeExclusive(), + (new CinderUnitTradeEntry(NorthernOrc.class, 500, 400.0F).setObjective("Angmar").setExtraInfo("Angmar")).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries MORDOR_ORC_SLAVER = new LOTRUnitTradeEntries(200.0f, + new LOTRUnitTradeEntry(LOTREntityNurnSlave.class, 100, 0.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); + @Shadow + public static LOTRUnitTradeEntries MORDOR_ORC_SPIDER_KEEPER = new LOTRUnitTradeEntries(250.0f, + new LOTRUnitTradeEntry(LOTREntityMordorSpider.class, 100, 0.0f), + new LOTRUnitTradeEntry(LOTREntityMordorOrc.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityMordorOrcArcher.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityMordorOrc.class, LOTREntityMordorSpider.class, "MordorOrc_Spider", 250, 50.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityMordorOrcArcher.class, LOTREntityMordorSpider.class, "MordorOrcArcher_Spider", 250, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityNanUngolBannerBearer.class, 150, 150.0f), + new LOTRUnitTradeEntry(LOTREntityNanUngolBannerBearer.class, LOTREntityMordorSpider.class, "MordorOrcArcher_Spider", 250, 250.0f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries GUNDABAD_ORC_MERCENARY_CAPTAIN = new LOTRUnitTradeEntries(100.0f, + new LOTRUnitTradeEntry(LOTREntityGundabadOrc.class, 100, 0.0f), + new LOTRUnitTradeEntry(LOTREntityGundabadOrcArcher.class, 100, 50.0f), + new LOTRUnitTradeEntry(LOTREntityGundabadWarg.class, 100, 50.0f), + new LOTRUnitTradeEntry(LOTREntityGundabadOrc.class, LOTREntityGundabadWarg.class, "GundabadOrc_Warg", 200, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityGundabadOrcArcher.class, LOTREntityGundabadWarg.class, "GundabadOrcArcher_Warg", 200, 150.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityGundabadUruk.class, 500, 250.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityGundabadUrukArcher.class, 500, 300.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityGundabadBannerBearer.class, 100, 150.0f), + new LOTRUnitTradeEntry(LOTREntityGundabadBannerBearer.class, LOTREntityGundabadWarg.class, "Banner_Warg", 200, 250.0f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries RANGER_NORTH_CAPTAIN = new LOTRUnitTradeEntries(300.0f, + new LOTRUnitTradeEntry(LOTREntityRangerNorth.class, 250, 0.0f), + new LOTRUnitTradeEntry(LOTREntityRangerNorth.class, LOTREntityHorse.class, "RangerNorth_Horse", 350, 100.0f), + new LOTRUnitTradeEntry(LOTREntityRangerNorthBannerBearer.class, 250, 150.0f)); + @Shadow + public static LOTRUnitTradeEntries HOBBIT_FARMER = new LOTRUnitTradeEntries(0.0f, + new LOTRUnitTradeEntry(LOTREntityHobbitFarmhand.class, 100, 50.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); + @Shadow + public static LOTRUnitTradeEntries HIGH_ELF_LORD = new LOTRUnitTradeEntries(300.0f, + new LOTRUnitTradeEntry(LOTREntityHighElf.class, 60, 0.0f), + new LOTRUnitTradeEntry(LOTREntityHighElfWarrior.class, 500, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityHighElfWarrior.class, LOTREntityHorse.class, "HighElfWarrior_Horse", 600, 200.0f).setMountArmor(LOTRMod.horseArmorHighElven).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityHighElfBannerBearer.class, 500, 250.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityHighElfBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 600, 350.0f).setMountArmor(LOTRMod.horseArmorHighElven).setPledgeExclusive(), + (new CinderUnitTradeEntry(Sirrandrai.class, LOTREntityHorse.class, "Sirrandrai", 600, 400.0F).setObjective("Lindon").setExtraInfo("Lindon")).setPledgeExclusive().setMountArmor(LOTRMod.horseArmorHighElven)); + @Shadow + public static LOTRUnitTradeEntries NEAR_HARADRIM_WARLORD = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityNearHaradrimWarrior.class, 250, 0.0f), + new LOTRUnitTradeEntry(LOTREntityNearHaradrimArcher.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntitySouthronChampion.class, LOTREntityHorse.class, "SouthronChampion_Horse", 350, 100.0f).setMountArmor(LOTRMod.horseArmorNearHarad).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityNearHaradBannerBearer.class, 250, 150.0f), + new LOTRUnitTradeEntry(LOTREntityNearHaradBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 250.0f).setMountArmor(LOTRMod.horseArmorNearHarad).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries BLUE_DWARF_COMMANDER = new LOTRUnitTradeEntries(200.0f, + new LOTRUnitTradeEntry(LOTREntityBlueDwarf.class, 60, 0.0f), + new LOTRUnitTradeEntry(LOTREntityBlueDwarfWarrior.class, 400, 50.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityBlueDwarfAxeThrower.class, 400, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityBlueDwarfWarrior.class, LOTREntityWildBoar.class, "BlueDwarfWarrior_Boar", 500, 150.0f).setMountArmor(LOTRMod.boarArmorBlueDwarven).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityBlueDwarfAxeThrower.class, LOTREntityWildBoar.class, "BlueDwarfAxeThrower_Boar", 500, 200.0f).setMountArmor(LOTRMod.boarArmorBlueDwarven).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityBlueDwarfBannerBearer.class, 400, 200.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityBlueDwarfBannerBearer.class, LOTREntityWildBoar.class, "Banner_Horse", 500, 300.0f).setMountArmor(LOTRMod.boarArmorBlueDwarven).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries DOL_GULDUR_CAPTAIN = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityDolGuldurOrc.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityDolGuldurOrcArcher.class, 150, 50.0f), + new LOTRUnitTradeEntry(LOTREntityMirkwoodSpider.class, 100, 0.0f), + new LOTRUnitTradeEntry(LOTREntityDolGuldurOrc.class, LOTREntityMirkwoodSpider.class, "DolGuldurOrc_Spider", 250, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDolGuldurOrcArcher.class, LOTREntityMirkwoodSpider.class, "DolGuldurOrcArcher_Spider", 250, 150.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityMirkTroll.class, 750, 350.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDolGuldurBannerBearer.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityDolGuldurBannerBearer.class, LOTREntityMirkwoodSpider.class, "DolGuldurOrc_Spider", 250, 100.0f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries RANGER_ITHILIEN_CAPTAIN = new LOTRUnitTradeEntries(300.0f, + new LOTRUnitTradeEntry(LOTREntityRangerIthilien.class, 50, 0.0f), + new LOTRUnitTradeEntry(LOTREntityRangerIthilienBannerBearer.class, 70, 150.0f)); + @Shadow + public static LOTRUnitTradeEntries HALF_TROLL_WARLORD = new LOTRUnitTradeEntries(200.0f, + new LOTRUnitTradeEntry(LOTREntityHalfTroll.class, 100, 0.0f), + new LOTRUnitTradeEntry(LOTREntityHalfTrollWarrior.class, 400, 100.0f), + new LOTRUnitTradeEntry(LOTREntityHalfTrollWarrior.class, LOTREntityRhino.class, "HalfTrollWarrior_Rhino", 500, 200.0f).setMountArmor(LOTRMod.rhinoArmorHalfTroll, 0.5f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityHalfTrollBannerBearer.class, 400, 150.0f), + new LOTRUnitTradeEntry(LOTREntityHalfTrollBannerBearer.class, LOTREntityRhino.class, "Banner_Horse", 500, 250.0f).setMountArmor(LOTRMod.rhinoArmorHalfTroll, 0.5f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries DOL_AMROTH_CAPTAIN = new LOTRUnitTradeEntries(200.0f, + new LOTRUnitTradeEntry(LOTREntityDolAmrothSoldier.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityDolAmrothArcher.class, 150, 50.0f), + new LOTRUnitTradeEntry(LOTREntitySwanKnight.class, 500, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDolAmrothSoldier.class, LOTREntityHorse.class, "DolAmrothSoldier_Horse", 250, 100.0f).setMountArmor(LOTRMod.horseArmorDolAmroth, 0.5f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntitySwanKnight.class, LOTREntityHorse.class, "SwanKnight_Horse", 600, 200.0f).setMountArmor(LOTRMod.horseArmorDolAmroth).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDolAmrothBannerBearer.class, 150, 150.0f), + new LOTRUnitTradeEntry(LOTREntityDolAmrothBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 250, 250.0f).setMountArmor(LOTRMod.horseArmorDolAmroth, 0.5f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries MOREDAIN_CHIEFTAIN = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityMoredainWarrior.class, 250, 0.0f), + new LOTRUnitTradeEntry(LOTREntityMoredainWarrior.class, LOTREntityZebra.class, "MoredainWarrior_Zebra", 350, 100.0f), + new LOTRUnitTradeEntry(LOTREntityMoredainBannerBearer.class, 250, 150.0f), + new LOTRUnitTradeEntry(LOTREntityMoredainBannerBearer.class, LOTREntityZebra.class, "Banner_Horse", 350, 250.0f)); + @Shadow + public static LOTRUnitTradeEntries ANGMAR_HILLMAN_CHIEFTAIN = new LOTRUnitTradeEntries(100.0f, + new LOTRUnitTradeEntry(LOTREntityAngmarHillman.class, 60, 0.0f), + new LOTRUnitTradeEntry(LOTREntityAngmarHillmanWarrior.class, 150, 50.0f), + new LOTRUnitTradeEntry(LOTREntityAngmarHillmanAxeThrower.class, 150, 100.0f), + new LOTRUnitTradeEntry(LOTREntityAngmarHillman.class, LOTREntityAngmarWarg.class, "AngmarHillman_Warg", 250, 100.0f), + new LOTRUnitTradeEntry(LOTREntityAngmarHillmanWarrior.class, LOTREntityAngmarWarg.class, "AngmarHillmanWarrior_Warg", 250, 150.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.3f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityAngmarHillmanAxeThrower.class, LOTREntityAngmarWarg.class, "AngmarHillmanAxeThrower_Warg", 250, 200.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.3f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityAngmarHillmanBannerBearer.class, 150, 200.0f), + new LOTRUnitTradeEntry(LOTREntityAngmarHillmanBannerBearer.class, LOTREntityAngmarWarg.class, "Banner_Warg", 250, 300.0f).setMountArmor(LOTRMod.wargArmorAngmar, 0.5f).setPledgeExclusive(), + (new CinderUnitTradeEntry(RhudaurSoldier.class, 500, 400.0F).setObjective("Rhudaur").setExtraInfo("Rhudaur"))); + @Shadow + public static LOTRUnitTradeEntries TAUREDAIN_CHIEFTAIN = new LOTRUnitTradeEntries(200.0f, + new LOTRUnitTradeEntry(LOTREntityTauredainWarrior.class, 250, 0.0f), + new LOTRUnitTradeEntry(LOTREntityTauredainBlowgunner.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityTauredainBannerBearer.class, 250, 150.0f), + new LOTRUnitTradeEntry(TauredainTrueBlood.class, 500, 800.0f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries TAUREDAIN_FARMER = new LOTRUnitTradeEntries(0.0f, + new LOTRUnitTradeEntry(LOTREntityTauredainFarmhand.class, 100, 50.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); + @Shadow + public static LOTRUnitTradeEntries DALE_CAPTAIN = new LOTRUnitTradeEntries(100.0f, + new LOTRUnitTradeEntry(LOTREntityDaleLevyman.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityDaleSoldier.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityDaleArcher.class, 250, 100.0f), + new LOTRUnitTradeEntry(LOTREntityDaleSoldier.class, LOTREntityHorse.class, "DaleSoldier_Horse", 350, 150.0f).setMountArmor(LOTRMod.horseArmorDale).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDaleBannerBearer.class, 250, 200.0f), + new LOTRUnitTradeEntry(LOTREntityDaleBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 300.0f).setMountArmor(LOTRMod.horseArmorDale).setPledgeExclusive(), + (new CinderUnitTradeEntry(EsgarothSoldier.class, 500, 400.0F).setObjective("Dale").setExtraInfo("Dale")), + (new CinderUnitTradeEntry(LOTREntityEsgarothBannerBearer.class, 500, 400.0F).setObjective("Dale").setExtraInfo("Dale"))); + @Shadow + public static LOTRUnitTradeEntries DORWINION_CAPTAIN = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityDorwinionGuard.class, 250, 0.0f), + new LOTRUnitTradeEntry(LOTREntityDorwinionCrossbower.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityDorwinionBannerBearer.class, 250, 150.0f)); + @Shadow + public static LOTRUnitTradeEntries DORWINION_ELF_CAPTAIN = new LOTRUnitTradeEntries(250.0f, + new LOTRUnitTradeEntry(LOTREntityDorwinionElfWarrior.class, 500, 0.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDorwinionElfArcher.class, 500, 50.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityDorwinionElfBannerBearer.class, 500, 150.0f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries DORWINION_VINEKEEPER = new LOTRUnitTradeEntries(0.0f, + new LOTRUnitTradeEntry(LOTREntityDorwinionVinehand.class, 100, 50.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); + @Shadow + public static LOTRUnitTradeEntries LOSSARNACH_CAPTAIN = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityGondorLevyman.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityLossarnachAxeman.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityLossarnachBannerBearer.class, 250, 200.0f)); + @Shadow + public static LOTRUnitTradeEntries PELARGIR_CAPTAIN = new LOTRUnitTradeEntries(200.0f, + new LOTRUnitTradeEntry(LOTREntityLebenninLevyman.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityPelargirMarine.class, 200, 50.0f), + new LOTRUnitTradeEntry(LOTREntityPelargirBannerBearer.class, 250, 200.0f)); + @Shadow + public static LOTRUnitTradeEntries PINNATH_GELIN_CAPTAIN = new LOTRUnitTradeEntries(200.0f, + new LOTRUnitTradeEntry(LOTREntityGondorLevyman.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityPinnathGelinSoldier.class, 200, 50.0f), + new LOTRUnitTradeEntry(LOTREntityPinnathGelinSoldier.class, LOTREntityHorse.class, "PinnathGelinSoldier_Horse", 350, 150.0f).setMountArmor(LOTRMod.horseArmorGondor).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityPinnathGelinBannerBearer.class, 250, 200.0f), + new LOTRUnitTradeEntry(LOTREntityPinnathGelinBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 300.0f).setMountArmor(LOTRMod.horseArmorGondor).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries BLACKROOT_CAPTAIN = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityGondorLevyman.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityBlackrootSoldier.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityBlackrootArcher.class, 200, 100.0f), + new LOTRUnitTradeEntry(LOTREntityBlackrootSoldier.class, LOTREntityHorse.class, "BlackrootSoldier_Horse", 350, 150.0f).setMountArmor(LOTRMod.horseArmorGondor).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityBlackrootBannerBearer.class, 250, 200.0f), + new LOTRUnitTradeEntry(LOTREntityBlackrootBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 300.0f).setMountArmor(LOTRMod.horseArmorGondor).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries GONDOR_FARMER = new LOTRUnitTradeEntries(0.0f, + new LOTRUnitTradeEntry(LOTREntityGondorFarmhand.class, 100, 50.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); + @Shadow + public static LOTRUnitTradeEntries LEBENNIN_CAPTAIN = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityLebenninLevyman.class, 100, 0.0f), + new LOTRUnitTradeEntry(LOTREntityGondorSoldier.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityGondorArcher.class, 250, 100.0f), + new LOTRUnitTradeEntry(LOTREntityLebenninBannerBearer.class, 150, 150.0f)); + @Shadow + public static LOTRUnitTradeEntries LAMEDON_CAPTAIN = new LOTRUnitTradeEntries(200.0f, + new LOTRUnitTradeEntry(LOTREntityLamedonHillman.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityLamedonSoldier.class, 200, 50.0f), + new LOTRUnitTradeEntry(LOTREntityLamedonArcher.class, 250, 100.0f), + new LOTRUnitTradeEntry(LOTREntityLamedonSoldier.class, LOTREntityHorse.class, "LamedonSoldier_Horse", 300, 150.0f).setMountArmor(LOTRMod.horseArmorLamedon).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityLamedonBannerBearer.class, 250, 200.0f), + new LOTRUnitTradeEntry(LOTREntityLamedonBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 300, 300.0f).setMountArmor(LOTRMod.horseArmorLamedon).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries ROHAN_FARMER = new LOTRUnitTradeEntries(0.0f, + new LOTRUnitTradeEntry(LOTREntityRohanFarmhand.class, 100, 50.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); + @Shadow + public static LOTRUnitTradeEntries EASTERLING_WARLORD = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityEasterlingLevyman.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityEasterlingWarrior.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityEasterlingArcher.class, 250, 100.0f), + new LOTRUnitTradeEntry(LOTREntityEasterlingGoldWarrior.class, 500, 200.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityEasterlingWarrior.class, LOTREntityHorse.class, "EasterlingWarrior_Horse", 350, 150.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityEasterlingArcher.class, LOTREntityHorse.class, "EasterlingArcher_Horse", 350, 200.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityEasterlingGoldWarrior.class, LOTREntityHorse.class, "EasterlingGoldWarrior_Horse", 600, 300.0f).setMountArmor(LOTRMod.horseArmorRhunGold).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityEasterlingFireThrower.class, 260, 150.0f), + new LOTRUnitTradeEntry(LOTREntityEasterlingBannerBearer.class, 250, 200.0f), + new LOTRUnitTradeEntry(LOTREntityEasterlingBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 150.0f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries EASTERLING_FARMER = new LOTRUnitTradeEntries(0.0f, + new LOTRUnitTradeEntry(LOTREntityEasterlingFarmhand.class, 100, 50.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); + @Shadow + public static LOTRUnitTradeEntries RIVENDELL_LORD = new LOTRUnitTradeEntries(300.0f, + new LOTRUnitTradeEntry(LOTREntityRivendellElf.class, 60, 0.0f), + new LOTRUnitTradeEntry(LOTREntityRivendellWarrior.class, 500, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityRivendellWarrior.class, LOTREntityHorse.class, "RivendellWarrior_Horse", 600, 200.0f).setMountArmor(LOTRMod.horseArmorRivendell).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityRivendellBannerBearer.class, 500, 250.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityRivendellBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 600, 350.0f).setMountArmor(LOTRMod.horseArmorRivendell).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries HARNEDOR_WARLORD = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityHarnedorWarrior.class, 250, 0.0f), + new LOTRUnitTradeEntry(LOTREntityHarnedorArcher.class, 200, 50.0f), + new LOTRUnitTradeEntry(LOTREntityHarnedorWarrior.class, LOTREntityHorse.class, "HarnedorWarrior_Horse", 350, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityHarnedorArcher.class, LOTREntityHorse.class, "HarnedorArcher_Horse", 300, 150.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityHarnedorBannerBearer.class, 250, 150.0f), + new LOTRUnitTradeEntry(LOTREntityHarnedorBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 250.0f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries UMBAR_CAPTAIN = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityUmbarWarrior.class, 250, 0.0f), + new LOTRUnitTradeEntry(LOTREntityUmbarArcher.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityUmbarWarrior.class, LOTREntityHorse.class, "UmbarWarrior_Horse", 350, 100.0f).setMountArmor(LOTRMod.horseArmorUmbar).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityUmbarBannerBearer.class, 250, 150.0f), + new LOTRUnitTradeEntry(LOTREntityUmbarBannerBearer.class, LOTREntityHorse.class, "Banner_Horse", 350, 250.0f).setMountArmor(LOTRMod.horseArmorUmbar).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries CORSAIR_CAPTAIN = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityCorsair.class, 200, 0.0f).setExtraInfo("Corsair")); + @Shadow + public static LOTRUnitTradeEntries NOMAD_WARLORD = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityNomadWarrior.class, 150, 0.0f), + new LOTRUnitTradeEntry(LOTREntityNomadArcher.class, 150, 50.0f), + new LOTRUnitTradeEntry(LOTREntityNomadWarrior.class, LOTREntityCamel.class, "NomadWarrior_Camel", 250, 100.0f), + new LOTRUnitTradeEntry(LOTREntityNomadArcher.class, LOTREntityCamel.class, "NomadArcher_Camel", 250, 150.0f), + new LOTRUnitTradeEntry(LOTREntityNomadBannerBearer.class, 150, 150.0f), + new LOTRUnitTradeEntry(LOTREntityNomadBannerBearer.class, LOTREntityCamel.class, "Banner_Horse", 250, 250.0f)); + @Shadow + public static LOTRUnitTradeEntries GULF_WARLORD = new LOTRUnitTradeEntries(150.0f, + new LOTRUnitTradeEntry(LOTREntityGulfHaradWarrior.class, 200, 0.0f), + new LOTRUnitTradeEntry(LOTREntityGulfHaradArcher.class, 250, 50.0f), + new LOTRUnitTradeEntry(LOTREntityGulfHaradWarrior.class, LOTREntityHorse.class, "GulfWarrior_Horse", 300, 100.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityGulfHaradArcher.class, LOTREntityHorse.class, "GulfArcher_Horse", 350, 150.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityGulfHaradBannerBearer.class, 250, 150.0f), + new LOTRUnitTradeEntry(LOTREntityGulfHaradBannerBearer.class, LOTREntityHorse.class, "GulfWarrior_Horse", 350, 250.0f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries CORSAIR_SLAVER = new LOTRUnitTradeEntries(0.0f, + new LOTRUnitTradeEntry(LOTREntityHaradSlave.class, 100, 0.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); + @Shadow + public static LOTRUnitTradeEntries HARNEDOR_FARMER = new LOTRUnitTradeEntries(0.0f, + new LOTRUnitTradeEntry(LOTREntityHarnedorFarmhand.class, 100, 50.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); + @Shadow + public static LOTRUnitTradeEntries BLACK_URUK_CAPTAIN = new LOTRUnitTradeEntries(400.0f, + new LOTRUnitTradeEntry(LOTREntityBlackUruk.class, 500, 250.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityBlackUrukArcher.class, 500, 300.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityOlogHai.class, 800, 350.0f).setPledgeExclusive(), + new LOTRUnitTradeEntry(LOTREntityBlackUrukBannerBearer.class, 500, 400.0f).setPledgeExclusive()); + @Shadow + public static LOTRUnitTradeEntries BREE_FARMER = new LOTRUnitTradeEntries(0.0f, + new LOTRUnitTradeEntry(LOTREntityBreeFarmhand.class, 40, 50.0f).setTask(LOTRHiredNPCInfo.Task.FARMER)); + @Final + @Shadow + public static final int MOREDAIN_MERCENARY_COST = 200; + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinSepiaOverride.java b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinSepiaOverride.java new file mode 100644 index 0000000..ae02778 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/mixins/overrides/MixinSepiaOverride.java @@ -0,0 +1,17 @@ +package com.zivilon.cinder_loe.mixins.overrides; + +import lotr.client.gui.LOTRGuiMap; +import net.minecraft.util.ResourceLocation; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + + +@Mixin(LOTRGuiMap.class) +public class MixinSepiaOverride { + + + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/potion/LoEPotions.java b/src (1)/main/java/com/zivilon/cinder_loe/potion/LoEPotions.java new file mode 100644 index 0000000..e9a0678 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/potion/LoEPotions.java @@ -0,0 +1,16 @@ +package com.zivilon.cinder_loe.potion; + +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.entity.EntityLivingBase; + +public class LoEPotions { + public static Potion corrupting; + public static Potion herbal_poisoning; + + public static void registerPotions() { + corrupting = new PotionCorrupting(31, false, 0x7F0000).setPotionName("potion.corrupting"); + herbal_poisoning = new PotionHerbPoison(29, false, 0x114023).setPotionName("potion.herbal_poisoning"); + } +} + diff --git a/src (1)/main/java/com/zivilon/cinder_loe/potion/PotionCorrupting.java b/src (1)/main/java/com/zivilon/cinder_loe/potion/PotionCorrupting.java new file mode 100644 index 0000000..910ce13 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/potion/PotionCorrupting.java @@ -0,0 +1,20 @@ +package com.zivilon.cinder_loe.potion; + +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.entity.EntityLivingBase; + +public class PotionCorrupting extends Potion { + public PotionCorrupting(int id, boolean isBadEffect, int liquidColor) { + super(id, isBadEffect, liquidColor); + } + + @Override + public void performEffect(EntityLivingBase entity, int amplifier) { + } + + @Override + public boolean isReady(int duration, int amplifier) { + return false; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/potion/PotionHerbPoison.java b/src (1)/main/java/com/zivilon/cinder_loe/potion/PotionHerbPoison.java new file mode 100644 index 0000000..6b0dd5f --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/potion/PotionHerbPoison.java @@ -0,0 +1,33 @@ +package com.zivilon.cinder_loe.potion; + +import com.zivilon.cinder_loe.CinderLoE; + +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; + +public class PotionHerbPoison extends Potion { + public PotionHerbPoison(int id, boolean isBadEffect, int liquidColor) { + super(id, isBadEffect, liquidColor); + } + + @Override + public void performEffect(EntityLivingBase entity, int amplifier) { + } + + @Override + public boolean isReady(int duration, int amplifier) { + return false; + } + + public static boolean should_cancel_crit(EntityPlayer player) { + PotionEffect poison = player.getActivePotionEffect(LoEPotions.herbal_poisoning); + if (poison != null && poison.getAmplifier() >= 1) { + if (CinderLoE.DEBUG) System.out.println("Should cancel crit"); + return true; + } + if (CinderLoE.DEBUG) System.out.println("Should not cancel crit"); + return false; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/recipe/CinderBrewingRecipes.java b/src (1)/main/java/com/zivilon/cinder_loe/recipe/CinderBrewingRecipes.java new file mode 100644 index 0000000..28201a3 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/recipe/CinderBrewingRecipes.java @@ -0,0 +1,22 @@ +package com.zivilon.cinder_loe.recipe; + +import net.minecraft.item.ItemStack; + +import java.lang.reflect.Method; + +public class CinderBrewingRecipes { + public static void addCustomBrewingRecipe(ItemStack result, Object... ingredients) { + try { + Class brewingRecipesClass = Class.forName("lotr.common.recipe.LOTRBrewingRecipes"); + Method addBrewingRecipeMethod = brewingRecipesClass.getDeclaredMethod("addBrewingRecipe", ItemStack.class, Object[].class); + + addBrewingRecipeMethod.setAccessible(true); + + addBrewingRecipeMethod.invoke(null, result, ingredients); + + + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/recipes.java b/src (1)/main/java/com/zivilon/cinder_loe/recipes.java new file mode 100644 index 0000000..4f8fcdc --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/recipes.java @@ -0,0 +1,423 @@ +package com.zivilon.cinder_loe; + +import cpw.mods.fml.common.registry.GameRegistry; +import lotr.common.LOTRMod; +import lotr.common.recipe.*; +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.mixins.MixinLOTRBrewingRecipes; +import com.zivilon.cinder_loe.recipe.CinderBrewingRecipes; + +import lotr.common.item.LOTRItemFood; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; +import net.minecraftforge.oredict.RecipeSorter; +import net.minecraftforge.oredict.RecipeSorter.Category; + +import static lotr.common.recipe.LOTRBrewingRecipes.BARREL_CAPACITY; + +public class recipes { + + + public static void registerRecipes() { + // Register a block recipe + System.out.println("[CinderLoE] Registering recipes..."); + registerGeneralRecipes(); + registerRedDwarvenRecipes(); + registerLimwaithRecipes(); + registerBreeRecipes(); + registerArnorRecipes(); + registerAngmarRecipes(); + registerBrewingRecipes(); + registerMillstoneRecipes(); + } + + public static void registerGeneralRecipes() { + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.bowAsh), " XS", "X S", " XS", + 'X', CinderLoE.ingotAsh, 'S', Items.string)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.spearAsh), " X", " Y ", "Y ", + 'X', CinderLoE.ingotAsh, 'Y', "stickWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.swordAsh), " X ", " X ", " Y ", + 'X', CinderLoE.ingotAsh, 'Y', "stickWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.staffAsh), " XX", " YX", "Y ", + 'X', CinderLoE.ingotAsh, 'Y', "stickWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.battleaxeAsh), "XXX", "XYX", " Y ", + 'X', CinderLoE.ingotAsh, 'Y', "stickWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.pikeAsh), " X", " YX", "Y ", + 'X', CinderLoE.ingotAsh, 'Y', "stickWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.hammerAsh), "XYX", "XYX", " Y ", + 'X', CinderLoE.ingotAsh, 'Y', "stickWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.daggerAsh), "X ", "Y ", + 'X', CinderLoE.ingotAsh, 'Y', "stickWood")); + + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.bowAsh), new Object[] { " XS", "X S", " XS", + Character.valueOf('X'), CinderLoE.ingotAsh, Character.valueOf('S'), Items.string })); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.spearAsh), new Object[] { " X", " Y ", "Y ", + Character.valueOf('X'), CinderLoE.ingotAsh, Character.valueOf('Y'), "stickWood" })); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.swordAsh), new Object[] { " X ", " X ", " Y ", + Character.valueOf('X'), CinderLoE.ingotAsh, Character.valueOf('Y'), "stickWood" })); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.staffAsh), new Object[] { " XX", " YX", "Y ", + Character.valueOf('X'), CinderLoE.ingotAsh, Character.valueOf('Y'), "stickWood" })); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.battleaxeAsh), new Object[] { "XXX", "XYX", " Y ", + Character.valueOf('X'), CinderLoE.ingotAsh, Character.valueOf('Y'), "stickWood" })); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.pikeAsh), new Object[] { " X", " YX", "Y ", + Character.valueOf('X'), CinderLoE.ingotAsh, Character.valueOf('Y'), "stickWood" })); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.hammerAsh), new Object[] { "XYX", "XYX", " Y ", + Character.valueOf('X'), CinderLoE.ingotAsh, Character.valueOf('Y'), "stickWood" })); + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.daggerAsh), new Object[] { "X ", "Y ", + Character.valueOf('X'), CinderLoE.ingotAsh, Character.valueOf('Y'), "stickWood" })); + + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.warDart, 1, 0), new Object[] { " Y", "X ", + Character.valueOf('X'), "feather", Character.valueOf('Y'), "stickWood" })); + + GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.warDart, 1, 0), new Object[] { " Y", "X ", + Character.valueOf('X'), "feather", Character.valueOf('Y'), "stickWood" })); + + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.spicedHam), CinderLoE.spice, Items.cooked_porkchop)); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 1), LOTRMod.copper, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 2), LOTRMod.bronze, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 3), Items.iron_ingot, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); +// GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 4), LOTRMod.orcSteel, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); +// GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 5), LOTRMod.dwarfSteel, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); +// GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 6), LOTRMod.urukSteel, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); +// GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 7), LOTRMod.blueDwarfSteel, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); +// GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 8), LOTRMod.blackUrukSteel, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); +// GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 9), LOTRMod.elfSteel, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); +// GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 10), LOTRMod.gildedIron, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); +// GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 11), CinderLoE.redDwarfSteel, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 12), LOTRMod.mithril, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); +// GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDartHeads, 2, 14), LOTRMod.morgulSteel, new ItemStack(LOTRMod.chisel, 1, OreDictionary.WILDCARD_VALUE))); + + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 1), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 1))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 2), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 2))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 3), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 3))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 4), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 4))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 5), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 5))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 6), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 6))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 7), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 7))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 8), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 8))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 9), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 9))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 10), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 10))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 11), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 11))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 12), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 12))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 13), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 13))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.warDart, 1, 14), new ItemStack(CinderLoE.warDart, 1, 0), new ItemStack(CinderLoE.warDartHeads, 1, 14))); + + OreDictionary.registerOre("vegetable1", CinderLoE.onion); + OreDictionary.registerOre("vegetable1", LOTRMod.leek); + OreDictionary.registerOre("vegetable2", CinderLoE.cabbage); + OreDictionary.registerOre("vegetable2", LOTRMod.lettuce); + OreDictionary.registerOre("vegetable3", Items.carrot); + OreDictionary.registerOre("vegetable3", Items.potato); + OreDictionary.registerOre("vegetable3", LOTRMod.turnip); + + OreDictionary.registerOre("fruit1", Items.apple); + OreDictionary.registerOre("fruit1", LOTRMod.pear); + OreDictionary.registerOre("fruit1", LOTRMod.appleGreen); + OreDictionary.registerOre("fruit1", LOTRMod.mango); + OreDictionary.registerOre("fruit1", LOTRMod.orange); + OreDictionary.registerOre("fruit2", LOTRMod.cherry); + OreDictionary.registerOre("fruit2", Items.melon); + OreDictionary.registerOre("fruit2", LOTRMod.banana); + OreDictionary.registerOre("fruit2", LOTRMod.pomegranate); + OreDictionary.registerOre("fruit3", LOTRMod.blueberry); + OreDictionary.registerOre("fruit3", LOTRMod.raspberry); + OreDictionary.registerOre("fruit3", LOTRMod.cranberry); + OreDictionary.registerOre("fruit3", LOTRMod.blackberry); + OreDictionary.registerOre("fruit3", LOTRMod.grapeRed); + OreDictionary.registerOre("fruit3", LOTRMod.grapeWhite); + + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.lightStew), Items.bowl, "vegetable1", "vegetable2", "vegetable3")); + + OreDictionary.registerOre("meat", Items.cooked_beef); + OreDictionary.registerOre("meat", Items.cooked_chicken); + OreDictionary.registerOre("meat", Items.cooked_porkchop); + OreDictionary.registerOre("meat", LOTRMod.camelCooked); + OreDictionary.registerOre("meat", LOTRMod.deerCooked); + OreDictionary.registerOre("meat", LOTRMod.muttonCooked); + OreDictionary.registerOre("meat", LOTRMod.lionCooked); + OreDictionary.registerOre("meat", LOTRMod.rhinoCooked); + OreDictionary.registerOre("meat", LOTRMod.rabbitCooked); + OreDictionary.registerOre("meat", LOTRMod.zebraCooked); + + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.fruitsalad), Items.bowl, "fruit1", "fruit2", "fruit3")); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.pasta, 4), new ItemStack(LOTRMod.rollingPin, 1, OreDictionary.WILDCARD_VALUE), CinderLoE.dough, CinderLoE.dough)); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.halva), Items.sugar, CinderLoE.dough, CinderLoE.spice, LOTRMod.almond)); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.doner_kebab), CinderLoE.dough, "vegetable2", CinderLoE.spice, LOTRMod.kebab)); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.chocolatebar, 2), LOTRMod.mugChocolate)); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(CinderLoE.pelmen), Items.wheat, "meat", LOTRMod.salt)); + GameRegistry.addRecipe(new LOTRRecipesPoisonDrinks()); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderBlock), "XXX", "XYX", "XXX", + 'X', Blocks.stone, 'Y', LOTRMod.balrogFire)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.reedBale), "XXX", "XXX", "XXX", + 'X', LOTRMod.reeds)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.leatherBundle), "XXX", "XXX", "XXX", + 'X', Items.leather)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.pretzel, 2), "XYX", " X ", + 'X', CinderLoE.dough, 'Y', LOTRMod.salt)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.dough, 8), "XXX", "XYX", "XXX", + 'X', CinderLoE.flour, 'Y', Items.water_bucket)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.fishBarrel), "XXX", "XXX", "XXX", + 'X', Items.fish)); + //GameRegistry.addRecipe((IRecipe)new ShapedOreRecipe(new ItemStack(CinderLoE.rustedsword, 8), new Object[] { "X", "y", "y", + //Character.valueOf('Y'), Items.iron_ingot, Character.valueOf('X'), "stickWood"})); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.silverChain, 8), "X", "X", "X", + 'X', LOTRMod.silver)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.goldChain, 8), "X", "X", "X", + 'X', Items.gold_ingot)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.ironChain, 8), "X", "X", "X", + 'X', Items.iron_ingot)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.bronzeChain, 8), "X", "X", "X", + 'X', LOTRMod.bronze)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cindercobble, 4, 0), "XX", "XX", + 'X', LOTRMod.cobblebrick)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cutDrystone, 4), "XX", "XX", + 'X', new ItemStack(CinderLoE.cindercobble, 1, 0))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(LOTRMod.cobblebrick, 4, 0), "XX", "XX", + 'X', CinderLoE.cutDrystone)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.reeflessCoral, 1), "X", + 'X', LOTRMod.coralReef)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.plaster, 4), "XYX", "YXY", "XYX", + 'X', Items.paper, 'Y', Blocks.clay)); + // Cinder Stony Blocks + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cindercobble, 4, 1), "XY", "YX", + 'X', new ItemStack(LOTRMod.rock, 1, 0), 'Y', LOTRMod.mordorGravel)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cindercobble, 4, 2), "XX", "XX", + 'X', new ItemStack(LOTRMod.silver))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cindercobble, 4, 3), "XX", "XX", + 'X', new ItemStack(CinderLoE.cindercobble, 1, 2))); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(LOTRMod.banner, 1, 44), " Y ", " X ", " Z ", + 'X', "stickWood", 'Y', new ItemStack(Blocks.wool, 1, 14), 'Z', "plankWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(LOTRMod.banner, 1, 45), " Y ", " X ", " Z ", + 'X', "stickWood", 'Y', new ItemStack(Blocks.wool, 1, 11), 'Z', "plankWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(LOTRMod.banner, 1, 46), " Y ", " X ", " Z ", + 'X', "stickWood", 'Y', new ItemStack(Blocks.wool, 1, 13), 'Z', "plankWood")); + + // Furs and then carpets + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderfur, 2, 0), "XX", "XX", + 'X', new ItemStack(LOTRMod.fur, 1))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.furCarpet, 3, 0), "XX", + 'X', new ItemStack(CinderLoE.cinderfur, 1, 0))); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderfur, 2, 1), "XX", "XX", + 'X', new ItemStack(CinderLoE.cinderFurItem, 1, 0))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.furCarpet, 3, 1), "XX", + 'X', new ItemStack(CinderLoE.cinderfur, 1, 1))); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderfur, 2, 2), "XX", "XX", + 'X', new ItemStack(CinderLoE.cinderFurItem, 1, 1))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.furCarpet, 3, 2), "XX", + 'X', new ItemStack(CinderLoE.cinderfur, 1, 2))); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderfur, 2, 3), "XX", "XX", + 'X', new ItemStack(CinderLoE.cinderFurItem, 1, 2))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.furCarpet, 3, 3), "XX", + 'X', new ItemStack(CinderLoE.cinderfur, 1, 3))); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderfur, 2, 4), "XX", "XX", + 'X', new ItemStack(CinderLoE.cinderFurItem, 1, 3))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.furCarpet, 3, 4), "XX", + 'X', new ItemStack(CinderLoE.cinderfur, 1, 4))); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderfur, 2, 5), "XX", "XX", + 'X', new ItemStack(CinderLoE.cinderFurItem, 1, 4))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.furCarpet, 3, 5), "XX", + 'X', new ItemStack(CinderLoE.cinderfur, 1, 5))); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderfur, 2, 6), "XX", "XX", + 'X', new ItemStack(CinderLoE.cinderFurItem, 1, 5))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.furCarpet, 3, 6), "XX", + 'X', new ItemStack(CinderLoE.cinderfur, 1, 6))); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderfur, 2, 7), "XX", "XX", + 'X', new ItemStack(LOTRMod.lionFur, 1))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.furCarpet, 3, 7), "XX", + 'X', new ItemStack(CinderLoE.cinderfur, 1, 7))); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.cinderfur, 2, 8), "XX", "XX", + 'X', new ItemStack(CinderLoE.cinderFurItem, 1, 6))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(CinderLoE.furCarpet, 3, 8), "XX", + 'X', new ItemStack(CinderLoE.cinderfur, 1, 8))); + + + } + public static void registerRedDwarvenRecipes() { + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.helmetRedDwarf), "XXX", "X X", + Character.valueOf('X'), CinderLoE.redDwarfSteel)); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bodyRedDwarf), "X X", "XXX", "XXX", + Character.valueOf('X'), CinderLoE.redDwarfSteel)); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.legsRedDwarf), "XXX", "X X", "X X", + Character.valueOf('X'), CinderLoE.redDwarfSteel)); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bootsRedDwarf), "X X", "X X", + Character.valueOf('X'), CinderLoE.redDwarfSteel)); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.spearRedDwarf), " X", " Y ", "Y ", + Character.valueOf('X'), CinderLoE.redDwarfSteel, Character.valueOf('Y'), "stickWood")); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.swordRedDwarf), " X ", " X ", " Y ", + Character.valueOf('X'), CinderLoE.redDwarfSteel, Character.valueOf('Y'), "stickWood")); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.battleaxeRedDwarf), "XXX", "XYX", " Y ", + Character.valueOf('X'), CinderLoE.redDwarfSteel, Character.valueOf('Y'), "stickWood")); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.pikeRedDwarf), " X", " YX", "Y ", + Character.valueOf('X'), CinderLoE.redDwarfSteel, Character.valueOf('Y'), "stickWood")); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.hammerRedDwarf), "XYX", "XYX", " Y ", + Character.valueOf('X'), CinderLoE.redDwarfSteel, Character.valueOf('Y'), "stickWood")); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.daggerRedDwarf), "X ", "Y ", + Character.valueOf('X'), CinderLoE.redDwarfSteel, Character.valueOf('Y'), "stickWood")); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.crossbowRedDwarf), "XXY", "ZYX", "YZX", + Character.valueOf('X'), CinderLoE.redDwarfSteel, Character.valueOf('Y'), "stickWood", Character.valueOf('Z'), "string")); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.boarArmorRedDwarf), "X ", "XYX", "XXX", + Character.valueOf('X'), CinderLoE.redDwarfSteel, Character.valueOf('Y'), "leather")); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.blockRedDwarfSteel), "XXX", "XXX", "XXX", + Character.valueOf('X'), CinderLoE.redDwarfSteel)); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.redDwarfSteel), "X ", " ", + Character.valueOf('X'), CinderLoE.redDwarfSteel)); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.chandelierRedDwarf, 2), " X ", "ZYZ", " ", + Character.valueOf('X'), "stickWood", Character.valueOf('Y'), CinderLoE.redDwarfSteel, Character.valueOf('Z'), Blocks.torch)); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.barsRedDwarf, 16), "XXX", "XXX", " ", + Character.valueOf('X'), CinderLoE.redDwarfSteel)); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.dwarvenBrickRuned, 4), " X ", "XYX", " X ", + Character.valueOf('X'), new ItemStack(LOTRMod.brick, 1, 6), Character.valueOf('Y'), Items.gold_nugget)); + GameRegistry.addShapelessRecipe(new ItemStack(CinderLoE.redDwarfSteel, 9), new ItemStack(CinderLoE.blockRedDwarfSteel)); + GameRegistry.addRecipe(new ItemStack(CinderLoE.blockRedDwarfSteel, 1), "XXX", "XXX", "XXX", + Character.valueOf('X'), CinderLoE.redDwarfSteel); + LOTRRecipes.dwarvenRecipes.add(new ShapedOreRecipe(new ItemStack(LOTRMod.banner, 1, 42), " YR", " X ", " Z ", + Character.valueOf('X'), "stickWood", Character.valueOf('Y'), Blocks.wool, Character.valueOf('Z'), "plankWood", Character.valueOf('R'), "dyeRed")); + GameRegistry.addRecipe(new LOTRRecipePoisonWeapon(CinderLoE.daggerRedDwarf, CinderLoE.daggerRedDwarfPoisoned)); + } + + public static void registerLimwaithRecipes() { + + OreDictionary.registerOre("bone", Items.bone); + OreDictionary.registerOre("bone", LOTRMod.elfBone); + OreDictionary.registerOre("bone", LOTRMod.dwarfBone); + OreDictionary.registerOre("bone", LOTRMod.hobbitBone); + OreDictionary.registerOre("bone", LOTRMod.orcBone); + OreDictionary.registerOre("bone", LOTRMod.trollBone); + OreDictionary.registerOre("bone", LOTRMod.wargBone); + + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.helmetLimwaith), "XXX", "Y Y", + Character.valueOf('X'), LOTRMod.driedReeds, Character.valueOf('Y'), new ItemStack(LOTRMod.planks, 1, 15))); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bodyLimwaith), "X X", "YYY", "XXX", + Character.valueOf('X'), LOTRMod.driedReeds, Character.valueOf('Y'), new ItemStack(LOTRMod.planks, 1, 15))); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.legsLimwaith), "XXX", "Y Y", "X X", + Character.valueOf('X'), LOTRMod.driedReeds, Character.valueOf('Y'), new ItemStack(LOTRMod.planks, 1, 15))); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bootsLimwaith), "Y Y", "X X", + Character.valueOf('X'), LOTRMod.driedReeds, Character.valueOf('Y'), new ItemStack(LOTRMod.planks, 1, 15))); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.spearLimwaith), " X", " Y ", "Y ", + Character.valueOf('X'), "bone", Character.valueOf('Y'), "stickWood")); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.truncheonLimwaith), " X ", " X ", " Y ", + Character.valueOf('X'), "bone", Character.valueOf('Y'), "stickWood")); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.battleaxeLimwaith), "XXX", "XYX", " Y ", + Character.valueOf('X'), "bone", Character.valueOf('Y'), "stickWood")); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.tridentLimwaith), " XX", " YX", "Y ", + Character.valueOf('X'), "bone", Character.valueOf('Y'), "stickWood")); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.daggerLimwaith), "X ", "Y ", + Character.valueOf('X'), "bone", Character.valueOf('Y'), "stickWood")); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.blowgunLimwaith), "YXX", " ", " ", + Character.valueOf('X'), LOTRMod.reeds, Character.valueOf('Y'), "stickWood")); + GameRegistry.addRecipe(new LOTRRecipePoisonWeapon(CinderLoE.daggerLimwaith, CinderLoE.daggerLimwaithPoisoned)); + LOTRRecipes.moredainRecipes.add(new ShapelessOreRecipe(new ItemStack(CinderLoE.bonemold), "bone", new ItemStack(Items.dye, 1, 15), new ItemStack(Items.dye, 1, 15))); + + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.helmetboneLimwaith), "XXX", "Y Y", + Character.valueOf('X'), "bone", Character.valueOf('Y'), CinderLoE.bonemold)); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bodyboneLimwaith), "X X", "YYY", "XXX", + Character.valueOf('X'), "bone", Character.valueOf('Y'), CinderLoE.bonemold)); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.legsboneLimwaith), "XXX", "Y Y", "X X", + Character.valueOf('X'), "bone", Character.valueOf('Y'), CinderLoE.bonemold)); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bootsboneLimwaith), "Y Y", "X X", + Character.valueOf('X'), "bone", Character.valueOf('Y'), CinderLoE.bonemold)); + LOTRRecipes.moredainRecipes.add(new ShapedOreRecipe(new ItemStack(LOTRMod.banner, 1, 43), " YR", " X ", " Z ", + Character.valueOf('X'), "stickWood", Character.valueOf('Y'), Blocks.wool, Character.valueOf('Z'), "plankWood", Character.valueOf('R'), LOTRMod.reeds)); + } + + public static void registerBreeRecipes() { + LOTRRecipes.breeRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.helmetBreeKettle), "XYX", + Character.valueOf('X'), Items.iron_ingot, Character.valueOf('Y'), CinderLoE.helmetBree)); + LOTRRecipes.breeRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.helmetBree), "XXX", "X X", + Character.valueOf('X'), Items.iron_ingot)); + LOTRRecipes.breeRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bodyBree), "X X", "XXX", "XXX", + Character.valueOf('X'), Items.iron_ingot)); + LOTRRecipes.breeRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.legsBree), "XXX", "X X", "X X", + Character.valueOf('X'), Items.iron_ingot)); + LOTRRecipes.breeRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bootsBree), "X X", "X X", + Character.valueOf('X'), Items.iron_ingot)); + LOTRRecipes.breeRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.swordBree), " X ", " X ", " Y ", + Character.valueOf('X'), Items.iron_ingot, Character.valueOf('Y'), "stickWood")); + } + + public static void registerAngmarRecipes() { + LOTRRecipes.angmarRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.helmetRhudaur), "XXX", "X X", + Character.valueOf('X'), Items.iron_ingot)); + LOTRRecipes.angmarRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bodyRhudaur), "X X", "XXX", "XXX", + Character.valueOf('X'), Items.iron_ingot)); + LOTRRecipes.angmarRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.legsRhudaur), "XXX", "X X", "X X", + Character.valueOf('X'), Items.iron_ingot)); + LOTRRecipes.angmarRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bootsRhudaur), "X X", "X X", + Character.valueOf('X'), Items.iron_ingot)); + } + public static void registerArnorRecipes() { + LOTRRecipes.rangerRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.helmetArnorBanner), "YYY", "Y Y", + Character.valueOf('X'), Items.iron_ingot, Character.valueOf('Y'), Items.leather)); + LOTRRecipes.rangerRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bodyArnorBanner), "Y Y", "XXX", "YYY", + Character.valueOf('X'), Items.iron_ingot, Character.valueOf('Y'), Items.leather)); + LOTRRecipes.rangerRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.legsArnorBanner), "YYY", "X X", "Y Y", + Character.valueOf('X'), Items.iron_ingot, Character.valueOf('Y'), Items.leather)); + LOTRRecipes.rangerRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.bootsArnorBanner), "X X", "X X", + Character.valueOf('X'), Items.iron_ingot, Character.valueOf('Y'), Items.leather)); + LOTRRecipes.rangerRecipes.add(new ShapedOreRecipe(new ItemStack(CinderLoE.maceArnor), " XX", " XX", "Y ", + Character.valueOf('X'), Items.iron_ingot, Character.valueOf('Y'), "stickWood")); + } + public static void registerBrewingRecipes() { + System.out.println("[CinderLoE] Registering Brewing recipes... We like to drink! jk I hate alcohol"); + + CinderBrewingRecipes.addCustomBrewingRecipe(new ItemStack(LOTRMod.mugTauredainCocoa, BARREL_CAPACITY), + new ItemStack(Items.dye, 1, 3), + new ItemStack(Items.dye, 1, 3), + new ItemStack(Items.dye, 1, 3), + new ItemStack(LOTRMod.doubleFlower, 1, 2), + new ItemStack(LOTRMod.doubleFlower, 1, 3), + new ItemStack(LOTRMod.mugMilk)); + CinderBrewingRecipes.addCustomBrewingRecipe(new ItemStack(CinderLoE.mugElfBrew, BARREL_CAPACITY), + new ItemStack(LOTRMod.elanor), + new ItemStack(LOTRMod.niphredil), + new ItemStack(LOTRMod.mallornNut), + new ItemStack(LOTRMod.mallornNut), + new ItemStack(CinderLoE.spiceElven), + new ItemStack(CinderLoE.spiceElven)); + CinderBrewingRecipes.addCustomBrewingRecipe(new ItemStack(CinderLoE.mugHumanBrew, BARREL_CAPACITY), + new ItemStack(LOTRMod.athelas), + new ItemStack(LOTRMod.athelas), + new ItemStack(LOTRMod.athelas), + new ItemStack(LOTRMod.athelas), + new ItemStack(CinderLoE.spiceHuman), + new ItemStack(CinderLoE.spiceHuman)); + CinderBrewingRecipes.addCustomBrewingRecipe(new ItemStack(CinderLoE.mugOrcBrew, BARREL_CAPACITY), + new ItemStack(LOTRMod.morgulShroom), + new ItemStack(LOTRMod.nauriteGem), + new ItemStack(LOTRMod.morgulShroom), + new ItemStack(LOTRMod.guldurilCrystal), + new ItemStack(CinderLoE.spiceOrcish), + new ItemStack(CinderLoE.spiceOrcish)); + CinderBrewingRecipes.addCustomBrewingRecipe(new ItemStack(CinderLoE.mugDwarfBrew, BARREL_CAPACITY), + new ItemStack(LOTRMod.dwarfHerb), + new ItemStack(LOTRMod.dwarfHerb), + new ItemStack(LOTRMod.dwarfHerb), + new ItemStack(LOTRMod.dwarfHerb), + new ItemStack(CinderLoE.spiceDwarven), + new ItemStack(CinderLoE.spiceDwarven)); + } + + public static void registerMillstoneRecipes() { + System.out.println("[CinderLoE] Registering Millstone recipes..."); + + LOTRMillstoneRecipes.addRecipe(Items.wheat, new ItemStack(CinderLoE.flour)); + LOTRMillstoneRecipes.addRecipe(LOTRMod.corn, new ItemStack(CinderLoE.flour)); + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/tileentity/TileEntityMistBlock.java b/src (1)/main/java/com/zivilon/cinder_loe/tileentity/TileEntityMistBlock.java new file mode 100644 index 0000000..0f2f3c2 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/tileentity/TileEntityMistBlock.java @@ -0,0 +1,66 @@ +package com.zivilon.cinder_loe.tileentity; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import java.util.List; + +import lotr.common.LOTRDimension; +import lotr.common.LOTRGuiMessageTypes; +import lotr.common.LOTRLevelData; +import lotr.common.LOTRMod; +import lotr.common.tileentity.LOTRTileEntityUtumnoPortal; +import lotr.common.world.LOTRTeleporterUtumno; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; +import net.minecraft.world.Teleporter; +import net.minecraft.world.World; + +public class TileEntityMistBlock extends LOTRTileEntityUtumnoPortal { + public float color_red; + public float color_green; + public float color_blue; + + public TileEntityMistBlock() { + this(0.0F, 0.0F, 0.0F); + } + + public TileEntityMistBlock(float r, float g, float b) { + color_red = r; + color_green = g; + color_blue = b; + } + + public void func_149670_a(World world, int i, int j, int k, Entity entity) {} + + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setFloat("red", this.color_red); + nbt.setFloat("green", this.color_green); + nbt.setFloat("blue", this.color_blue); + } + + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.color_red = nbt.getFloat("red"); + this.color_green = nbt.getFloat("green"); + this.color_blue = nbt.getFloat("blue"); + } + + @Override + public void func_145845_h() {} + + @Override + public void transferEntity(Entity entity) {} + + private LOTRTileEntityUtumnoPortal findActingTargetingPortal() { + return null; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/util/BlockPos.java b/src (1)/main/java/com/zivilon/cinder_loe/util/BlockPos.java new file mode 100644 index 0000000..e6558a9 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/util/BlockPos.java @@ -0,0 +1,54 @@ +package com.zivilon.cinder_loe.util; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockBush; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import java.util.ArrayList; +import java.util.Random; + +public class BlockPos { + public int x, y, z; + + public BlockPos(int x, int y, int z) { + this.x = x; + this.y = y; + this.z = z; + } + + public BlockPos down() { + return new BlockPos(x, y - 1, z); + } + + public static BlockPos findSafeSpawnLocation(World world, EntityPlayer entityPlayer) { + Random rand = new Random(); + ArrayList validPositions = new ArrayList(); + int radius = 5; // 5-block radius + + int originX = MathHelper.floor_double(entityPlayer.posX); + int originY = MathHelper.floor_double(entityPlayer.posY); + int originZ = MathHelper.floor_double(entityPlayer.posZ); + + for (int x = originX - radius; x <= originX + radius; x++) { + for (int z = originZ - radius; z <= originZ + radius; z++) { + for (int y = originY - radius; y <= originY + radius; y++) { + Block block = world.getBlock(x, y, z); + Block blockAbove = world.getBlock(x, y + 1, z); + + // Check if the block is solid and there's air above it + if (!block.isAir(world, x, y, z) && !(block instanceof BlockBush) && (blockAbove.isAir(world, x, y + 1, z) || (blockAbove instanceof BlockBush))) { + validPositions.add(new BlockPos(x, y + 1, z)); // Add the position above the solid block + } + } + } + } + if (validPositions.isEmpty()) { + return null; // No valid position found + } + + // Select a random valid position + return validPositions.get(rand.nextInt(validPositions.size())); + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/util/DamageEvent.java b/src (1)/main/java/com/zivilon/cinder_loe/util/DamageEvent.java new file mode 100644 index 0000000..20c1e6d --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/util/DamageEvent.java @@ -0,0 +1,93 @@ +package com.zivilon.cinder_loe.util; + +import net.minecraft.entity.*; +import net.minecraft.entity.player.*; +import net.minecraft.util.DamageSource; + +import com.zivilon.cinder_loe.mixins.MixinLOTREnchantment; +import lotr.common.enchant.LOTREnchantment; +import lotr.common.enchant.LOTREnchantmentHelper; + +import lotr.common.item.*; +import net.minecraft.item.*; +import net.minecraft.world.World; + +public class DamageEvent { + public DamageSource source; + public float damage; + public EntityLivingBase defender; + public Entity attacker; + + public DamageEvent(DamageSource source, float damage, EntityLivingBase defender, Entity attacker) { + this.source = source; + this.damage = damage; + this.defender = defender; + this.attacker = attacker; + } + + public static Pair run_events(DamageEvent event) { + boolean cancel = false; + World world = event.defender.worldObj; + + if (event.defender instanceof EntityPlayer && !event.source.isUnblockable()) { + EntityPlayerMP player = (EntityPlayerMP) event.defender; + ItemStack sword = player.getHeldItem(); + if (!(event.attacker instanceof EntityLivingBase)) return new Pair<>(event, cancel); + EntityLivingBase attacker = (EntityLivingBase)event.attacker; + + float playerYaw = player.getRotationYawHead(); + float attackerYaw = attacker.getRotationYawHead(); + + // Normalize both angles to be within 0 - 360 + playerYaw = (playerYaw + 360) % 360; + attackerYaw = (attackerYaw + 360) % 360; + + // Calculate the angle difference + float angleDifference = Math.abs(playerYaw - attackerYaw); + + if (angleDifference > 180) { + angleDifference = 360 - angleDifference; + } + ItemStack weapon = attacker.getHeldItem(); + if (weapon != null) { + if (player.isBlocking() && angleDifference >= 135 && angleDifference <=225) { + + if (weapon.getItem() instanceof ItemAxe || weapon.getItem() instanceof LOTRItemAxe || weapon.getItem() instanceof LOTRItemBattleaxe) { + sword.damageItem((int) (event.damage *1.5), player); // Axes deal 150% the Durability damage + player.clearItemInUse(); + world.playSoundAtEntity(player, "random.anvil_land", 1F, 2F); + event.damage *= 0.25f; // Only 25% Passes through + } else if (weapon.getItem() instanceof LOTRItemHammer) { + sword.damageItem((int) event.damage, player); // Hammers bypass the block better, but only deal 100% of the durability damage + player.clearItemInUse(); + world.playSoundAtEntity(player, "random.anvil_land", 1F, 2F); + event.damage *= 0.5f; // Only 50% Passes through + } else { + sword.damageItem((int) (event.damage/2), player); //Swords only deal 50% of durability damage + player.clearItemInUse(); + world.playSoundAtEntity(player, "random.anvil_land", 1F, 2F); + event.damage = 0.0f; + cancel = true; + } + } + } + } + if (event.source.isFireDamage() && event.defender instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) event.defender; + for (ItemStack armor : player.inventory.armorInventory) { + if (armor != null && LOTREnchantmentHelper.hasEnchant(armor, LOTREnchantment.getEnchantmentByName("fireRepair"))) { + int currentDamage = armor.getItemDamage(); + int reduction = (int) event.damage; + int newDamage = currentDamage - 2*reduction; + + if (newDamage < 0) { + newDamage = 0; + } + + armor.setItemDamage(newDamage); + } + } + } + return new Pair<>(event, cancel); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/util/DurableItemCrafter.java b/src (1)/main/java/com/zivilon/cinder_loe/util/DurableItemCrafter.java new file mode 100644 index 0000000..e91aedb --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/util/DurableItemCrafter.java @@ -0,0 +1,19 @@ +package com.zivilon.cinder_loe.util; + +import net.minecraft.item.Item; +import java.util.ArrayList; +import java.util.List; + +import lotr.common.LOTRMod; +import com.zivilon.cinder_loe.CinderLoE; + +public class DurableItemCrafter { + public static List customItems = new ArrayList<>(); + public static List exceptionItems = new ArrayList<>(); + + static { + customItems.add(LOTRMod.rollingPin); + customItems.add(LOTRMod.chisel); + customItems.add(CinderLoE.cleaver); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/util/IEntityLivingBase.java b/src (1)/main/java/com/zivilon/cinder_loe/util/IEntityLivingBase.java new file mode 100644 index 0000000..8b92153 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/util/IEntityLivingBase.java @@ -0,0 +1,12 @@ +package com.zivilon.cinder_loe.util; + +import net.minecraft.entity.EntityLivingBase; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; +import java.util.UUID; + +public interface IEntityLivingBase { + void set_despawn_timer(int ticks); + void set_warband_uuid(UUID uuid); + UUID get_warband_uuid(); +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/util/ILootableEntity.java b/src (1)/main/java/com/zivilon/cinder_loe/util/ILootableEntity.java new file mode 100644 index 0000000..80877c4 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/util/ILootableEntity.java @@ -0,0 +1,12 @@ +package com.zivilon.cinder_loe.util; + +import com.zivilon.cinder_loe.droptables.DropTable; + +public interface ILootableEntity { + DropTable get_drop_table(); + void set_drop_table(DropTable table); + int get_last_pickpocket(); + void set_last_pickpocket(int i); + Float get_pickpocket_chance(); + void set_pickpocket_chance(Float f); +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/util/IMixinEntityPlayer.java b/src (1)/main/java/com/zivilon/cinder_loe/util/IMixinEntityPlayer.java new file mode 100644 index 0000000..54cf0e0 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/util/IMixinEntityPlayer.java @@ -0,0 +1,8 @@ +package com.zivilon.cinder_loe.util; + +import com.zivilon.cinder_loe.droptables.DropTable; + +public interface IMixinEntityPlayer { + int get_last_pickpocket_attempt(); + void set_last_pickpocket_attempt(int i); +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/util/LOTREnchantmentExclusions.java b/src (1)/main/java/com/zivilon/cinder_loe/util/LOTREnchantmentExclusions.java new file mode 100644 index 0000000..7c811cf --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/util/LOTREnchantmentExclusions.java @@ -0,0 +1,14 @@ +package com.zivilon.cinder_loe.util; + +import net.minecraft.item.Item; +import java.util.ArrayList; +import java.util.List; + +import lotr.common.LOTRMod; +import com.zivilon.cinder_loe.CinderLoE; + +public class LOTREnchantmentExclusions { + public static List exclusions = new ArrayList<>(); + static { + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/util/Pair.java b/src (1)/main/java/com/zivilon/cinder_loe/util/Pair.java new file mode 100644 index 0000000..a0514f6 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/util/Pair.java @@ -0,0 +1,18 @@ +package com.zivilon.cinder_loe.util; + +public class Pair { + public K key; + public V value; + + public Pair(K key, V value) { + this.key = key; + this.value = value; + } + + public K getKey() { + return key; + } + public V getValue() { + return value; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/util/PickpocketUtils.java b/src (1)/main/java/com/zivilon/cinder_loe/util/PickpocketUtils.java new file mode 100644 index 0000000..e659ec7 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/util/PickpocketUtils.java @@ -0,0 +1,209 @@ +package com.zivilon.cinder_loe.util; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.entity.npc.dwarf.*; +import com.zivilon.cinder_loe.mixins.MixinLOTREntityNPC; +import com.zivilon.cinder_loe.droptables.*; +import com.zivilon.cinder_loe.droptables.DropTable.*; +import com.zivilon.cinder_loe.util.IMixinEntityPlayer; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.init.Items; +import net.minecraft.nbt.*; +import net.minecraft.potion.Potion; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ChatComponentTranslation; + +import lotr.common.LOTRMod; +import lotr.common.item.LOTRItemArmor; +import lotr.common.item.LOTRMaterial; +import lotr.common.entity.npc.*; + +import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class PickpocketUtils { + public static Random random = new Random(); + + public static boolean can_pickpocket(EntityPlayer player, LOTREntityNPC target) { + if (CinderLoE.DEBUG) System.out.println("[PickpocketUtils] Checking if can pickpocket..."); + if (!player.isSneaking()) return false; + + DropTable table = ((ILootableEntity)(Object)target).get_drop_table(); + if (table == null) { + return false; + } + + List drops = table.drop_list; + boolean has_pickpocket_drops = drops.stream().anyMatch(drop -> + drop.conditions != null && + Arrays.stream(drop.conditions).anyMatch(DropContext.PICKPOCKET::equals) + ); + + if (!has_pickpocket_drops) { + return false; + } + + if (((IMixinEntityPlayer)player).get_last_pickpocket_attempt() > (int)(System.currentTimeMillis() / 1000L - 4)) { + if (random.nextInt(10000) == 1) { + player.addChatMessage(new ChatComponentTranslation("pickpocket.cooldown_alt")); + } else { + player.addChatMessage(new ChatComponentTranslation("pickpocket.cooldown")); + } + return false; + } + + if (CinderLoE.DEBUG) System.out.println("[PickpocketUtils] Yes can pickpocket"); + return true; + } + public static boolean pickpocket(EntityPlayer player, LOTREntityNPC target) { + if (CinderLoE.DEBUG) System.out.println("[PickpocketUtils] Pickpocketing..."); + ILootableEntity npc = (ILootableEntity)(Object)target; + float penalty = 1.0F; + if (!is_behind(player, (EntityLivingBase)target)) penalty -= 0.4F; + if (npc.get_last_pickpocket() > (int)(System.currentTimeMillis() / 1000L - 60)) penalty -= 0.4F; + if (is_invisible(player)) penalty += 0.4F; + if (is_cloaked(player)) penalty += 0.2F; + boolean success = random.nextFloat() < npc.get_pickpocket_chance() * penalty; + if (CinderLoE.DEBUG) System.out.println("[PickpocketUtils] Pickpocketing " + success); + return success; + } + + public static boolean is_behind(EntityPlayer player, EntityLivingBase entity) { + float npcYaw = entity.rotationYaw % 360; + float playerYaw = player.rotationYaw % 360; + float angleDiff = MathHelper.wrapAngleTo180_float(npcYaw - playerYaw); + boolean is_behind = Math.abs(angleDiff) < 30F; + if (CinderLoE.DEBUG) System.out.println("[PickpocketUtils] Is behind? " + is_behind); + return is_behind; + } + + public static boolean is_invisible(EntityPlayer player) { + boolean invisible = player.isPotionActive(Potion.invisibility); + return (invisible && !wearing_armor(player)); + + } + public static boolean is_cloaked(EntityPlayer player) { + ItemStack[] equipment = player.inventory.armorInventory; + for (ItemStack armor : equipment) { + if (armor == null) return false; + Item item = armor.getItem(); + if (!(item instanceof LOTRItemArmor) || ((LOTRItemArmor)item).getLOTRArmorMaterial() != LOTRMaterial.HITHLAIN) + return false; + } + return true; + } + public static boolean wearing_armor(EntityPlayer player) { + ItemStack[] equipment = player.inventory.armorInventory; + for (ItemStack armor : equipment) { + if (armor != null) return true; + } + return false; + } + + /* Comment when done. Here only for reference + public SingleItemDrop(Item item, NBTTagCompound nbt, float chance, int min, int max, boolean looting_quantity, boolean looting_chance, DropContext[] conditions) { + public SingleItemDrop(Item item, NBTTagCompound nbt, float chance, DropContext[] conditions) { + public ItemGroup(float chance, int min, int max, boolean looting_chance, DropContext[] conditions, ItemGroupEntry... drops) { + public ItemGroupEntry(Item item, NBTTagCompound nbt, int weight, int min_amount, int max_amount, boolean looting_quantity) { + public ItemGroupEntry(Item item, NBTTagCompound nbt, int weight) { + */ + + public static void assign_drop_table(LOTREntityNPC entity) { + if (entity instanceof LOTRTradeable || entity instanceof LOTRUnitTradeable) return; + ((ILootableEntity)entity).set_pickpocket_chance(0.8F); + + DropTable table = new DropTable(); + DropContext[] default_context = new DropContext[] {DropContext.PICKPOCKET}; + table.drop_list.add(new SingleItemDrop(LOTRMod.silverCoin, null, 1.0F, 8, 16, false, false, default_context)); + if (entity instanceof LOTREntityMan) { + table.drop_list.add(new SingleItemDrop(Items.cooked_chicken, null, 0.2F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(Items.book, null, 0.2F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(Items.bread, null, 0.2F, default_context)); + } else if (entity instanceof LOTREntityOrc) { + table.drop_list.add(new SingleItemDrop(LOTRMod.orcSteel, null, 0.05F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.maggotyBread, null, 0.2F, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.manFlesh, null, 0.2F, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.elfBone, null, 0.2F, default_context)); + table.drop_list.add(new SingleItemDrop(Items.bone, null, 0.2F, default_context)); + } else if (entity instanceof LOTREntityElf) { + table.drop_list.add(new SingleItemDrop(LOTRMod.quenditeCrystal, null, 0.01F, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.lembas, null, 0.05F, default_context)); + table.drop_list.add(new SingleItemDrop(Item.getItemFromBlock(LOTRMod.niphredil), null, 0.1F, default_context)); + table.drop_list.add(new SingleItemDrop(Item.getItemFromBlock(LOTRMod.elanor), null, 0.1F, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.mallornNut, null, 0.05F, default_context)); + } else if (entity instanceof LOTREntityDwarf) { + ItemGroupEntry amethyst = new ItemGroupEntry(LOTRMod.amethyst, null, 5); + ItemGroupEntry topaz = new ItemGroupEntry(LOTRMod.topaz, null, 4); + ItemGroupEntry amber = new ItemGroupEntry(LOTRMod.amber, null, 4); + ItemGroupEntry opal = new ItemGroupEntry(LOTRMod.opal, null, 4); + ItemGroupEntry sapphire = new ItemGroupEntry(LOTRMod.sapphire, null, 3); + ItemGroupEntry ruby = new ItemGroupEntry(LOTRMod.ruby, null, 3); + ItemGroupEntry emerald = new ItemGroupEntry(LOTRMod.emerald, null, 2); + ItemGroupEntry diamond = new ItemGroupEntry(LOTRMod.diamond, null, 1); + ItemGroup gem_drop = new ItemGroup(0.1F, 1, 1, false, default_context, amethyst, topaz, amber, opal, sapphire, ruby, emerald, diamond); + table.drop_list.add(new SingleItemDrop(Items.coal, null, 0.1F, default_context)); + table.drop_list.add(new SingleItemDrop(Items.gold_nugget, null, 0.025F, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.ironNugget, null, 0.1F, default_context)); + } + if (entity instanceof LOTREntityTauredain) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setTag("display", new NBTTagCompound()); + nbt.getCompoundTag("display").setString("Name", "§fChocolate chip cookie"); + table.drop_list.add(new SingleItemDrop(Items.cookie, nbt, 0.001F, default_context)); + } else if (entity instanceof LOTREntityRanger || entity instanceof LOTREntityGulfHaradrim || entity instanceof LOTREntityHarnedhrim || entity instanceof LOTREntityRohanMan) { + table.drop_list.add(new SingleItemDrop(Items.leather, null, 1.0F, 1, 3, false, false, default_context)); + } else if (entity instanceof LOTREntityNomad) { + table.drop_list.add(new SingleItemDrop(Item.getItemFromBlock(LOTRMod.driedReeds), null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.camelRaw, null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.camelCooked, null, 1.0F, 1, 3, false, false, default_context)); + } + if (entity instanceof LOTREntityNearHaradrimBase || entity instanceof LOTREntityMoredain || entity instanceof LOTREntityTauredain) { + table.drop_list.add(new SingleItemDrop(LOTRMod.bronze, null, 1.0F, 1, 3, false, false, default_context)); + } else if (entity instanceof LOTREntityAngmarHillman || entity instanceof LOTREntityBreeMan || entity instanceof LOTREntityDaleMan || entity instanceof LOTREntityDorwinionMan || entity instanceof LOTREntityDunedain || entity instanceof LOTREntityDunlending || entity instanceof LOTREntityEasterling || entity instanceof LOTREntityGondorMan || entity instanceof LOTREntityRohanMan) { + table.drop_list.add(new SingleItemDrop(Items.iron_ingot, null, 1.0F, 1, 3, false, false, default_context)); + } else if (entity instanceof LOTREntityHalfTroll) { + table.drop_list.add(new SingleItemDrop(LOTRMod.gemsbokHide, null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.gemsbokHorn, null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(Items.string, null, 1.0F, 2, 8, false, false, default_context)); + } else if (entity instanceof LOTREntityMordorOrc) { + table.drop_list.add(new SingleItemDrop(LOTRMod.nauriteGem, null, 1.0F, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.blackUrukSteel, null, 1.0F, 1, 3, false, false, default_context)); + } else if (entity instanceof LOTREntityDolGuldurOrc) { + table.drop_list.add(new SingleItemDrop(LOTRMod.mysteryWeb, null, 1.0F, default_context)); + } else if (entity instanceof LOTREntityGundabadOrc) { + table.drop_list.add(new SingleItemDrop(LOTRMod.urukSteel, null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.dwarfBone, null, 1.0F, default_context)); + } else if (entity instanceof LOTREntityUrukHai) { + table.drop_list.add(new SingleItemDrop(LOTRMod.urukSteel, null, 1.0F, 1, 3, false, false, default_context)); + } else if (entity instanceof LOTREntityDwarf && !(entity instanceof LOTREntityBlueDwarf) && !(entity instanceof RedDwarfWarrior) && !(entity instanceof RedDwarfBannerBearer) && !(entity instanceof RedDwarfArbalest)) { + table.drop_list.add(new SingleItemDrop(LOTRMod.dwarfSteel, null, 1.0F, 1, 3, false, false, default_context)); + } else if (entity instanceof LOTREntityBlueDwarf) { + table.drop_list.add(new SingleItemDrop(LOTRMod.blueDwarfSteel, null, 1.0F, 1, 3, false, false, default_context)); + } else if (entity instanceof RedDwarfWarrior || entity instanceof RedDwarfBannerBearer || entity instanceof RedDwarfArbalest) { + table.drop_list.add(new SingleItemDrop(CinderLoE.redDwarfSteel, null, 1.0F, 1, 3, false, false, default_context)); + } else if (entity instanceof LOTREntityTree) { + table.drop_list.add(new SingleItemDrop(Items.stick, null, 1.0F, 8, 32, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(Item.getItemFromBlock(LOTRMod.fangornPlant), null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(Item.getItemFromBlock(LOTRMod.fangornRiverweed), null, 1.0F, 1, 3, false, false, default_context)); + } else if (entity instanceof LOTREntityHobbit || entity instanceof LOTREntityGandalf) { + table.drop_list.add(new SingleItemDrop(LOTRMod.hobbitPipe, null, 1.0F, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.pipeweed, null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.hobbitPancake, null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.mugCider, null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.mushroomPie, null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(Items.mushroom_stew, null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(Items.apple, null, 1.0F, 1, 3, false, false, default_context)); + table.drop_list.add(new SingleItemDrop(Items.cake, null, 1.0F, 1, 3, false, false, default_context)); + } else if (entity instanceof LOTREntityUtumnoOrc) { + table.drop_list.add(new SingleItemDrop(LOTRMod.mithrilNugget, null, 1.0F, default_context)); + table.drop_list.add(new SingleItemDrop(LOTRMod.chilling, null, 0.0001F, default_context)); + } + ((ILootableEntity)entity).set_drop_table(table); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/util/Utilities.java b/src (1)/main/java/com/zivilon/cinder_loe/util/Utilities.java new file mode 100644 index 0000000..5f9c676 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/util/Utilities.java @@ -0,0 +1,331 @@ +package com.zivilon.cinder_loe.util; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.client.render.item.RenderHelper; +import com.zivilon.cinder_loe.mixins.MixinEntity; + +import java.io.BufferedWriter; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.reflect.*; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Vector; +import java.util.UUID; + +import lotr.common.LOTRCreativeTabs; +import lotr.common.world.biome.LOTRBiome; +import lotr.common.item.LOTRItemArmor; +import lotr.common.item.LOTRMaterial; +import lotr.common.enchant.LOTREnchantment; +import lotr.common.enchant.LOTREnchantmentHelper; + +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; + + +public class Utilities { + + public static int[] LOTRIntCache = null; + public static LOTRBiome reflected_river; + public static LOTRBiome reflected_taiga; + public static LOTRCreativeTabs reflected_tab_block; + public static List badEnchants = new ArrayList<>(); + public static Map upgradedEnchants = new HashMap<>(); + + static { + badEnchants.add("weak1"); + badEnchants.add("weak2"); + badEnchants.add("weak3"); + badEnchants.add("weak4"); + badEnchants.add("meleeSlow1"); + badEnchants.add("meleeUnreach1"); + badEnchants.add("toolSlow1"); + badEnchants.add("protectWeak1"); + badEnchants.add("protectWeak2"); + badEnchants.add("rangedWeak1"); + badEnchants.add("rangedWeak2"); + badEnchants.add("rangedWeak3"); + badEnchants.add("protectRangedWeak1"); + badEnchants.add("protectRangedWeak2"); + upgradedEnchants.put("strong1", LOTREnchantment.strong1); + upgradedEnchants.put("strong2", LOTREnchantment.strong3); + upgradedEnchants.put("strong3", LOTREnchantment.strong4); + upgradedEnchants.put("durable1", LOTREnchantment.durable2); + upgradedEnchants.put("durable2", LOTREnchantment.durable3); + upgradedEnchants.put("knockback1", LOTREnchantment.knockback2); + upgradedEnchants.put("toolSpeed1", LOTREnchantment.toolSpeed2); + upgradedEnchants.put("toolSpeed2", LOTREnchantment.toolSpeed3); + upgradedEnchants.put("toolSpeed3", LOTREnchantment.toolSpeed4); + upgradedEnchants.put("looting1", LOTREnchantment.looting2); + upgradedEnchants.put("looting2", LOTREnchantment.looting3); + upgradedEnchants.put("protect1", LOTREnchantment.protect2); + upgradedEnchants.put("protectFire1", LOTREnchantment.protectFire2); + upgradedEnchants.put("protectFire2", LOTREnchantment.protectFire3); + upgradedEnchants.put("protectFall1", LOTREnchantment.protectFall2); + upgradedEnchants.put("protectFall2", LOTREnchantment.protectFall3); + upgradedEnchants.put("protectRanged1", LOTREnchantment.protectRanged2); + upgradedEnchants.put("protectRanged2", LOTREnchantment.protectRanged3); + upgradedEnchants.put("rangedStrong1", LOTREnchantment.rangedStrong2); + upgradedEnchants.put("rangedStrong2", LOTREnchantment.rangedStrong3); + upgradedEnchants.put("rangedKnockback1", LOTREnchantment.rangedKnockback2); + } + + public static void initialize_reflects() { + try { + Field river_field = LOTRBiome.class.getField("river"); + reflected_river = (LOTRBiome)river_field.get(null); + Field taiga_field = LOTRBiome.class.getField("taiga"); + reflected_taiga = (LOTRBiome)taiga_field.get(null); + + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + public static void pre_init_reflects() { + try { + Field tabBlockField = LOTRCreativeTabs.class.getField("tabBlock"); + reflected_tab_block = (LOTRCreativeTabs)tabBlockField.get(null); + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + public static EntityPlayerMP getPlayerByUUID(UUID playerUUID) { + MinecraftServer server = MinecraftServer.getServer(); // Get the server instance + if (server == null) { + return null; // Server instance is not available + } + + // Iterate through the list of online players and match UUID + for (Object obj : server.getConfigurationManager().playerEntityList) { + if (obj instanceof EntityPlayerMP) { + EntityPlayerMP player = (EntityPlayerMP) obj; + if (player.getUniqueID().equals(playerUUID)) { + return player; + } + } else { + System.err.println("[CinderCore] Player list having non-players, WHAT?!?!?!"); + } + } + return null; // Player not found or not online + } + + public static String toSnakeCase(String input) { + if (input == null || input.isEmpty()) { + return input; + } + + StringBuilder builder = new StringBuilder(); + char[] chars = input.toCharArray(); + + builder.append(Character.toLowerCase(chars[0])); + for (int i = 1; i < chars.length; i++) { + char c = chars[i]; + if (Character.isUpperCase(c)) { + builder.append('_').append(Character.toLowerCase(c)); + } else { + builder.append(c); + } + } + + return builder.toString(); + } + + public static void writeLog(String message) { + try (BufferedWriter writer = new BufferedWriter(new FileWriter("custom_log.txt", true))) { + LocalDateTime now = LocalDateTime.now(); + String timestamp = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + writer.write(timestamp + " - " + message + "\n"); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static EntityPlayer getPlayerByName(String player_name) { + MinecraftServer server = MinecraftServer.getServer(); + if (server == null) { + return null; + } + + for (Object obj : server.getConfigurationManager().playerEntityList) { + if (obj instanceof EntityPlayerMP) { + EntityPlayer player = (EntityPlayer)obj; + String found_name = player.getCommandSenderName(); + if (found_name.equals(player_name)) { + return player; + } + } + } + return null; // Player not found or not online + } + + public static boolean hasFireWeapon(String player_name) { + EntityPlayer player = getPlayerByName(player_name); + + if (player == null) { + System.out.println("[CinderLoE] Warning! Player not found: " + player_name); + return false; + } + + ItemStack held_item = player.getHeldItem(); + boolean has_fire = LOTREnchantmentHelper.hasEnchant(held_item, LOTREnchantment.fire); + return has_fire; + } + + public static boolean has_fire_weapon(Entity entity) { + if (!(entity instanceof EntityLivingBase)) return false; + ItemStack held_item = ((EntityLivingBase)entity).getHeldItem(); + return LOTREnchantmentHelper.hasEnchant(held_item, LOTREnchantment.fire); + } + + public static double calculate_melee_damage_on_entity(EntityLivingBase target, EntityLivingBase attacker) { + if (attacker == null) return 0.0D; + if (attacker.getEntityAttribute(SharedMonsterAttributes.attackDamage) == null) return 0.0D; + + double attribute = attacker.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); + double enchantments = EnchantmentHelper.getEnchantmentModifierLiving(attacker, target); + boolean is_critical = !attacker.onGround && attacker.motionY < 0.0D && !attacker.isInWater() && !attacker.isRiding(); + double critical = 0.0D; + if (is_critical) { + PotionEffect strength_effect = attacker.getActivePotionEffect(Potion.damageBoost); + if (strength_effect == null) { + critical = Math.min((attribute + enchantments) * 1.5D, 7.0D); + } else { + int level = strength_effect.getAmplifier() + 1; + critical = Math.min((attribute + enchantments) * 1.5D, 7.0D * (1.0D + 0.5D * level)); + } + } + return attribute + enchantments + critical; + } + + public static boolean isArrayEmpty(int[] array) { + for (int value : array) { + if (value != 0) return false; + } + return true; + } + + public static void setInvulnerable(Entity entity, boolean invulnerable) { + ((MixinEntity)entity).setInvulnerable(invulnerable); + } + + public static void setLOTREnchant(ItemStack itemstack, LOTREnchantment ench) { + NBTTagList tags = getItemEnchantTags(itemstack, true); + if (tags != null) { + String enchName = ench.enchantName; + tags.appendTag((NBTBase)new NBTTagString(enchName)); + } + } + + public static NBTTagList getItemEnchantTags(ItemStack itemstack, boolean create) { + NBTTagCompound itemData = itemstack.getTagCompound(); + NBTTagList tags = null; + if (itemData != null && itemData.hasKey("LOTREnch")) { + tags = itemData.getTagList("LOTREnch", 8); + } else if (create) { + if (itemData == null) { + itemData = new NBTTagCompound(); + itemstack.setTagCompound(itemData); + } + tags = new NBTTagList(); + itemData.setTag("LOTREnch", (NBTBase)tags); + } + return tags; + } + + public static void setAppliedRandomEnchants(ItemStack itemstack) { + if (!itemstack.hasTagCompound()) + itemstack.setTagCompound(new NBTTagCompound()); + itemstack.getTagCompound().setBoolean("LOTRRandomEnch", true); + } + + public static void knockback(EntityLivingBase target, EntityLivingBase attacker, double knockback_strength) { + // Calculate direction of knockback + double dx = attacker.posX - target.posX; + double dz = attacker.posZ - target.posZ; + + // Normalize the direction vector + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance != 0) { + dx /= distance; + dz /= distance; + } + + // Apply knockback manually + target.motionX -= dx * knockback_strength; + target.motionZ -= dz * knockback_strength; + + // Ensure the motion is applied + target.velocityChanged = true; + } + + public static boolean isBadEnch(LOTREnchantment ench) { + if (ench == null) return false; + String ench_name = ench.enchantName; + if (badEnchants.contains(ench_name)) { + return true; + } + return false; + } + public static LOTREnchantment upgradeEnch(ItemStack item, LOTREnchantment ench) { + if (ench == null) return ench; + if (ench != LOTREnchantment.protect1) { + LOTREnchantment return_ench = upgradedEnchants.get(ench.enchantName); + if (return_ench == null) return_ench = ench; + return return_ench; + } + int armor_piece = ((ItemArmor)item.getItem()).armorType; + int prot = ((ItemArmor)item.getItem()).damageReduceAmount; + LOTREnchantment return_value = ench; + switch(armor_piece) { + case 0: + if (prot < 2) return_value = upgradedEnchants.get(ench.enchantName); + break; + case 1: + if (prot < 7) return_value = upgradedEnchants.get(ench.enchantName); + break; + case 2: + if (prot < 5) return_value = upgradedEnchants.get(ench.enchantName); + break; + case 3: + if (prot < 2) return_value = upgradedEnchants.get(ench.enchantName); + break; + default: + break; + } + return return_value; + } + public static boolean array_contains_array(T[] superarray, T[] subarray) { + for (T subobj : subarray) { + if (subobj == null || Arrays.stream(superarray).anyMatch(subobj::equals)) continue; + return false; + } + return true; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/util/VT_additions.java b/src (1)/main/java/com/zivilon/cinder_loe/util/VT_additions.java new file mode 100644 index 0000000..cc34e81 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/util/VT_additions.java @@ -0,0 +1,9 @@ +package com.zivilon.cinder_loe.util; + +public class VT_additions { + public static String applyCustomPlaceholders(String scriptLine) { +/* scriptLine = scriptLine.replace("", String.valueOf(Nex.get_nex_phase())); + scriptLine = scriptLine.replace("", String.valueOf(Nex.get_nex_health()));*/ + return scriptLine; + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/world/event/Warband.java b/src (1)/main/java/com/zivilon/cinder_loe/world/event/Warband.java new file mode 100644 index 0000000..b51e6c2 --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/world/event/Warband.java @@ -0,0 +1,183 @@ +package com.zivilon.cinder_loe.world.event; + +import com.zivilon.cinder_loe.droptables.DropTable; +import com.zivilon.cinder_loe.droptables.DropContext; +import com.zivilon.cinder_loe.droptables.DropTable.SingleItemDrop; +import com.zivilon.cinder_loe.entity.*; +import com.zivilon.cinder_loe.util.*; +import com.zivilon.cinder_loe.world.event.WarbandFaction.Troop; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; + +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.*; +import net.minecraft.world.World; + +import lotr.common.LOTRDimension; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.LOTRSpeech; +import lotr.common.entity.npc.LOTREntityNPC; +import lotr.common.world.biome.LOTRBiome; +import lotr.common.world.map.LOTRWaypoint; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.UUID; + +public class Warband { + public static Random random = new Random(); + public static World world = MinecraftServer.getServer().worldServerForDimension(LOTRDimension.MIDDLE_EARTH.dimensionID); + public static long last_warband_timestamp = System.currentTimeMillis() / 1000L - (60*60*4); + + public int x = 0; + public int z = 0; + public String direction = "null"; + public String waypoint_name = "null"; + public WarbandFaction faction = null; + public UUID warband_uuid = null; + + public Warband() { + return; + } + + public static LOTRWaypoint get_random_waypoint() { + LOTRWaypoint[] waypoints = LOTRWaypoint.values(); + return waypoints[random.nextInt(waypoints.length)]; + } + + public static void initialize_warband() { + if (MinecraftServer.getServer().getConfigurationManager().playerEntityList.size() < 1) + return; + + Warband warband = new Warband(); + + LOTRWaypoint waypoint = get_random_waypoint(); + warband.waypoint_name = "lotr.waypoint." + waypoint.getCodeName(); + + warband.x = waypoint.getXCoord(); + warband.z = waypoint.getZCoord(); + + switch (random.nextInt(8)) { + case 0: warband.direction = "North"; warband.z += random.nextInt(701) - 1000; break; + case 1: warband.direction = "South"; warband.z += random.nextInt(701) + 300; break; + case 2: warband.direction = "East"; warband.x += random.nextInt(701) + 300; break; + case 3: warband.direction = "West"; warband.x += random.nextInt(701) - 1000; break; + case 4: warband.direction = "North-East"; warband.z += random.nextInt(701) - 1000; warband.x += random.nextInt(701) + 300; break; + case 5: warband.direction = "North-West"; warband.z += random.nextInt(701) - 1000; warband.x += random.nextInt(701) - 1000; break; + case 6: warband.direction = "South-East"; warband.z += random.nextInt(701) + 300; warband.x += random.nextInt(701) + 300; break; + case 7: warband.direction = "South-West"; warband.z += random.nextInt(701) + 300; warband.x += random.nextInt(701) - 1000; break; + default: warband.direction = "none"; break; + } + System.out.println("Loading warband chunks at " + warband.x + "," + warband.z); + load_chunks_at(warband.x, warband.z); + warband.faction = get_warband_faction_by_biome(warband); + spawn_warband(warband); + } + + public static void load_chunks_at(int block_x, int block_z) { + int chunk_x = block_x >> 4; + int chunk_z = block_z >> 4; + + for (int x = chunk_x - 1; x <= chunk_x + 1; x++) { + for (int z = chunk_z - 1; z <= chunk_z + 1; z++) { + world.getChunkProvider().loadChunk(x, z); + } + } + } + + public static WarbandFaction get_warband_faction_by_biome(Warband warband) { + LOTRBiome biome = (LOTRBiome)world.getBiomeGenForCoords(warband.x, warband.z); + List valid_factions = new ArrayList<>(); + for (WarbandFaction faction : WarbandFaction.values()) { + if (faction.valid_biomes.contains(biome)) + valid_factions.add(faction); + } + if (valid_factions.size() < 1) + return WarbandFaction.RENEGADE; + return valid_factions.get(random.nextInt(valid_factions.size())); + } + + public static void spawn_warband(Warband warband) { + if (warband.faction == null) return; + int x = warband.x; + int z = warband.z; + int y = world.getTopSolidOrLiquidBlock(x, z) + 2; + spawn_boss_entity(warband, x, y, z); + System.out.println("Warband at " + x + "," + y + "," + z); + new Thread(() -> { + for (Troop troop : warband.faction.troops) { + int DEBUG_spawn_count = 0; + for (int i = 0; i < troop.amount; i++) { + DEBUG_spawn_count++; + spawn_entity_by_class(troop.entity_class, world, x, y, z, warband); + } + System.out.println("Summoned " + DEBUG_spawn_count + " of " + troop.entity_class.getName()); + } + }).start(); + broadcast_warband(world, warband.faction.warband_name, warband.direction, warband.waypoint_name); + last_warband_timestamp = System.currentTimeMillis() / 1000L; + } + public static void spawn_boss_entity(Warband warband, int x, int y, int z) { + Entity boss_entity = WarbandFaction.get_boss_entity(warband.faction, world); + warband.warband_uuid = boss_entity.getUniqueID(); + boss_entity.setLocationAndAngles(x, y, z, world.rand.nextFloat() * 360F, 0F); + ((IEntityLivingBase)boss_entity).set_despawn_timer(12000); + ((IEntityLivingBase)boss_entity).set_warband_uuid(warband.warband_uuid); + if (boss_entity instanceof EntityLiving) { + ((EntityLiving)boss_entity).setHealth(((EntityLiving)boss_entity).getMaxHealth()); + ((EntityLiving)boss_entity).func_110163_bv(); + } + if (boss_entity instanceof LOTREntityNPC) { + ((LOTREntityNPC)boss_entity).isNPCPersistent = true; + DropTable table = new DropTable(); + table.drop_list.add(new SingleItemDrop(LOTRMod.chilling, null, 1.0F, new DropContext[] {DropContext.KILLED})); + ((ILootableEntity)(LOTREntityNPC)boss_entity).set_drop_table(table); + } + world.spawnEntityInWorld(boss_entity); + } + public static Entity spawn_entity_by_class(Class entity_class, World world, double x, double y, double z, Warband warband) { + try { + Entity entity = entity_class.getConstructor(World.class).newInstance(world); + entity.setLocationAndAngles(x, y, z, world.rand.nextFloat() * 360F, 0F); + + if (entity instanceof EntityLiving) { + EntityLiving living = (EntityLiving) entity; + + // This triggers onSpawnWithEgg, applying armor/weapon logic + living.onSpawnWithEgg((IEntityLivingData) null); + + living.func_110163_bv(); // mark as persistent + living.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(50.0D); + } + + if (entity instanceof Renegade) + WarbandFaction.equip_renegade((Renegade)entity); + if (entity instanceof LOTREntityNPC) + ((LOTREntityNPC)entity).isNPCPersistent = true; + + ((IEntityLivingBase)entity).set_despawn_timer(12000); + ((IEntityLivingBase)entity).set_warband_uuid(warband.warband_uuid); + world.spawnEntityInWorld(entity); + return entity; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static void broadcast_warband(World world, String faction_key, String direction, String waypoint_key) { + IChatComponent message = new ChatComponentTranslation( + "warband.found", + new ChatComponentTranslation(faction_key).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD)), + new ChatComponentText(direction).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW)), + new ChatComponentTranslation(waypoint_key).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.AQUA)) + ); + + LOTRSpeech.messageAllPlayersInWorld(world, message); + } +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/world/event/WarbandFaction.java b/src (1)/main/java/com/zivilon/cinder_loe/world/event/WarbandFaction.java new file mode 100644 index 0000000..ab410fd --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/world/event/WarbandFaction.java @@ -0,0 +1,898 @@ +package com.zivilon.cinder_loe.world.event; + +import com.zivilon.cinder_loe.CinderLoE; +import com.zivilon.cinder_loe.entity.*; +import com.zivilon.cinder_loe.entity.npc.*; +import com.zivilon.cinder_loe.entity.npc.dwarf.*; +import com.zivilon.cinder_loe.entity.npc.evil_human.*; +import com.zivilon.cinder_loe.entity.npc.good_human.*; +import com.zivilon.cinder_loe.entity.npc.orc.*; +import com.zivilon.cinder_loe.util.Utilities; + +import net.minecraft.entity.*; +import net.minecraft.item.*; +import net.minecraft.init.Items; +import net.minecraft.world.World; + +import lotr.common.world.biome.LOTRBiome; +import lotr.common.fac.LOTRFaction; +import lotr.common.LOTRMod; +import lotr.common.entity.npc.*; +import lotr.common.enchant.*; + +import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; + +public enum WarbandFaction { + MORDOR(LOTRFaction.MORDOR, "lotr.faction.MORDOR.name", Arrays.asList(LOTRBiome.gondor, LOTRBiome.emynMuil, LOTRBiome.dorwinion, LOTRBiome.rohan, LOTRBiome.imlothMelui, LOTRBiome.pinnathGelin, LOTRBiome.whiteMountains, LOTRBiome.whiteMountainsFoothills, LOTRBiome.lossarnach, LOTRBiome.lamedon, LOTRBiome.lamedonHills, LOTRBiome.brownLands, LOTRBiome.gondorWoodlands, LOTRBiome.anduinMouth)), + BLACK_URUK(LOTRFaction.MORDOR, "lotr.invasion.MORDOR_blackUruk", Arrays.asList(LOTRBiome.dorwinion, LOTRBiome.dagorlad, LOTRBiome.pelennor, LOTRBiome.blackrootVale)), + MORGUL_VALE(LOTRFaction.MORDOR, "warband.fac.MORGUL_VALE", Arrays.asList(LOTRBiome.ithilien, LOTRBiome.ithilienHills, LOTRBiome.ithilienWasteland)), + GONDOR(LOTRFaction.GONDOR, "lotr.faction.GONDOR.name", Arrays.asList(LOTRBiome.dagorlad, LOTRBiome.udun, LOTRBiome.ithilien, LOTRBiome.mordor, LOTRBiome.gorgoroth, LOTRBiome.nurn, LOTRBiome.nurnen, LOTRBiome.mordorMountains, LOTRBiome.nurnMarshes, LOTRBiome.anduinMouth)), + PELARGIR(LOTRFaction.GONDOR, "lotr.invasion.GONDOR_pelargir", Arrays.asList(LOTRBiome.nearHarad, LOTRBiome.harondor, LOTRBiome.umbar, LOTRBiome.umbarForest, LOTRBiome.umbarHills)), + DOL_AMROTH(LOTRFaction.GONDOR, "lotr.invasion.GONDOR_dolAmroth", Arrays.asList(LOTRBiome.tolfalas, LOTRBiome.island)), + ROHAN(LOTRFaction.ROHAN, "lotr.faction.ROHAN.name", Arrays.asList(LOTRBiome.rohanUrukHighlands, LOTRBiome.nanCurunir, LOTRBiome.dunland, LOTRBiome.adornland)), + RIVENDELL(LOTRFaction.HIGH_ELF, "lotr.invasion.HIGH_ELF_rivendell", Arrays.asList(LOTRBiome.trollshaws, LOTRBiome.loneLands, LOTRBiome.loneLandsHills, LOTRBiome.eregion, LOTRBiome.angmar, LOTRBiome.angmarMountains)), + LINDON(LOTRFaction.HIGH_ELF, "lotr.invasion.HIGH_ELF_lindon", Arrays.asList(LOTRBiome.towerHills, LOTRBiome.island)), + BREE(LOTRFaction.BREE, "lotr.faction.BREE.name", Arrays.asList(LOTRBiome.chetwood, LOTRBiome.oldForest, LOTRBiome.midgewater, LOTRBiome.barrowDowns)), + ARNOR(LOTRFaction.RANGER_NORTH, "lotr.faction.RANGER_NORTH.name", Arrays.asList(LOTRBiome.angmar, LOTRBiome.eriador, LOTRBiome.eriadorDowns, LOTRBiome.erynVorn, LOTRBiome.minhiriath, LOTRBiome.enedwaith, LOTRBiome.angle, LOTRBiome.mistyMountainsFoothills, LOTRBiome.loneLands, LOTRBiome.loneLandsHills, LOTRBiome.swanfleet)), + GUNDABAD(LOTRFaction.GUNDABAD, "lotr.faction.GUNDABAD.name", Arrays.asList(LOTRBiome.swanfleet, LOTRBiome.eregion, LOTRBiome.gladdenFields, LOTRBiome.mistyMountains)), + ANGMAR(LOTRFaction.ANGMAR, "lotr.faction.ANGMAR.name", Arrays.asList(LOTRBiome.rivendell, LOTRBiome.ettenmoors, LOTRBiome.coldfells, LOTRBiome.angle)), + RHUDAUR(LOTRFaction.ANGMAR, "lotr.title.ANGMAR_rhudaur", Arrays.asList(LOTRBiome.ettenmoors, LOTRBiome.coldfells, LOTRBiome.angle)), + WOOD_ELF(LOTRFaction.WOOD_ELF, "lotr.faction.WOOD_ELF.name", Arrays.asList(LOTRBiome.dolGuldur, LOTRBiome.mirkwoodMountains)), + WOOD_ELF_SCOUT(LOTRFaction.WOOD_ELF, "warband.fac.WOOD_ELF_SCOUT", Arrays.asList(LOTRBiome.mirkwoodCorrupted, LOTRBiome.mirkwoodNorth)), + DOL_GULDUR(LOTRFaction.DOL_GULDUR, "lotr.faction.DOL_GULDUR.name", Arrays.asList(LOTRBiome.lothlorien, LOTRBiome.lothlorienEdge, LOTRBiome.woodlandRealm, LOTRBiome.eastBight, LOTRBiome.anduinVale, LOTRBiome.anduinHills, LOTRBiome.celebrant, LOTRBiome.dale, LOTRBiome.ironHills, LOTRBiome.erebor)), + DALE(LOTRFaction.DALE, "lotr.faction.DALE.name", Arrays.asList(LOTRBiome.wilderland)), + DURINS_FOLK(LOTRFaction.DURINS_FOLK, "lotr.faction.DURINS_FOLK.name", Arrays.asList(LOTRBiome.mistyMountains, LOTRBiome.mistyMountainsFoothills, LOTRBiome.tundra, Utilities.reflected_taiga, LOTRBiome.greyMountains, LOTRBiome.greyMountainsFoothills)), + BLUE_MOUNTAINS(LOTRFaction.BLUE_MOUNTAINS, "lotr.faction.BLUE_MOUNTAINS.name", Arrays.asList(LOTRBiome.mistyMountains, LOTRBiome.mistyMountainsFoothills)), + RED_MOUNTAINS(LOTRFaction.DURINS_FOLK, "warband.fac.RED_MOUNTAINS", Arrays.asList(LOTRBiome.rhunForest, LOTRBiome.windMountains, LOTRBiome.windMountainsFoothills)), + DUNLAND(LOTRFaction.DUNLAND, "lotr.faction.DUNLAND.name", Arrays.asList(LOTRBiome.rohan, LOTRBiome.wold, LOTRBiome.pukel, LOTRBiome.enedwaith)), + ISENGARD(LOTRFaction.ISENGARD, "lotr.faction.ISENGARD.name", Arrays.asList(LOTRBiome.rohan, LOTRBiome.wold, LOTRBiome.rohanWoodlands)), + ISENGARD_SNAGA(LOTRFaction.ISENGARD, "lotr.faction.ISENGARD.name", Arrays.asList(LOTRBiome.fangornWasteland)), + FANGORN(LOTRFaction.FANGORN, "lotr.faction.FANGORN.name", Arrays.asList(LOTRBiome.fangornWasteland)), + DORWINION(LOTRFaction.DORWINION, "lotr.faction.DORWINION.name", Arrays.asList(LOTRBiome.rhunLandSteppe, LOTRBiome.rhunLand, LOTRBiome.rhunLandHills, LOTRBiome.rhunRedForest, LOTRBiome.rhunIsland, LOTRBiome.rhunIslandForest)), + RHUDEL(LOTRFaction.RHUDEL, "lotr.faction.RHUDEL.name", Arrays.asList(LOTRBiome.dorwinion, LOTRBiome.dorwinionHills, LOTRBiome.rhun, LOTRBiome.rhunForest, LOTRBiome.rhunRedForest, LOTRBiome.rhunIsland, LOTRBiome.rhunIslandForest)), + RHUDEL_GOLDEN(LOTRFaction.RHUDEL, "warband.fac.RHUDEL_GOLDEN", Arrays.asList(LOTRBiome.dorwinion)), + UMBAR(LOTRFaction.NEAR_HARAD, "lotr.invasion.NEAR_HARAD_umbar", Arrays.asList(LOTRBiome.pelargir, LOTRBiome.tolfalas, LOTRBiome.andrast, LOTRBiome.lebennin, LOTRBiome.dorEnErnil, LOTRBiome.dorEnErnilHills)), + HARNENNOR(LOTRFaction.NEAR_HARAD, "lotr.invasion.NEAR_HARAD_harnedor", Arrays.asList(LOTRBiome.harnedor, LOTRBiome.lostladen)), + GULFEN(LOTRFaction.NEAR_HARAD, "lotr.invasion.NEAR_HARAD_gulf", Arrays.asList(LOTRBiome.farHaradArid)), + MORWAITH(LOTRFaction.MORWAITH, "lotr.faction.MORWAITH.name", Arrays.asList(LOTRBiome.farHaradJungle, LOTRBiome.farHaradJungleEdge, LOTRBiome.farHaradJungleMountains, LOTRBiome.farHaradSwamp)), + LIMWAITH(LOTRFaction.MORWAITH, "warband.fac.LIMWAITH", Arrays.asList(LOTRBiome.farHaradKanuka, LOTRBiome.farHarad, LOTRBiome.farHaradForest)), + TAURETHRIM(LOTRFaction.TAURETHRIM, "lotr.faction.TAURETHRIM.name", Arrays.asList(LOTRBiome.farHarad, LOTRBiome.farHaradForest, LOTRBiome.halfTrollForest, LOTRBiome.pertorogwaith, LOTRBiome.farHaradVolcano, LOTRBiome.farHaradArid, LOTRBiome.farHaradAridHills, LOTRBiome.farHaradBushland, LOTRBiome.farHaradBushlandHills, LOTRBiome.farHaradSwamp, LOTRBiome.farHaradCloudForest)), + HALF_TROLL(LOTRFaction.HALF_TROLL, "lotr.faction.HALF_TROLL.name", Arrays.asList(LOTRBiome.halfTrollForest, LOTRBiome.farHaradMangrove)), + UTUMNO(LOTRFaction.UTUMNO, "lotr.faction.UTUMNO.name", Arrays.asList(LOTRBiome.forodwaith, LOTRBiome.forodwaithMountains)), + RENEGADE(LOTRFaction.UTUMNO, "warband.fac.RENEGADE", Arrays.asList(Utilities.reflected_river)); + + public LOTRFaction faction; + public List valid_biomes; + public List troops; + public String warband_name; + + WarbandFaction(LOTRFaction lotrfaction, String name, List biomes) { + this.faction = lotrfaction; + this.warband_name = name; + valid_biomes = biomes; + troops = new ArrayList(); + } + + /** + * Intialize troops to enums + */ + static { + MORDOR.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityOlogHai.class, 5), new Troop(LOTREntityMordorOrc.class, 80), new Troop(LOTREntityMordorWarg.class, 30), new Troop(LOTREntityMordorOrcArcher.class, 25))); + BLACK_URUK.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityBlackUruk.class, 50), new Troop(LOTREntityBlackUrukArcher.class, 30), new Troop(LOTREntityBlackUrukBannerBearer.class, 10))); + MORGUL_VALE.troops = new ArrayList<>(Arrays.asList(new Troop(MorgulOrc.class, 60), new Troop(LOTREntityMinasMorgulBannerBearer.class, 10), new Troop(LOTREntityMordorOrcArcher.class, 30))); + GONDOR.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityGondorSoldier.class, 60), new Troop(LOTREntityGondorTowerGuard.class, 15), new Troop(LOTREntityGondorBannerBearer.class, 10), new Troop(LOTREntityGondorArcher.class, 30))); + PELARGIR.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityPelargirMarine.class, 80), new Troop(LOTREntityPelargirBannerBearer.class, 15))); + DOL_AMROTH.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityDolAmrothSoldier.class, 50), new Troop(LOTREntityDolAmrothArcher.class, 30), new Troop(LOTREntityDolAmrothBannerBearer.class, 10), new Troop(LOTREntitySwanKnight.class, 10))); + ROHAN.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityRohirrimWarrior.class, 60), new Troop(LOTREntityRohirrimArcher.class, 30))); + RIVENDELL.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityRivendellWarrior.class, 60), new Troop(LOTREntityRivendellBannerBearer.class, 15))); + LINDON.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityHighElfWarrior.class, 70), new Troop(LOTREntityHighElfBannerBearer.class, 20))); + BREE.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityBreeGuard.class, 60), new Troop(BreeCrossbowman.class, 30), new Troop(BreeOutrider.class, 10), new Troop(LOTREntityBreeBannerBearer.class, 10))); + ARNOR.troops = new ArrayList<>(Arrays.asList(new Troop(ArnorSoldier.class, 50), new Troop(BattleNun.class, 10), new Troop(ArnorSoldierArcher.class, 30), new Troop(ArnorBannerBearer.class, 15))); + GUNDABAD.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityGundabadOrc.class, 60), new Troop(LOTREntityGundabadWarg.class, 30), new Troop(LOTREntityGundabadUruk.class, 20), new Troop(LOTREntityGundabadOrcArcher.class, 30))); + ANGMAR.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityAngmarOrc.class, 60), new Troop(LOTREntityAngmarWarg.class, 30), new Troop(LOTREntityTroll.class, 8), new Troop(LOTREntityMountainTroll.class, 8), new Troop(LOTREntityAngmarBannerBearer.class, 10))); + RHUDAUR.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityAngmarHillmanWarrior.class, 80), new Troop(LOTREntityAngmarHillmanAxeThrower.class, 40))); + WOOD_ELF.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityWoodElfWarrior.class, 60), new Troop(LOTREntityWoodElfBannerBearer.class, 15))); + WOOD_ELF_SCOUT.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityWoodElfScout.class, 90))); + DOL_GULDUR.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityDolGuldurOrc.class, 40), new Troop(LOTREntityDolGuldurOrcArcher.class, 15), new Troop(LOTREntityMirkTroll.class, 5), new Troop(LOTREntityMirkwoodSpider.class, 40))); + DALE.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityDaleSoldier.class, 30), new Troop(LOTREntityDaleArcher.class, 50), new Troop(LOTREntityDaleLevyman.class, 30), new Troop(LOTREntityDaleBannerBearer.class, 10))); + DURINS_FOLK.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityDwarfWarrior.class, 40), new Troop(LOTREntityDwarfAxeThrower.class, 30), new Troop(LOTREntityDwarfBannerBearer.class, 10))); + BLUE_MOUNTAINS.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityBlueDwarfWarrior.class, 40), new Troop(LOTREntityBlueDwarfAxeThrower.class, 30), new Troop(LOTREntityBlueDwarfBannerBearer.class, 10))); + RED_MOUNTAINS.troops = new ArrayList<>(Arrays.asList(new Troop(RedDwarfWarrior.class, 40), new Troop(RedDwarfArbalest.class, 30), new Troop(RedDwarfBannerBearer.class, 10))); + DUNLAND.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityDunlendingWarrior.class, 60), new Troop(LOTREntityDunlendingAxeThrower.class, 30), new Troop(LOTREntityDunlendingBerserker.class, 20))); + ISENGARD.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityUrukHai.class, 50), new Troop(LOTREntityUrukHaiCrossbower.class, 20), new Troop(LOTREntityUrukHaiBerserker.class, 20))); + ISENGARD_SNAGA.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityIsengardSnaga.class, 60), new Troop(LOTREntityIsengardSnagaArcher.class, 40), new Troop(LOTREntityUrukWarg.class, 30))); + FANGORN.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityEnt.class, 30), new Troop(LOTREntityHuorn.class, 40))); + DORWINION.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityDorwinionGuard.class, 40), new Troop(LOTREntityDorwinionCrossbower.class, 30), new Troop(LOTREntityDorwinionElfWarrior.class, 10), new Troop(LOTREntityDorwinionElfArcher.class, 10), new Troop(LOTREntityDorwinionBannerBearer.class, 10))); + RHUDEL.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityEasterlingWarrior.class, 60), new Troop(LOTREntityEasterlingArcher.class, 30), new Troop(LOTREntityEasterlingBannerBearer.class, 15))); + RHUDEL_GOLDEN.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityEasterlingGoldWarrior.class, 100))); + UMBAR.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityUmbarWarrior.class, 40), new Troop(LOTREntityCorsair.class, 30), new Troop(LOTREntityUmbarArcher.class, 30), new Troop(LOTREntityUmbarBannerBearer.class, 15))); + HARNENNOR.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityHarnedorWarrior.class, 60), new Troop(LOTREntityHarnedorArcher.class, 30), new Troop(LOTREntityHarnedorBannerBearer.class, 15))); + GULFEN.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityGulfHaradWarrior.class, 60), new Troop(LOTREntityGulfHaradArcher.class, 30), new Troop(LOTREntityGulfHaradBannerBearer.class, 15))); + MORWAITH.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityMoredainWarrior.class, 90), new Troop(LOTREntityMoredainBannerBearer.class, 15))); + LIMWAITH.troops = new ArrayList<>(Arrays.asList(new Troop(LimwaithWarrior.class, 50), new Troop(LimwaithBoneWarrior.class, 20), new Troop(LimwaithBlowgunner.class, 30), new Troop(LimwaithBannerBearer.class, 15))); + TAURETHRIM.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityTauredainWarrior.class, 60), new Troop(LOTREntityTauredainBlowgunner.class, 30), new Troop(TauredainTrueBlood.class, 15))); + HALF_TROLL.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityHalfTrollWarrior.class, 80), new Troop(LOTREntityHalfTrollBannerBearer.class, 20))); + UTUMNO.troops = new ArrayList<>(Arrays.asList(new Troop(LOTREntityUtumnoOrc.class, 60), new Troop(LOTREntityUtumnoOrcArcher.class, 40), new Troop(LOTREntityUtumnoSnowTroll.class, 15), new Troop(LOTREntityUtumnoFireWarg.class, 10), new Troop(LOTREntityUtumnoIceWarg.class, 10), new Troop(LOTREntityUtumnoObsidianWarg.class, 10), new Troop(LOTREntityUtumnoTroll.class, 10))); + RENEGADE.troops = new ArrayList<>(Arrays.asList(new Troop(Renegade.class, 120))); + } + + public static Entity get_boss_entity(WarbandFaction faction, World world) { + switch (faction) { + case MORDOR: + return get_mordor_boss(world); + case BLACK_URUK: + return get_black_uruk_boss(world); + case MORGUL_VALE: + return get_morgul_vale_boss(world); + case GONDOR: + return get_gondor_boss(world); + case PELARGIR: + return get_pelargir_boss(world); + case DOL_AMROTH: + return get_dol_amroth_boss(world); + case ROHAN: + return get_rohan_boss(world); + case RIVENDELL: + return get_rivendell_boss(world); + case LINDON: + return get_lindon_boss(world); + case BREE: + return get_bree_boss(world); + case ARNOR: + return get_arnor_boss(world); + case GUNDABAD: + return get_gundabad_boss(world); + case ANGMAR: + return get_angmar_boss(world); + case RHUDAUR: + return get_rhudaur_boss(world); + case WOOD_ELF: + return get_wood_elf_boss(world); + case WOOD_ELF_SCOUT: + return get_wood_elf_scout_boss(world); + case DOL_GULDUR: + return get_dol_guldur_boss(world); + case DALE: + return get_dale_boss(world); + case DURINS_FOLK: + return get_durins_folk_boss(world); + case BLUE_MOUNTAINS: + return get_blue_mountains_boss(world); + case RED_MOUNTAINS: + return get_red_mountains_boss(world); + case DUNLAND: + return get_dunland_boss(world); + case ISENGARD: + return get_isengard_boss(world); + case ISENGARD_SNAGA: + return get_isengard_snaga_boss(world); + case FANGORN: + return get_fangorn_boss(world); + case DORWINION: + return get_dorwinion_boss(world); + case RHUDEL: + return get_rhudel_boss(world); + case RHUDEL_GOLDEN: + return get_rhudel_golden_boss(world); + case UMBAR: + return get_umbar_boss(world); + case HARNENNOR: + return get_harnennor_boss(world); + case GULFEN: + return get_gulfen_boss(world); + case MORWAITH: + return get_morwaith_boss(world); + case LIMWAITH: + return get_limwaith_boss(world); + case TAURETHRIM: + return get_taurethrim_boss(world); + case HALF_TROLL: + return get_half_troll_boss(world); + case UTUMNO: + return get_utumno_boss(world); + case RENEGADE: + return get_renegade_boss(world); + } + return get_renegade_boss(world); + } + + public static double default_boss_hp = 200.0D; + public static double default_boss_speed = 0.22D; + public static double default_boss_damage_boost = 10.0D; + + public static Entity get_mordor_boss(World world) { + LOTREntityBlackUruk boss_entity = new LOTREntityBlackUruk(world); + ItemStack boots = item(LOTRMod.bootsBlackUruk, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsBlackUruk, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyBlackUruk, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetBlackUruk, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(4)) { + case 0: weapon = item(LOTRMod.scimitarBlackUruk, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearBlackUruk, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.hammerBlackUruk, LOTREnchantment.knockback2); break; + case 3: weapon = item(LOTRMod.battleaxeBlackUruk, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_black_uruk_boss(World world) { + LOTREntityBlackUruk boss_entity = new LOTREntityBlackUruk(world); + ItemStack boots = item(LOTRMod.bootsBlackUruk, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsBlackUruk, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyBlackUruk, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetBlackUruk, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(4)) { + case 0: weapon = item(LOTRMod.scimitarBlackUruk, LOTREnchantment.strong4, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearBlackUruk, LOTREnchantment.strong4, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.hammerBlackUruk, LOTREnchantment.strong4, LOTREnchantment.knockback2); break; + case 3: weapon = item(LOTRMod.battleaxeBlackUruk, LOTREnchantment.strong4, LOTREnchantment.meleeReach1, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, 0.23D, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_morgul_vale_boss(World world) { + MorgulOrc boss_entity = new MorgulOrc(world); + ItemStack boots = item(LOTRMod.bootsBlackUruk, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsBlackUruk, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyBlackUruk, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetBlackUruk, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = item(LOTRMod.morgulBlade, LOTREnchantment.strong4, LOTREnchantment.meleeReach1, LOTREnchantment.meleeSpeed1); + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_gondor_boss(World world) { + LOTREntityGondorTowerGuard boss_entity = new LOTREntityGondorTowerGuard(world); + ItemStack boots = item(LOTRMod.bootsGondor, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsGondor, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyGondor, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetGondor, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.swordGondor, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearGondor, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.hammerGondor, LOTREnchantment.knockback2); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_pelargir_boss(World world) { + LOTREntityPelargirMarine boss_entity = new LOTREntityPelargirMarine(world); + ItemStack boots = item(LOTRMod.bootsPelargir, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsPelargir, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyPelargir, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetPelargir, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(2)) { + case 0: weapon = item(LOTRMod.swordPelargir, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.tridentPelargir, LOTREnchantment.meleeReach1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_dol_amroth_boss(World world) { + LOTREntitySwanKnight boss_entity = new LOTREntitySwanKnight(world); + ItemStack boots = item(LOTRMod.bootsDolAmroth, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsDolAmroth, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyDolAmroth, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetDolAmroth, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = item(LOTRMod.swordDolAmroth, LOTREnchantment.strong4, LOTREnchantment.meleeSpeed1); + ItemStack mount_weapon = item(LOTRMod.lanceDolAmroth, LOTREnchantment.knockback2, LOTREnchantment.meleeReach1); + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + boss_entity.npcItemsInv.setIdleItemMounted(mount_weapon); + boss_entity.npcItemsInv.setMeleeWeaponMounted(mount_weapon); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_rohan_boss(World world) { + LOTREntityRohirrimWarrior boss_entity = null; + switch (Warband.random.nextInt(2)) { + case 0: boss_entity = new LOTREntityRohirrimWarrior(world); break; + case 1: boss_entity = new LOTREntityRohirrimArcher(world); break; + } + ItemStack boots = item(LOTRMod.bootsRohanMarshal, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsRohanMarshal, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyRohanMarshal, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetRohanMarshal, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + if (boss_entity instanceof LOTREntityRohirrimArcher) { + weapon = item(LOTRMod.rohanBow, LOTREnchantment.rangedStrong3, LOTREnchantment.rangedStrong3); + } else { + switch (Warband.random.nextInt(2)) { + case 0: weapon = item(LOTRMod.swordRohan, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearRohan, LOTREnchantment.meleeReach1); break; + } + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_rivendell_boss(World world) { + LOTREntityRivendellWarrior boss_entity = new LOTREntityRivendellWarrior(world); + ItemStack boots = item(LOTRMod.bootsRivendell, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsRivendell, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyRivendell, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetRivendell, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack ranged_weapon = item(LOTRMod.rivendellBow, LOTREnchantment.rangedStrong3, LOTREnchantment.rangedStrong2); + ItemStack melee_weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: melee_weapon = item(LOTRMod.swordRivendell, LOTREnchantment.meleeSpeed1); break; + case 1: melee_weapon = item(LOTRMod.spearRivendell, LOTREnchantment.meleeReach1); break; + case 2: melee_weapon = item(LOTRMod.polearmRivendell, LOTREnchantment.strong3); break; + } + set_equipment(boss_entity, melee_weapon, boots, legs, body, helmet); + set_equipment(boss_entity, ranged_weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_lindon_boss(World world) { + LOTREntityHighElfWarrior boss_entity = new LOTREntityHighElfWarrior(world); + ItemStack boots = item(LOTRMod.bootsHighElven, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsHighElven, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyHighElven, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetHighElven, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack ranged_weapon = item(LOTRMod.highElvenBow, LOTREnchantment.rangedStrong3, LOTREnchantment.rangedStrong2); + ItemStack melee_weapon = null; + switch (Warband.random.nextInt(2)) { + case 0: melee_weapon = item(LOTRMod.swordHighElven, LOTREnchantment.meleeSpeed1); break; + case 1: melee_weapon = item(LOTRMod.spearHighElven, LOTREnchantment.meleeReach1); break; + } + set_equipment(boss_entity, melee_weapon, boots, legs, body, helmet); + set_equipment(boss_entity, ranged_weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_bree_boss(World world) { + LOTREntityBreeGuard boss_entity = new LOTREntityBreeGuard(world); + ItemStack boots = item(CinderLoE.bootsBree, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(CinderLoE.legsBree, LOTREnchantment.protectRanged3); + ItemStack body = item(CinderLoE.bodyBree, LOTREnchantment.protectFire3); + ItemStack helmet = item(CinderLoE.helmetBreeKettle, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = item(CinderLoE.swordBree, LOTREnchantment.meleeSpeed1); + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_arnor_boss(World world) { + ArnorSoldier boss_entity = new ArnorSoldier(world); + ItemStack boots = item(LOTRMod.bootsArnor, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsArnor, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyArnor, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetArnor, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(2)) { + case 0: weapon = item(LOTRMod.swordArnor, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearArnor, LOTREnchantment.meleeReach1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_gundabad_boss(World world) { + LOTREntityGundabadUruk boss_entity = new LOTREntityGundabadUruk(world); + ItemStack boots = item(LOTRMod.bootsGundabadUruk, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsGundabadUruk, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyGundabadUruk, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetGundabadUruk, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(4)) { + case 0: weapon = item(LOTRMod.swordGundabadUruk, LOTREnchantment.strong4, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearGundabadUruk, LOTREnchantment.strong4, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.hammerGundabadUruk, LOTREnchantment.strong4, LOTREnchantment.knockback2); break; + case 3: weapon = item(LOTRMod.battleaxeGundabadUruk, LOTREnchantment.strong4, LOTREnchantment.meleeReach1, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_angmar_boss(World world) { + LOTREntityAngmarOrc boss_entity = new LOTREntityAngmarOrc(world); + ItemStack boots = item(LOTRMod.bootsAngmar, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsAngmar, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyAngmar, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetAngmar, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(5)) { + case 0: weapon = item(LOTRMod.swordAngmar, LOTREnchantment.strong4, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearAngmar, LOTREnchantment.strong4, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.hammerAngmar, LOTREnchantment.strong4, LOTREnchantment.knockback2); break; + case 3: weapon = item(LOTRMod.battleaxeAngmar, LOTREnchantment.strong4, LOTREnchantment.meleeSpeed1, LOTREnchantment.knockback1); break; + case 4: weapon = item(LOTRMod.polearmAngmar, LOTREnchantment.strong4, LOTREnchantment.meleeReach1, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_rhudaur_boss(World world) { + LOTREntityAngmarOrc boss_entity = new LOTREntityAngmarOrc(world); + ItemStack boots = item(CinderLoE.bootsRhudaur, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(CinderLoE.legsRhudaur, LOTREnchantment.protectRanged3); + ItemStack body = item(CinderLoE.bodyRhudaur, LOTREnchantment.protectFire3); + ItemStack helmet = item(CinderLoE.helmetRhudaur, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(5)) { + case 0: weapon = item(LOTRMod.swordAngmar, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearAngmar, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.hammerAngmar, LOTREnchantment.knockback2); break; + case 3: weapon = item(LOTRMod.battleaxeAngmar, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + case 4: weapon = item(LOTRMod.polearmAngmar, LOTREnchantment.strong4, LOTREnchantment.meleeReach1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_wood_elf_boss(World world) { + LOTREntityWoodElfWarrior boss_entity = new LOTREntityWoodElfWarrior(world); + ItemStack boots = item(LOTRMod.bootsWoodElven, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsWoodElven, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyWoodElven, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetWoodElven, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack ranged_weapon = item(LOTRMod.mirkwoodBow, LOTREnchantment.rangedStrong3, LOTREnchantment.rangedStrong2); + ItemStack melee_weapon = null; + switch (Warband.random.nextInt(2)) { + case 0: melee_weapon = item(LOTRMod.swordWoodElven, LOTREnchantment.meleeSpeed1); break; + case 1: melee_weapon = item(LOTRMod.spearWoodElven, LOTREnchantment.meleeReach1); break; + } + set_equipment(boss_entity, melee_weapon, boots, legs, body, helmet); + set_equipment(boss_entity, ranged_weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_wood_elf_scout_boss(World world) { + LOTREntityWoodElfWarrior boss_entity = new LOTREntityWoodElfWarrior(world); + ItemStack boots = item(LOTRMod.bootsWoodElvenScout, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsWoodElvenScout, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyWoodElvenScout, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetWoodElvenScout, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack ranged_weapon = item(LOTRMod.mirkwoodBow, LOTREnchantment.rangedStrong3, LOTREnchantment.rangedStrong2); + ItemStack melee_weapon = null; + switch (Warband.random.nextInt(2)) { + case 0: melee_weapon = item(LOTRMod.swordWoodElven, LOTREnchantment.meleeSpeed1); break; + case 1: melee_weapon = item(LOTRMod.spearWoodElven, LOTREnchantment.meleeReach1); break; + } + set_equipment(boss_entity, melee_weapon, boots, legs, body, helmet); + set_equipment(boss_entity, ranged_weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, 0.25D, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_dol_guldur_boss(World world) { + LOTREntityDolGuldurOrc boss_entity = new LOTREntityDolGuldurOrc(world); + ItemStack boots = item(LOTRMod.bootsDolGuldur, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsDolGuldur, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyDolGuldur, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetDolGuldur, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(4)) { + case 0: weapon = item(LOTRMod.swordDolGuldur, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearDolGuldur, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.hammerDolGuldur, LOTREnchantment.knockback2); break; + case 3: weapon = item(LOTRMod.battleaxeDolGuldur, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_dale_boss(World world) { + LOTREntityDaleSoldier boss_entity = new LOTREntityDaleSoldier(world); + ItemStack boots = item(LOTRMod.bootsDale, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsDale, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyDale, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetDale, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.swordDale, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearDale, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.battleaxeDale, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_durins_folk_boss(World world) { + LOTREntityDwarfWarrior boss_entity = new LOTREntityDwarfWarrior(world); + ItemStack boots = item(LOTRMod.bootsDwarven, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsDwarven, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyDwarven, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetDwarven, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.swordDwarven, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearDwarven, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.battleaxeDwarven, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_blue_mountains_boss(World world) { + LOTREntityBlueDwarfWarrior boss_entity = new LOTREntityBlueDwarfWarrior(world); + ItemStack boots = item(LOTRMod.bootsBlueDwarven, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsBlueDwarven, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyBlueDwarven, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetBlueDwarven, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.swordBlueDwarven, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearBlueDwarven, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.battleaxeBlueDwarven, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_red_mountains_boss(World world) { + RedDwarfWarrior boss_entity = new RedDwarfWarrior(world); + ItemStack boots = item(CinderLoE.bootsRedDwarf, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(CinderLoE.legsRedDwarf, LOTREnchantment.protectRanged3); + ItemStack body = item(CinderLoE.bodyRedDwarf, LOTREnchantment.protectFire3); + ItemStack helmet = item(CinderLoE.helmetRedDwarf, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(CinderLoE.swordRedDwarf, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(CinderLoE.spearRedDwarf, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(CinderLoE.battleaxeRedDwarf, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_dunland_boss(World world) { + LOTREntityDunlendingWarrior boss_entity = new LOTREntityDunlendingWarrior(world); + ItemStack boots = item(LOTRMod.bootsDunlending, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsDunlending, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyDunlending, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetDunlending, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(2)) { + case 0: weapon = item(LOTRMod.dunlendingTrident, LOTREnchantment.meleeReach1); break; + case 1: weapon = item(LOTRMod.battleaxeIron, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_isengard_boss(World world) { + LOTREntityUrukHai boss_entity = new LOTREntityUrukHai(world); + ItemStack boots = item(LOTRMod.bootsUruk, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsUruk, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyUruk, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetUruk, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(4)) { + case 0: weapon = item(LOTRMod.scimitarBlackUruk, LOTREnchantment.strong4, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearBlackUruk, LOTREnchantment.strong4, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.hammerBlackUruk, LOTREnchantment.strong4, LOTREnchantment.knockback2); break; + case 3: weapon = item(LOTRMod.battleaxeBlackUruk, LOTREnchantment.strong4, LOTREnchantment.meleeReach1, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_isengard_snaga_boss(World world) { + LOTREntityIsengardSnaga boss_entity = new LOTREntityIsengardSnaga(world); + ItemStack boots = item(LOTRMod.bootsUruk, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsUruk, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyUruk, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetUruk, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = item(CinderLoE.whip, LOTREnchantment.strong4, LOTREnchantment.meleeReach1, LOTREnchantment.meleeSpeed1); + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, 15.0D); + return boss_entity; + } + public static Entity get_fangorn_boss(World world) { + LOTREntityMallornEnt boss_entity = new LOTREntityMallornEnt(world); + set_attributes(boss_entity, 300.0D, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_dorwinion_boss(World world) { + LOTREntityDorwinionElfWarrior boss_entity = new LOTREntityDorwinionElfWarrior(world); + ItemStack boots = item(LOTRMod.bootsDorwinionElf, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsDorwinionElf, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyDorwinionElf, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetDorwinionElf, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = item(LOTRMod.spearBladorthin, LOTREnchantment.strong4, LOTREnchantment.meleeReach1, LOTREnchantment.meleeSpeed1); + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_rhudel_boss(World world) { + LOTREntityEasterlingGoldWarrior boss_entity = new LOTREntityEasterlingGoldWarrior(world); + ItemStack boots = item(LOTRMod.bootsRhunGold, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsRhunGold, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyRhunGold, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetRhunGold, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.swordRhun, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearRhun, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.polearmRhun, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_rhudel_golden_boss(World world) { + LOTREntityEasterlingGoldWarrior boss_entity = new LOTREntityEasterlingGoldWarrior(world); + ItemStack boots = item(LOTRMod.bootsRhunGold, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsRhunGold, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyRhunGold, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetRhunGold, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.swordRhun, LOTREnchantment.strong4, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearRhun, LOTREnchantment.strong4, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.polearmRhun, LOTREnchantment.strong4, LOTREnchantment.meleeReach1, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_umbar_boss(World world) { + LOTREntityUmbarWarrior boss_entity = new LOTREntityUmbarWarrior(world); + ItemStack boots = item(LOTRMod.bootsUmbar, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsUmbar, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyUmbar, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetUmbar, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(4)) { + case 0: weapon = item(LOTRMod.scimitarNearHarad, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearNearHarad, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.poleaxeNearHarad, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + case 3: weapon = item(LOTRMod.maceNearHarad, LOTREnchantment.knockback2); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_harnennor_boss(World world) { + LOTREntityHarnedorWarrior boss_entity = new LOTREntityHarnedorWarrior(world); + ItemStack boots = item(LOTRMod.bootsHarnedor, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsHarnedor, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyHarnedor, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetNearHaradWarlord, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(2)) { + case 0: weapon = item(LOTRMod.swordHarad, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearHarad, LOTREnchantment.meleeReach1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_gulfen_boss(World world) { + LOTREntityGulfHaradWarrior boss_entity = new LOTREntityGulfHaradWarrior(world); + ItemStack boots = item(LOTRMod.bootsGulfHarad, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsGulfHarad, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyGulfHarad, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetNearHaradWarlord, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(2)) { + case 0: weapon = item(LOTRMod.swordGulfHarad, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearHarad, LOTREnchantment.meleeReach1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_morwaith_boss(World world) { + LOTREntityMoredainWarrior boss_entity = new LOTREntityMoredainWarrior(world); + ItemStack boots = item(LOTRMod.bootsMoredainLion, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsMoredainLion, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyMoredainLion, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetMoredainLion, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.swordMoredain, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearMoredain, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.battleaxeMoredain, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, 0.25D, 15.0D); + return boss_entity; + } + public static Entity get_limwaith_boss(World world) { + LimwaithWarrior boss_entity = new LimwaithWarrior(world); + ItemStack boots = item(CinderLoE.bootsLimwaith, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(CinderLoE.legsLimwaith, LOTREnchantment.protectRanged3); + ItemStack body = item(CinderLoE.bodyLimwaith, LOTREnchantment.protectFire3); + ItemStack helmet = item(CinderLoE.helmetLimwaith, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(CinderLoE.truncheonLimwaith, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(CinderLoE.spearLimwaith, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(CinderLoE.battleaxeLimwaith, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_taurethrim_boss(World world) { + LOTREntityTauredainWarrior boss_entity = new LOTREntityTauredainWarrior(world); + ItemStack boots = item(LOTRMod.bootsTauredainGold, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsTauredainGold, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyTauredainGold, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetTauredainGold, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.swordTauredain, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearTauredain, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.battleaxeTauredain, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_half_troll_boss(World world) { + LOTREntityHalfTrollWarrior boss_entity = new LOTREntityHalfTrollWarrior(world); + ItemStack boots = item(LOTRMod.bootsHalfTroll, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsHalfTroll, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyHalfTroll, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetHalfTroll, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.scimitarHalfTroll, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.maceHalfTroll, LOTREnchantment.knockback2); break; + case 2: weapon = item(LOTRMod.battleaxeHalfTroll, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_utumno_boss(World world) { + LOTREntityUtumnoOrc boss_entity = new LOTREntityUtumnoOrc(world); + ItemStack boots = item(LOTRMod.bootsUtumno, LOTREnchantment.protect1, LOTREnchantment.protectRanged3); + ItemStack legs = item(LOTRMod.legsUtumno, LOTREnchantment.protectRanged3); + ItemStack body = item(LOTRMod.bodyUtumno, LOTREnchantment.protectFire3); + ItemStack helmet = item(LOTRMod.helmetUtumno, LOTREnchantment.protect1, LOTREnchantment.protectFire3); + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.swordUtumno, LOTREnchantment.meleeSpeed1); break; + case 1: weapon = item(LOTRMod.spearUtumno, LOTREnchantment.meleeReach1); break; + case 2: weapon = item(LOTRMod.battleaxeUtumno, LOTREnchantment.strong4, LOTREnchantment.knockback1); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, default_boss_hp, default_boss_speed, default_boss_damage_boost); + return boss_entity; + } + public static Entity get_renegade_boss(World world) { + RenegadeCaptain boss_entity = new RenegadeCaptain(world); + ItemStack boots = null; + ItemStack legs = null; + ItemStack body = null; + ItemStack helmet = null; + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.dunlendingClub, LOTREnchantment.meleeReach1, LOTREnchantment.meleeSpeed1, LOTREnchantment.knockback2, LOTREnchantment.knockback2); break; + case 1: weapon = item(LOTRMod.dunlendingTrident, LOTREnchantment.meleeReach1, LOTREnchantment.meleeSpeed1); break; + case 2: weapon = item(LOTRMod.daggerArnorPoisoned, LOTREnchantment.meleeReach1, LOTREnchantment.meleeSpeed1); break; + } + switch (Warband.random.nextInt(5)) { + case 0: boots = item(Items.leather_boots); break; + case 1: boots = item(Items.iron_boots); break; + case 2: boots = item(LOTRMod.bootsArnor); break; + case 3: boots = item(LOTRMod.bootsAngmar); break; + case 4: boots = item(LOTRMod.bootsDunlending); break; + } + switch (Warband.random.nextInt(5)) { + case 0: legs = item(Items.leather_leggings); break; + case 1: legs = item(Items.iron_leggings); break; + case 2: legs = item(LOTRMod.legsArnor); break; + case 3: legs = item(LOTRMod.legsAngmar); break; + case 4: legs = item(LOTRMod.legsDunlending); break; + } + switch (Warband.random.nextInt(5)) { + case 0: body = item(Items.leather_chestplate); break; + case 1: body = item(Items.iron_chestplate); break; + case 2: body = item(LOTRMod.bodyArnor); break; + case 3: body = item(LOTRMod.bodyAngmar); break; + case 4: body = item(LOTRMod.bodyDunlending); break; + } + switch (Warband.random.nextInt(5)) { + case 0: helmet = item(Items.leather_helmet); break; + case 1: helmet = item(Items.iron_helmet); break; + case 2: helmet = item(LOTRMod.helmetArnor); break; + case 3: helmet = item(LOTRMod.helmetAngmar); break; + case 4: helmet = item(LOTRMod.helmetDunlending); break; + } + set_equipment(boss_entity, weapon, boots, legs, body, helmet); + set_attributes(boss_entity, 500.D, 0.25D, 15.0D); + return boss_entity; + } + public static void equip_renegade(Renegade renegade) { + ItemStack boots = null; + ItemStack legs = null; + ItemStack body = null; + ItemStack helmet = null; + ItemStack weapon = null; + switch (Warband.random.nextInt(3)) { + case 0: weapon = item(LOTRMod.dunlendingClub); break; + case 1: weapon = item(LOTRMod.dunlendingTrident); break; + case 2: weapon = item(LOTRMod.daggerArnorPoisoned, LOTREnchantment.strong3); break; + } + switch (Warband.random.nextInt(8)) { + case 0: boots = item(Items.leather_boots); break; + case 1: boots = item(Items.iron_boots); break; + case 2: boots = item(LOTRMod.bootsArnor); break; + case 3: boots = item(LOTRMod.bootsAngmar); break; + case 4: boots = item(LOTRMod.bootsDunlending); break; + } + switch (Warband.random.nextInt(8)) { + case 0: legs = item(Items.leather_leggings); break; + case 1: legs = item(Items.iron_leggings); break; + case 2: legs = item(LOTRMod.legsArnor); break; + case 3: legs = item(LOTRMod.legsAngmar); break; + case 4: legs = item(LOTRMod.legsDunlending); break; + } + switch (Warband.random.nextInt(8)) { + case 0: body = item(Items.leather_chestplate); break; + case 1: body = item(Items.iron_chestplate); break; + case 2: body = item(LOTRMod.bodyArnor); break; + case 3: body = item(LOTRMod.bodyAngmar); break; + case 4: body = item(LOTRMod.bodyDunlending); break; + } + switch (Warband.random.nextInt(8)) { + case 0: helmet = item(Items.leather_helmet); break; + case 1: helmet = item(Items.iron_helmet); break; + case 2: helmet = item(LOTRMod.helmetArnor); break; + case 3: helmet = item(LOTRMod.helmetAngmar); break; + case 4: helmet = item(LOTRMod.helmetDunlending); break; + } + set_equipment(renegade, weapon, boots, legs, body, helmet); + } + + /** + * Helper methods for boss creation + */ + public static void set_attributes(EntityLivingBase entity, double health, double speed, double damage_boost) { + entity.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(50.0D); + entity.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(health); + entity.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(speed); + entity.getEntityAttribute(LOTREntityNPC.npcAttackDamageExtra).setBaseValue(damage_boost); + } + public static ItemStack item(Item item, LOTREnchantment... enchants) { + ItemStack stack = new ItemStack(item); + LOTREnchantmentHelper.setEnchantList(stack, Arrays.asList(enchants)); + return stack; + } + public static void set_equipment(EntityLivingBase entity, ItemStack weapon, ItemStack boots, ItemStack legs, ItemStack body, ItemStack helmet) { + if (weapon != null) + entity.setCurrentItemOrArmor(0, weapon); + if (boots != null) + entity.setCurrentItemOrArmor(1, boots); + if (legs != null) + entity.setCurrentItemOrArmor(2, legs); + if (body != null) + entity.setCurrentItemOrArmor(3, body); + if (helmet != null) + entity.setCurrentItemOrArmor(4, helmet); + + if (entity instanceof LOTREntityNPC) { + LOTREntityNPC npc = (LOTREntityNPC) entity; + if (weapon != null) + npc.npcItemsInv.setIdleItem(weapon); + if (weapon.getItem() instanceof ItemSword) + npc.npcItemsInv.setMeleeWeapon(weapon); + if (weapon.getItem() instanceof ItemBow) + npc.npcItemsInv.setRangedWeapon(weapon); + } + } + + public static class Troop { + public Class entity_class; + public int amount; + + public Troop(Class entity_class, int amount) { + this.entity_class = entity_class; + this.amount = amount; + } + } + +} diff --git a/src (1)/main/java/com/zivilon/cinder_loe/world/event/WarbandTickHandler.java b/src (1)/main/java/com/zivilon/cinder_loe/world/event/WarbandTickHandler.java new file mode 100644 index 0000000..57d87ff --- /dev/null +++ b/src (1)/main/java/com/zivilon/cinder_loe/world/event/WarbandTickHandler.java @@ -0,0 +1,31 @@ +package com.zivilon.cinder_loe.world.event; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; +import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent; + +public class WarbandTickHandler { + + public int tick_counter = 0; +// public static int INTERVAL_TICKS = 12000; // 10 minutes at 20 TPS + public static int INTERVAL_TICKS = 1200; // 1 minutes at 20 TPS + + @SubscribeEvent + public void onServerTick(ServerTickEvent event) { + if (event.phase == TickEvent.Phase.END) { + tick_counter++; + if (tick_counter >= INTERVAL_TICKS) { + tick_counter = 0; + run_task(); + } + } + } + + public void run_task() { + System.out.println("Warband ticked"); + if (Warband.last_warband_timestamp > (System.currentTimeMillis() / 1000L) - 7200) return; // Do not spawn warband if less than 2 hours since last one +// if (Warband.random.nextInt(10) != 0) return; + System.out.println("Warband starting"); + Warband.initialize_warband(); + } +} diff --git a/src (1)/main/resources/LICENSE b/src (1)/main/resources/LICENSE new file mode 100644 index 0000000..e69de29 diff --git a/src (1)/main/resources/assets/cinder_loe/lang/en_GB.lang b/src (1)/main/resources/assets/cinder_loe/lang/en_GB.lang new file mode 100644 index 0000000..2b6899c --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/lang/en_GB.lang @@ -0,0 +1,3 @@ +item.lotr:sarumanStaff.name=Staff of Saruman of Many Colours +item.lotr:sarumanWhiteStaff.name=Staff of Saruman the White +item.lotr:boarArmorRedDwarf.name=Red Dwarven Boar Armour diff --git a/src (1)/main/resources/assets/cinder_loe/lang/en_US.lang b/src (1)/main/resources/assets/cinder_loe/lang/en_US.lang new file mode 100644 index 0000000..7f12bdb --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/lang/en_US.lang @@ -0,0 +1,373 @@ +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 +tile.lotr:reedBale.name=Reed Bale +tile.lotr:leatherBundle.name=Leather Bundle +tile.lotr:furBundle.name=Fur Bundle +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:plaster.name=Plaster +tile.lotr:voidblock.name=Void +tile.lotr:cindercobble.0.name=Cobbled Drystone +tile.lotr:cindercobble.1.name=Cobbled Mordor Rock +tile.lotr:cindercobble.2.name=Silver Brick +tile.lotr:cindercobble.3.name=Silver Smallbrick +tile.lotr:enchantedIce.name=Enchanted Ice +tile.lotr:iceCage.name=Ice Cage +tile.forging_station.name=Forging Station +tile.lotr:woodpanel.name=Wood Panel + +tile.lotr:cinderfur.0.name=Brown Warg Fur Block +tile.lotr:cinderfur.1.name=Gray Warg Fur Block +tile.lotr:cinderfur.2.name=Black Warg Fur Block +tile.lotr:cinderfur.3.name=White Warg Fur Block +tile.lotr:cinderfur.4.name=Obsidian Warg Fur Block +tile.lotr:cinderfur.5.name=Black Bear Fur Block +tile.lotr:cinderfur.6.name=Brown Bear Fur Block +tile.lotr:cinderfur.7.name=Lion Fur Block +tile.lotr:cinderfur.8.name=Lioness Fur Block + +tile.lotr:cinderfurcarpet.0.name=Brown Warg Fur Carpet +tile.lotr:cinderfurcarpet.1.name=Gray Warg Fur Carpet +tile.lotr:cinderfurcarpet.2.name=Black Warg Fur Carpet +tile.lotr:cinderfurcarpet.3.name=White Warg Carpet +tile.lotr:cinderfurcarpet.4.name=Obsidian Warg Fur Carpet +tile.lotr:cinderfurcarpet.5.name=Black Bear Fur Carpet +tile.lotr:cinderfurcarpet.6.name=Brown Bear Fur Carpet +tile.lotr:cinderfurcarpet.7.name=Lion Fur Carpet +tile.lotr:cinderfurcarpet.8.name=Lioness Fur Carpet + +item.repair_kit.name=Repair Kit +item.upgrade_kit.name=Upgrade Kit +item.cinder_fur_item_0.name=Gray Warg Fur +item.cinder_fur_item_1.name=Black Warg Fur +item.cinder_fur_item_2.name=White Warg Fur +item.cinder_fur_item_3.name=Obsidian Warg Fur +item.cinder_fur_item_4.name=Black Bear Fur +item.cinder_fur_item_5.name=Brown Bear Fur +item.cinder_fur_item_6.name=Lioness Fur + +item.lotr:helmetJade.name=Jade Helmet +item.lotr:bodyJade.name=Jade Chestplate +item.lotr:legsJade.name=Jade Leggings +item.lotr:bootsJade.name=Jade Boots +item.lotr:helmetRhudaur.name=Rhudaur Helmet +item.lotr:bodyRhudaur.name=Rhudaur Chestplate +item.lotr:legsRhudaur.name=Rhudaur Leggings +item.lotr:bootsRhudaur.name=Rhudaur Boots + +item.lotr:helmetserpent.name=Serpent Hood +item.lotr:bodyserpent.name=Serpent Cloak +item.lotr:legsserpent.name=Serpent Leggings +item.lotr:bootsserpent.name=Serpent Boots +item.lotr:helmetUsurper.name=Usurper Helmet +item.lotr:bodyUsurper.name=Usurper Chestplate +item.lotr:legsUsurper.name=Usurper Leggings +item.lotr:bootsUsurper.name=Usurper Boots +item.lotr:helmetWarlord.name=Warlord Headdress +item.lotr:bodyWarlord.name=Warlord Chestplate +item.lotr:legsWarlord.name=Warlord Leggings +item.lotr:bootsWarlord.name=Warlord Boots +item.lotr:cleaver.name=Cleaver +item.lotr:spearUnnamed.name=Drannach Oriour +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 +item.lotr:legsRedDwarf.name=Red Dwarven Leggings +item.lotr:bootsRedDwarf.name=Red Dwarven Boots +item.lotr:redDwarfSteel.name=Red Dwarven Steel Ingot +item.lotr:spearRedDwarf.name=Red Dwarven Spear +item.lotr:swordRedDwarf.name=Red Dwarven Sword +item.lotr:battleaxeRedDwarf.name=Red Dwarven Battleaxe +item.lotr:pikeRedDwarf.name=Red Dwarven Pike +item.lotr:hammerRedDwarf.name=Red Dwarven Hammer +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:sarumanWhiteStaff.name=Staff of Saruman the White + +item.lotr:welfRelic.name=Horn of the Greenwood Stag + +item.lotr:onion.name=Onion +item.lotr:cabbage.name=Cabbage +item.lotr:pelmen.name=Pelmeni +item.lotr:lightStew.name=Light Stew +item.lotr:spice.name=Spices +item.lotr:spicedHam.name=Spiced Ham +item.lotr:chocolatebar.name=Chocolate Bar +item.lotr:fruitsalad.name=Fruid Salad +item.lotr:flour.name=Flour +item.lotr:dough.name=Dough +item.lotr:pasta.name=Pasta +item.lotr:pretzel.name=Pretzel +item.lotr:halva.name=Halva +item.lotr:doner_kebab.name=Döner Kebab + +item.lotr:bonemold.name=Bonemold +item.lotr:helmetLimwaith.name=Limwaith Helmet +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 +item.lotr:truncheonLimwaith.name=Limwaith Truncheon +item.lotr:daggerLimwaith.name=Limwaith Dagger +item.lotr:daggerLimwaithPoisoned.name=Poisoned Limwaith Dagger +item.lotr:blowgunLimwaith.name=Limwaith Blowgun + +item.lotr:helmetBreeKettle.name=Bree-land Kettle Helmet +item.lotr:helmetBree.name=Bree-land Helmet +item.lotr:bodyBree.name=Bree-land Chestplate +item.lotr:legsBree.name=Bree-land Leggings +item.lotr:bootsBree.name=Bree-land Boots +item.lotr:swordBree.name=Bree-land Sword + +item.lotr:helmetArnorBanner.name=Arnorian Hood +item.lotr:bodyArnorBanner.name=Light Arnorian Chestplate +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:staffAsh.name=Ash-Forged Bardiche +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.lotr:banner.redDwarf.name=Banner of the Orocani +item.lotr:banner.limwaith.name=Banner of the Limwaith +item.lotr:banner.red.name=Red Flag +item.lotr:banner.blue.name=Blue Flag +item.lotr:banner.green.name=Green Flag + +item.war_dart_headless.name=Headless Dart +item.war_dart_copper.name=Copper Dart +item.war_dart_bronze.name=Bronze Dart +item.war_dart_iron.name=Iron Dart +item.war_dart_orc.name=Orc Dart +item.war_dart_dwarven.name=Dwarven Dart +item.war_dart_uruk.name=Uruk Dart +item.war_dart_blue_dwarven.name=Blue Dwarven Dart +item.war_dart_black_uruk.name=Black Uruk Dart +item.war_dart_elven.name=Elven Dart +item.war_dart_gilded_iron.name=Gilded Iron Dart +item.war_dart_red_dwarven.name=Red Dwarven Dart +item.war_dart_mithril.name=Mithril Dart +item.war_dart_ancient.name=Ancient Dart +item.war_dart_morgul.name=Morgul Dart + +item.war_dart_heads_headless.name=??? Dart Heads +item.war_dart_heads_copper.name=Copper Dart Heads +item.war_dart_heads_bronze.name=Bronze Dart Heads +item.war_dart_heads_iron.name=Iron Dart Heads +item.war_dart_heads_orc.name=Orc Dart Heads +item.war_dart_heads_dwarven.name=Dwarven Dart Heads +item.war_dart_heads_uruk.name=Uruk Dart Heads +item.war_dart_heads_blue_dwarven.name=Blue Dwarven Dart Heads +item.war_dart_heads_black_uruk.name=Black Uruk Dart Heads +item.war_dart_heads_elven.name=Elven Dart Heads +item.war_dart_heads_gilded_iron.name=Gilded Iron Dart Heads +item.war_dart_heads_red_dwarven.name=Red Dwarven Dart Heads +item.war_dart_heads_mithril.name=Mithril Dart Heads +item.war_dart_heads_ancient.name=Ancient Dart Heads +item.war_dart_heads_morgul.name=Morgul Dart Heads + +item.lotr.toxicCore.name=Toxic Core +item.lotr:celeiniss.name=Celeiniss +lotr:nimveil.name=Nimveil +item.nimveil_gem.name=Nimveil Gem +item.nimveil_blade.name=Nimveil Blade +item.nimveil_hilt.name=Nimveil Hilt +item.blessed_hammer.name=Hammer of Aulendur +item.ice_thawer.name=Ice Thawer +item.deceiver_blade.name=Deceiver's Blade +item.anarore_bow.name=Anarórë's Bow +item.troll_chieftain_club.name=Troll Chieftain Club +item.glaechir_spear.name=Glaechír's Spear +item.deceiver_blade_blade.name=Cursed Blade +item.deceiver_blade_guard.name=Deceiver's Guard +item.deceiver_blade_hilt.name=Dark Hilt +item.anarore_bow_top.name=Anarórë's Bow Top +item.anarore_bow_bottom.name=Anarórë's Bow Bottom +item.anarore_bow_bowstring.name=Blessed Bowstring +item.troll_chieftain_club_club.name=Troll Club +item.troll_chieftain_club_spikes.name=Serrated Spikes +item.troll_chieftain_club_???.name=??? +item.glaechir_spear_tip.name=Fine Bronze Spear Tip +item.glaechir_spear_shaft.name=Heraldic Spear Shaft +item.glaechir_spear_???.name=??? + +item.lotr:helmetNexShadow=Ancient Shadow Hood +item.lotr:bodyNexShadow=Ancient Shadow Robe Top +item.lotr:legsNexShadow=Ancient Shadow Robe Bottom +item.lotr:bootsNexShadow=Ancient Shadow Boots +item.lotr:helmetNexToxic=Ancient Toxic Hood +item.lotr:bodyNexToxic=Ancient Toxic Robe Top +item.lotr:legsNexToxic=Ancient Toxic Robe Bottom +item.lotr:bootsNexToxic=Ancient Toxic Boots +item.lotr:helmetNexFire=Ancient Fire Hood +item.lotr:bodyNexFire=Ancient Fire Robe Top +item.lotr:legsNexFire=Ancient Fire Robe Bottom +item.lotr:bootsNexFire=Ancient Fire Boots +item.lotr:helmetNexIce=Ancient Ice Hood +item.lotr:bodyNexIce=Ancient Ice Robe Top +item.lotr:legsNexIce=Ancient Ice Robe Bottom +item.lotr:bootsNexIce=Ancient Ice Boots + +item.spawn_egg_FangornAuroch.name=Spawn Fangorn Auroch +item.spawn_egg_FangornBear.name=Spawn Fangorn Bear +item.spawn_egg_FangornWildBoar.name=Spawn Fangorn Wild Boar +item.spawn_egg_FangornElk.name=Spawn Fangorn Elk +item.spawn_egg_FangornWolf.name=Spawn Fangorn Wolf +item.spawn_egg_RedDwarfWarrior.name=Spawn Red Dwarf Warrior +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 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 +item.spawn_egg_Renegade.name=Spawn Renegade +item.spawn_egg_RenegadeCaptain.name=Spawn Renegade Captain +item.spawn_egg_Wraith.name=Spawn Wraith +item.spawn_egg_LOTREntitySauron.name=Spawn Sauron +item.spawn_egg_ArnorSoldier.name=Spawn Arnorian Soldier +item.spawn_egg_ArnorSoldierArcher.name=Spawn Arnorian Archer +item.spawn_egg_ArnorCaptain.name=Spawn Arnorian Captain +item.spawn_egg_ArnorBannerBearer.name=Spawn Arnorian Banner Bearer +item.spawn_egg_BattleNun.name=Spawn Keeper of the Elendilmir +item.spawn_egg_BreeSoldier.name=Spawn Bree-Land Soldier +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=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 +item.spawn_egg_DarkSpider.name=Spawn Dark Spider +item.spawn_egg_BladorthinSmith.name=Spawn Bladorthin Smith + +entity.cinder_loe.DarkSpider.name=Dark Spider +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.CorruptSkeleton.name=Restless Undead +entity.cinder_loe.CorruptSkeletonArcher.name=Restless Undead + +entity.cinder_loe.BladorthinSmith.name=Bladorthin Smith + +entity.cinder_loe.RedDwarfSmith.name=Red Dwarf Smith +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.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 +entity.cinder_loe.Renegade.entityName=%s the Renegade +entity.cinder_loe.RenegadeCaptain.name=Renegade Captain +entity.cinder_loe.FangornBear.name=Bear +entity.cinder_loe.FangornElk.name=Elk +entity.cinder_loe.FangornAuroch.name=Auroch +entity.cinder_loe.FangornWildBoar.name=Wild Boar +entity.cinder_loe.FangornWolf.name=Wolf +lotr.unit.RedDwarfWarrior_Boar=Boar Rider +lotr.unit.RedDwarfArbalest_Boar=Boar Arbalest Rider +entity.cinder_loe.ArnorSoldier.name=Arnorian Soldier +entity.cinder_loe.ArnorSoldierArcher.name=Arnorian Archer +entity.cinder_loe.ArnorBannerBearer.name=Arnorian Banner Bearer +entity.cinder_loe.ArnorCaptain.name=Captain of Arnor +entity.cinder_loe.BattleNun.name=Keeper of the Elendilmir +lotr.unit.Arnor_Horse=Arnorian Knight +entity.cinder_loe.BreeSoldier.name=Bree-land Soldier +entity.cinder_loe.BreeOutrider.name=Bree-land Outrider +entity.cinder_loe.BreeCrossbowman.name=Bree-land Crossbowman +entity.cinder_loe.BreeSoldierBannerBearer.name=Bree-land Banner Bearer +entity.cinder_loe.BreeCaptain.name=Bree-land Captain +lotr.unit.Bree_Horse=Bree-land Outrider +entity.cinder_loe.LOTREntitySauron.name=Sauron +entity.cinder_loe.UtumnoSlaveTrader.bound.name=Slave Mule +entity.cinder_loe.UtumnoSlaveTrader.name=Freed Utumno Trader +entity.cinder_loe.HobbitBannerBearer.name=Hobbit Banner Bearer +entity.cinder_loe.MorgulOrc.name=Minas Morgul Orc +entity.cinder_loe.EsgarothSoldier.name=Esgarothi Soldier +entity.cinder_loe.RhudaurSoldier.name=Rhudaur Soldier +entity.cinder_loe.TauredainTrueBlood.name=Taurethrim True-Blood +entity.cinder_loe.Sirrandrai.name=Rider of Sirrandrai +entity.cinder_loe.NorthernOrc.name=Northern Orc + +lotr.enchant.protectWeak1=Dented +lotr.enchant.protectWeak2=Defective +lotr.enchant.protectRangedWeak1=Punctured +lotr.enchant.protectRangedWeak2=Pierced +lotr.enchant.weak4=Bent +lotr.enchant.rangedWeak3=Cracked +lotr.enchant.strong5=Infused +lotr.enchant.meleeReach2=Lengthy +lotr.enchant.meleeSpeed2=Rapid +lotr.enchant.rangedStrong4=Forceful +lotr.enchant.fireRepair=Ashen +lotr.enchant.fireRepair.desc=Repairs armor durability while on fire +lotr.enchant.swiftness=Windy +lotr.enchant.swiftness.desc=+5% speed per armor piece + +lotr.unit.Banner_Warg=Warg Rider Banner +lotr.unit.Banner_Horse=Mounted Banner Bearer +lotr.unit.TestMob=Test Mob +lotr.unit.Sirrandrai=Rider of Sirrandrai + + +lotr.unitinfo.Angmar=To Hire this unit you must have the Angmar Objective complete. +lotr.unitinfo.Arnor=To Hire this unit you must have the Arnor Objective complete. +lotr.unitinfo.Rhudaur=To Hire this unit you must have the Rhudaur Objective complete. +lotr.unitinfo.Dale=To Hire this unit you must have the Dalish Objective complete. +lotr.unitinfo.Lindon=To Hire this unit you must have the Lindon Objective complete. + +warband.found=Warband of %s has been found %s of %s +warband.fac.MORGUL_VALE=Morgul Vale +warband.fac.WOOD_ELF_SCOUT=Woodland Realm scouts +warband.fac.RED_MOUNTAINS=Red Mountains +warband.fac.RHUDEL_GOLDEN=Golden Easterlings +warband.fac.LIMWAITH=Limwaith +warband.fac.RENEGADE=renegades + +pickpocket.cooldown=You need to wait before pickpocketing again. +pickpocket.cooldown_alt=Maybe get your hands out of his pants first. diff --git a/src (1)/main/resources/assets/cinder_loe/misc/particles.png b/src (1)/main/resources/assets/cinder_loe/misc/particles.png new file mode 100644 index 0000000..4c77142 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/misc/particles.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/arnorNun/arnorNun_female/0.png b/src (1)/main/resources/assets/cinder_loe/mob/arnorNun/arnorNun_female/0.png new file mode 100644 index 0000000..90a331b Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/arnorNun/arnorNun_female/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/dwarf/0.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/dwarf/0.png new file mode 100644 index 0000000..c9399b3 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/dwarf/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/dwarf/1.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/dwarf/1.png new file mode 100644 index 0000000..634e017 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/dwarf/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_female/0.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_female/0.png new file mode 100644 index 0000000..f253d46 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_female/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_female/1.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_female/1.png new file mode 100644 index 0000000..e7b78d6 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_female/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_female/2.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_female/2.png new file mode 100644 index 0000000..a9264b4 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_female/2.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_male/0.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_male/0.png new file mode 100644 index 0000000..3bc81be Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_male/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_male/1.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_male/1.png new file mode 100644 index 0000000..7f3f0b9 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_male/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_male/2.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_male/2.png new file mode 100644 index 0000000..a854dcb Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/elf_male/2.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/ent/beech.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/ent/beech.png new file mode 100644 index 0000000..423d411 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/ent/beech.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/ent/birch.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/ent/birch.png new file mode 100644 index 0000000..e3d5a56 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/ent/birch.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/ent/oak.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/ent/oak.png new file mode 100644 index 0000000..0f0b368 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/ent/oak.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_female/0.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_female/0.png new file mode 100644 index 0000000..eb60cd3 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_female/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_female/1.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_female/1.png new file mode 100644 index 0000000..dd3c554 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_female/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_male/0.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_male/0.png new file mode 100644 index 0000000..35bec49 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_male/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_male/1.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_male/1.png new file mode 100644 index 0000000..7da29df Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/hobbit_male/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_female/0.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_female/0.png new file mode 100644 index 0000000..306b75d Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_female/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_female/1.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_female/1.png new file mode 100644 index 0000000..92b57cb Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_female/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_female/2.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_female/2.png new file mode 100644 index 0000000..480279d Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_female/2.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/0.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/0.png new file mode 100644 index 0000000..7d3734c Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/1.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/1.png new file mode 100644 index 0000000..3b5b3ad Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/2.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/2.png new file mode 100644 index 0000000..23acbcb Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/2.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/3.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/3.png new file mode 100644 index 0000000..64aa1b4 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/human_male/3.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/orc/0.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/orc/0.png new file mode 100644 index 0000000..8c52f50 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/orc/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/orc/1.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/orc/1.png new file mode 100644 index 0000000..88ea719 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/orc/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/corrupt/orc/2.png b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/orc/2.png new file mode 100644 index 0000000..67a5b60 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/corrupt/orc/2.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/green.png b/src (1)/main/resources/assets/cinder_loe/mob/green.png new file mode 100644 index 0000000..afd0c26 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/green.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/halfTroll/0.png b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/halfTroll/0.png new file mode 100644 index 0000000..d3f354c Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/halfTroll/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/halfTroll/1.png b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/halfTroll/1.png new file mode 100644 index 0000000..edc4568 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/halfTroll/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/halfTroll/2.png b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/halfTroll/2.png new file mode 100644 index 0000000..877e6c8 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/halfTroll/2.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/half_troll_1.png b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/half_troll_1.png new file mode 100644 index 0000000..3019647 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/half_troll_1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/half_troll_2.png b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/half_troll_2.png new file mode 100644 index 0000000..e43aa12 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/half_troll_2.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/scavenger.png b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/scavenger.png new file mode 100644 index 0000000..ab48769 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/halfTroll/scavenger.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_female/0.png b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_female/0.png new file mode 100644 index 0000000..db405db Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_female/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_female/1.png b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_female/1.png new file mode 100644 index 0000000..2439ab5 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_female/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_female/2.png b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_female/2.png new file mode 100644 index 0000000..e6f4144 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_female/2.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/0.png b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/0.png new file mode 100644 index 0000000..b02b20c Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/1.png b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/1.png new file mode 100644 index 0000000..326a144 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/2.png b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/2.png new file mode 100644 index 0000000..7008447 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/2.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/3.png b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/3.png new file mode 100644 index 0000000..ef8ce6d Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/limwaith_male/3.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/limwaith/shaman_outfit/0.png b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/shaman_outfit/0.png new file mode 100644 index 0000000..0701de5 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/limwaith/shaman_outfit/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/nex/fire.png b/src (1)/main/resources/assets/cinder_loe/mob/nex/fire.png new file mode 100644 index 0000000..f3837fc Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/nex/fire.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/nex/ice.png b/src (1)/main/resources/assets/cinder_loe/mob/nex/ice.png new file mode 100644 index 0000000..aa7762c Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/nex/ice.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/nex/shadow.png b/src (1)/main/resources/assets/cinder_loe/mob/nex/shadow.png new file mode 100644 index 0000000..7c7f175 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/nex/shadow.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/nex/toxin.png b/src (1)/main/resources/assets/cinder_loe/mob/nex/toxin.png new file mode 100644 index 0000000..8bf70d8 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/nex/toxin.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/headwear_female/0.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/headwear_female/0.png new file mode 100644 index 0000000..e13c741 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/headwear_female/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/0.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/0.png new file mode 100644 index 0000000..6428958 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/1.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/1.png new file mode 100644 index 0000000..e116169 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/2.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/2.png new file mode 100644 index 0000000..d4bedf3 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/2.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/3.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/3.png new file mode 100644 index 0000000..f442b73 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/3.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/4.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/4.png new file mode 100644 index 0000000..2807638 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/4.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/5.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/5.png new file mode 100644 index 0000000..8714484 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/5.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/6.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/6.png new file mode 100644 index 0000000..ab8815a Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/6.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/7.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/7.png new file mode 100644 index 0000000..c623dba Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_female/7.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/0.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/0.png new file mode 100644 index 0000000..775d84f Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/0.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/1.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/1.png new file mode 100644 index 0000000..dfd0311 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/1.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/10.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/10.png new file mode 100644 index 0000000..ed4ebef Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/10.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/11.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/11.png new file mode 100644 index 0000000..6a47a16 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/11.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/12.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/12.png new file mode 100644 index 0000000..6b8abbd Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/12.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/13.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/13.png new file mode 100644 index 0000000..9577f8e Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/13.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/2.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/2.png new file mode 100644 index 0000000..f3ca034 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/2.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/3.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/3.png new file mode 100644 index 0000000..9d462c2 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/3.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/4.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/4.png new file mode 100644 index 0000000..848293f Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/4.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/5.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/5.png new file mode 100644 index 0000000..c6dca42 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/5.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/6.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/6.png new file mode 100644 index 0000000..795a45c Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/6.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/7.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/7.png new file mode 100644 index 0000000..256ac7f Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/7.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/8.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/8.png new file mode 100644 index 0000000..02a3f2d Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/8.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/9.png b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/9.png new file mode 100644 index 0000000..c98b746 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/renegade/renegade_male/9.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/spider/spider_dark.png b/src (1)/main/resources/assets/cinder_loe/mob/spider/spider_dark.png new file mode 100644 index 0000000..4f70135 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/spider/spider_dark.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/mob/wraith/wraith.png b/src (1)/main/resources/assets/cinder_loe/mob/wraith/wraith.png new file mode 100644 index 0000000..3276887 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/mob/wraith/wraith.png differ diff --git a/src (1)/main/resources/assets/cinder_loe/sounds.json b/src (1)/main/resources/assets/cinder_loe/sounds.json new file mode 100644 index 0000000..92c1501 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/sounds.json @@ -0,0 +1,34 @@ +{ + "boss.Battle": + { + "category": "neutral", + "sounds": + [ + "boss/battle" + ] + }, + "boss.Battle2": + { + "category": "neutral", + "sounds": + [ + "boss/combat" + ] + }, + "boss.Victory": + { + "category": "neutral", + "sounds": + [ + "boss/victory" + ] + }, + "boss.Spiders": + { + "category": "neutral", + "sounds": + [ + "boss/spiders" + ] + } +} diff --git a/src (1)/main/resources/assets/cinder_loe/sounds/boss/battle.ogg b/src (1)/main/resources/assets/cinder_loe/sounds/boss/battle.ogg new file mode 100644 index 0000000..da8aeb5 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/sounds/boss/battle.ogg differ diff --git a/src (1)/main/resources/assets/cinder_loe/sounds/boss/combat.ogg b/src (1)/main/resources/assets/cinder_loe/sounds/boss/combat.ogg new file mode 100644 index 0000000..0a78d53 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/sounds/boss/combat.ogg differ diff --git a/src (1)/main/resources/assets/cinder_loe/sounds/boss/spiders.ogg b/src (1)/main/resources/assets/cinder_loe/sounds/boss/spiders.ogg new file mode 100644 index 0000000..803ceb9 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/sounds/boss/spiders.ogg differ diff --git a/src (1)/main/resources/assets/cinder_loe/sounds/boss/victory.ogg b/src (1)/main/resources/assets/cinder_loe/sounds/boss/victory.ogg new file mode 100644 index 0000000..0201b86 Binary files /dev/null and b/src (1)/main/resources/assets/cinder_loe/sounds/boss/victory.ogg differ diff --git a/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/captain/friendly.txt b/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/captain/friendly.txt new file mode 100644 index 0000000..b89983a --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/captain/friendly.txt @@ -0,0 +1,11 @@ +Do you seek to command the Dúnedain of the North, friend #? +These Dúnedain will follow your leadership for a small price, #. +Bring some silver coins and you can have some soldiers under your command. +Are you here with the intention of hiring Rangers of the North? +I can grant you the leadership of some excellent Dúnedain Soldiers in return for silver coins. +The Rangers of the North now respect you enough to follow your command, #. +The men of Arnor only follow good and valiant Men into battle. You are worthy to lead us. +My men are the finest warriors in all of the North! +I will give you some of my men for a dozen silver coins. +Such great warriors as my men do not fight for nothing, #! They require payment. +You are worthy enough to command my valiant Soldiers. \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/captain/neutral.txt b/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/captain/neutral.txt new file mode 100644 index 0000000..5d7c7e4 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/captain/neutral.txt @@ -0,0 +1,12 @@ +Only the strongest friends of the Dúnedain may fight with us in battle, #. +If you wish to captain the warriors of Arnor, you must prove your trust. +Are you friend or foe, #? +They say you are a friend of the Dúnedain, but I cannot be sure until you have done more good. +One does not simply command the men of Arnor without gaining some reputation first. +You are not yet thought of highly enough to fight with my warriors in battle, #. +Show us that you can be trusted, #, and we will fight alongside you. +You will have to prove yourself to our kin, if you wish to command some of our mighty warriors. +We Dúnedain do not follow any stranger into battle. You will have to prove that you truly fight for good in this world. +Prove your allegiance to us, and we shall ally with you. +You must prove yourself worthy first, if you wish to lead us to battle. +Only a true friend of our folk may lead us against the servants of evil. \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/soldier/friendly.txt b/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/soldier/friendly.txt new file mode 100644 index 0000000..505b7d7 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/soldier/friendly.txt @@ -0,0 +1,23 @@ +Long have we guarded these lands, #. +We Arnorians have watched over these lands for generations lost to memory. +What brings you to this wilderness, #? +May your journey be swift and your cloak warm, #. +By nightfall this land will be crawling with Orcs. +Be on your guard, #. There are many enemies in these parts. +Good day, #. From which land do you hail? +Keep a safe camp at night, and stay out of the shadows. +It is not for nothing that we watch these lands, #. Many foul beasts nest here. +We Arnorians remember the ancient lore of the West. We have ways to walk unseen. +These lands are my domain, #, and I do all in my power to safeguard them. +Beware the wretched Morgul-scum that crawls out at night, #. +The wolf that one hears is worse than the Orc that one fears. +Were it not for us, these lands would have fallen to the darkness long ago. +Many of the folk that dwell here consider us bandits and outcasts. They do not know our true duties. +My kin has long guarded these lands from the dangers that lie to the North. +Be wary, #. Many new dangers have arisen in these dark days. +As long as we watch over these lands, travellers such as you will be able to journey in peace, #. +Lonely folk are we, Soldiers of the North, guardians - but ever guarding against the servants of the Enemy. +The servants of the Enemy are found in many places, not in Mordor only. +Beware of the ancient wights and shades that roam this land, #. It is said they can take over your body. +In time of need, we will ride to the aid of Isildur's heir. +Our homes, such as we have, are here in the North. \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/soldier/hired.txt b/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/soldier/hired.txt new file mode 100644 index 0000000..ef5f61b --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/soldier/hired.txt @@ -0,0 +1,15 @@ +My duty is to my captain # and the lands over which I stand guard. +The Morgul-filth of the night shall perish before us! +I have sworn to defend the lands of the free peoples, and defend them I shall! +May your journey be swift and your cloak warm, captain #. +By nightfall this land will be crawling with Orcs. +Be on your guard, captain #. There are many enemies in these parts. +Long have we guarded these lands, captain #. +We Soldiers have watched over these lands for generations lost to memory. +We Soldiers remember the ancient lore of the West. +The wolf that one hears is worse than the Orc that one fears. +My kin have long guarded these lands. +I will follow you wherever you go! +I have ways to move unseen in the shadows. +Let's hunt some Orc! +Be on your guard, captain #. There are keylimes lurking, waiting to nerf. \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/soldier/hostile.txt b/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/soldier/hostile.txt new file mode 100644 index 0000000..fb46e82 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/arnorSoldier/soldier/hostile.txt @@ -0,0 +1,16 @@ +Your death shall come swift as the arrow that pierces flesh, #! +I shall make an end of you! +You are not welcome in these lands, #! +Flee our lands, you wretched ally of the Morgul-filth! +You are an enemy of the race of Men, #! +What madness led you here? +Crawl back into the night, #! +You thought you could match our skill? You are sorely mistaken! +When did # forsake reason for madness? +Your doom approaches, #! +Do not underestimate the Kingdom of Arnor. +Go back to the darkness whence you came! +What devilry of the Dark Lord do you bring here? +Begone from these lands! +You shall meet your doom swiftly, scum of Mordor! +I will not allow you to harm the free folk of these lands! \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/corruptSpeak/all/hostile.txt b/src (1)/main/resources/assets/cinder_loe/speech/corruptSpeak/all/hostile.txt new file mode 100644 index 0000000..3154ef4 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/corruptSpeak/all/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 (1)/main/resources/assets/cinder_loe/speech/corruptSpeak/all/neutral.txt b/src (1)/main/resources/assets/cinder_loe/speech/corruptSpeak/all/neutral.txt new file mode 100644 index 0000000..77f5e8a --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/corruptSpeak/all/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 (1)/main/resources/assets/cinder_loe/speech/corruptSpeak/all/skeleton.txt b/src (1)/main/resources/assets/cinder_loe/speech/corruptSpeak/all/skeleton.txt new file mode 100644 index 0000000..7e1f2d3 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/corruptSpeak/all/skeleton.txt @@ -0,0 +1,6 @@ +ᛒᛟᚹ ᛒᛖᚠᛟᚱᛖ ᚦᛖ ᛞᛖᛞ! +ᛒᛖᚷ ᚠᛟᚱ ᛗᛖᚱᚲᛁ! +ᛖᛏᛖᚱᚾᚨᛚ ᛈᚨᛁᚾ ᚢᛈᛟᚾ ᛁᛟᚢ! +ᛞᛖᚦ ᚢᛈᛟᚾ ᛁᛟᚢ! +ᛈᚨᛁᚾ, ᛊᚺᚨᛗᛖ, ᚺᛟᚱᚱᛟᚱ ᛏᛟ ᛁᛟᚢ! +ᛞᚱᛟᚹᚾ ᛁᚾ ᛒᛚᛟᛟᛞ ᛊᛚᚨᚢᛖ! \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/limwaith/chieftain/friendly.txt b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/chieftain/friendly.txt new file mode 100644 index 0000000..6ce35d7 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/chieftain/friendly.txt @@ -0,0 +1,25 @@ +Do you seek my noble company, #? +You are indeed a brave warrior! +Let us share tales of war together! +You are indeed a Man of great bravery, #! +The Forest-Men have been cowering from you! +You come to hire my men? I have plenty of fierce warriors, #. +#! Have you been fighting in the North? +I hope the Forest-Men speak our names in fear, #! +The stars in the North make me dizzy. Have you felt this too? +The Great Sunken ones finds you worthy to lead my men, #. +Men wait to be led to their glory by you, #! +The finest warriors cost a pretty penny! +Even Jungle-blood does not buy an honourable warrior! I hope you come with money! +My men would be proud to serve under your banner. +Many fine tribesmen have fallen in battle and met the Great sunken ones. Many more would meet him for you! +Your blade speaks finer than the sharp sides of the sea! +Do you come from the tides, #? +For only a small commission my men will slice the throats of your enemies. +An enemy of my enemy is my friend! +I sell no ordinary warriors! +I hear tell of tall Men in the far south. I fear they may be trouble. +My warriors can be your warriors, #! +My warriors are better than anything the snake-men can muster! +The Great Sunken ones sleep beneath the tides... +My warriors would serve you bravely! \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/limwaith/chieftain/neutral.txt b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/chieftain/neutral.txt new file mode 100644 index 0000000..a0fdf90 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/chieftain/neutral.txt @@ -0,0 +1,22 @@ +My honour is proven. Do you wish to prove yours, #? +You wish to control my men? Prove your valour! +You are not yet worthy of mango. May you become so. +My men serve no commoner, #! +My men slaughter Forest-Men every day! +Who are you? I am from ancient Greece! +#? What a common name! +The best animal to hunt is Forest-Man! +Fish have more bravery than you, #. Prove your worth! +Your blade has not yet tasted Forest-Man, #. +I am a proven warrior. What are you? +The Sunken ones will soon notice my name! +Mangoes are the fruit of true warlords! +I have seen the Sunken Ones with my own eyes! +You must work harder for your rewards, #. +Soon my turn will come to see the Sunken Ones. +I have others more worthy of my time. +I wish to speak to honourable Men. Move out of my way, #! +Us Men of the Sea deserve more Men like me! +I do certainly desire to consume a mango. +The only Men you will lead are the banana-collectors, #. +Return with the lives of enemies upon your sword! \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/limwaith/moredain/friendly.txt b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/moredain/friendly.txt new file mode 100644 index 0000000..2ba88a5 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/moredain/friendly.txt @@ -0,0 +1,37 @@ +The filthy Forest-Men hide in their trees. So we chop them down. +The fruits of our land are sweeter even than the wines of the Snake-Men! +War makes men! +At night the Sunken Ones prowl the waters. Make sure you are safe, #. +#! Do you come to bring tidings of the war? +They may appear brave, but even our leaders fear the Sunken Ones. +May the Sunken Ones never devour your offspring! +The banner of our men stands stronger than ever. +Do you seek meat or merriment, #? +Have you seen the North, #? They say the stars are strange there. +A true warrior has the blood of the a Sea Serpent! +Gold and meat. What more do I need? +My dagger has pierced many a Forest-Man. +The Men of the Forests have the strength of a twig, the pride of a mango, and the wits of a Troll-Man! +The stars foretell death. +War is imminent. I shall finally be able to prove my strength! +The Forest-Men will fall to our warriors soon! +#, have you come to listen to my brave deeds? +My blade will stain the forest red! +If you want to kill Forest-Men, #, then join me, friend! +Our chieftains say that we must fight alongside the Troll-Men in the great war. +Beware the Troll-Men, #. They are demons in the form of Men. +The Troll-Men may march with us in the war to come, but I fear and hate them no less for this. +As long as we can remember, the Troll-Men have raided our villages and murdered our people. And now we must fight alongside them? I do not like this, #. +In the deep past, our chieftains led us out of the Shadow into the Sunlands. Now I fear the Shadow is falling upon us once more. +The tribes of the great forests have long been our enemies. +I know little of the Men in the North, but our chieftains say we must march to war against them. So we shall. +We will be slaves to the Forests no longer! +Merchants from the lands of the serpent often visit our tribe. Pay them no heed. They carry useless trinkets. +Some of my people have gone to fight for the Serpent, for silver. Honourless, I call them. +King or slave, brave or weak, old or young... in time, the Sunken Ones will drown us all. +The Serpent cannot swim, the Lion is a cat that fears water, true power is with the Sunken Ones +The Sunken Ones wait deep below, beyond the light. They wait for the end, #. +The Plains-Men are proud, #. But they forget, the Waters will soon drown us all. +Beware the forests, #. Wicked Men lurk within. +Long ago, the Forest-Men made war against our people. We do not forget. +Praise the great Eye, #! He has made an end to the Troll-Men raids! \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/limwaith/moredain/hired.txt b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/moredain/hired.txt new file mode 100644 index 0000000..d8f6958 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/moredain/hired.txt @@ -0,0 +1,24 @@ +If I die fighting, my family shall be proud! +May the Sunken Ones bless our weapons! +#, do we stop for meat? +I can finally prove myself in battle! +The wind holds tidings of war. +I hope one day to return to my tribe. +My feet are sore, #. +Are we to fight for the flaming Eye? +It would take a lake to quench my thirst! +You fight like a lord, #. +I have hunted zebra and crocodile. One day I shall hunt Forest-Man! +It is merely a flesh wound. +I smell battle! +My children shall be big when I return! +When a man dies, his soul meets the Sunken Ones. Some day I too will meet them. +I have trained for many a day in the heat of the plains. +Some fruit and Snake-Man water would be a blessing! +The flaming Eye fills me with fear, #. +A banana is always welcome on my plate! +#, where are we headed today? +#! Please don't put me on guard duty again! +I know no fear! +Filthy Forest-Men fear my name! +Time for drinking! \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/limwaith/moredain/hostile.txt b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/moredain/hostile.txt new file mode 100644 index 0000000..7692b03 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/moredain/hostile.txt @@ -0,0 +1,23 @@ +The Sunken Ones will drown your soul, #! +Flee, coward! +May you never taste mango again! +The flaming Eye will destroy you! +Did the Forest-Men send you? +#, your name will be lost to the tides! +Another soul for my blade to feed on! +An enemy of the tribes has no friends in these lands! +Go back to the forest, you pitiful twig! +Raaaaargh! +For the Sunken Ones! +Flee, unworthy creature! +#, savour your demise! +I want your blood, #! +You have the strength of the flamingo! +You defy the Oceans? +Yaaargh! +Forest-Man! Die, #! +Run or face your death, soulless one! +I have no pity for you, coward! +Our tales tell of Men such as you, #! Know that they all met their end painfully! +A test for my strength! I shall savour my victory over you! +I have seen braver bananas than you, #! \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/limwaith/shaman/friendly.txt b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/shaman/friendly.txt new file mode 100644 index 0000000..070b080 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/shaman/friendly.txt @@ -0,0 +1,15 @@ +I have many oddities from the groves. What would you like? +Some call it witchery. I call it medicine. +Our swamp water invigorates even the weakest wanderer! +What remedies can I offer you, #? +Are you sick, #? I can heal many things! +My bonemold recipes are the best in the Swamps! +Banana bread is such a disgrace to good breads. +Do you have any delicious fish for me, #? +I'll buy lots of bone, if you have them, #. +My darts are the sharpest in all the groves! +I might have just what you are looking for, #. +What can I get for you, #, warrior of the tribe? +I hope you have enough silver, #. +My goods aren't pricey, but they're not cheap either, #. +You could use some strength, #. I may have just the thing! \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/limwaith/shaman/hostile.txt b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/shaman/hostile.txt new file mode 100644 index 0000000..c84fbd8 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/shaman/hostile.txt @@ -0,0 +1,11 @@ +No more dealings with you, #! +Thieves! Mongrels! Slaves of the Enemy! You are all dead in my eyes. +Jungle dweller! You will get nothing but death from me! +How foolish of you to come here, #! +The beasts of the waters will tear you apart! +There is no hope for you now, #! +What makes you think you deserve what I have to sell, #? +I will boil you down in a cauldron! +The Jungles do not protect you here! +Our warriors will crush you, savage! +I will not trade with a savage out of the jungle! \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/limwaith/shaman/neutral.txt b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/shaman/neutral.txt new file mode 100644 index 0000000..b46ddd4 --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/limwaith/shaman/neutral.txt @@ -0,0 +1,10 @@ +You don't quite have my trust yet, #. Come back another day! +I don't want your fish, #. +Prove your friendship with our people, and then you may buy from me. +You look like trouble, #. +I doubt you have enough money for my goods. +You don't look like one of us. +I bet you like banana bread, #. Fool! +You are not a friend of my people, #. Begone. +I doubt you are any better than those savage jungle dwellers, #. +Mind yourself, #. It is unwise to make enemies in the groves. \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/renegade/drunkard/neutral.txt b/src (1)/main/resources/assets/cinder_loe/speech/renegade/drunkard/neutral.txt new file mode 100644 index 0000000..fe8fdfb --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/renegade/drunkard/neutral.txt @@ -0,0 +1,7 @@ +With three beers down, the Orc did frown, and bid the Elf goodbye, for none could know, 'twas not for show, and someone had to die. +Never enough gold... just need one more good haul. +Should have known she was lying... she said she would wait for me, but they never wait.. +...mead, mead, mead... ...kill 'em to get some beer every now and then.. Stupid bees and their stupid honey... +Lying little harlot.. that brat ain't mine, could be anyone's... won't get a single silver from me... +Hmph, wizards... now that's power.. bet they got that "secret magic".. turn wood into gold.. yeah, wish I could turn wood into gold... +Go to the college, da said. Use your smarts, he said. Idiot, how was I supposed to know what college he meant? \ No newline at end of file diff --git a/src (1)/main/resources/assets/cinder_loe/speech/renegade/man/hostile.txt b/src (1)/main/resources/assets/cinder_loe/speech/renegade/man/hostile.txt new file mode 100644 index 0000000..5cb584a --- /dev/null +++ b/src (1)/main/resources/assets/cinder_loe/speech/renegade/man/hostile.txt @@ -0,0 +1,6 @@ +Your money or your life! +You'll be so much easier to rob when you're dead! +Can't wait to count out your coin... +Tell you what. You start running so I can stab you in the back. +Lookie here. Looks like we got ourselves a hero. +You picked a bad time to get lost, friend. \ No newline at end of file diff --git a/src (1)/main/resources/assets/lotr/armor/battlenun_1.png b/src (1)/main/resources/assets/lotr/armor/battlenun_1.png new file mode 100644 index 0000000..99ceaaa Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/battlenun_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/battlenun_2.png b/src (1)/main/resources/assets/lotr/armor/battlenun_2.png new file mode 100644 index 0000000..b4e925e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/battlenun_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/bonemold_1.png b/src (1)/main/resources/assets/lotr/armor/bonemold_1.png new file mode 100644 index 0000000..9f85741 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/bonemold_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/bonemold_2.png b/src (1)/main/resources/assets/lotr/armor/bonemold_2.png new file mode 100644 index 0000000..1d18d3e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/bonemold_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/bree_1.png b/src (1)/main/resources/assets/lotr/armor/bree_1.png new file mode 100644 index 0000000..7f65418 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/bree_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/bree_2.png b/src (1)/main/resources/assets/lotr/armor/bree_2.png new file mode 100644 index 0000000..a036bdf Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/bree_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/bree_helmet.png b/src (1)/main/resources/assets/lotr/armor/bree_helmet.png new file mode 100644 index 0000000..f71fa18 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/bree_helmet.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/event_helmet.png b/src (1)/main/resources/assets/lotr/armor/event_helmet.png new file mode 100644 index 0000000..b2e9eb2 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/event_helmet.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/jade_1.png b/src (1)/main/resources/assets/lotr/armor/jade_1.png new file mode 100644 index 0000000..3be60d9 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/jade_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/jade_chestplate.png b/src (1)/main/resources/assets/lotr/armor/jade_chestplate.png new file mode 100644 index 0000000..fa8a444 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/jade_chestplate.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/jade_helmet.png b/src (1)/main/resources/assets/lotr/armor/jade_helmet.png new file mode 100644 index 0000000..fad6485 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/jade_helmet.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/jade_leggings.png b/src (1)/main/resources/assets/lotr/armor/jade_leggings.png new file mode 100644 index 0000000..ef07184 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/jade_leggings.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/limwaith_wood_1.png b/src (1)/main/resources/assets/lotr/armor/limwaith_wood_1.png new file mode 100644 index 0000000..7bfda2f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/limwaith_wood_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/limwaith_wood_2.png b/src (1)/main/resources/assets/lotr/armor/limwaith_wood_2.png new file mode 100644 index 0000000..952e0ff Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/limwaith_wood_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/mount/boar_red_dwarf.png b/src (1)/main/resources/assets/lotr/armor/mount/boar_red_dwarf.png new file mode 100644 index 0000000..2f30c0d Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/mount/boar_red_dwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/nex_fire_2.png b/src (1)/main/resources/assets/lotr/armor/nex_fire_2.png new file mode 100644 index 0000000..6a59ecc Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/nex_fire_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/nex_fire_chestplate.png b/src (1)/main/resources/assets/lotr/armor/nex_fire_chestplate.png new file mode 100644 index 0000000..1aa014a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/nex_fire_chestplate.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/nex_ice_1.png b/src (1)/main/resources/assets/lotr/armor/nex_ice_1.png new file mode 100644 index 0000000..ea6891a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/nex_ice_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/nex_ice_2.png b/src (1)/main/resources/assets/lotr/armor/nex_ice_2.png new file mode 100644 index 0000000..d761058 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/nex_ice_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/nex_ice_chestplate.png b/src (1)/main/resources/assets/lotr/armor/nex_ice_chestplate.png new file mode 100644 index 0000000..d745900 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/nex_ice_chestplate.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/nex_shadow_1.png b/src (1)/main/resources/assets/lotr/armor/nex_shadow_1.png new file mode 100644 index 0000000..964c442 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/nex_shadow_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/nex_shadow_2.png b/src (1)/main/resources/assets/lotr/armor/nex_shadow_2.png new file mode 100644 index 0000000..cc96dcc Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/nex_shadow_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/nex_toxin_1.png b/src (1)/main/resources/assets/lotr/armor/nex_toxin_1.png new file mode 100644 index 0000000..ff4c2ba Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/nex_toxin_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/nex_toxin_2.png b/src (1)/main/resources/assets/lotr/armor/nex_toxin_2.png new file mode 100644 index 0000000..f3d9ed2 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/nex_toxin_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/nex_toxin_chestplate.png b/src (1)/main/resources/assets/lotr/armor/nex_toxin_chestplate.png new file mode 100644 index 0000000..454d004 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/nex_toxin_chestplate.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/red_dwarf_1.png b/src (1)/main/resources/assets/lotr/armor/red_dwarf_1.png new file mode 100644 index 0000000..e97e829 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/red_dwarf_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/red_dwarf_2.png b/src (1)/main/resources/assets/lotr/armor/red_dwarf_2.png new file mode 100644 index 0000000..3382154 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/red_dwarf_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/red_dwarf_helmet.png b/src (1)/main/resources/assets/lotr/armor/red_dwarf_helmet.png new file mode 100644 index 0000000..6cad3de Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/red_dwarf_helmet.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/rhudaur_1.png b/src (1)/main/resources/assets/lotr/armor/rhudaur_1.png new file mode 100644 index 0000000..9f50726 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/rhudaur_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/rhudaur_2.png b/src (1)/main/resources/assets/lotr/armor/rhudaur_2.png new file mode 100644 index 0000000..9242096 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/rhudaur_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/rhudaur_helmet.png b/src (1)/main/resources/assets/lotr/armor/rhudaur_helmet.png new file mode 100644 index 0000000..094eaf5 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/rhudaur_helmet.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/serpent_1.png b/src (1)/main/resources/assets/lotr/armor/serpent_1.png new file mode 100644 index 0000000..af5c6eb Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/serpent_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/serpent_2.png b/src (1)/main/resources/assets/lotr/armor/serpent_2.png new file mode 100644 index 0000000..d486abf Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/serpent_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/serpent_chestplate.png b/src (1)/main/resources/assets/lotr/armor/serpent_chestplate.png new file mode 100644 index 0000000..f303c0c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/serpent_chestplate.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/usurper_1.png b/src (1)/main/resources/assets/lotr/armor/usurper_1.png new file mode 100644 index 0000000..1bf3ea0 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/usurper_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/usurper_2.png b/src (1)/main/resources/assets/lotr/armor/usurper_2.png new file mode 100644 index 0000000..cabb735 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/usurper_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/usurper_helmet.png b/src (1)/main/resources/assets/lotr/armor/usurper_helmet.png new file mode 100644 index 0000000..daa1705 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/usurper_helmet.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/warlord_1.png b/src (1)/main/resources/assets/lotr/armor/warlord_1.png new file mode 100644 index 0000000..9b9411a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/warlord_1.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/warlord_2.png b/src (1)/main/resources/assets/lotr/armor/warlord_2.png new file mode 100644 index 0000000..e6cd11d Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/warlord_2.png differ diff --git a/src (1)/main/resources/assets/lotr/armor/warlord_helmet.png b/src (1)/main/resources/assets/lotr/armor/warlord_helmet.png new file mode 100644 index 0000000..0f32f4f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/armor/warlord_helmet.png differ diff --git a/src (1)/main/resources/assets/lotr/item/banner/banner_blue.png b/src (1)/main/resources/assets/lotr/item/banner/banner_blue.png new file mode 100644 index 0000000..bf0666e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/item/banner/banner_blue.png differ diff --git a/src (1)/main/resources/assets/lotr/item/banner/banner_green.png b/src (1)/main/resources/assets/lotr/item/banner/banner_green.png new file mode 100644 index 0000000..bd2366a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/item/banner/banner_green.png differ diff --git a/src (1)/main/resources/assets/lotr/item/banner/banner_limwaith.png b/src (1)/main/resources/assets/lotr/item/banner/banner_limwaith.png new file mode 100644 index 0000000..ca0dbea Binary files /dev/null and b/src (1)/main/resources/assets/lotr/item/banner/banner_limwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/item/banner/banner_red.png b/src (1)/main/resources/assets/lotr/item/banner/banner_red.png new file mode 100644 index 0000000..d91b42f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/item/banner/banner_red.png differ diff --git a/src (1)/main/resources/assets/lotr/item/banner/banner_redDwarf.png b/src (1)/main/resources/assets/lotr/item/banner/banner_redDwarf.png new file mode 100644 index 0000000..bed495d Binary files /dev/null and b/src (1)/main/resources/assets/lotr/item/banner/banner_redDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/item/verticalweaponRack.png b/src (1)/main/resources/assets/lotr/item/verticalweaponRack.png new file mode 100644 index 0000000..c7e0de7 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/item/verticalweaponRack.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/barricade.png b/src (1)/main/resources/assets/lotr/textures/blocks/barricade.png new file mode 100644 index 0000000..4967d75 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/barricade.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/bars_red_dwarf.png b/src (1)/main/resources/assets/lotr/textures/blocks/bars_red_dwarf.png new file mode 100644 index 0000000..a8e2578 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/bars_red_dwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_bottom.png b/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_bottom.png new file mode 100644 index 0000000..5cfcd06 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_bottom.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_mid.png b/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_mid.png new file mode 100644 index 0000000..069555b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_mid.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_single.png b/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_single.png new file mode 100644 index 0000000..f55d397 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_single.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_top.png b/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_top.png new file mode 100644 index 0000000..4713718 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/bronzeChain_top.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_0.png b/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_0.png new file mode 100644 index 0000000..7d3485f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_0.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_1.png b/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_1.png new file mode 100644 index 0000000..d015c29 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_1.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_2.png b/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_2.png new file mode 100644 index 0000000..8ba1d8e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_2.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_3.png b/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_3.png new file mode 100644 index 0000000..9d4b0fc Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cabbage_3.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/chandelier_red_dwarf.png b/src (1)/main/resources/assets/lotr/textures/blocks/chandelier_red_dwarf.png new file mode 100644 index 0000000..4ac4b7e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/chandelier_red_dwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cinder_block.png b/src (1)/main/resources/assets/lotr/textures/blocks/cinder_block.png new file mode 100644 index 0000000..939c06b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cinder_block.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cinder_block.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/blocks/cinder_block.png.mcmeta new file mode 100644 index 0000000..abe58ab --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/blocks/cinder_block.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation":{"frametime":8} +} \ No newline at end of file diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_drystone.png b/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_drystone.png new file mode 100644 index 0000000..646d702 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_drystone.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_mordor.png b/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_mordor.png new file mode 100644 index 0000000..267f73a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_mordor.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_silverbrick.png b/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_silverbrick.png new file mode 100644 index 0000000..5a627d5 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_silverbrick.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_silvercobble.png b/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_silvercobble.png new file mode 100644 index 0000000..5fa9a0f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cindercobble_silvercobble.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_bearblack.png b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_bearblack.png new file mode 100644 index 0000000..a56ff66 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_bearblack.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_bearbrown.png b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_bearbrown.png new file mode 100644 index 0000000..cc6107c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_bearbrown.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_black.png b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_black.png new file mode 100644 index 0000000..6a0ec9c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_black.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_brown.png b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_brown.png new file mode 100644 index 0000000..0ad91ed Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_brown.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_gray.png b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_gray.png new file mode 100644 index 0000000..ac386b9 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_gray.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_lion.png b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_lion.png new file mode 100644 index 0000000..04e9f16 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_lion.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_lioness.png b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_lioness.png new file mode 100644 index 0000000..450aa46 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_lioness.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_obsidian.png b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_obsidian.png new file mode 100644 index 0000000..28eb3eb Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_obsidian.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_white.png b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_white.png new file mode 100644 index 0000000..4d0492f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cinderfur_white.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/cutDrystone.png b/src (1)/main/resources/assets/lotr/textures/blocks/cutDrystone.png new file mode 100644 index 0000000..315ee0c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/cutDrystone.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/display_sword_rusted.png b/src (1)/main/resources/assets/lotr/textures/blocks/display_sword_rusted.png new file mode 100644 index 0000000..b37a319 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/display_sword_rusted.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/dwarven_brick_runed.png b/src (1)/main/resources/assets/lotr/textures/blocks/dwarven_brick_runed.png new file mode 100644 index 0000000..a088a2b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/dwarven_brick_runed.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/fishbarrel_bottom.png b/src (1)/main/resources/assets/lotr/textures/blocks/fishbarrel_bottom.png new file mode 100644 index 0000000..d34f15b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/fishbarrel_bottom.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/fishbarrel_side.png b/src (1)/main/resources/assets/lotr/textures/blocks/fishbarrel_side.png new file mode 100644 index 0000000..46a0aba Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/fishbarrel_side.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/fishbarrel_top.png b/src (1)/main/resources/assets/lotr/textures/blocks/fishbarrel_top.png new file mode 100644 index 0000000..93f7d58 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/fishbarrel_top.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_bottom.png b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_bottom.png new file mode 100644 index 0000000..83ed3e6 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_bottom.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_0.png b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_0.png new file mode 100644 index 0000000..88acb55 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_0.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_180.png b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_180.png new file mode 100644 index 0000000..2073682 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_180.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_270.png b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_270.png new file mode 100644 index 0000000..fda3957 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_270.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_90.png b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_90.png new file mode 100644 index 0000000..da635bb Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_side_90.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_top.png b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_top.png new file mode 100644 index 0000000..9de20c3 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/fur_bundle_top.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/gatecharredportcullis.png b/src (1)/main/resources/assets/lotr/textures/blocks/gatecharredportcullis.png new file mode 100644 index 0000000..65ffdde Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/gatecharredportcullis.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_bottom.png b/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_bottom.png new file mode 100644 index 0000000..6b76c9b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_bottom.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_mid.png b/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_mid.png new file mode 100644 index 0000000..c40b6eb Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_mid.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_single.png b/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_single.png new file mode 100644 index 0000000..f8b0e15 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_single.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_top.png b/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_top.png new file mode 100644 index 0000000..f8b0e15 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/goldChain_top.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/ice_cage.png b/src (1)/main/resources/assets/lotr/textures/blocks/ice_cage.png new file mode 100644 index 0000000..cfdeb25 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/ice_cage.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/invisible.png b/src (1)/main/resources/assets/lotr/textures/blocks/invisible.png new file mode 100644 index 0000000..3ccb574 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/invisible.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_bottom.png b/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_bottom.png new file mode 100644 index 0000000..05523c5 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_bottom.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_mid.png b/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_mid.png new file mode 100644 index 0000000..ee0680f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_mid.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_single.png b/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_single.png new file mode 100644 index 0000000..be3a2f4 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_single.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_top.png b/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_top.png new file mode 100644 index 0000000..be3a2f4 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/ironChain_top.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/ivory_block_side_0.png b/src (1)/main/resources/assets/lotr/textures/blocks/ivory_block_side_0.png new file mode 100644 index 0000000..e427528 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/ivory_block_side_0.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/ivory_block_side_90.png b/src (1)/main/resources/assets/lotr/textures/blocks/ivory_block_side_90.png new file mode 100644 index 0000000..b6c0bfe Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/ivory_block_side_90.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/ivory_block_top.png b/src (1)/main/resources/assets/lotr/textures/blocks/ivory_block_top.png new file mode 100644 index 0000000..74ac7de Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/ivory_block_top.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_bottom.png b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_bottom.png new file mode 100644 index 0000000..0ef6a5f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_bottom.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_0.png b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_0.png new file mode 100644 index 0000000..da97577 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_0.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_180.png b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_180.png new file mode 100644 index 0000000..2cf3158 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_180.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_270.png b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_270.png new file mode 100644 index 0000000..c61e62e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_270.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_90.png b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_90.png new file mode 100644 index 0000000..781aba3 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_side_90.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_top.png b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_top.png new file mode 100644 index 0000000..852cd71 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/leather_bundle_top.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/nex_ice_crystal.png b/src (1)/main/resources/assets/lotr/textures/blocks/nex_ice_crystal.png new file mode 100644 index 0000000..571d58d Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/nex_ice_crystal.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/onion_0.png b/src (1)/main/resources/assets/lotr/textures/blocks/onion_0.png new file mode 100644 index 0000000..f481537 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/onion_0.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/onion_1.png b/src (1)/main/resources/assets/lotr/textures/blocks/onion_1.png new file mode 100644 index 0000000..50fd652 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/onion_1.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/onion_2.png b/src (1)/main/resources/assets/lotr/textures/blocks/onion_2.png new file mode 100644 index 0000000..1b55755 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/onion_2.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/onion_3.png b/src (1)/main/resources/assets/lotr/textures/blocks/onion_3.png new file mode 100644 index 0000000..ae35c2d Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/onion_3.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/plaster.png b/src (1)/main/resources/assets/lotr/textures/blocks/plaster.png new file mode 100644 index 0000000..e6c909e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/plaster.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/red_dwarf_steel.png b/src (1)/main/resources/assets/lotr/textures/blocks/red_dwarf_steel.png new file mode 100644 index 0000000..66984c3 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/red_dwarf_steel.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_bottom.png b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_bottom.png new file mode 100644 index 0000000..7e4a8ad Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_bottom.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_0.png b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_0.png new file mode 100644 index 0000000..e6c2ef9 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_0.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_180.png b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_180.png new file mode 100644 index 0000000..671c03a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_180.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_270.png b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_270.png new file mode 100644 index 0000000..0839f6a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_270.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_90.png b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_90.png new file mode 100644 index 0000000..51fdaec Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_side_90.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_top.png b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_top.png new file mode 100644 index 0000000..7e4a8ad Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/reed_bale_top.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/reeflessCoral.png b/src (1)/main/resources/assets/lotr/textures/blocks/reeflessCoral.png new file mode 100644 index 0000000..ef49e3e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/reeflessCoral.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/shadow_tile.png b/src (1)/main/resources/assets/lotr/textures/blocks/shadow_tile.png new file mode 100644 index 0000000..30d8fdf Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/shadow_tile.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_bottom.png b/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_bottom.png new file mode 100644 index 0000000..4508f63 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_bottom.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_mid.png b/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_mid.png new file mode 100644 index 0000000..4e40b50 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_mid.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_single.png b/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_single.png new file mode 100644 index 0000000..b708df9 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_single.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_top.png b/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_top.png new file mode 100644 index 0000000..4539b1b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/silverChain_top.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/voidblock.png b/src (1)/main/resources/assets/lotr/textures/blocks/voidblock.png new file mode 100644 index 0000000..e3640be Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/voidblock.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_bottom.png b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_bottom.png new file mode 100644 index 0000000..97cf823 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_bottom.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_0.png b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_0.png new file mode 100644 index 0000000..c65950b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_0.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_180.png b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_180.png new file mode 100644 index 0000000..4044ec4 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_180.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_270.png b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_270.png new file mode 100644 index 0000000..9c27e6e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_270.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_90.png b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_90.png new file mode 100644 index 0000000..7241f3e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_side_90.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_top.png b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_top.png new file mode 100644 index 0000000..97cf823 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/blocks/woodpanel_top.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/alatarStaff.png b/src (1)/main/resources/assets/lotr/textures/items/alatarStaff.png new file mode 100644 index 0000000..e3c599a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/alatarStaff.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/banner_blue.png b/src (1)/main/resources/assets/lotr/textures/items/banner_blue.png new file mode 100644 index 0000000..cb5b346 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/banner_blue.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/banner_green.png b/src (1)/main/resources/assets/lotr/textures/items/banner_green.png new file mode 100644 index 0000000..200af98 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/banner_green.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/banner_limwaith.png b/src (1)/main/resources/assets/lotr/textures/items/banner_limwaith.png new file mode 100644 index 0000000..11bec22 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/banner_limwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/banner_red.png b/src (1)/main/resources/assets/lotr/textures/items/banner_red.png new file mode 100644 index 0000000..35c5269 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/banner_red.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/banner_redDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/banner_redDwarf.png new file mode 100644 index 0000000..67b317a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/banner_redDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/battleaxeAsh.png b/src (1)/main/resources/assets/lotr/textures/items/battleaxeAsh.png new file mode 100644 index 0000000..7b1b6ee Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/battleaxeAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/battleaxeLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/battleaxeLimwaith.png new file mode 100644 index 0000000..5c54f68 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/battleaxeLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/battleaxeRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/battleaxeRedDwarf.png new file mode 100644 index 0000000..21c81a2 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/battleaxeRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/blessed_hammer.png b/src (1)/main/resources/assets/lotr/textures/items/blessed_hammer.png new file mode 100644 index 0000000..96f7114 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/blessed_hammer.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/blowgunLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/blowgunLimwaith.png new file mode 100644 index 0000000..26859f1 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/blowgunLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/boarArmorRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/boarArmorRedDwarf.png new file mode 100644 index 0000000..0ba3968 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/boarArmorRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bodyArnorBanner.png b/src (1)/main/resources/assets/lotr/textures/items/bodyArnorBanner.png new file mode 100644 index 0000000..a50fc62 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bodyArnorBanner.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bodyBree.png b/src (1)/main/resources/assets/lotr/textures/items/bodyBree.png new file mode 100644 index 0000000..386f36b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bodyBree.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bodyJade.png b/src (1)/main/resources/assets/lotr/textures/items/bodyJade.png new file mode 100644 index 0000000..a6965a0 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bodyJade.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bodyLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/bodyLimwaith.png new file mode 100644 index 0000000..b919b0a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bodyLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bodyRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/bodyRedDwarf.png new file mode 100644 index 0000000..6bff7e4 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bodyRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bodyRhudaur.png b/src (1)/main/resources/assets/lotr/textures/items/bodyRhudaur.png new file mode 100644 index 0000000..c7cb6fa Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bodyRhudaur.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bodyUsurper.png b/src (1)/main/resources/assets/lotr/textures/items/bodyUsurper.png new file mode 100644 index 0000000..bc20a59 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bodyUsurper.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bodyWarlord.png b/src (1)/main/resources/assets/lotr/textures/items/bodyWarlord.png new file mode 100644 index 0000000..a2022bf Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bodyWarlord.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bodyboneLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/bodyboneLimwaith.png new file mode 100644 index 0000000..dc6b065 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bodyboneLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bodyserpent.png b/src (1)/main/resources/assets/lotr/textures/items/bodyserpent.png new file mode 100644 index 0000000..11fb43c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bodyserpent.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bonemold.png b/src (1)/main/resources/assets/lotr/textures/items/bonemold.png new file mode 100644 index 0000000..53a5f55 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bonemold.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bootsArnorBanner.png b/src (1)/main/resources/assets/lotr/textures/items/bootsArnorBanner.png new file mode 100644 index 0000000..09309d9 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bootsArnorBanner.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bootsBree.png b/src (1)/main/resources/assets/lotr/textures/items/bootsBree.png new file mode 100644 index 0000000..f794b8c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bootsBree.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bootsJade.png b/src (1)/main/resources/assets/lotr/textures/items/bootsJade.png new file mode 100644 index 0000000..4289027 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bootsJade.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bootsLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/bootsLimwaith.png new file mode 100644 index 0000000..2268432 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bootsLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bootsRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/bootsRedDwarf.png new file mode 100644 index 0000000..a6b8890 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bootsRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bootsRhudaur.png b/src (1)/main/resources/assets/lotr/textures/items/bootsRhudaur.png new file mode 100644 index 0000000..fd6ae95 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bootsRhudaur.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bootsUsurper.png b/src (1)/main/resources/assets/lotr/textures/items/bootsUsurper.png new file mode 100644 index 0000000..dce50f0 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bootsUsurper.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bootsWarlord.png b/src (1)/main/resources/assets/lotr/textures/items/bootsWarlord.png new file mode 100644 index 0000000..7d8295b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bootsWarlord.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bootsboneLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/bootsboneLimwaith.png new file mode 100644 index 0000000..9e057b5 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bootsboneLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bootsserpent.png b/src (1)/main/resources/assets/lotr/textures/items/bootsserpent.png new file mode 100644 index 0000000..772896c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bootsserpent.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bowAsh.png b/src (1)/main/resources/assets/lotr/textures/items/bowAsh.png new file mode 100644 index 0000000..c8598ee Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bowAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/breekettlehelmet.png b/src (1)/main/resources/assets/lotr/textures/items/breekettlehelmet.png new file mode 100644 index 0000000..6fc27e5 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/breekettlehelmet.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/bronzeChain.png b/src (1)/main/resources/assets/lotr/textures/items/bronzeChain.png new file mode 100644 index 0000000..43e2cae Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/bronzeChain.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/cabbage.png b/src (1)/main/resources/assets/lotr/textures/items/cabbage.png new file mode 100644 index 0000000..19ab7fe Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/cabbage.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/celeiniss.png b/src (1)/main/resources/assets/lotr/textures/items/celeiniss.png new file mode 100644 index 0000000..a6288b0 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/celeiniss.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/chocolatebar.png b/src (1)/main/resources/assets/lotr/textures/items/chocolatebar.png new file mode 100644 index 0000000..198e741 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/chocolatebar.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_0.png b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_0.png new file mode 100644 index 0000000..029301d Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_0.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_1.png b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_1.png new file mode 100644 index 0000000..50c925f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_1.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_2.png b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_2.png new file mode 100644 index 0000000..9dbc84f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_2.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_3.png b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_3.png new file mode 100644 index 0000000..6753689 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_3.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_4.png b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_4.png new file mode 100644 index 0000000..f3d8335 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_4.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_5.png b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_5.png new file mode 100644 index 0000000..b2000cd Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_5.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_6.png b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_6.png new file mode 100644 index 0000000..cf9a1c8 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/cinder_fur_item_6.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/cleaver.png b/src (1)/main/resources/assets/lotr/textures/items/cleaver.png new file mode 100644 index 0000000..1b63d74 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/cleaver.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf.png new file mode 100644 index 0000000..3896ba0 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf_pull_0.png b/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf_pull_0.png new file mode 100644 index 0000000..c161d32 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf_pull_0.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf_pull_1.png b/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf_pull_1.png new file mode 100644 index 0000000..eecc1d9 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf_pull_1.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf_pull_2.png b/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf_pull_2.png new file mode 100644 index 0000000..fcf1e47 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/crossbowRedDwarf_pull_2.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/daggerAsh.png b/src (1)/main/resources/assets/lotr/textures/items/daggerAsh.png new file mode 100644 index 0000000..2d24517 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/daggerAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/daggerAsh.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/daggerAsh.png.mcmeta new file mode 100644 index 0000000..762e94b --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/daggerAsh.png.mcmeta @@ -0,0 +1,69 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/daggerLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/daggerLimwaith.png new file mode 100644 index 0000000..8b7b130 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/daggerLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/daggerLimwaithPoisoned.png b/src (1)/main/resources/assets/lotr/textures/items/daggerLimwaithPoisoned.png new file mode 100644 index 0000000..49d50ca Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/daggerLimwaithPoisoned.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/daggerRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/daggerRedDwarf.png new file mode 100644 index 0000000..3d34186 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/daggerRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/daggerRedDwarfPoisoned.png b/src (1)/main/resources/assets/lotr/textures/items/daggerRedDwarfPoisoned.png new file mode 100644 index 0000000..d8acb24 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/daggerRedDwarfPoisoned.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/daggerVoid.png b/src (1)/main/resources/assets/lotr/textures/items/daggerVoid.png new file mode 100644 index 0000000..7efb611 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/daggerVoid.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/daggerVoid.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/daggerVoid.png.mcmeta new file mode 100644 index 0000000..7f18a4d --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/daggerVoid.png.mcmeta @@ -0,0 +1,77 @@ +{ + "animation": { + "frames": [ + 0, + 0, + 0, + 1, + 1, + 1, + 2, + 2, + 2, + 3, + 3, + 3, + 4, + 4, + 4, + 5, + 5, + 5, + 6, + 6, + 6, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade.png b/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade.png new file mode 100644 index 0000000..e11f7f5 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade.png.mcmeta new file mode 100644 index 0000000..55aeb43 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade.png.mcmeta @@ -0,0 +1,30 @@ +{ + "animation": { + "frames": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5 + ] + } +} \ No newline at end of file diff --git a/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade_blade.png b/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade_blade.png new file mode 100644 index 0000000..037df3a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade_blade.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade_guard.png b/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade_guard.png new file mode 100644 index 0000000..1d40b0f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade_guard.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade_hilt.png b/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade_hilt.png new file mode 100644 index 0000000..e3c8ce9 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/deceiver_blade_hilt.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/demonblood_vial.png b/src (1)/main/resources/assets/lotr/textures/items/demonblood_vial.png new file mode 100644 index 0000000..78a0625 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/demonblood_vial.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/doner_kebab.png b/src (1)/main/resources/assets/lotr/textures/items/doner_kebab.png new file mode 100644 index 0000000..e16f1b2 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/doner_kebab.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/dough.png b/src (1)/main/resources/assets/lotr/textures/items/dough.png new file mode 100644 index 0000000..ff304d2 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/dough.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/flour.png b/src (1)/main/resources/assets/lotr/textures/items/flour.png new file mode 100644 index 0000000..c0f4b99 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/flour.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/frostblade.png b/src (1)/main/resources/assets/lotr/textures/items/frostblade.png new file mode 100644 index 0000000..16fb0b0 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/frostblade.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/fruitsalad.png b/src (1)/main/resources/assets/lotr/textures/items/fruitsalad.png new file mode 100644 index 0000000..0b0d00e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/fruitsalad.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/gandalfStaffGrey.png b/src (1)/main/resources/assets/lotr/textures/items/gandalfStaffGrey.png new file mode 100644 index 0000000..6dcb3ef Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/gandalfStaffGrey.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/gandalfStaffWhite.png b/src (1)/main/resources/assets/lotr/textures/items/gandalfStaffWhite.png new file mode 100644 index 0000000..fba1bf1 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/gandalfStaffWhite.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/goldChain.png b/src (1)/main/resources/assets/lotr/textures/items/goldChain.png new file mode 100644 index 0000000..3f28968 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/goldChain.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/halva.png b/src (1)/main/resources/assets/lotr/textures/items/halva.png new file mode 100644 index 0000000..eaeb095 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/halva.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/hammerAsh.png b/src (1)/main/resources/assets/lotr/textures/items/hammerAsh.png new file mode 100644 index 0000000..636843b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/hammerAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/hammerRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/hammerRedDwarf.png new file mode 100644 index 0000000..1447866 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/hammerRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/helmetArnorBanner.png b/src (1)/main/resources/assets/lotr/textures/items/helmetArnorBanner.png new file mode 100644 index 0000000..89539fa Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/helmetArnorBanner.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/helmetBree.png b/src (1)/main/resources/assets/lotr/textures/items/helmetBree.png new file mode 100644 index 0000000..49b55a3 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/helmetBree.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/helmetJade.png b/src (1)/main/resources/assets/lotr/textures/items/helmetJade.png new file mode 100644 index 0000000..1989dcd Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/helmetJade.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/helmetLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/helmetLimwaith.png new file mode 100644 index 0000000..191eaeb Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/helmetLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/helmetRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/helmetRedDwarf.png new file mode 100644 index 0000000..5b3c30e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/helmetRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/helmetRhudaur.png b/src (1)/main/resources/assets/lotr/textures/items/helmetRhudaur.png new file mode 100644 index 0000000..6c76d63 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/helmetRhudaur.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/helmetUsurper.png b/src (1)/main/resources/assets/lotr/textures/items/helmetUsurper.png new file mode 100644 index 0000000..64837d2 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/helmetUsurper.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/helmetWarlord.png b/src (1)/main/resources/assets/lotr/textures/items/helmetWarlord.png new file mode 100644 index 0000000..c655be8 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/helmetWarlord.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/helmetboneLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/helmetboneLimwaith.png new file mode 100644 index 0000000..8f78e1b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/helmetboneLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/helmetbrokenhalo.png b/src (1)/main/resources/assets/lotr/textures/items/helmetbrokenhalo.png new file mode 100644 index 0000000..c058976 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/helmetbrokenhalo.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/helmetserpent.png b/src (1)/main/resources/assets/lotr/textures/items/helmetserpent.png new file mode 100644 index 0000000..33de7b2 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/helmetserpent.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/honey.png b/src (1)/main/resources/assets/lotr/textures/items/honey.png new file mode 100644 index 0000000..f4a6070 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/honey.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/ice_thawer.png b/src (1)/main/resources/assets/lotr/textures/items/ice_thawer.png new file mode 100644 index 0000000..7bdf430 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/ice_thawer.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/ice_thawer.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/ice_thawer.png.mcmeta new file mode 100644 index 0000000..30601d0 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/ice_thawer.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation":{"frametime":3} +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/ingotAsh.png b/src (1)/main/resources/assets/lotr/textures/items/ingotAsh.png new file mode 100644 index 0000000..c2b118e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/ingotAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/ingotAsh.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/ingotAsh.png.mcmeta new file mode 100644 index 0000000..6580237 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/ingotAsh.png.mcmeta @@ -0,0 +1,53 @@ +{ + "animation": { + "frames": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 8, + 7, + 7, + 6, + 6, + 5, + 5, + 4, + 4, + 3, + 3, + 2, + 2, + 1, + 1 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/ironChain.png b/src (1)/main/resources/assets/lotr/textures/items/ironChain.png new file mode 100644 index 0000000..c9e8732 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/ironChain.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/alatarStaff.png b/src (1)/main/resources/assets/lotr/textures/items/large/alatarStaff.png new file mode 100644 index 0000000..9ec9224 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/alatarStaff.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/battleaxeAsh.png b/src (1)/main/resources/assets/lotr/textures/items/large/battleaxeAsh.png new file mode 100644 index 0000000..cee1eda Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/battleaxeAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/battleaxeAsh.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/large/battleaxeAsh.png.mcmeta new file mode 100644 index 0000000..e3143f5 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/large/battleaxeAsh.png.mcmeta @@ -0,0 +1,43 @@ +{ + "animation": { + "frames": [ + 8, + 8, + 8, + 7, + 7, + 7, + 6, + 6, + 6, + 5, + 5, + 5, + 4, + 4, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/battleaxeLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/large/battleaxeLimwaith.png new file mode 100644 index 0000000..59c9ef9 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/battleaxeLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh.png b/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh.png new file mode 100644 index 0000000..4cb3bbe Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh_pull_0.png b/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh_pull_0.png new file mode 100644 index 0000000..8564bfd Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh_pull_0.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh_pull_1.png b/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh_pull_1.png new file mode 100644 index 0000000..837cb15 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh_pull_1.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh_pull_2.png b/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh_pull_2.png new file mode 100644 index 0000000..920b514 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/bowAsh_pull_2.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/celeiniss.png b/src (1)/main/resources/assets/lotr/textures/items/large/celeiniss.png new file mode 100644 index 0000000..4401d3c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/celeiniss.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/frostblade.png b/src (1)/main/resources/assets/lotr/textures/items/large/frostblade.png new file mode 100644 index 0000000..b03cd28 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/frostblade.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/gandalfStaffGrey.png b/src (1)/main/resources/assets/lotr/textures/items/large/gandalfStaffGrey.png new file mode 100644 index 0000000..bc9a248 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/gandalfStaffGrey.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/gandalfStaffWhite.png b/src (1)/main/resources/assets/lotr/textures/items/large/gandalfStaffWhite.png new file mode 100644 index 0000000..e86f7ab Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/gandalfStaffWhite.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/hammerAsh.png b/src (1)/main/resources/assets/lotr/textures/items/large/hammerAsh.png new file mode 100644 index 0000000..607519c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/hammerAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/hammerAsh.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/large/hammerAsh.png.mcmeta new file mode 100644 index 0000000..e3143f5 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/large/hammerAsh.png.mcmeta @@ -0,0 +1,43 @@ +{ + "animation": { + "frames": [ + 8, + 8, + 8, + 7, + 7, + 7, + 6, + 6, + 6, + 5, + 5, + 5, + 4, + 4, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/maceWarlord.png b/src (1)/main/resources/assets/lotr/textures/items/large/maceWarlord.png new file mode 100644 index 0000000..a917b7b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/maceWarlord.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/pallandoStaff.png b/src (1)/main/resources/assets/lotr/textures/items/large/pallandoStaff.png new file mode 100644 index 0000000..f7ea81d Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/pallandoStaff.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/radagastStaff.png b/src (1)/main/resources/assets/lotr/textures/items/large/radagastStaff.png new file mode 100644 index 0000000..966a4b4 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/radagastStaff.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/sarumanStaff.png b/src (1)/main/resources/assets/lotr/textures/items/large/sarumanStaff.png new file mode 100644 index 0000000..0262cb5 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/sarumanStaff.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/sarumanWhiteStaff.png b/src (1)/main/resources/assets/lotr/textures/items/large/sarumanWhiteStaff.png new file mode 100644 index 0000000..0262cb5 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/sarumanWhiteStaff.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/spearAsh.png b/src (1)/main/resources/assets/lotr/textures/items/large/spearAsh.png new file mode 100644 index 0000000..1a0814e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/spearAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/spearAsh.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/large/spearAsh.png.mcmeta new file mode 100644 index 0000000..e3143f5 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/large/spearAsh.png.mcmeta @@ -0,0 +1,43 @@ +{ + "animation": { + "frames": [ + 8, + 8, + 8, + 7, + 7, + 7, + 6, + 6, + 6, + 5, + 5, + 5, + 4, + 4, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/spearLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/large/spearLimwaith.png new file mode 100644 index 0000000..22ac4ef Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/spearLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/spearRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/large/spearRedDwarf.png new file mode 100644 index 0000000..33b2080 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/spearRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/spearUnnamed.png b/src (1)/main/resources/assets/lotr/textures/items/large/spearUnnamed.png new file mode 100644 index 0000000..060c6ed Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/spearUnnamed.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/spearUnnamed.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/large/spearUnnamed.png.mcmeta new file mode 100644 index 0000000..56f834d --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/large/spearUnnamed.png.mcmeta @@ -0,0 +1,30 @@ +{ + "animation": { + "frames": [ + 7, + 7, + 7, + 6, + 6, + 6, + 5, + 5, + 5, + 4, + 4, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 1, + 1, + 1, + 0, + 0, + 0 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/spearsolidgold.png b/src (1)/main/resources/assets/lotr/textures/items/large/spearsolidgold.png new file mode 100644 index 0000000..1ab9bc9 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/spearsolidgold.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/spearsolidgold.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/large/spearsolidgold.png.mcmeta new file mode 100644 index 0000000..dbfacda --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/large/spearsolidgold.png.mcmeta @@ -0,0 +1,68 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/staffAsh.png b/src (1)/main/resources/assets/lotr/textures/items/large/staffAsh.png new file mode 100644 index 0000000..285ec00 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/staffAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/staffAsh.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/large/staffAsh.png.mcmeta new file mode 100644 index 0000000..22d2b7f --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/large/staffAsh.png.mcmeta @@ -0,0 +1,52 @@ +{ + "animation": { + "frames": [ + 11, + 11, + 11, + 10, + 10, + 10, + 9, + 9, + 9, + 8, + 8, + 8, + 7, + 7, + 7, + 6, + 6, + 6, + 5, + 5, + 5, + 4, + 4, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/swordAsh.png b/src (1)/main/resources/assets/lotr/textures/items/large/swordAsh.png new file mode 100644 index 0000000..df60e7a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/swordAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/swordAsh.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/large/swordAsh.png.mcmeta new file mode 100644 index 0000000..e3143f5 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/large/swordAsh.png.mcmeta @@ -0,0 +1,43 @@ +{ + "animation": { + "frames": [ + 8, + 8, + 8, + 7, + 7, + 7, + 6, + 6, + 6, + 5, + 5, + 5, + 4, + 4, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/tridentLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/large/tridentLimwaith.png new file mode 100644 index 0000000..0f0c260 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/tridentLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large/whip.png b/src (1)/main/resources/assets/lotr/textures/items/large/whip.png new file mode 100644 index 0000000..838c6e6 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large/whip.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large2/pikeAsh.png b/src (1)/main/resources/assets/lotr/textures/items/large2/pikeAsh.png new file mode 100644 index 0000000..73fcfef Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large2/pikeAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/large2/pikeAsh.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/large2/pikeAsh.png.mcmeta new file mode 100644 index 0000000..6abaaed --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/large2/pikeAsh.png.mcmeta @@ -0,0 +1,49 @@ +{ + "animation": { + "frames": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10, + 10, + 10, + 9, + 9, + 9, + 8, + 8, + 8, + 7, + 7, + 7, + 6, + 6, + 6, + 5, + 5, + 5, + 4, + 4, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 1, + 1, + 1 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/large2/pikeRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/large2/pikeRedDwarf.png new file mode 100644 index 0000000..a2a5b41 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/large2/pikeRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/legsArnorBanner.png b/src (1)/main/resources/assets/lotr/textures/items/legsArnorBanner.png new file mode 100644 index 0000000..00de686 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/legsArnorBanner.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/legsBree.png b/src (1)/main/resources/assets/lotr/textures/items/legsBree.png new file mode 100644 index 0000000..2a93dfd Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/legsBree.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/legsJade.png b/src (1)/main/resources/assets/lotr/textures/items/legsJade.png new file mode 100644 index 0000000..e497450 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/legsJade.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/legsLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/legsLimwaith.png new file mode 100644 index 0000000..1b181d4 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/legsLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/legsRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/legsRedDwarf.png new file mode 100644 index 0000000..5ade19c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/legsRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/legsRhudaur.png b/src (1)/main/resources/assets/lotr/textures/items/legsRhudaur.png new file mode 100644 index 0000000..4876f56 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/legsRhudaur.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/legsUsurper.png b/src (1)/main/resources/assets/lotr/textures/items/legsUsurper.png new file mode 100644 index 0000000..315e3f4 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/legsUsurper.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/legsWarlord.png b/src (1)/main/resources/assets/lotr/textures/items/legsWarlord.png new file mode 100644 index 0000000..01c143c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/legsWarlord.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/legsboneLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/legsboneLimwaith.png new file mode 100644 index 0000000..5528d0d Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/legsboneLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/legsserpent.png b/src (1)/main/resources/assets/lotr/textures/items/legsserpent.png new file mode 100644 index 0000000..b31f7cb Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/legsserpent.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/lightStew.png b/src (1)/main/resources/assets/lotr/textures/items/lightStew.png new file mode 100644 index 0000000..c4a02d2 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/lightStew.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/maceArnor.png b/src (1)/main/resources/assets/lotr/textures/items/maceArnor.png new file mode 100644 index 0000000..f7e7dd3 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/maceArnor.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/mugDemonicHealthPotion_liquid.png b/src (1)/main/resources/assets/lotr/textures/items/mugDemonicHealthPotion_liquid.png new file mode 100644 index 0000000..ee1f593 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/mugDemonicHealthPotion_liquid.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/mugDwarfBrew_liquid.png b/src (1)/main/resources/assets/lotr/textures/items/mugDwarfBrew_liquid.png new file mode 100644 index 0000000..e8d4e70 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/mugDwarfBrew_liquid.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/mugElfBrew_liquid.png b/src (1)/main/resources/assets/lotr/textures/items/mugElfBrew_liquid.png new file mode 100644 index 0000000..db59f80 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/mugElfBrew_liquid.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/mugHumanBrew_liquid.png b/src (1)/main/resources/assets/lotr/textures/items/mugHumanBrew_liquid.png new file mode 100644 index 0000000..5f95d9a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/mugHumanBrew_liquid.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/mugOrcBrew_liquid.png b/src (1)/main/resources/assets/lotr/textures/items/mugOrcBrew_liquid.png new file mode 100644 index 0000000..87c3075 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/mugOrcBrew_liquid.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_ancient.png b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_ancient.png new file mode 100644 index 0000000..cc30a0b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_ancient.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_ancient.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_ancient.png.mcmeta new file mode 100644 index 0000000..7533019 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_ancient.png.mcmeta @@ -0,0 +1,76 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 12, + 12, + 13, + 13, + 13, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + } +} \ No newline at end of file diff --git a/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png new file mode 100644 index 0000000..f52aeef Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png.mcmeta new file mode 100644 index 0000000..7533019 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_mortals.png.mcmeta @@ -0,0 +1,76 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 12, + 12, + 13, + 13, + 13, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + } +} \ No newline at end of file diff --git a/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png new file mode 100644 index 0000000..053a811 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png.mcmeta new file mode 100644 index 0000000..7533019 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_sauron.png.mcmeta @@ -0,0 +1,76 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 12, + 12, + 13, + 13, + 13, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + } +} \ No newline at end of file diff --git a/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png new file mode 100644 index 0000000..3b278cd Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png.mcmeta new file mode 100644 index 0000000..7533019 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_udun.png.mcmeta @@ -0,0 +1,76 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 12, + 12, + 13, + 13, + 13, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + } +} \ No newline at end of file diff --git a/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png new file mode 100644 index 0000000..25a3d13 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png.mcmeta new file mode 100644 index 0000000..7533019 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/nimveil_gem_valar.png.mcmeta @@ -0,0 +1,76 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 12, + 12, + 13, + 13, + 13, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + } +} \ No newline at end of file diff --git a/src (1)/main/resources/assets/lotr/textures/items/onion.png b/src (1)/main/resources/assets/lotr/textures/items/onion.png new file mode 100644 index 0000000..d031bf3 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/onion.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/pallandoStaff.png b/src (1)/main/resources/assets/lotr/textures/items/pallandoStaff.png new file mode 100644 index 0000000..2f5793b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/pallandoStaff.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/pasta.png b/src (1)/main/resources/assets/lotr/textures/items/pasta.png new file mode 100644 index 0000000..19bbcf5 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/pasta.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/pelmen.png b/src (1)/main/resources/assets/lotr/textures/items/pelmen.png new file mode 100644 index 0000000..e7fc3b7 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/pelmen.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/pikeAsh.png b/src (1)/main/resources/assets/lotr/textures/items/pikeAsh.png new file mode 100644 index 0000000..2bf4ba1 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/pikeAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/pikeRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/pikeRedDwarf.png new file mode 100644 index 0000000..54c70a3 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/pikeRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/pretzel.png b/src (1)/main/resources/assets/lotr/textures/items/pretzel.png new file mode 100644 index 0000000..d6fee49 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/pretzel.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/radagastStaff.png b/src (1)/main/resources/assets/lotr/textures/items/radagastStaff.png new file mode 100644 index 0000000..cb83a47 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/radagastStaff.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/redDwarfSteel.png b/src (1)/main/resources/assets/lotr/textures/items/redDwarfSteel.png new file mode 100644 index 0000000..d6dc164 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/redDwarfSteel.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/repair_kit.png b/src (1)/main/resources/assets/lotr/textures/items/repair_kit.png new file mode 100644 index 0000000..1ee5390 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/repair_kit.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/sarumanStaff.png b/src (1)/main/resources/assets/lotr/textures/items/sarumanStaff.png new file mode 100644 index 0000000..c5eb5b8 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/sarumanStaff.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/sarumanWhiteStaff.png b/src (1)/main/resources/assets/lotr/textures/items/sarumanWhiteStaff.png new file mode 100644 index 0000000..c5eb5b8 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/sarumanWhiteStaff.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/silverChain.png b/src (1)/main/resources/assets/lotr/textures/items/silverChain.png new file mode 100644 index 0000000..7d70ba2 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/silverChain.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spawn_egg.png b/src (1)/main/resources/assets/lotr/textures/items/spawn_egg.png new file mode 100644 index 0000000..b1a25ee Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spawn_egg.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spearAsh.png b/src (1)/main/resources/assets/lotr/textures/items/spearAsh.png new file mode 100644 index 0000000..29950ac Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spearAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spearLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/spearLimwaith.png new file mode 100644 index 0000000..51f8cdf Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spearLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spearRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/spearRedDwarf.png new file mode 100644 index 0000000..c794507 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spearRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spearUnnamed.png b/src (1)/main/resources/assets/lotr/textures/items/spearUnnamed.png new file mode 100644 index 0000000..90943e9 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spearUnnamed.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spearsolidgold.png b/src (1)/main/resources/assets/lotr/textures/items/spearsolidgold.png new file mode 100644 index 0000000..6e830d3 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spearsolidgold.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spearsolidgold.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/spearsolidgold.png.mcmeta new file mode 100644 index 0000000..0b19d78 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/spearsolidgold.png.mcmeta @@ -0,0 +1,66 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ] + } +} \ No newline at end of file diff --git a/src (1)/main/resources/assets/lotr/textures/items/spice.png b/src (1)/main/resources/assets/lotr/textures/items/spice.png new file mode 100644 index 0000000..bb453a5 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spice.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spice_dwarven.png b/src (1)/main/resources/assets/lotr/textures/items/spice_dwarven.png new file mode 100644 index 0000000..3b7e29b Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spice_dwarven.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spice_elven.png b/src (1)/main/resources/assets/lotr/textures/items/spice_elven.png new file mode 100644 index 0000000..094abdc Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spice_elven.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spice_human.png b/src (1)/main/resources/assets/lotr/textures/items/spice_human.png new file mode 100644 index 0000000..9310d7c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spice_human.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spice_orcish.png b/src (1)/main/resources/assets/lotr/textures/items/spice_orcish.png new file mode 100644 index 0000000..fdeb2f9 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spice_orcish.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/spicedHam.png b/src (1)/main/resources/assets/lotr/textures/items/spicedHam.png new file mode 100644 index 0000000..f927114 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/spicedHam.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/staffAsh.png b/src (1)/main/resources/assets/lotr/textures/items/staffAsh.png new file mode 100644 index 0000000..1af542c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/staffAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/swordAsh.png b/src (1)/main/resources/assets/lotr/textures/items/swordAsh.png new file mode 100644 index 0000000..54f91ae Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/swordAsh.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/swordBree.png b/src (1)/main/resources/assets/lotr/textures/items/swordBree.png new file mode 100644 index 0000000..d641eb3 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/swordBree.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/swordRedDwarf.png b/src (1)/main/resources/assets/lotr/textures/items/swordRedDwarf.png new file mode 100644 index 0000000..d54a24e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/swordRedDwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/toxic_core.png b/src (1)/main/resources/assets/lotr/textures/items/toxic_core.png new file mode 100644 index 0000000..5939da4 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/toxic_core.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/tridentLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/tridentLimwaith.png new file mode 100644 index 0000000..6170c89 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/tridentLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/truncheonLimwaith.png b/src (1)/main/resources/assets/lotr/textures/items/truncheonLimwaith.png new file mode 100644 index 0000000..f815038 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/truncheonLimwaith.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/upgrade_kit.png b/src (1)/main/resources/assets/lotr/textures/items/upgrade_kit.png new file mode 100644 index 0000000..5f7d429 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/upgrade_kit.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_ancient.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_ancient.png new file mode 100644 index 0000000..37d7ba3 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_ancient.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_black_uruk.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_black_uruk.png new file mode 100644 index 0000000..5acb6c6 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_black_uruk.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_blue_dwarven.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_blue_dwarven.png new file mode 100644 index 0000000..f2147b8 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_blue_dwarven.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_bronze.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_bronze.png new file mode 100644 index 0000000..12ac248 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_bronze.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_copper.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_copper.png new file mode 100644 index 0000000..56abf01 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_copper.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_dwarf.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_dwarf.png new file mode 100644 index 0000000..12f2319 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_dwarf.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_dwarven.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_dwarven.png new file mode 100644 index 0000000..12f2319 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_dwarven.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_elven.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_elven.png new file mode 100644 index 0000000..2880d85 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_elven.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_gilded_iron.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_gilded_iron.png new file mode 100644 index 0000000..fa74aa8 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_gilded_iron.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_headless.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_headless.png new file mode 100644 index 0000000..751e75d Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_headless.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_0.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_0.png new file mode 100644 index 0000000..8e9d59e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_0.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_0_morgul.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_0_morgul.png new file mode 100644 index 0000000..b0a3e0e Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_0_morgul.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_1.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_1.png new file mode 100644 index 0000000..703e164 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_1.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_1_morgul.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_1_morgul.png new file mode 100644 index 0000000..9da8ab5 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_1_morgul.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_2.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_2.png new file mode 100644 index 0000000..ca8804a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_2.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_2_morgul.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_2_morgul.png new file mode 100644 index 0000000..5c3c5c2 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_2_morgul.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_3.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_3.png new file mode 100644 index 0000000..b9705f8 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_3.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_3_morgul.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_3_morgul.png new file mode 100644 index 0000000..7bc828a Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_3_morgul.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_4.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_4.png new file mode 100644 index 0000000..b114491 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_4.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_4_morgul.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_4_morgul.png new file mode 100644 index 0000000..92d10ce Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_4_morgul.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_5.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_5.png new file mode 100644 index 0000000..c5deb81 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_5.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_5_morgul.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_5_morgul.png new file mode 100644 index 0000000..3904239 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_heads_5_morgul.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_iron.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_iron.png new file mode 100644 index 0000000..4d7a481 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_iron.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_mithril.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_mithril.png new file mode 100644 index 0000000..d30d551 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_mithril.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_mithril.png.mcmeta b/src (1)/main/resources/assets/lotr/textures/items/war_dart_mithril.png.mcmeta new file mode 100644 index 0000000..7b67f48 --- /dev/null +++ b/src (1)/main/resources/assets/lotr/textures/items/war_dart_mithril.png.mcmeta @@ -0,0 +1,51 @@ +{ + "animation": { + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + } +} diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_morgul.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_morgul.png new file mode 100644 index 0000000..2469990 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_morgul.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_orc.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_orc.png new file mode 100644 index 0000000..8ed962f Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_orc.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_red_dwarven.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_red_dwarven.png new file mode 100644 index 0000000..7ee04b7 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_red_dwarven.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_dart_uruk.png b/src (1)/main/resources/assets/lotr/textures/items/war_dart_uruk.png new file mode 100644 index 0000000..8148798 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_dart_uruk.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/war_red_dwarven.png b/src (1)/main/resources/assets/lotr/textures/items/war_red_dwarven.png new file mode 100644 index 0000000..7ee04b7 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/war_red_dwarven.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/welfRelic.png b/src (1)/main/resources/assets/lotr/textures/items/welfRelic.png new file mode 100644 index 0000000..f0225ea Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/welfRelic.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/items/whip.png b/src (1)/main/resources/assets/lotr/textures/items/whip.png new file mode 100644 index 0000000..7e22414 Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/items/whip.png differ diff --git a/src (1)/main/resources/assets/lotr/textures/shield/alignment_RedDwarf.png b/src (1)/main/resources/assets/lotr/textures/shield/alignment_RedDwarf.png new file mode 100644 index 0000000..065901c Binary files /dev/null and b/src (1)/main/resources/assets/lotr/textures/shield/alignment_RedDwarf.png differ diff --git a/src (1)/main/resources/credits.txt b/src (1)/main/resources/credits.txt new file mode 100644 index 0000000..4ebbf3c --- /dev/null +++ b/src (1)/main/resources/credits.txt @@ -0,0 +1,81 @@ +Cinder LoE: An exciting expansion to Lord of Embers + +==Credits== + +• Mevans - Creation of the LOTRMod +• Shinare - Primary Creator of Cinder and all that it is capable of bringing to the world +• KeyLime17 - Secondary Developer, Texturer, and general assistant to whatever is being worked on +• cleric_red - primary developer of Textures and Models +• Deanburrito - Developer of textures and models +• Jacubie - Developer of some textures. + +==Textures: (Please do not reuse without the creators permission!)== +KeyLime17 +• Red Dwarven Alignment Shield +• Wood Elven Relic +• Upgrade Kit +• Limwaith Weapons +• Limwaith Armor sets +• Bree Sword +• Ash Weaponry +• Spiced Ham, Spice, Doner Kebab, Bacon, Beef Stew, Light Stew, Pelmen, Onion, Cabbage, Halva +• Wizard Staves +• Chains +• Frostblade +• Voidal Dagger +• Red Dwarf Crossbow +• Bonemold, Ashen Ingot +• Fish barrel +• Cut and Cobbled Drystone + +Cleric_red +• War darts +• Toxic Core +• Red Dwarven Weapons +• Red Dwarven Armor sets +• Bree Armor sets +• Ash Weaponry +• Pretzel, Pasta, Dough, Flour, Chocolate +• Arnor Mace +• Arnor Light armor set +• Haradric Elite Armor sets +• Rhudaur Armor set +• Jade Armor set +• Red Dwarven Ingot and Block +• Cinder block +• Red Dwarven Chandelier +• Ice cage +• Plaster +• Red Dwarven Banner +• Mordor Cobblebrick + +Deanburrito +• Repair Kit +• All the extra Fur Blocks +• And the Fur items + +Jacubie +• Whip + +Geralt (Or other usernames such as DefenderOfChina) +• Drannach Iaur (spearUnnamed.png) + +==Models: (All models below belong to their corresponding individual, a lot of work was put into them, so if you wish to redistribute, please ask!)== + +Cleric_red +• Jade Armor Model +• Serpent Armor Model +• Bree Kettle Helmet Model +• Broken Halo Model +• Red Dwarven Helmet Model +• Usurper Helmet Model +• Rhudaur Helmet Armor Model +• Warlord Helmet Model + +==Sounds:== + +KeyLime (Although Most of these are or will be taken from existing video games and sources, which will be attached to the name) +• boss/Battle - Baldurs Gate 3 - Ketheric Thorm Battle Theme - Borislav Slavov +• boss/Spiders - Baldurs Gate 3 - Thorms Battle OST - Borislav Slavov +• boss/Battle2 - Baldurs Gate 3 OST - Fight Theme 916 - Ally Down - Borislav Slavov +• boss/Victory - Borislav Slavov - Baldurs Gate 3 OST - Battle - Enemy Down - Borislav Slavov diff --git a/src (1)/main/resources/mcmod.info b/src (1)/main/resources/mcmod.info new file mode 100644 index 0000000..6f29673 --- /dev/null +++ b/src (1)/main/resources/mcmod.info @@ -0,0 +1,21 @@ +{ + "modListVersion": 2, + "modList": [{ + "modid": "${modId}", + "name": "${modName}", + "description": "CINDER MOD.\nA pretty big mod adding various additions to the LOTR Mod", + "version": "${modVersion}", + "mcversion": "${minecraftVersion}", + "url": "thelordofembers.com", + "updateUrl": "", + "authorList": ["Shinare", "KeyLime"], + "credits": "cleric_red", + "logoFile": "", + "screenshots": [], + "parent": "", + "requiredMods": [], + "dependencies": [], + "dependants": [], + "useDependencyInformation": true + }] +} diff --git a/src (1)/main/resources/mixins.cinder_loe.json b/src (1)/main/resources/mixins.cinder_loe.json new file mode 100644 index 0000000..8e3ac62 --- /dev/null +++ b/src (1)/main/resources/mixins.cinder_loe.json @@ -0,0 +1,56 @@ +{ + "required": true, + "minVersion": "0.7.11", + "package": "com.zivilon.cinder_loe.mixins", + "refmap": "mixins.cinder_loe.refmap.json", + "target": "@env(DEFAULT)", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "MixinEnchantmentHelper", + "MixinEntity", + "MixinEntityArrow", + "MixinItemRenderer", + "MixinLOTRArmorModels", + "MixinLOTRBrewingRecipes", + "MixinLOTRClientProxy", + "MixinLOTRContainerAnvil", + "MixinLOTREnchantment", + "MixinLOTREnchantmentType", + "MixinLOTREntityAINearestAttackableTargetBasic", + "MixinLOTREntityProjectileBase", + "MixinLOTREntitySauron", + "MixinLOTRIntCache", + "MixinLOTRNPCRendering", + "MixinLOTRRenderArmorStand", + "MixinLOTRRenderBlownItem", + "MixinLOTRRenderBow", + "MixinLOTRRenderCrossbow", + "MixinLOTRRenderDart", + "MixinLOTRRenderElf", + "MixinLOTRRenderElvenBlade", + "MixinLOTRRenderLargeItem", + "MixinLOTRRenderNPCRespawner", + "MixinLOTRRenderPlateFood", + "MixinLOTRRenderThrowingAxe", + "MixinLOTRRenderTraderRespawn", + "MixinLOTRTileEntityDwarvenForge", + "MixinLOTRTileEntityForgeBase", + "MixinLOTRTradeEntries", + "MixinLOTRWorldGenMumakSkeleton", + "MixinRendererLivingEntity", + "MixinRenderItem", + "MixinSlotCrafting", + "MixinLOTREntityWarg", + "overrides.MixinLOTRHiredNPCInfo", + "overrides.MixinLOTRItemEntDraught", + "overrides.MixinLOTRReplacedMethods", + "overrides.MixinLOTRTradeEntriesOverrides", + "overrides.MixinLOTRUnitTradeEntries", + "MixinEntityLivingBase", + "MixinEntityPlayer", + "MixinLOTREntityAIAttackOnCollide", + "MixinLOTREntityNPC", + "MixinFoodStats" + ], + "client": [] +}