diff options
| author | Lance5057 <lance5057@gmail.com> | 2018-05-21 20:40:35 -0500 |
|---|---|---|
| committer | Lance5057 <lance5057@gmail.com> | 2018-05-21 20:40:35 -0500 |
| commit | cadbc53521f0966c69004b1c88b284c07ae2f42f (patch) | |
| tree | 3dd2acfee3498958ce0c0da6f9c3ccfd3c131774 | |
| parent | a12793585fc5c4c076cb499b43f0420b8a1f63fe (diff) | |
Attempting another overhaul for armor.
Changed mod name, new things to come!
38 files changed, 2617 insertions, 992 deletions
diff --git a/src/main/java/lance5057/tDefense/Reference.java b/src/main/java/lance5057/tDefense/Reference.java index 8f94aed..2908cf5 100644 --- a/src/main/java/lance5057/tDefense/Reference.java +++ b/src/main/java/lance5057/tDefense/Reference.java @@ -3,8 +3,8 @@ package lance5057.tDefense; public class Reference { - public static final String MOD_ID = "tinkersdefense"; + public static final String MOD_ID = "tinkerscompendium"; public static final String VERSION = "1.4.2.8a"; - public static final String MOD_NAME = "Tinkers' Defense"; + public static final String MOD_NAME = "Tinkers' Compendium"; } diff --git a/src/main/java/lance5057/tDefense/core/blocks/TDMetalBlock.java b/src/main/java/lance5057/tDefense/core/blocks/TDMetalBlock.java index 89856c3..0f267ad 100644 --- a/src/main/java/lance5057/tDefense/core/blocks/TDMetalBlock.java +++ b/src/main/java/lance5057/tDefense/core/blocks/TDMetalBlock.java @@ -5,6 +5,7 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; @@ -13,14 +14,17 @@ import net.minecraft.util.IStringSerializable; import net.minecraft.util.NonNullList; public class TDMetalBlock extends Block { - public static final PropertyEnum METAL = PropertyEnum.create("metal", TDMetalBlock.EnumMetal.class); + public static PropertyInteger METAL; + public int maxmeta; - public TDMetalBlock() { + public TDMetalBlock(int max) { super(Material.IRON); + maxmeta = max; this.setCreativeTab(TinkersDefense.tab); this.setHardness(5); this.setResistance(30); - this.setDefaultState(this.blockState.getBaseState().withProperty(METAL, EnumMetal.AEONSTEEL)); + METAL = PropertyInteger.create("metal", 0, max); + this.setDefaultState(this.blockState.getBaseState().withProperty(METAL, 0)); } @Override @@ -30,14 +34,13 @@ public class TDMetalBlock extends Block { @Override public IBlockState getStateFromMeta(int meta) { - EnumMetal colour = EnumMetal.byMetadata(meta); - return this.getDefaultState().withProperty(METAL, colour); + return this.getDefaultState().withProperty(METAL, meta); } @Override public int getMetaFromState(IBlockState state) { - EnumMetal type = (EnumMetal) state.getValue(METAL); - return type.getID(); + int type = state.getValue(METAL); + return type; } @Override @@ -47,64 +50,9 @@ public class TDMetalBlock extends Block { @Override public void getSubBlocks(CreativeTabs itemIn, NonNullList<ItemStack> tab) { - EnumMetal[] all = EnumMetal.values(); - for (EnumMetal block : all) { - tab.add(new ItemStack(this, 1, block.getID())); + for (int i = 0; i < maxmeta; i++) { + tab.add(new ItemStack(this, 1, i)); } } - public enum EnumMetal implements IStringSerializable { - AEONSTEEL(0, "aeonsteel"), - QUEENSGOLD(1, "queensgold"), - DOGBEARIUM(2, "dogbearium"), - REDCANDY(3, "redcandy"), - GREENCANDY(4, "greencandy"), - SINISTERIUM(5, "sinisterium"), - NIHILITE(6, "nihilite"), - ORICHALCUM(7, "orichalcum"), - PANDORIUM(8, "pandorium"), - ROSEGOLD(9, "rosegold"), - PLATINUM(10, "platinum"), - BRASS(11, "brass"), - SILVER(12, "silver"), - CHEESE(13, "cheese"); - - private int ID; - private String name; - - private EnumMetal(int ID, String name) { - this.ID = ID; - this.name = name; - } - - @Override - public String getName() { - return name; - } - - public int getID() { - return ID; - } - - @Override - public String toString() { - return getName(); - } - - public static EnumMetal byMetadata(int meta) { - if (meta < 0 || meta >= META_LOOKUP.length) { - meta = 0; - } - - return META_LOOKUP[meta]; - } - - private static final EnumMetal[] META_LOOKUP = new EnumMetal[values().length]; - - static { - for (EnumMetal colour : values()) { - META_LOOKUP[colour.getID()] = colour; - } - } - } } diff --git a/src/main/java/lance5057/tDefense/core/blocks/TDMetalItemBlock.java b/src/main/java/lance5057/tDefense/core/blocks/TDMetalItemBlock.java index 3ed79b8..d752553 100644 --- a/src/main/java/lance5057/tDefense/core/blocks/TDMetalItemBlock.java +++ b/src/main/java/lance5057/tDefense/core/blocks/TDMetalItemBlock.java @@ -22,7 +22,6 @@ public class TDMetalItemBlock extends ItemBlock { @Override public String getUnlocalizedName(ItemStack stack) { - TDMetalBlock.EnumMetal metal = TDMetalBlock.EnumMetal.byMetadata(stack.getMetadata()); - return super.getUnlocalizedName() + "." + metal.toString(); + return super.getUnlocalizedName() + "." + stack.getMetadata(); } } diff --git a/src/main/java/lance5057/tDefense/core/events/ArmorRenderEvent.java b/src/main/java/lance5057/tDefense/core/events/ArmorRenderEvent.java index f746a82..fdcb564 100644 --- a/src/main/java/lance5057/tDefense/core/events/ArmorRenderEvent.java +++ b/src/main/java/lance5057/tDefense/core/events/ArmorRenderEvent.java @@ -1,100 +1,137 @@ -package lance5057.tDefense.core.events; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBiped; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.event.RenderPlayerEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import slimeknights.tconstruct.library.utils.TagUtil; - -public class ArmorRenderEvent { - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void renderArmorEvent(RenderPlayerEvent.Post event) { - Iterable<ItemStack> armor = event.getEntityPlayer().getArmorInventoryList(); - for (ItemStack i : armor) - renderArmor(i); - } - - private static void renderArmor(ItemStack stack) { - NBTTagList list = TagUtil.getBaseMaterialsTagList(stack); - Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("")); - } - - private void TrimArmor(ModelBiped armorModel, RenderPlayerEvent.Post event) { - if (armorModel != null) { - armorModel.isSneak = event.getEntityPlayer().isSneaking(); - armorModel.isRiding = event.getEntityPlayer().isRiding(); - armorModel.isChild = event.getEntityPlayer().isChild(); - - armorModel.swingProgress = event.getEntityPlayer().getSwingProgress(event.getPartialRenderTick()); - - if (event.getEntityPlayer() instanceof EntityPlayer) { - final ItemStack itemstack = event.getEntityPlayer().getHeldItem(EnumHand.MAIN_HAND); - final ItemStack itemstackoff = event.getEntityPlayer().getHeldItem(EnumHand.OFF_HAND); - // armorModel.heldItemRight = 0; - // armorModel.aimedBow = false; - if (itemstack != null) // main hand - { - if (event.getEntityPlayer().getItemInUseCount() > 0) { - final EnumAction enumaction = itemstack.getItemUseAction(); - - if (enumaction == EnumAction.BLOCK) { - armorModel.rightArmPose = ModelBiped.ArmPose.BLOCK; - } else if (enumaction == EnumAction.BOW) { - - armorModel.rightArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; - } - } else { - armorModel.rightArmPose = event.getEntityPlayer().getHeldItem(EnumHand.MAIN_HAND) != null - ? ModelBiped.ArmPose.ITEM - : ModelBiped.ArmPose.EMPTY; - } - } - - if (itemstack != null) // off hand - { - if (event.getEntityPlayer().getItemInUseCount() > 0) { - final EnumAction enumaction = itemstack.getItemUseAction(); - - if (enumaction == EnumAction.BLOCK) { - armorModel.leftArmPose = ModelBiped.ArmPose.BLOCK; - } else if (enumaction == EnumAction.BOW) { - - armorModel.leftArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; - } - } else { - armorModel.leftArmPose = event.getEntityPlayer().getHeldItem(EnumHand.OFF_HAND) != null - ? ModelBiped.ArmPose.ITEM - : ModelBiped.ArmPose.EMPTY; - } - } - } - - final float yaw = event.getEntityPlayer().prevRotationYawHead - + (event.getEntityPlayer().rotationYawHead - event.getEntityPlayer().prevRotationYawHead) - * event.getPartialRenderTick(); - final float yawOffset = event.getEntityPlayer().prevRenderYawOffset - + (event.getEntityPlayer().renderYawOffset - event.getEntityPlayer().prevRenderYawOffset) - * event.getPartialRenderTick(); - final float limbs = event.getEntityPlayer().prevLimbSwingAmount - + (event.getEntityPlayer().limbSwingAmount - event.getEntityPlayer().prevLimbSwingAmount) - * event.getPartialRenderTick(); - final float limbSwing = event.getEntityPlayer().limbSwing - - event.getEntityPlayer().limbSwingAmount * (1.0F - event.getPartialRenderTick()); - - armorModel.setRotationAngles(limbSwing, limbs, event.getEntityPlayer().ticksExisted, yaw - yawOffset, - event.getEntityPlayer().rotationPitch, 0.1f, event.getEntityPlayer()); - armorModel.render(event.getEntityPlayer(), limbSwing, limbs, event.getEntityPlayer().ticksExisted, - yaw - yawOffset, event.getEntityPlayer().rotationPitch, 0.1f); - } - } -} +//package lance5057.tDefense.core.events; +// +//import java.util.ArrayList; +//import java.util.List; +// +//import lance5057.tDefense.core.tools.armor.renderers.ArmorRenderer; +//import lance5057.tDefense.core.tools.bases.ArmorCore; +//import net.minecraft.client.Minecraft; +//import net.minecraft.client.model.ModelBase; +//import net.minecraft.client.model.ModelBiped; +//import net.minecraft.item.ItemStack; +//import net.minecraft.nbt.NBTTagList; +//import net.minecraft.util.ResourceLocation; +//import net.minecraftforge.client.event.RenderPlayerEvent; +//import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +//import net.minecraftforge.fml.relauncher.Side; +//import net.minecraftforge.fml.relauncher.SideOnly; +//import slimeknights.tconstruct.library.utils.TagUtil; +// +//public class ArmorRenderEvent { +// +// @SideOnly(Side.CLIENT) +// @SubscribeEvent +// public static void renderArmorEvent(RenderPlayerEvent.Post event) { +// Iterable<ItemStack> armor = event.getEntityPlayer().getArmorInventoryList(); +// for (ItemStack i : armor) +// renderArmor(event, i); +// } +// +// private static void renderArmor(RenderPlayerEvent.Post event, ItemStack stack) { +// if (stack.getItem() instanceof ArmorCore) { +// ArmorCore ac = (ArmorCore) stack.getItem(); +// +// NBTTagList list = TagUtil.getBaseMaterialsTagList(stack); +// ArmorRenderer mb = ac.getArmorModel(event.getEntityLiving(), stack); +// List<String> textures = ac.getArmorTexture(stack); +// List<String> textures2 = new ArrayList(); +// for (int i = 0; i < textures.size(); i++) { +// textures2.add(textures.get(i) + "_" + list.getStringTagAt(i) + ".png"); +// } +// +// TrimArmor(mb, textures2, event); +// } +// } +// +// private static void TrimArmor(ModelBiped armorModel, List<String> textures, RenderPlayerEvent.Post event) { +// if (armorModel != null) { +// ModelBase.copyModelAngles(event.getRenderer().getMainModel().bipedBody, armorModel.bipedBody); +// ModelBase.copyModelAngles(event.getRenderer().getMainModel().bipedHead, armorModel.bipedHead); +// ModelBase.copyModelAngles(event.getRenderer().getMainModel().bipedLeftArm, armorModel.bipedLeftArm); +// ModelBase.copyModelAngles(event.getRenderer().getMainModel().bipedLeftLeg, armorModel.bipedLeftLeg); +// ModelBase.copyModelAngles(event.getRenderer().getMainModel().bipedRightArm, armorModel.bipedRightArm); +// ModelBase.copyModelAngles(event.getRenderer().getMainModel().bipedRightLeg, armorModel.bipedRightLeg); +// +// // armorModel.isSneak = event.getEntityPlayer().isSneaking(); +// // armorModel.isRiding = event.getEntityPlayer().isRiding(); +// // armorModel.isChild = event.getEntityPlayer().isChild(); +// // +// // armorModel.swingProgress = +// // event.getEntityPlayer().getSwingProgress(event.getPartialRenderTick()); +// // +// // if (event.getEntityPlayer() instanceof EntityPlayer) { +// // final ItemStack itemstack = +// // event.getEntityPlayer().getHeldItem(EnumHand.MAIN_HAND); +// // final ItemStack itemstackoff = +// // event.getEntityPlayer().getHeldItem(EnumHand.OFF_HAND); +// // // armorModel.heldItemRight = 0; +// // // armorModel.aimedBow = false; +// // if (itemstack != null) // main hand +// // { +// // if (event.getEntityPlayer().getItemInUseCount() > 0) { +// // final EnumAction enumaction = itemstack.getItemUseAction(); +// // +// // if (enumaction == EnumAction.BLOCK) { +// // armorModel.rightArmPose = ModelBiped.ArmPose.BLOCK; +// // } else if (enumaction == EnumAction.BOW) { +// // +// // armorModel.rightArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; +// // } +// // } else { +// // armorModel.rightArmPose = +// // event.getEntityPlayer().getHeldItem(EnumHand.MAIN_HAND) != null +// // ? ModelBiped.ArmPose.ITEM +// // : ModelBiped.ArmPose.EMPTY; +// // } +// // } +// // +// // if (itemstack != null) // off hand +// // { +// // if (event.getEntityPlayer().getItemInUseCount() > 0) { +// // final EnumAction enumaction = itemstack.getItemUseAction(); +// // +// // if (enumaction == EnumAction.BLOCK) { +// // armorModel.leftArmPose = ModelBiped.ArmPose.BLOCK; +// // } else if (enumaction == EnumAction.BOW) { +// // +// // armorModel.leftArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; +// // } +// // } else { +// // armorModel.leftArmPose = +// // event.getEntityPlayer().getHeldItem(EnumHand.OFF_HAND) != null +// // ? ModelBiped.ArmPose.ITEM +// // : ModelBiped.ArmPose.EMPTY; +// // } +// // } +// // } +// +// // final float yaw = event.getEntityPlayer().prevRotationYawHead +// // + (event.getEntityPlayer().rotationYawHead - +// // event.getEntityPlayer().prevRotationYawHead) +// // * event.getPartialRenderTick(); +// // final float yawOffset = event.getEntityPlayer().prevRenderYawOffset +// // + (event.getEntityPlayer().renderYawOffset - +// // event.getEntityPlayer().prevRenderYawOffset) +// // * event.getPartialRenderTick(); +// // final float limbs = event.getEntityPlayer().prevLimbSwingAmount +// // + (event.getEntityPlayer().limbSwingAmount - +// // event.getEntityPlayer().prevLimbSwingAmount) +// // * event.getPartialRenderTick(); +// // final float limbSwing = event.getEntityPlayer().limbSwing +// // - event.getEntityPlayer().limbSwingAmount * (1.0F - +// // event.getPartialRenderTick()); +// // +// +// // armorModel.setRotationAngles(limbSwing, limbs, +// // event.getEntityPlayer().ticksExisted, yaw - yawOffset, +// // event.getEntityPlayer().rotationPitch, 0.1f, event.getEntityPlayer()); +// +// // GL11.glRotatef(180, 1.0f, 0, 0); +// +// for (String t : textures) { +// Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation(t)); +// armorModel.render(event.getEntityPlayer(), 0, 0, 0, 0, 0, 0.15f); +// } +// } +// } +//} diff --git a/src/main/java/lance5057/tDefense/core/events/TDEvents.java b/src/main/java/lance5057/tDefense/core/events/TDEvents.java index e12e1e6..a574831 100644 --- a/src/main/java/lance5057/tDefense/core/events/TDEvents.java +++ b/src/main/java/lance5057/tDefense/core/events/TDEvents.java @@ -4,7 +4,7 @@ import net.minecraftforge.common.MinecraftForge; public class TDEvents { public void preInit() { - MinecraftForge.EVENT_BUS.register(ArmorRenderEvent.class); + //MinecraftForge.EVENT_BUS.register(ArmorRenderEvent.class); } public void init() { diff --git a/src/main/java/lance5057/tDefense/core/materials/TDMaterials.java b/src/main/java/lance5057/tDefense/core/materials/TDMaterials.java index 9652aa8..47afb76 100644 --- a/src/main/java/lance5057/tDefense/core/materials/TDMaterials.java +++ b/src/main/java/lance5057/tDefense/core/materials/TDMaterials.java @@ -358,14 +358,14 @@ public class TDMaterials { if (TinkersDefense.config.materials.enableBaseMaterials) this.materials_master.addAll(materials_base); - if (TinkersDefense.config.materials.enableJokeMaterials) - this.materials_master.addAll(this.materials_joke); - if (TinkersDefense.config.materials.enableHolidayMaterials) - this.materials_master.addAll(materials_xmas); - if (TinkersDefense.config.materials.enableGemMaterials) - this.materials_master.addAll(materials_gems); - if (TinkersDefense.config.materials.enableCornucopiaMaterials) - this.materials_master.addAll(materials_cornucopia); +// if (TinkersDefense.config.materials.enableJokeMaterials) +// this.materials_master.addAll(this.materials_joke); +// if (TinkersDefense.config.materials.enableHolidayMaterials) +// this.materials_master.addAll(materials_xmas); +// if (TinkersDefense.config.materials.enableGemMaterials) +// this.materials_master.addAll(materials_gems); +// if (TinkersDefense.config.materials.enableCornucopiaMaterials) +// this.materials_master.addAll(materials_cornucopia); // if (TinkersDefense.config.materials.enableTwilightForestMaterials) // this.materials_master.addAll(materials_tf); // if (TinkersDefense.config.materials.enableBloodMagicMaterials) diff --git a/src/main/java/lance5057/tDefense/core/tools/TDTools.java b/src/main/java/lance5057/tDefense/core/tools/TDTools.java index bfb9091..bfa650c 100644 --- a/src/main/java/lance5057/tDefense/core/tools/TDTools.java +++ b/src/main/java/lance5057/tDefense/core/tools/TDTools.java @@ -14,8 +14,7 @@ import lance5057.tDefense.core.tools.armor.heavy.TinkersBreastplate; import lance5057.tDefense.core.tools.armor.heavy.TinkersGrieves; import lance5057.tDefense.core.tools.armor.heavy.TinkersHelm; import lance5057.tDefense.core.tools.armor.heavy.TinkersSabatons; -import lance5057.tDefense.core.tools.armor.light.TinkersBoots; -import lance5057.tDefense.core.tools.armor.straps.ItemStraps; +import lance5057.tDefense.core.tools.bases.ArmorCore; import lance5057.tDefense.core.tools.basic.FishingRod; import lance5057.tDefense.core.tools.basic.HeaterShield; import lance5057.tDefense.core.tools.basic.RoundShield; @@ -25,7 +24,7 @@ import lance5057.tDefense.core.tools.basic.Zweihander; import lance5057.tDefense.core.tools.baubles.Amulet; import lance5057.tDefense.core.tools.baubles.Ring; import lance5057.tDefense.core.tools.baubles.Sheathe; -import net.minecraft.inventory.EntityEquipmentSlot; +import lance5057.tDefense.util.TDRegistry; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.MinecraftForge; @@ -53,20 +52,20 @@ public class TDTools { public static ToolCore shears; public static ToolCore fishingRod; - public static ToolCore hood; - public static ToolCore shawl; - public static ToolCore robe; - public static ToolCore shoes; - - public static ToolCore coif; - public static ToolCore hauberk; - public static ToolCore chausses; - public static ToolCore boots; - - public static ToolCore helm; - public static ToolCore breastplate; - public static ToolCore grieves; - public static ToolCore sabatons; + public static ArmorCore hood; + public static ArmorCore shawl; + public static ArmorCore robe; + public static ArmorCore shoes; + + public static ArmorCore coif; + public static ArmorCore hauberk; + public static ArmorCore chausses; + //public static ToolCore boots; + + public static ArmorCore helm; + public static ArmorCore breastplate; + public static ArmorCore grieves; + public static ArmorCore sabatons; //baubles public static ToolCore sheathe; @@ -114,7 +113,7 @@ public class TDTools { // coif = new TinkersCoif(); // hauberk = new TinkersHauberk(); // chausses = new TinkersChausses(); - boots = new TinkersBoots(); + //boots = new TinkersBoots(); helm = new TinkersHelm(); breastplate = new TinkersBreastplate(); @@ -132,23 +131,25 @@ public class TDTools { regTool(shears, "shears", event); regTool(fishingRod, "fishingRod", event); - regTool(hood, "hood", event); - regTool(shawl, "shawl", event); - regTool(robe, "robe", event); - regTool(shoes, "shoes", event); + regArmor(hood, "hood", event); + regArmor(shawl, "shawl", event); + regArmor(robe, "robe", event); + regArmor(shoes, "shoes", event); - regTool(boots, "boots", event); - - regTool(helm, "helm", event); - regTool(breastplate, "breastplate", event); - regTool(grieves, "grieves", event); - regTool(sabatons, "sabatons", event); + //regTool(boots, "boots", event); + regArmor(helm, "helm", event); + regArmor(breastplate, "breastplate", event); + regArmor(grieves, "grieves", event); + regArmor(sabatons, "sabatons", event); + +// CustomTextureCreator.registerTexture(new ResourceLocation("tinkersdefense", "items/battleaxe/_halbard_accessory")); + CustomTextureCreator.registerTexture(new ResourceLocation("tinkersdefense", "armor/helm/_helm_chain")); CustomTextureCreator.registerTexture(new ResourceLocation("tinkersdefense", "armor/helm/_helm_plate")); CustomTextureCreator.registerTexture(new ResourceLocation("tinkersdefense", "armor/helm/_helm_top")); CustomTextureCreator.registerTexture(new ResourceLocation("tinkersdefense", "armor/helm/_helm_visor")); - +// regTool(sheathe, "sheathe", event); regTool(ring, "ring", event); regTool(amulet, "amulet", event); @@ -167,6 +168,14 @@ public class TDTools { //itemList.add(tool); } + private static void regArmor(ArmorCore armor, String name, RegistryEvent.Register<Item> event) { + armor.setRegistryName(new ResourceLocation("tinkersdefense:" + name)); + event.getRegistry().register(armor); + TDRegistry.registerTool(armor); + TinkersDefense.proxy.registerArmorModel(armor); + //itemList.add(tool); + } + private void registerModifiers() { } @@ -196,17 +205,17 @@ public class TDTools { TinkerRegistry.registerToolCrafting(shears); TinkerRegistry.registerToolCrafting(fishingRod); - TinkerRegistry.registerToolCrafting(hood); - TinkerRegistry.registerToolCrafting(shawl); - TinkerRegistry.registerToolCrafting(robe); - TinkerRegistry.registerToolCrafting(shoes); + TDRegistry.registerArmorCrafting(hood); + TDRegistry.registerArmorCrafting(shawl); + TDRegistry.registerArmorCrafting(robe); + TDRegistry.registerArmorCrafting(shoes); - TinkerRegistry.registerToolCrafting(boots); + //TinkerRegistry.registerToolCrafting(boots); - TinkerRegistry.registerToolForgeCrafting(helm); - TinkerRegistry.registerToolForgeCrafting(breastplate); - TinkerRegistry.registerToolForgeCrafting(grieves); - TinkerRegistry.registerToolForgeCrafting(sabatons); + TDRegistry.registerArmorForgeCrafting(helm); + TDRegistry.registerArmorForgeCrafting(breastplate); + TDRegistry.registerArmorForgeCrafting(grieves); + TDRegistry.registerArmorForgeCrafting(sabatons); TinkerRegistry.registerToolCrafting(sheathe); TinkerRegistry.registerToolCrafting(ring); diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersHood.java b/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersHood.java index f891770..482055b 100644 --- a/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersHood.java +++ b/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersHood.java @@ -1,19 +1,22 @@ package lance5057.tDefense.core.tools.armor.cloth; +import java.util.ArrayList; import java.util.List; import lance5057.tDefense.core.materials.ArmorMaterialStats.ClothMaterialStats; import lance5057.tDefense.core.materials.ArmorMaterialStats.HelmMaterialStats; import lance5057.tDefense.core.parts.TDParts; +import lance5057.tDefense.core.tools.armor.renderers.ArmorRenderer; import lance5057.tDefense.core.tools.armor.renderers.cloth.ModelTinkersHood; import lance5057.tDefense.core.tools.bases.ArmorCore; import lance5057.tDefense.util.ArmorNBT; -import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -24,7 +27,7 @@ public class TinkersHood extends ArmorCore { int induceDamage = 0; public TinkersHood() { - super(new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), + super(EntityEquipmentSlot.HEAD, new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), PartMaterialType.extra(TDParts.rivets)); setUnlocalizedName("tinkerhood"); } @@ -35,40 +38,20 @@ public class TinkersHood extends ArmorCore { } - @Override - public float damagePotential() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public double attackSpeed() { - // TODO Auto-generated method stub - return 0; - } - @SideOnly(Side.CLIENT) @Override - public String getArmorTexture(ItemStack stack, int layer) { - String s = ""; - switch (layer) { - case 0: - s = "textures/armor/hood/_hood_cloth.png"; - break; - case 1: - s = "textures/armor/hood/_hood_trim.png"; - break; - case 2: - s = "textures/armor/hood/_hood_metal.png"; - break; - } - return s; + public List<String> getArmorTexture(ItemStack stack) { + List<String> textures = new ArrayList(); + textures.add("textures/armor/hood/_hood_cloth.png"); + textures.add("textures/armor/hood/_hood_trim.png"); + textures.add("textures/armor/hood/_hood_metal.png"); + + return textures; } @SideOnly(Side.CLIENT) @Override - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, - EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) { + public ArmorRenderer getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack) { return new ModelTinkersHood(itemStack); } @@ -82,4 +65,35 @@ public class TinkersHood extends ArmorCore { public EntityEquipmentSlot getArmorSlot(ItemStack stack, EntityEquipmentSlot armorType) { return EntityEquipmentSlot.HEAD; } + + @Override + public void getTooltipDetailed(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public void getTooltipComponents(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, + int slot) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { + // TODO Auto-generated method stub + + } } diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersRobe.java b/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersRobe.java index ec85a86..6703fd6 100644 --- a/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersRobe.java +++ b/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersRobe.java @@ -1,19 +1,22 @@ package lance5057.tDefense.core.tools.armor.cloth; +import java.util.ArrayList; import java.util.List; import lance5057.tDefense.core.materials.ArmorMaterialStats.ClothMaterialStats; import lance5057.tDefense.core.materials.ArmorMaterialStats.LegsMaterialStats; import lance5057.tDefense.core.parts.TDParts; +import lance5057.tDefense.core.tools.armor.renderers.ArmorRenderer; import lance5057.tDefense.core.tools.armor.renderers.cloth.ModelTinkersRobe; import lance5057.tDefense.core.tools.bases.ArmorCore; import lance5057.tDefense.util.ArmorNBT; -import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -27,7 +30,7 @@ public class TinkersRobe extends ArmorCore public TinkersRobe() { - super(new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), + super(EntityEquipmentSlot.CHEST,new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), PartMaterialType.extra(TDParts.clasp)); setUnlocalizedName("tinkerrobe"); @@ -40,36 +43,20 @@ public class TinkersRobe extends ArmorCore } - @Override - public float damagePotential() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public double attackSpeed() { - // TODO Auto-generated method stub - return 0; - } - @SideOnly(Side.CLIENT) @Override - public String getArmorTexture(ItemStack stack, int layer) - { - String s = ""; - switch(layer) - { - case 0: s = "textures/armor/robe/_robe_cloth.png"; break; - case 1: s = "textures/armor/robe/_robe_trim.png"; break; - case 2: s = "textures/armor/robe/_robe_metal.png"; break; - } - return s; + public List<String> getArmorTexture(ItemStack stack) { + List<String> textures = new ArrayList(); + textures.add("textures/armor/robe/_robe_cloth.png"); + textures.add("textures/armor/robe/_robe_trim.png"); + textures.add("textures/armor/robe/_robe_metal.png"); + + return textures; } @SideOnly(Side.CLIENT) @Override - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, - EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) + public ArmorRenderer getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack) { return new ModelTinkersRobe(itemStack); } @@ -84,4 +71,35 @@ public class TinkersRobe extends ArmorCore public EntityEquipmentSlot getArmorSlot(ItemStack stack, EntityEquipmentSlot armorType) { return EntityEquipmentSlot.LEGS; } + + @Override + public void getTooltipDetailed(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public void getTooltipComponents(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, + int slot) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { + // TODO Auto-generated method stub + + } } diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersShawl.java b/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersShawl.java index 2156515..825d5e4 100644 --- a/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersShawl.java +++ b/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersShawl.java @@ -1,19 +1,23 @@ package lance5057.tDefense.core.tools.armor.cloth; +import java.util.ArrayList; import java.util.List; import lance5057.tDefense.core.materials.ArmorMaterialStats.ChestMaterialStats; import lance5057.tDefense.core.materials.ArmorMaterialStats.ClothMaterialStats; import lance5057.tDefense.core.parts.TDParts; +import lance5057.tDefense.core.tools.armor.renderers.ArmorRenderer; import lance5057.tDefense.core.tools.armor.renderers.cloth.ModelTinkersShawl; import lance5057.tDefense.core.tools.bases.ArmorCore; import lance5057.tDefense.util.ArmorNBT; import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -26,7 +30,7 @@ public class TinkersShawl extends ArmorCore public TinkersShawl() { - super(new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), PartMaterialType.extra(TDParts.armorPlate)); + super(EntityEquipmentSlot.LEGS,new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), PartMaterialType.extra(TDParts.armorPlate)); setUnlocalizedName("tinkershawl"); } @@ -37,44 +41,20 @@ public class TinkersShawl extends ArmorCore } - @Override - public float damagePotential() - { - // TODO Auto-generated method stub - return 0; - } - - @Override - public double attackSpeed() - { - // TODO Auto-generated method stub - return 0; - } - @SideOnly(Side.CLIENT) @Override - public String getArmorTexture(ItemStack stack, int layer) - { - String s = ""; - switch (layer) - { - case 0: - s = "textures/armor/shawl/_shawl_cloth.png"; - break; - case 1: - s = "textures/armor/shawl/_shawl_trim.png"; - break; - case 2: - s = "textures/armor/shawl/_shawl_metal.png"; - break; - } - return s; + public List<String> getArmorTexture(ItemStack stack) { + List<String> textures = new ArrayList(); + textures.add("textures/armor/shawl/_shawl_cloth.png"); + textures.add("textures/armor/shawl/_shawl_trim.png"); + textures.add("textures/armor/shawl/_shawl_metal.png"); + + return textures; } @SideOnly(Side.CLIENT) @Override - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, - EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) + public ArmorRenderer getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack) { return new ModelTinkersShawl(itemStack); } @@ -89,4 +69,35 @@ public class TinkersShawl extends ArmorCore public EntityEquipmentSlot getArmorSlot(ItemStack stack, EntityEquipmentSlot armorType) { return EntityEquipmentSlot.CHEST; } + + @Override + public void getTooltipDetailed(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public void getTooltipComponents(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, + int slot) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { + // TODO Auto-generated method stub + + } } diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersShoes.java b/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersShoes.java index 9af6934..c7c8606 100644 --- a/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersShoes.java +++ b/src/main/java/lance5057/tDefense/core/tools/armor/cloth/TinkersShoes.java @@ -1,19 +1,23 @@ package lance5057.tDefense.core.tools.armor.cloth; +import java.util.ArrayList; import java.util.List; import lance5057.tDefense.core.materials.ArmorMaterialStats.ClothMaterialStats; import lance5057.tDefense.core.materials.ArmorMaterialStats.FeetMaterialStats; import lance5057.tDefense.core.parts.TDParts; +import lance5057.tDefense.core.tools.armor.renderers.ArmorRenderer; import lance5057.tDefense.core.tools.armor.renderers.cloth.ModelTinkersShoes; import lance5057.tDefense.core.tools.bases.ArmorCore; import lance5057.tDefense.util.ArmorNBT; import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -28,7 +32,7 @@ public class TinkersShoes extends ArmorCore public TinkersShoes() { - super(new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), + super(EntityEquipmentSlot.FEET,new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), PartMaterialType.extra(TDParts.rivets), new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), PartMaterialType.bowstring(TinkerTools.bowString)); @@ -42,37 +46,20 @@ public class TinkersShoes extends ArmorCore } - @Override - public float damagePotential() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public double attackSpeed() { - // TODO Auto-generated method stub - return 0; - } - @SideOnly(Side.CLIENT) @Override - public String getArmorTexture(ItemStack stack, int layer) - { - String s = ""; - switch(layer) - { - case 0: s = "textures/armor/shoes/_shoes_cloth.png"; break; - case 2: s = "textures/armor/shoes/_shoes_trim.png"; break; - case 1: s = "textures/armor/shoes/_shoes_metal.png"; break; - case 3: s = "textures/armor/shoes/_shoes_string.png"; break; - } - return s; + public List<String> getArmorTexture(ItemStack stack) { + List<String> textures = new ArrayList(); + textures.add("textures/armor/shoes/_shoes_cloth.png"); + textures.add("textures/armor/shoes/_shoes_trim.png"); + textures.add("textures/armor/shoes/_shoes_metal.png"); + + return textures; } @SideOnly(Side.CLIENT) @Override - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, - EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) + public ArmorRenderer getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack) { return new ModelTinkersShoes(itemStack); } @@ -87,4 +74,35 @@ public class TinkersShoes extends ArmorCore public EntityEquipmentSlot getArmorSlot(ItemStack stack, EntityEquipmentSlot armorType) { return EntityEquipmentSlot.FEET; } + + @Override + public void getTooltipDetailed(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public void getTooltipComponents(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, + int slot) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { + // TODO Auto-generated method stub + + } } diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersBreastplate.java b/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersBreastplate.java index 5ee2393..a7df0f0 100644 --- a/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersBreastplate.java +++ b/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersBreastplate.java @@ -1,65 +1,91 @@ package lance5057.tDefense.core.tools.armor.heavy; +import java.util.ArrayList; import java.util.List; import lance5057.tDefense.core.materials.ArmorMaterialStats.ChestMaterialStats; import lance5057.tDefense.core.parts.TDParts; +import lance5057.tDefense.core.tools.armor.renderers.ArmorRenderer; import lance5057.tDefense.core.tools.armor.renderers.heavy.ModelTinkersBreastplate; import lance5057.tDefense.core.tools.bases.ArmorCore; import lance5057.tDefense.util.ArmorNBT; import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import slimeknights.tconstruct.library.materials.Material; import slimeknights.tconstruct.library.tinkering.PartMaterialType; import slimeknights.tconstruct.tools.TinkerTools; -public class TinkersBreastplate extends ArmorCore -{ - public TinkersBreastplate() - { - super(new PartMaterialType(TinkerTools.largePlate, ChestMaterialStats.TYPE), - new PartMaterialType(TDParts.armorPlate, ChestMaterialStats.TYPE), - PartMaterialType.handle(TDParts.filigree), - PartMaterialType.extra(TDParts.chainmail)); +public class TinkersBreastplate extends ArmorCore { + public TinkersBreastplate() { + super(EntityEquipmentSlot.CHEST, new PartMaterialType(TinkerTools.largePlate, ChestMaterialStats.TYPE), + new PartMaterialType(TDParts.armorPlate, ChestMaterialStats.TYPE), + PartMaterialType.handle(TDParts.filigree), PartMaterialType.extra(TDParts.chainmail)); setUnlocalizedName("tinkersbreastplate"); } @SideOnly(Side.CLIENT) @Override - public String getArmorTexture(ItemStack stack, int layer) - { - String s = ""; - switch(layer) - { - case 0: s = "textures/armor/breastplate/_breastplate_plate.png"; break; - case 1: s = "textures/armor/breastplate/_breastplate_smallplate.png"; break; - case 2: s = "textures/armor/breastplate/_breastplate_trim.png"; break; - case 3: s = "textures/armor/breastplate/_breastplate_chain.png"; break; - } - return s; + public List<String> getArmorTexture(ItemStack stack) { + List<String> textures = new ArrayList(); + textures.add("textures/armor/breastplate/_breastplate_plate.png"); + textures.add("textures/armor/breastplate/_breastplate_smallplate.png"); + textures.add("textures/armor/breastplate/_breastplate_trim.png"); + textures.add("textures/armor/breastplate/_breastplate_chain.png"); + return textures; } @SideOnly(Side.CLIENT) @Override - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, - EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) - { + public ArmorRenderer getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack) { return new ModelTinkersBreastplate(itemStack); } - + @Override public NBTTagCompound buildTag(List<Material> materials) { ArmorNBT data = buildDefaultArmorTag(materials, ChestMaterialStats.TYPE); - return data.get(); + return data.get(); } - + @Override public EntityEquipmentSlot getArmorSlot(ItemStack stack, EntityEquipmentSlot armorType) { return EntityEquipmentSlot.CHEST; } + + @Override + public void getTooltipDetailed(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public void getTooltipComponents(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, + int slot) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { + // TODO Auto-generated method stub + + } } diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersGrieves.java b/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersGrieves.java index 3d264f1..ccefbf7 100644 --- a/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersGrieves.java +++ b/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersGrieves.java @@ -1,18 +1,22 @@ package lance5057.tDefense.core.tools.armor.heavy; +import java.util.ArrayList; import java.util.List; import lance5057.tDefense.core.materials.ArmorMaterialStats.ClothMaterialStats; import lance5057.tDefense.core.materials.ArmorMaterialStats.LegsMaterialStats; import lance5057.tDefense.core.parts.TDParts; +import lance5057.tDefense.core.tools.armor.renderers.ArmorRenderer; import lance5057.tDefense.core.tools.armor.renderers.heavy.ModelTinkersGrieves; import lance5057.tDefense.core.tools.bases.ArmorCore; import lance5057.tDefense.util.ArmorNBT; import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import slimeknights.tconstruct.library.materials.Material; @@ -22,7 +26,7 @@ public class TinkersGrieves extends ArmorCore { public TinkersGrieves() { - super(new PartMaterialType(TDParts.armorPlate, LegsMaterialStats.TYPE), + super(EntityEquipmentSlot.LEGS,new PartMaterialType(TDParts.armorPlate, LegsMaterialStats.TYPE), new PartMaterialType(TDParts.chainmail, LegsMaterialStats.TYPE), PartMaterialType.handle(TDParts.filigree), new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE)); @@ -31,23 +35,19 @@ public class TinkersGrieves extends ArmorCore @SideOnly(Side.CLIENT) @Override - public String getArmorTexture(ItemStack stack, int layer) + public List<String> getArmorTexture(ItemStack stack) { - String s = ""; - switch(layer) - { - case 0: s = "textures/armor/grieves/_grieves_plate.png"; break; - case 1: s = "textures/armor/grieves/_grieves_chain.png"; break; - case 2: s = "textures/armor/grieves/_grieves_trim.png"; break; - case 3: s = "textures/armor/grieves/_grieves_cloth.png"; break; - } - return s; + List<String> textures = new ArrayList(); + textures.add("textures/armor/grieves/_grieves_plate.png"); + textures.add("textures/armor/grieves/_grieves_chain.png"); + textures.add("textures/armor/grieves/_grieves_trim.png"); + textures.add("textures/armor/grieves/_grieves_cloth.png"); + return textures; } @SideOnly(Side.CLIENT) @Override - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, - EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) + public ArmorRenderer getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack) { return new ModelTinkersGrieves(itemStack); } @@ -62,4 +62,35 @@ public class TinkersGrieves extends ArmorCore public EntityEquipmentSlot getArmorSlot(ItemStack stack, EntityEquipmentSlot armorType) { return EntityEquipmentSlot.LEGS; } + + @Override + public void getTooltipDetailed(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public void getTooltipComponents(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, + int slot) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { + // TODO Auto-generated method stub + + } } diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersHelm.java b/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersHelm.java index 0dadb93..3b1973d 100644 --- a/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersHelm.java +++ b/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersHelm.java @@ -1,65 +1,93 @@ package lance5057.tDefense.core.tools.armor.heavy; +import java.util.ArrayList; import java.util.List; import lance5057.tDefense.core.materials.ArmorMaterialStats.HelmMaterialStats; import lance5057.tDefense.core.parts.TDParts; +import lance5057.tDefense.core.tools.armor.renderers.ArmorRenderer; import lance5057.tDefense.core.tools.armor.renderers.heavy.ModelTinkersHelm; import lance5057.tDefense.core.tools.bases.ArmorCore; import lance5057.tDefense.util.ArmorNBT; -import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.DamageSource; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import slimeknights.tconstruct.library.materials.Material; import slimeknights.tconstruct.library.tinkering.PartMaterialType; +import slimeknights.tconstruct.library.utils.TagUtil; import slimeknights.tconstruct.tools.TinkerTools; -public class TinkersHelm extends ArmorCore -{ - public TinkersHelm() - { - super(new PartMaterialType(TinkerTools.panHead, HelmMaterialStats.TYPE), - new PartMaterialType(TDParts.armorPlate, HelmMaterialStats.TYPE), - PartMaterialType.handle(TDParts.filigree), - PartMaterialType.extra(TDParts.chainmail)); +public class TinkersHelm extends ArmorCore { + public TinkersHelm() { + super(EntityEquipmentSlot.HEAD,new PartMaterialType(TinkerTools.panHead, HelmMaterialStats.TYPE), + new PartMaterialType(TDParts.armorPlate, HelmMaterialStats.TYPE), + PartMaterialType.handle(TDParts.filigree), PartMaterialType.extra(TDParts.chainmail)); setUnlocalizedName("tinkershelm"); } @SideOnly(Side.CLIENT) @Override - public String getArmorTexture(ItemStack stack, int layer) - { - String s = ""; - switch(layer) - { - case 0: s = "textures/armor/helm/_helm_top.png"; break; - case 1: s = "textures/armor/helm/_helm_plate.png"; break; - case 2: s = "textures/armor/helm/_helm_visor.png"; break; - case 3: s = "textures/armor/helm/_helm_chain.png"; break; - } - return s; + public List<String> getArmorTexture(ItemStack stack) { + List<String> textures = new ArrayList(); + NBTTagList t = TagUtil.getBaseMaterialsTagList(stack); + textures.add("textures/armor/helm/_helm_top_" + t.getStringTagAt(0)); + textures.add("textures/armor/helm/_helm_plate_" + t.getStringTagAt(1)); + textures.add("textures/armor/helm/_helm_visor_" + t.getStringTagAt(2)); + textures.add("textures/armor/helm/_helm_chain_" + t.getStringTagAt(3)); + return textures; } @SideOnly(Side.CLIENT) @Override - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, - EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) - { + public ArmorRenderer getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack) { return new ModelTinkersHelm(itemStack); } - + @Override public NBTTagCompound buildTag(List<Material> materials) { ArmorNBT data = buildDefaultArmorTag(materials, HelmMaterialStats.TYPE); - return data.get(); + return data.get(); } - + @Override public EntityEquipmentSlot getArmorSlot(ItemStack stack, EntityEquipmentSlot armorType) { return EntityEquipmentSlot.HEAD; } + + @Override + public void getTooltipDetailed(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public void getTooltipComponents(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, + int slot) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { + // TODO Auto-generated method stub + + } } diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersSabatons.java b/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersSabatons.java index 4f8adef..7172492 100644 --- a/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersSabatons.java +++ b/src/main/java/lance5057/tDefense/core/tools/armor/heavy/TinkersSabatons.java @@ -1,29 +1,31 @@ package lance5057.tDefense.core.tools.armor.heavy; +import java.util.ArrayList; import java.util.List; import lance5057.tDefense.core.materials.ArmorMaterialStats.ClothMaterialStats; import lance5057.tDefense.core.materials.ArmorMaterialStats.FeetMaterialStats; import lance5057.tDefense.core.parts.TDParts; +import lance5057.tDefense.core.tools.armor.renderers.ArmorRenderer; import lance5057.tDefense.core.tools.armor.renderers.heavy.ModelTinkersSabatons; import lance5057.tDefense.core.tools.bases.ArmorCore; import lance5057.tDefense.util.ArmorNBT; import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import slimeknights.tconstruct.library.materials.Material; import slimeknights.tconstruct.library.tinkering.PartMaterialType; -public class TinkersSabatons extends ArmorCore -{ - public TinkersSabatons() - { - super(new PartMaterialType(TDParts.armorPlate, FeetMaterialStats.TYPE), - new PartMaterialType(TDParts.armorPlate, FeetMaterialStats.TYPE), +public class TinkersSabatons extends ArmorCore { + public TinkersSabatons() { + super(EntityEquipmentSlot.FEET,new PartMaterialType(TDParts.armorPlate, FeetMaterialStats.TYPE), + new PartMaterialType(TDParts.armorPlate, FeetMaterialStats.TYPE), PartMaterialType.handle(TDParts.filigree), new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE)); setUnlocalizedName("tinkerssabatons"); @@ -31,35 +33,60 @@ public class TinkersSabatons extends ArmorCore @SideOnly(Side.CLIENT) @Override - public String getArmorTexture(ItemStack stack, int layer) - { - String s = ""; - switch(layer) - { - case 0: s = "textures/armor/sabatons/_sabatons_plates.png"; break; - case 1: s = "textures/armor/sabatons/_sabatons_caps.png"; break; - case 2: s = "textures/armor/sabatons/_sabatons_trim.png"; break; - case 3: s = "textures/armor/sabatons/_sabatons_soles.png"; break; - } - return s; + public List<String> getArmorTexture(ItemStack stack) { + List<String> textures = new ArrayList(); + textures.add("textures/armor/sabatons/_sabatons_plates.png"); + textures.add("textures/armor/sabatons/_sabatons_caps.png"); + textures.add("textures/armor/sabatons/_sabatons_trim.png"); + textures.add("textures/armor/sabatons/_sabatons_soles.png"); + return textures; } @SideOnly(Side.CLIENT) @Override - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, - EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) - { + public ArmorRenderer getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack) { return new ModelTinkersSabatons(itemStack); } - + @Override public NBTTagCompound buildTag(List<Material> materials) { ArmorNBT data = buildDefaultArmorTag(materials, FeetMaterialStats.TYPE); - return data.get(); + return data.get(); } - + @Override public EntityEquipmentSlot getArmorSlot(ItemStack stack, EntityEquipmentSlot armorType) { return EntityEquipmentSlot.FEET; } + + @Override + public void getTooltipDetailed(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public void getTooltipComponents(ItemStack stack, List<String> tooltips) { + // TODO Auto-generated method stub + + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, + int slot) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { + // TODO Auto-generated method stub + + } } diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/light/TinkersBoots.java b/src/main/java/lance5057/tDefense/core/tools/armor/light/TinkersBoots.java index a43e6be..308302d 100644 --- a/src/main/java/lance5057/tDefense/core/tools/armor/light/TinkersBoots.java +++ b/src/main/java/lance5057/tDefense/core/tools/armor/light/TinkersBoots.java @@ -1,63 +1,63 @@ -package lance5057.tDefense.core.tools.armor.light; - -import java.util.List; - -import lance5057.tDefense.core.materials.ArmorMaterialStats.ClothMaterialStats; -import lance5057.tDefense.core.materials.ArmorMaterialStats.FeetMaterialStats; -import lance5057.tDefense.core.parts.TDParts; -import lance5057.tDefense.core.tools.armor.renderers.light.ModelTinkersBoots; -import lance5057.tDefense.core.tools.bases.ArmorCore; -import lance5057.tDefense.util.ArmorNBT; -import net.minecraft.client.model.ModelBiped; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import slimeknights.tconstruct.library.materials.Material; -import slimeknights.tconstruct.library.tinkering.PartMaterialType; - -public class TinkersBoots extends ArmorCore -{ - public TinkersBoots() - { - super(new PartMaterialType(TDParts.chainmail, FeetMaterialStats.TYPE), - new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), - PartMaterialType.handle(TDParts.rivets)); - setUnlocalizedName("tinkersboots"); - } - - @SideOnly(Side.CLIENT) - @Override - public String getArmorTexture(ItemStack stack, int layer) - { - String s = ""; - switch(layer) - { - case 0: s = "textures/armor/boots/_boots_chain.png"; break; - case 1: s = "textures/armor/boots/_boots_cloth.png"; break; - case 2: s = "textures/armor/boots/_boots_rivet.png"; break; - } - return s; - } - - @SideOnly(Side.CLIENT) - @Override - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, - EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) - { - return new ModelTinkersBoots(itemStack); - } - - @Override - public NBTTagCompound buildTag(List<Material> materials) { - ArmorNBT data = buildDefaultArmorTag(materials, FeetMaterialStats.TYPE); - return data.get(); - } - - @Override - public EntityEquipmentSlot getArmorSlot(ItemStack stack, EntityEquipmentSlot armorType) { - return EntityEquipmentSlot.FEET; - } -} +//package lance5057.tDefense.core.tools.armor.light; +// +//import java.util.List; +// +//import lance5057.tDefense.core.materials.ArmorMaterialStats.ClothMaterialStats; +//import lance5057.tDefense.core.materials.ArmorMaterialStats.FeetMaterialStats; +//import lance5057.tDefense.core.parts.TDParts; +//import lance5057.tDefense.core.tools.armor.renderers.light.ModelTinkersBoots; +//import lance5057.tDefense.core.tools.bases.ArmorCore; +//import lance5057.tDefense.util.ArmorNBT; +//import net.minecraft.client.model.ModelBiped; +//import net.minecraft.entity.EntityLivingBase; +//import net.minecraft.inventory.EntityEquipmentSlot; +//import net.minecraft.item.ItemStack; +//import net.minecraft.nbt.NBTTagCompound; +//import net.minecraftforge.fml.relauncher.Side; +//import net.minecraftforge.fml.relauncher.SideOnly; +//import slimeknights.tconstruct.library.materials.Material; +//import slimeknights.tconstruct.library.tinkering.PartMaterialType; +// +//public class TinkersBoots extends ArmorCore +//{ +// public TinkersBoots() +// { +// super(new PartMaterialType(TDParts.chainmail, FeetMaterialStats.TYPE), +// new PartMaterialType(TDParts.cloth, ClothMaterialStats.TYPE), +// PartMaterialType.handle(TDParts.rivets)); +// setUnlocalizedName("tinkersboots"); +// } +// +// @SideOnly(Side.CLIENT) +// @Override +// public String getArmorTexture(ItemStack stack, int layer) +// { +// String s = ""; +// switch(layer) +// { +// case 0: s = "textures/armor/boots/_boots_chain.png"; break; +// case 1: s = "textures/armor/boots/_boots_cloth.png"; break; +// case 2: s = "textures/armor/boots/_boots_rivet.png"; break; +// } +// return s; +// } +// +// @SideOnly(Side.CLIENT) +// @Override +// public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, +// EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) +// { +// return new ModelTinkersBoots(itemStack); +// } +// +// @Override +// public NBTTagCompound buildTag(List<Material> materials) { +// ArmorNBT data = buildDefaultArmorTag(materials, FeetMaterialStats.TYPE); +// return data.get(); +// } +// +// @Override +// public EntityEquipmentSlot getArmorSlot(ItemStack stack, EntityEquipmentSlot armorType) { +// return EntityEquipmentSlot.FEET; +// } +//} diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/renderers/ArmorRenderer.java b/src/main/java/lance5057/tDefense/core/tools/armor/renderers/ArmorRenderer.java index 558cad2..217873f 100644 --- a/src/main/java/lance5057/tDefense/core/tools/armor/renderers/ArmorRenderer.java +++ b/src/main/java/lance5057/tDefense/core/tools/armor/renderers/ArmorRenderer.java @@ -1,27 +1,13 @@ package lance5057.tDefense.core.tools.armor.renderers; -import java.awt.image.BufferedImage; -import java.util.List; - -import org.lwjgl.opengl.GL11; - -import lance5057.tDefense.Reference; -import lance5057.tDefense.core.tools.armor.renderers.shaders.ArmorShader; -import lance5057.tDefense.core.tools.bases.ArmorCore; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.model.ModelPlayer; import net.minecraft.client.renderer.texture.DynamicTexture; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityArmorStand; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ResourceLocation; -import slimeknights.tconstruct.library.materials.Material; -import slimeknights.tconstruct.library.utils.TagUtil; -import slimeknights.tconstruct.library.utils.TinkerUtil; -public class ArmorRenderer extends ModelBiped { +public class ArmorRenderer extends ModelPlayer { // public String[] partNames; public ItemStack stack; @@ -33,47 +19,17 @@ public class ArmorRenderer extends ModelBiped { public NBTTagCompound defaultTags = new NBTTagCompound(); public ArmorRenderer(float a, float b, int c, int d, ItemStack stack) { - super(a, b, c, d); - - this.stack = stack; - - initTexture(); - } - - public void initTexture() { - BufferedImage buffImg = new BufferedImage(this.textureWidth, this.textureHeight, BufferedImage.TYPE_INT_ARGB); - - for (int i = 0; i < TinkerUtil.getMaterialsFromTagList(TagUtil.getBaseMaterialsTagList(stack)).size(); i++) { - String s = stack.getItem().getRegistryName().getResourceDomain(); - List<Material> mats = TinkerUtil.getMaterialsFromTagList(TagUtil.getBaseMaterialsTagList(stack)); + super(a, false); - String o = mats.get(i).renderInfo.getTextureSuffix(); - - ArmorShader.selectRenderer(buffImg, mats.get(i).renderInfo, - new ResourceLocation(Reference.MOD_ID, ((ArmorCore) stack.getItem()).getArmorTexture(stack, i))); - } + this.stack = stack; - texture = new DynamicTexture(buffImg); - } + this.bipedBodyWear.isHidden = true; + this.bipedHeadwear.isHidden = true; + this.bipedLeftArmwear.isHidden = true; + this.bipedLeftLegwear.isHidden = true; + this.bipedRightArmwear.isHidden = true; + this.bipedRightLegwear.isHidden = true; - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { - GL11.glPushMatrix(); - - EntityLivingBase e = (EntityLivingBase) entity; - if (texture != null) { - Minecraft.getMinecraft().getTextureManager() - .bindTexture(Minecraft.getMinecraft().getTextureManager().getDynamicTextureLocation("tdarmor", texture)); - } - else - { - initTexture(); - } - - super.render(entity, f, f1, f2, f3, f4, f5); - - GL11.glPopMatrix(); - GL11.glColor3d(1.0, 1.0, 1.0); } // Mojang plz @@ -104,8 +60,8 @@ public class ArmorRenderer extends ModelBiped { this.bipedRightLeg.rotateAngleZ = 0.017453292F * entityarmorstand.getRightLegRotation().getZ(); this.bipedRightLeg.setRotationPoint(-1.9F, 11.0F, 0.0F); copyModelAngles(this.bipedHead, this.bipedHeadwear); - } else - super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, - entityIn); + } else { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + } } } diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/renderers/layers/LayerTDArmor.java b/src/main/java/lance5057/tDefense/core/tools/armor/renderers/layers/LayerTDArmor.java new file mode 100644 index 0000000..14c3fc1 --- /dev/null +++ b/src/main/java/lance5057/tDefense/core/tools/armor/renderers/layers/LayerTDArmor.java @@ -0,0 +1,131 @@ +package lance5057.tDefense.core.tools.armor.renderers.layers; + +import java.util.List; +import java.util.Map; + +import com.google.common.collect.Maps; + +import lance5057.tDefense.Reference; +import lance5057.tDefense.core.tools.bases.ArmorCore; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import slimeknights.tconstruct.library.client.CustomTextureCreator; + +@SideOnly(Side.CLIENT) +public abstract class LayerTDArmor<T extends ModelBase> implements LayerRenderer<EntityLivingBase> { + + protected static final ResourceLocation ENCHANTED_ITEM_GLINT_RES = new ResourceLocation( + "textures/misc/enchanted_item_glint.png"); + private final RenderLivingBase<?> renderer; + private float alpha = 1.0F; + private float colorR = 1.0F; + private float colorG = 1.0F; + private float colorB = 1.0F; + private boolean skipRenderGlint; + private static final Map<String, ResourceLocation> ARMOR_TEXTURE_RES_MAP = Maps + .<String, ResourceLocation>newHashMap(); + + public LayerTDArmor(RenderLivingBase<?> rendererIn) { + this.renderer = rendererIn; + this.initArmor(); + } + + protected abstract void initArmor(); + + protected abstract void setModelSlotVisible(T p_188359_1_, EntityEquipmentSlot slotIn); + + @Override + public abstract void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, + float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale); + + @Override + public boolean shouldCombineTextures() { + // TODO Auto-generated method stub + return false; + } + + protected void renderArmorLayer(EntityLivingBase entityLivingBaseIn, float limbSwing, float limbSwingAmount, + float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale, + EntityEquipmentSlot slotIn) { + ItemStack itemstack = entityLivingBaseIn.getItemStackFromSlot(slotIn); + + if (itemstack != null && itemstack.getItem() instanceof ArmorCore) { + ArmorCore itemarmor = (ArmorCore) itemstack.getItem(); + + if (itemarmor.getArmorSlot(itemstack, null) == slotIn) { + T t = this.getModelFromSlot(entityLivingBaseIn, slotIn); + if (t != null) { + t.setModelAttributes(this.renderer.getMainModel()); + t.setLivingAnimations(entityLivingBaseIn, limbSwing, limbSwingAmount, partialTicks); + this.setModelSlotVisible(t, slotIn); + Map<String, TextureAtlasSprite> sprites = CustomTextureCreator.sprites.get("tinkersdefense:armor/helm/_helm_visor"); + List<String> textures = getArmorResource(entityLivingBaseIn, itemstack, slotIn, null); + for (String s : textures) { + CustomTextureCreator.sprites.get(s); + this.renderer.bindTexture(new ResourceLocation(Reference.MOD_ID, s + ".png")); + t.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, + scale); + } + + if (!this.skipRenderGlint && itemstack.hasEffect()) { + renderEnchantedGlint(this.renderer, entityLivingBaseIn, t, limbSwing, limbSwingAmount, + partialTicks, ageInTicks, netHeadYaw, headPitch, scale); + } + } + } + } + } + + public abstract T getModelFromSlot(EntityLivingBase ent, EntityEquipmentSlot slotIn); + + public abstract List<String> getArmorResource(net.minecraft.entity.Entity entity, ItemStack stack, + EntityEquipmentSlot slot, String type); + + public static void renderEnchantedGlint(RenderLivingBase<?> p_188364_0_, EntityLivingBase p_188364_1_, + ModelBase model, float p_188364_3_, float p_188364_4_, float p_188364_5_, float p_188364_6_, + float p_188364_7_, float p_188364_8_, float p_188364_9_) { + float f = (float) p_188364_1_.ticksExisted + p_188364_5_; + p_188364_0_.bindTexture(ENCHANTED_ITEM_GLINT_RES); + Minecraft.getMinecraft().entityRenderer.setupFogColor(true); + GlStateManager.enableBlend(); + GlStateManager.depthFunc(514); + GlStateManager.depthMask(false); + float f1 = 0.5F; + GlStateManager.color(0.5F, 0.5F, 0.5F, 1.0F); + + for (int i = 0; i < 2; ++i) { + GlStateManager.disableLighting(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_COLOR, GlStateManager.DestFactor.ONE); + float f2 = 0.76F; + GlStateManager.color(0.38F, 0.19F, 0.608F, 1.0F); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + float f3 = 0.33333334F; + GlStateManager.scale(0.33333334F, 0.33333334F, 0.33333334F); + GlStateManager.rotate(30.0F - (float) i * 60.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(0.0F, f * (0.001F + (float) i * 0.003F) * 20.0F, 0.0F); + GlStateManager.matrixMode(5888); + model.render(p_188364_1_, p_188364_3_, p_188364_4_, p_188364_6_, p_188364_7_, p_188364_8_, p_188364_9_); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + } + + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + GlStateManager.enableLighting(); + GlStateManager.depthMask(true); + GlStateManager.depthFunc(515); + GlStateManager.disableBlend(); + Minecraft.getMinecraft().entityRenderer.setupFogColor(false); + } +} diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/renderers/layers/LayerTDBipedArmor.java b/src/main/java/lance5057/tDefense/core/tools/armor/renderers/layers/LayerTDBipedArmor.java new file mode 100644 index 0000000..890ba1f --- /dev/null +++ b/src/main/java/lance5057/tDefense/core/tools/armor/renderers/layers/LayerTDBipedArmor.java @@ -0,0 +1,68 @@ +package lance5057.tDefense.core.tools.armor.renderers.layers; + +import java.util.List; + +import lance5057.tDefense.core.tools.bases.ArmorCore; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class LayerTDBipedArmor extends LayerTDArmor<ModelBiped> { + + public LayerTDBipedArmor(RenderLivingBase<?> rendererIn) { + super(rendererIn); + } + + @Override + protected void initArmor() { + // TODO Auto-generated method stub + + } + + @Override + protected void setModelSlotVisible(ModelBiped p_188359_1_, EntityEquipmentSlot slotIn) { + // TODO Auto-generated method stub + + } + + @Override + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, + float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) { + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, + headPitch, scale, EntityEquipmentSlot.CHEST); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, + headPitch, scale, EntityEquipmentSlot.LEGS); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, + headPitch, scale, EntityEquipmentSlot.FEET); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, + headPitch, scale, EntityEquipmentSlot.HEAD); + } + + @Override + public ModelBiped getModelFromSlot(EntityLivingBase ent, EntityEquipmentSlot slotIn) { + if (ent instanceof EntityPlayer) { + EntityPlayer p = (EntityPlayer) ent; + ItemStack armor = p.inventory.armorItemInSlot(slotIn.getIndex()); + ModelBiped b = ((ArmorCore)armor.getItem()).getArmorModel(ent, armor); + return b; + } + return null; + } + + @Override + public List<String> getArmorResource(Entity entity, ItemStack stack, EntityEquipmentSlot slot, String type) { + if (entity instanceof EntityPlayer) { + EntityPlayer p = (EntityPlayer) entity; + ItemStack armor = p.inventory.armorItemInSlot(slot.getIndex()); + List<String> l = ((ArmorCore)armor.getItem()).getArmorTexture(armor); + return l; + } + return null; + } + +} diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/straps/ItemStraps.java b/src/main/java/lance5057/tDefense/core/tools/armor/straps/ItemStraps.java deleted file mode 100644 index 2822d1a..0000000 --- a/src/main/java/lance5057/tDefense/core/tools/armor/straps/ItemStraps.java +++ /dev/null @@ -1,167 +0,0 @@ -package lance5057.tDefense.core.tools.armor.straps; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import lance5057.tDefense.TinkersDefense; -import lance5057.tDefense.core.tools.bases.ArmorCore; -import net.minecraft.client.model.ModelBiped; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ActionResult; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.world.World; -import net.minecraftforge.common.ISpecialArmor; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.common.capabilities.ICapabilitySerializable; -import net.minecraftforge.common.util.EnumHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemStackHandler; - -public class ItemStraps extends ItemArmor implements ISpecialArmor -{ - public static ArmorMaterial ARMOR = EnumHelper.addArmorMaterial("NAME", "blank", 0, new int[] {0, 0, 0, 0}, 0, null, 0); - - public EntityEquipmentSlot equipSlot; - - @SideOnly(Side.CLIENT) - private ModelBiped model; - - private ItemStack stack; - - public ItemStraps(EntityEquipmentSlot slot) - { - super(ARMOR, 0, slot); - // ItemStacks that store an NBT Tag Compound are limited to stack size - // of 1 - setMaxStackSize(1); - // you'll want to set a creative tab as well, so you can get your item - setCreativeTab(TinkersDefense.tab); - this.setRegistryName("straps" + slot.getName()).setUnlocalizedName("straps" + slot.getName()); - } - - @Override - @Nullable - @SideOnly(Side.CLIENT) - public final String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) - { -// ItemStack in = stack.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).getStackInSlot(0); -// if(in.getItem() instanceof ArmorCore) -// { -// return ((ArmorCore)in.getItem()).getArmorTexture(stack, 0); -// } - return null; - } - - @Override - @SideOnly(Side.CLIENT) - @Nullable - public net.minecraft.client.model.ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) - { - ItemStack in = itemStack.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).getStackInSlot(0); - if(in.getItem() instanceof ArmorCore) - { - if(model == null || stack == null || !stack.equals(in)) - { - //model = ((ArmorCore)in.getItem()).getArmorModel(in); - stack = in; - } - return model; - } - return null; - } - - @Nonnull - @Override - public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound oldCapNbt) - { - return new InvProvider(); - } - - private static class InvProvider implements ICapabilitySerializable<NBTBase> { - - private final IItemHandler inv = new ItemStackHandler(1); - - @Override - public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) { - return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; - } - - @Override - public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) { - if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) - return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(inv); - else return null; - } - - @Override - public NBTBase serializeNBT() { - return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.writeNBT(inv, null); - } - - @Override - public void deserializeNBT(NBTBase nbt) { - CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.readNBT(inv, null, nbt); - } - } - - // Without this method, your inventory will NOT work!!! - @Override - public int getMaxItemUseDuration(ItemStack stack) - { - return 1; // return any value greater than zero - } - - @Override - public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) - { - if (!worldIn.isRemote) - { - // If player not sneaking, open the inventory gui - if (!playerIn.isSneaking()) - { - playerIn.openGui(TinkersDefense.instance, TinkersDefense.GUI_STRAPS_INV, worldIn, 0, 0, 0); - } - } - - return new ActionResult(EnumActionResult.PASS, playerIn.getHeldItem(handIn)); - } - - @Override - public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) - { - // TODO Auto-generated method stub - return null; - } - - @Override - public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) - { - ItemStack in = armor.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).getStackInSlot(0); - if(in.getItem() instanceof ArmorCore) - { - int i = ((ArmorCore)in.getItem()).getArmorDisplay(in); - return i; - } - return 0; - } - - @Override - public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) - { - stack.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).getStackInSlot(0).damageItem(damage, entity); - } -}
\ No newline at end of file diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/straps/ItemStrapsInv.java b/src/main/java/lance5057/tDefense/core/tools/armor/straps/ItemStrapsInv.java deleted file mode 100644 index 8929e93..0000000 --- a/src/main/java/lance5057/tDefense/core/tools/armor/straps/ItemStrapsInv.java +++ /dev/null @@ -1,63 +0,0 @@ -package lance5057.tDefense.core.tools.armor.straps; - -import javax.annotation.Nonnull; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandlerModifiable; -import net.minecraftforge.items.ItemStackHandler; - -public class ItemStrapsInv implements IItemHandlerModifiable -{ - - private ItemStack invItem = ItemStack.EMPTY; - public static final int INVSIZE = 1; - private final String name = "ArmorHolder"; - - private final IItemHandlerModifiable inventory; - - public ItemStrapsInv(ItemStack stack) - { - invItem = stack; - inventory = (ItemStackHandler) invItem.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); - } - - @Override - public void setStackInSlot(int slot, @Nonnull ItemStack stack) - { - inventory.setStackInSlot(slot, stack); - } - - @Override - public int getSlots() - { - return inventory.getSlots(); - } - - @Nonnull - @Override - public ItemStack getStackInSlot(int slot) - { - return inventory.getStackInSlot(slot); - } - - @Nonnull - @Override - public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) - { - return inventory.insertItem(slot, stack, simulate); - } - - @Nonnull - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) - { - return inventory.extractItem(slot, amount, simulate); - } - - @Override - public int getSlotLimit(int slot) - { - return inventory.getSlotLimit(slot); - } -} diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/straps/StrapsContainer.java b/src/main/java/lance5057/tDefense/core/tools/armor/straps/StrapsContainer.java deleted file mode 100644 index dda3b5f..0000000 --- a/src/main/java/lance5057/tDefense/core/tools/armor/straps/StrapsContainer.java +++ /dev/null @@ -1,95 +0,0 @@ -package lance5057.tDefense.core.tools.armor.straps; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.SlotItemHandler; - -public class StrapsContainer extends Container -{ - public final ItemStrapsInv inventory; - - private static final int INV_START = ItemStrapsInv.INVSIZE, INV_END = INV_START+26, - HOTBAR_START = INV_END+1, HOTBAR_END = HOTBAR_START+8; - - - public StrapsContainer(EntityPlayer par1Player, InventoryPlayer inventoryPlayer, ItemStrapsInv inventoryItem) - { - this.inventory = inventoryItem; - - int i; - - this.addSlotToContainer(new SlotItemHandler(this.inventory, 0, 80, 8+23)); - - for (i = 0; i < 3; ++i) - { - for (int j = 0; j < 9; ++j) - { - this.addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); - } - } - - for (i = 0; i < 9; ++i) - { - this.addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142)); - } - } - - @Override - public boolean canInteractWith(EntityPlayer entityplayer) - { - return true; - } - - public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int index) - { - ItemStack itemstack = ItemStack.EMPTY; - Slot slot = (Slot) this.inventorySlots.get(index); - - if (slot != null && slot.getHasStack()) - { - ItemStack itemstack1 = slot.getStack(); - itemstack = itemstack1.copy(); - - if (index < INV_START) - { - if (!this.mergeItemStack(itemstack1, INV_START, HOTBAR_END+1, true)) - { - return ItemStack.EMPTY; - } - - slot.onSlotChange(itemstack1, itemstack); - } - else - { - if (index >= INV_START) - { - if (!this.mergeItemStack(itemstack1, 0, INV_START, false)) - { - return ItemStack.EMPTY; - } - } - } - - if (itemstack1.getItemDamage() == 0) - { - slot.putStack(ItemStack.EMPTY); - } - else - { - slot.onSlotChanged(); - } - - if (itemstack1.getItemDamage() == itemstack.getItemDamage()) - { - return ItemStack.EMPTY; - } - - slot.onTake(par1EntityPlayer, itemstack1); - } - - return itemstack; - } -}
\ No newline at end of file diff --git a/src/main/java/lance5057/tDefense/core/tools/armor/straps/StrapsGui.java b/src/main/java/lance5057/tDefense/core/tools/armor/straps/StrapsGui.java deleted file mode 100644 index 97423dc..0000000 --- a/src/main/java/lance5057/tDefense/core/tools/armor/straps/StrapsGui.java +++ /dev/null @@ -1,54 +0,0 @@ -package lance5057.tDefense.core.tools.armor.straps; - -import java.util.List; - -import lance5057.tDefense.Reference; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.resources.I18n; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.items.SlotItemHandler; - -public class StrapsGui extends GuiContainer { - - private static final ResourceLocation texture = new ResourceLocation(Reference.MOD_ID, - "textures/gui/straps_helm.png"); - - public StrapsGui(StrapsContainer containerItem) { - super(containerItem); - } - - /** - * Draws the screen and all the components in it. - */ - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - this.drawDefaultBackground(); - super.drawScreen(mouseX, mouseY, partialTicks); - this.renderHoveredToolTip(mouseX, mouseY); - } - - @Override - protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - String s = I18n.format("straps"); - fontRenderer.drawString(s, xSize / 2 - fontRenderer.getStringWidth(s) / 2, 6, 4210752); - fontRenderer.drawString(I18n.format("container.inventory"), 8, ySize - 96 + 2, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - mc.getTextureManager().bindTexture(texture); - int k = (width - xSize) / 2; - int l = (height - ySize) / 2; - drawTexturedModalRect(k, l, 0, 0, xSize, ySize); - - List<Slot> slotList = inventorySlots.inventorySlots; - for (Slot slot : slotList) - if (slot instanceof SlotItemHandler) { - SlotItemHandler slotf = (SlotItemHandler) slot; - } - } -}
\ No newline at end of file diff --git a/src/main/java/lance5057/tDefense/core/tools/bases/ArmorBase.java b/src/main/java/lance5057/tDefense/core/tools/bases/ArmorBase.java new file mode 100644 index 0000000..4c3d876 --- /dev/null +++ b/src/main/java/lance5057/tDefense/core/tools/bases/ArmorBase.java @@ -0,0 +1,516 @@ +package lance5057.tDefense.core.tools.bases; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Sets; + +import gnu.trove.set.hash.THashSet; +import lance5057.tDefense.util.ArmorBuilder; +import lance5057.tDefense.util.ArmorEvent; +import net.minecraft.client.Minecraft; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.common.ISpecialArmor; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import slimeknights.mantle.util.RecipeMatch; +import slimeknights.tconstruct.common.ClientProxy; +import slimeknights.tconstruct.common.config.Config; +import slimeknights.tconstruct.library.Util; +import slimeknights.tconstruct.library.events.TinkerEvent; +import slimeknights.tconstruct.library.materials.HeadMaterialStats; +import slimeknights.tconstruct.library.materials.Material; +import slimeknights.tconstruct.library.materials.MaterialTypes; +import slimeknights.tconstruct.library.modifiers.TinkerGuiException; +import slimeknights.tconstruct.library.tinkering.Category; +import slimeknights.tconstruct.library.tinkering.IModifyable; +import slimeknights.tconstruct.library.tinkering.IRepairable; +import slimeknights.tconstruct.library.tinkering.ITinkerable; +import slimeknights.tconstruct.library.tinkering.IndestructibleEntityItem; +import slimeknights.tconstruct.library.tinkering.PartMaterialType; +import slimeknights.tconstruct.library.traits.ITrait; +import slimeknights.tconstruct.library.utils.TagUtil; +import slimeknights.tconstruct.library.utils.Tags; +import slimeknights.tconstruct.library.utils.TinkerUtil; +import slimeknights.tconstruct.library.utils.ToolBuilder; +import slimeknights.tconstruct.library.utils.ToolHelper; +import slimeknights.tconstruct.library.utils.TooltipBuilder; + +public abstract class ArmorBase extends ItemArmor implements ITinkerable, IModifyable, IRepairable, ISpecialArmor{ + protected final PartMaterialType[] requiredComponents; + // used to classify what the thing can do + protected final Set<Category> categories = new THashSet<>(); + + public ArmorBase(EntityEquipmentSlot slot, PartMaterialType... requiredComponents) { + super(ItemArmor.ArmorMaterial.LEATHER, 0, slot); + this.requiredComponents = requiredComponents; + + this.setMaxStackSize(1); + //this.setHasSubtypes(true); + } + + /* Tool Information */ + public List<PartMaterialType> getRequiredComponents() { + return ImmutableList.copyOf(requiredComponents); + } + + public List<PartMaterialType> getToolBuildComponents() { + return getRequiredComponents(); + } + + protected void addCategory(Category... categories) { + Collections.addAll(this.categories, categories); + } + + public boolean hasCategory(Category category) { + return categories.contains(category); + } + + protected Category[] getCategories() { + Category[] out = new Category[categories.size()]; + int i = 0; + for(Category category : categories) { + out[i++] = category; + } + + return out; + } + + /* INDESTRUCTIBLE */ + + @Override + public boolean hasCustomEntity(ItemStack stack) { + return true; + } + + @Nonnull + @Override + public Entity createEntity(World world, Entity location, ItemStack itemstack) { + EntityItem entity = new IndestructibleEntityItem(world, location.posX, location.posY, location.posZ, itemstack); + if(location instanceof EntityItem) { + // workaround for private access on that field >_> + NBTTagCompound tag = new NBTTagCompound(); + location.writeToNBT(tag); + entity.setPickupDelay(tag.getShort("PickupDelay")); + } + entity.motionX = location.motionX; + entity.motionY = location.motionY; + entity.motionZ = location.motionZ; + return entity; + } + + /* Building the Item */ + public boolean validComponent(int slot, ItemStack stack) { + if(slot > requiredComponents.length || slot < 0) { + return false; + } + + return requiredComponents[slot].isValid(stack); + } + + /** + * Builds an Itemstack of this tool with the given materials, if applicable. + * + * @param stacks Items to build with. Have to be in the correct order and have exact length. No nulls! + * @return The built item or null if invalid input. + */ + @Nonnull + public ItemStack buildItemFromStacks(NonNullList<ItemStack> stacks) { + long itemCount = stacks.stream().filter(stack -> !stack.isEmpty()).count(); + List<Material> materials = new ArrayList<>(stacks.size()); + + if(itemCount != requiredComponents.length) { + return ItemStack.EMPTY; + } + + // not a valid part arrangement for this tool + for(int i = 0; i < itemCount; i++) { + if(!validComponent(i, stacks.get(i))) { + return ItemStack.EMPTY; + } + + materials.add(TinkerUtil.getMaterialFromStack(stacks.get(i))); + } + + return buildItem(materials); + } + + /** + * Builds an Itemstack of this tool with the given materials. + * + * @param materials Materials to build with. Have to be in the correct order. No nulls! + * @return The built item or null if invalid input. + */ + @Nonnull + public ItemStack buildItem(List<Material> materials) { + ItemStack tool = new ItemStack(this); + tool.setTagCompound(buildItemNBT(materials)); + + return tool; + } + + /** + * Builds the NBT for a new tinker item with the given data. + * + * @param materials Materials to build with. Have to be in the correct order. No nulls! + * @return The built nbt + */ + public NBTTagCompound buildItemNBT(List<Material> materials) { + NBTTagCompound basetag = new NBTTagCompound(); + NBTTagCompound toolTag = buildTag(materials); + NBTTagCompound dataTag = buildData(materials); + + basetag.setTag(Tags.BASE_DATA, dataTag); + basetag.setTag(Tags.TOOL_DATA, toolTag); + // copy of the original tool data + basetag.setTag(Tags.TOOL_DATA_ORIG, toolTag.copy()); + + // save categories on the tool + TagUtil.setCategories(basetag, getCategories()); + + // add traits + addMaterialTraits(basetag, materials); + + // fire toolbuilding event + ArmorEvent.OnItemBuilding.fireEvent(basetag, ImmutableList.copyOf(materials), this); + + return basetag; + } + + /** + * Creates an NBT Tag with the materials that were used to build the item. + */ + private NBTTagCompound buildData(List<Material> materials) { + NBTTagCompound base = new NBTTagCompound(); + NBTTagList materialList = new NBTTagList(); + + for(Material material : materials) { + materialList.appendTag(new NBTTagString(material.identifier)); + } + + // pre-type base-modifier list + NBTTagList modifierList = new NBTTagList(); + // we cannot set the type directly, but it gets typed by adding a tag, so we add and remove one + modifierList.appendTag(new NBTTagString()); + modifierList.removeTag(0); + + base.setTag(Tags.BASE_MATERIALS, materialList); + base.setTag(Tags.BASE_MODIFIERS, modifierList); + + return base; + } + + /** + * Builds an unusable tool that only has the rendering info + */ + @Nonnull + public ItemStack buildItemForRendering(List<Material> materials) { + ItemStack tool = new ItemStack(this); + NBTTagCompound base = new NBTTagCompound(); + base.setTag(Tags.BASE_DATA, buildData(materials)); + tool.setTagCompound(base); + + return tool; + } + + @Nonnull + public ItemStack buildItemForRenderingInGui() { + List<Material> materials = IntStream.range(0, getRequiredComponents().size()) + .mapToObj(this::getMaterialForPartForGuiRendering) + .collect(Collectors.toList()); + + return buildItemForRendering(materials); + } + + @SideOnly(Side.CLIENT) + public Material getMaterialForPartForGuiRendering(int index) { + return ClientProxy.RenderMaterials[index % ClientProxy.RenderMaterials.length]; + } + + public abstract NBTTagCompound buildTag(List<Material> materials); + + /** Checks whether an Item built from materials has only valid materials. Uses the standard NBT to determine materials. */ + public boolean hasValidMaterials(ItemStack stack) { + // checks if the materials used support all stats needed + NBTTagList list = TagUtil.getBaseMaterialsTagList(stack); + List<Material> materials = TinkerUtil.getMaterialsFromTagList(list); + + // something went wrooooong + if(materials.size() != requiredComponents.length) { + return false; + } + + // check if all materials used have the stats needed + for(int i = 0; i < materials.size(); i++) { + Material material = materials.get(i); + PartMaterialType required = requiredComponents[i]; + if(!required.isValidMaterial(material)) { + return false; + } + } + + return true; + } + + public void addMaterialTraits(NBTTagCompound root, List<Material> materials) { + int size = requiredComponents.length; + // safety + if(materials.size() < size) { + size = materials.size(); + } + // add corresponding traits per material usage + for(int i = 0; i < size; i++) { + PartMaterialType required = requiredComponents[i]; + Material material = materials.get(i); + for(ITrait trait : required.getApplicableTraitsForMaterial(material)) { + ToolBuilder.addTrait(root, trait, material.materialTextColor); + } + } + } + + /* Repairing */ + + /** Returns indices of the parts that are used for repairing */ + public int[] getRepairParts() { + return new int[] { 1 }; // index 1 usually is the head. 0 is handle. + } + + public float getRepairModifierForPart(int index) { + return 1f; + } + + @Nonnull + @Override + public ItemStack repair(ItemStack repairable, NonNullList<ItemStack> repairItems) { + if(repairable.getItemDamage() == 0 && !ToolHelper.isBroken(repairable)) { + // undamaged and not broken - no need to repair + return ItemStack.EMPTY; + } + + // we assume the first required part exclusively determines repair material + List<Material> materials = TinkerUtil.getMaterialsFromTagList(TagUtil.getBaseMaterialsTagList(repairable)); + if(materials.isEmpty()) { + return ItemStack.EMPTY; + } + + // ensure the items only contain valid items + NonNullList<ItemStack> items = Util.deepCopyFixedNonNullList(repairItems); + boolean foundMatch = false; + for(int index : getRepairParts()) { + Material material = materials.get(index); + + if(repairCustom(material, items) > 0) { + foundMatch = true; + } + + Optional<RecipeMatch.Match> match = material.matches(items); + + // not a single match -> nothing to repair with + if(!match.isPresent()) { + continue; + } + foundMatch = true; + + while((match = material.matches(items)).isPresent()) { + RecipeMatch.removeMatch(items, match.get()); + } + } + + if(!foundMatch) { + return ItemStack.EMPTY; + } + + // check if all items were used + for(int i = 0; i < repairItems.size(); i++) { + // was non-null and did not get modified (stacksize changed or null now, usually) + if(!repairItems.get(i).isEmpty() && ItemStack.areItemStacksEqual(repairItems.get(i), items.get(i))) { + // found an item that was not touched + return ItemStack.EMPTY; + } + } + + // now do it all over again with the real items, to actually repair \o/ + ItemStack item = repairable.copy(); + + while(item.getItemDamage() > 0) { + int amount = calculateRepairAmount(materials, repairItems); + + // nothing to repair with, we're therefore done + if(amount <= 0) { + break; + } + + ToolHelper.repairTool(item, calculateRepair(item, amount)); + // save that we repaired it :I + NBTTagCompound tag = TagUtil.getExtraTag(item); + tag.setInteger(Tags.REPAIR_COUNT, tag.getInteger(Tags.REPAIR_COUNT) + 1); + TagUtil.setExtraTag(item, tag); + } + + return item; + } + + /** Allows for custom repair items. Remove used items from the array. */ + protected int repairCustom(Material material, NonNullList<ItemStack> repairItems) { + return 0; + } + + protected int calculateRepairAmount(List<Material> materials, NonNullList<ItemStack> repairItems) { + Set<Material> materialsMatched = Sets.newHashSet(); + float durability = 0f; + // try to match each material once + for(int index : getRepairParts()) { + Material material = materials.get(index); + + if(materialsMatched.contains(material)) { + continue; + } + + // custom repairing + durability += repairCustom(material, repairItems) * getRepairModifierForPart(index); + + Optional<RecipeMatch.Match> matchOptional = material.matches(repairItems); + if(matchOptional.isPresent()) { + RecipeMatch.Match match = matchOptional.get(); + HeadMaterialStats stats = material.getStats(MaterialTypes.HEAD); + if(stats != null) { + materialsMatched.add(material); + durability += ((float) stats.durability * (float) match.amount * getRepairModifierForPart(index)) / 144f; + RecipeMatch.removeMatch(repairItems, match); + } + } + } + + durability *= 1f + ((float) materialsMatched.size() - 1) / 9f; + + return (int) durability; + } + + protected int calculateRepair(ItemStack tool, int amount) { + float origDur = TagUtil.getOriginalToolStats(tool).durability; + float actualDur = ToolHelper.getDurabilityStat(tool); + + // calculate in modifiers that change the total durability of a tool, like diamond + // they should not punish the player with higher repair costs + float durabilityFactor = actualDur / origDur; + float increase = amount * Math.min(10f, durabilityFactor); + + increase = Math.max(increase, actualDur / 64f); + //increase = Math.max(50, increase); + + int modifiersUsed = TagUtil.getBaseModifiersUsed(tool.getTagCompound()); + float mods = 1.0f; + if(modifiersUsed == 1) { + mods = 0.95f; + } + else if(modifiersUsed == 2) { + mods = 0.9f; + } + else if(modifiersUsed >= 3) { + mods = 0.85f; + } + + increase *= mods; + + NBTTagCompound tag = TagUtil.getExtraTag(tool); + int repair = tag.getInteger(Tags.REPAIR_COUNT); + float repairDimishingReturns = (100 - repair / 2) / 100f; + if(repairDimishingReturns < 0.5f) { + repairDimishingReturns = 0.5f; + } + increase *= repairDimishingReturns; + + return (int) Math.ceil(increase); + } + + /* Information */ + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) { + boolean shift = Util.isShiftKeyDown(); + boolean ctrl = Util.isCtrlKeyDown(); + // modifiers + if(!shift && !ctrl) { + getTooltip(stack, tooltip); + + tooltip.add(""); + // info tooltip for detailed and componend info + tooltip.add(Util.translate("tooltip.tool.holdShift")); + tooltip.add(Util.translate("tooltip.tool.holdCtrl")); + +// if(worldIn != null) { +// tooltip.add(TextFormatting.BLUE + +// I18n.translateToLocalFormatted("attribute.modifier.plus.0", +// Util.df.format(ToolHelper.getActualDamage(stack, Minecraft.getMinecraft().player)), +// I18n.translateToLocal("attribute.name.generic.attackDamage"))); +// } + } + // detailed data + else if(Config.extraTooltips && shift) { + getTooltipDetailed(stack, tooltip); + } + // component data + else if(Config.extraTooltips && ctrl) { + getTooltipComponents(stack, tooltip); + } + } + + @Override + public void getTooltip(ItemStack stack, List<String> tooltips) { + // Default tooltip: modifiers + TooltipBuilder.addModifierTooltips(stack, tooltips); + } + + @Nonnull + @Override + public EnumRarity getRarity(ItemStack stack) { + // prevents enchanted items to have a different name color + return EnumRarity.COMMON; + } + + @Override + public boolean isBookEnchantable(ItemStack stack, ItemStack book) { + return false; + } + + /* NBT loading */ + + @Override + public boolean updateItemStackNBT(NBTTagCompound nbt) { + // when the itemstack is loaded from NBT we recalculate all the data + if(nbt.hasKey(Tags.BASE_DATA)) { + try { + ArmorBuilder.rebuildArmor(nbt, this); + } + catch(TinkerGuiException e) { + // nothing to do + } + } + + // return value shouldn't matter since it's never checked + return true; + } +} diff --git a/src/main/java/lance5057/tDefense/core/tools/bases/ArmorCore.java b/src/main/java/lance5057/tDefense/core/tools/bases/ArmorCore.java index 1c1acc0..44ca576 100644 --- a/src/main/java/lance5057/tDefense/core/tools/bases/ArmorCore.java +++ b/src/main/java/lance5057/tDefense/core/tools/bases/ArmorCore.java @@ -1,34 +1,42 @@ package lance5057.tDefense.core.tools.bases; -import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.Set; import javax.annotation.Nullable; -import lance5057.tDefense.Reference; +import com.google.common.collect.Sets; + import lance5057.tDefense.core.materials.ArmorMaterialStats; +import lance5057.tDefense.core.tools.armor.renderers.ArmorRenderer; import lance5057.tDefense.util.ArmorNBT; -import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import slimeknights.tconstruct.library.Util; import slimeknights.tconstruct.library.materials.ExtraMaterialStats; import slimeknights.tconstruct.library.materials.HandleMaterialStats; +import slimeknights.tconstruct.library.materials.IMaterialStats; import slimeknights.tconstruct.library.materials.Material; import slimeknights.tconstruct.library.materials.MaterialTypes; +import slimeknights.tconstruct.library.tinkering.Category; import slimeknights.tconstruct.library.tinkering.PartMaterialType; -import slimeknights.tconstruct.library.tools.ToolCore; +import slimeknights.tconstruct.library.tools.IToolPart; +import slimeknights.tconstruct.library.traits.ITrait; import slimeknights.tconstruct.library.utils.TagUtil; +import slimeknights.tconstruct.library.utils.TinkerUtil; +import slimeknights.tconstruct.library.utils.ToolHelper; +import slimeknights.tconstruct.library.utils.TooltipBuilder; -public abstract class ArmorCore extends ToolCore { - public ArmorCore(PartMaterialType... requiredComponents) { - super(requiredComponents); +public abstract class ArmorCore extends ArmorBase { + public ArmorCore(EntityEquipmentSlot slot, PartMaterialType... requiredComponents) { + super(slot, requiredComponents); } protected String getHarvestType() { @@ -36,16 +44,6 @@ public abstract class ArmorCore extends ToolCore { } @Override - public float damagePotential() { - return 0.0f; - } - - @Override - public double attackSpeed() { - return 0; - } - - @Override public abstract NBTTagCompound buildTag(List<slimeknights.tconstruct.library.materials.Material> materials); public int getArmorDisplay(ItemStack stack) { @@ -53,12 +51,11 @@ public abstract class ArmorCore extends ToolCore { } @SideOnly(Side.CLIENT) - public abstract String getArmorTexture(ItemStack stack, int layer); + public abstract List<String> getArmorTexture(ItemStack stack); @SideOnly(Side.CLIENT) - @Override - @Nullable - public abstract ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default); + @Nullable + public abstract ArmorRenderer getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack); public ArmorNBT buildDefaultArmorTag(List<Material> materials, String type) { ArmorNBT data = new ArmorNBT(); @@ -69,7 +66,7 @@ public abstract class ArmorCore extends ToolCore { // start with head data.head(head); - // add in accessoires if present + // add in accessories if present if (materials.size() >= 3) { ExtraMaterialStats binding = materials.get(2).getStatsOrUnknown(MaterialTypes.EXTRA); data.extra(binding); @@ -92,4 +89,91 @@ public abstract class ArmorCore extends ToolCore { } public abstract EntityEquipmentSlot getArmorSlot(ItemStack stack, EntityEquipmentSlot armorType); + + @Override + public void getTooltip(ItemStack stack, List<String> tooltips) { + if(ToolHelper.isBroken(stack)) { + tooltips.add("" + TextFormatting.DARK_RED + TextFormatting.BOLD + getBrokenTooltip(stack)); + } + super.getTooltip(stack, tooltips); + } + + protected String getBrokenTooltip(ItemStack itemStack) { + return Util.translate(TooltipBuilder.LOC_Broken); + } + + @Override + public void getTooltipDetailed(ItemStack stack, List<String> tooltips) { + tooltips.addAll(getInformation(stack, false)); + } + + public List<String> getInformation(ItemStack stack, boolean detailed) { + TooltipBuilder info = new TooltipBuilder(stack); + + info.addDurability(!detailed); + if(hasCategory(Category.HARVEST)) { + info.addHarvestLevel(); + info.addMiningSpeed(); + } + if(hasCategory(Category.LAUNCHER)) { + info.addDrawSpeed(); + info.addRange(); + info.addProjectileBonusDamage(); + } + info.addAttack(); + + if(ToolHelper.getFreeModifiers(stack) > 0) { + info.addFreeModifiers(); + } + + if(detailed) { + info.addModifierInfo(); + } + + return info.getTooltip(); + } + + @Override + public void getTooltipComponents(ItemStack stack, List<String> tooltips) { + List<Material> materials = TinkerUtil.getMaterialsFromTagList(TagUtil.getBaseMaterialsTagList(stack)); + List<PartMaterialType> component = getRequiredComponents(); + + if(materials.size() < component.size()) { + return; + } + + for(int i = 0; i < component.size(); i++) { + PartMaterialType pmt = component.get(i); + Material material = materials.get(i); + + // get (one possible) toolpart used to craft the thing + Iterator<IToolPart> partIter = pmt.getPossibleParts().iterator(); + if(!partIter.hasNext()) { + continue; + } + + IToolPart part = partIter.next(); + ItemStack partStack = part.getItemstackWithMaterial(material); + if(partStack != null) { + // we have the part, add it + tooltips.add(material.getTextColor() + TextFormatting.UNDERLINE + partStack.getDisplayName()); + + Set<ITrait> usedTraits = Sets.newHashSet(); + // find out which stats and traits it contributes and add it to the tooltip + for(IMaterialStats stats : material.getAllStats()) { + if(pmt.usesStat(stats.getIdentifier())) { + tooltips.addAll(stats.getLocalizedInfo()); + for(ITrait trait : pmt.getApplicableTraitsForMaterial(material)) { + if(!usedTraits.contains(trait)) { + tooltips.add(material.getTextColor() + trait.getLocalizedName()); + usedTraits.add(trait); + } + } + } + } + tooltips.add(""); + } + } + } + } diff --git a/src/main/java/lance5057/tDefense/proxy/ClientProxy.java b/src/main/java/lance5057/tDefense/proxy/ClientProxy.java index 651865a..5b697ae 100644 --- a/src/main/java/lance5057/tDefense/proxy/ClientProxy.java +++ b/src/main/java/lance5057/tDefense/proxy/ClientProxy.java @@ -6,7 +6,6 @@ import javax.annotation.Nonnull; import com.google.common.collect.ImmutableList; -import jline.internal.Log; import lance5057.tDefense.Reference; import lance5057.tDefense.TD_Commands; import lance5057.tDefense.TinkersDefense; @@ -16,7 +15,12 @@ import lance5057.tDefense.core.parts.TDParts; import lance5057.tDefense.core.renderers.BaubleRenderer; import lance5057.tDefense.core.renderers.SheatheModel; import lance5057.tDefense.core.tools.TDTools; +import lance5057.tDefense.core.tools.armor.renderers.layers.LayerTDBipedArmor; +import lance5057.tDefense.core.tools.bases.ArmorCore; import lance5057.tDefense.renderers.deserializers.AlphaColorTextureDeserializer; +import lance5057.tDefense.util.ArmorBuildGuiInfo; +import lance5057.tDefense.util.TDClientRegistry; +import lance5057.tDefense.util.TDModelRegistar; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; @@ -31,13 +35,9 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.ClientCommandHandler; -import net.minecraftforge.client.event.RenderPlayerEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; import slimeknights.tconstruct.common.ModelRegisterUtil; import slimeknights.tconstruct.library.TinkerRegistry; import slimeknights.tconstruct.library.TinkerRegistryClient; @@ -63,20 +63,20 @@ public class ClientProxy extends CommonProxy { ToolBuildGuiInfo shearsGUI; ToolBuildGuiInfo fishingRodGUI; - ToolBuildGuiInfo hoodGUI; - ToolBuildGuiInfo shawlGUI; - ToolBuildGuiInfo robeGUI; - ToolBuildGuiInfo shoesGUI; + ArmorBuildGuiInfo hoodGUI; + ArmorBuildGuiInfo shawlGUI; + ArmorBuildGuiInfo robeGUI; + ArmorBuildGuiInfo shoesGUI; - ToolBuildGuiInfo coifGUI; - ToolBuildGuiInfo hauberkGUI; - ToolBuildGuiInfo chaussesGUI; - ToolBuildGuiInfo bootsGUI; + ArmorBuildGuiInfo coifGUI; + ArmorBuildGuiInfo hauberkGUI; + ArmorBuildGuiInfo chaussesGUI; + //ToolBuildGuiInfo bootsGUI; - ToolBuildGuiInfo helmGUI; - ToolBuildGuiInfo breastplateGUI; - ToolBuildGuiInfo grievesGUI; - ToolBuildGuiInfo sabatonsGUI; + ArmorBuildGuiInfo helmGUI; + ArmorBuildGuiInfo breastplateGUI; + ArmorBuildGuiInfo grievesGUI; + ArmorBuildGuiInfo sabatonsGUI; ToolBuildGuiInfo sheatheGUI; ToolBuildGuiInfo ringGUI; @@ -101,9 +101,11 @@ public class ClientProxy extends CommonProxy { RenderPlayer render; render = skinMap.get("default"); render.addLayer(new BaubleRenderer()); + render.addLayer(new LayerTDBipedArmor(render)); render = skinMap.get("slim"); render.addLayer(new BaubleRenderer()); + render.addLayer(new LayerTDBipedArmor(render)); createToolGuis(); setToolGuis(); @@ -142,6 +144,11 @@ public class ClientProxy extends CommonProxy { public void registerToolModel(ToolCore tool) { ModelRegisterUtil.registerToolModel(tool); } + + @Override + public void registerArmorModel(ArmorCore tool) { + TDModelRegistar.registerToolModel(tool); + } @Override public void registerPartModel(ToolPart part) { @@ -161,17 +168,17 @@ public class ClientProxy extends CommonProxy { shearsGUI = new ToolBuildGuiInfo(TDTools.shears); fishingRodGUI = new ToolBuildGuiInfo(TDTools.fishingRod); - hoodGUI = new ToolBuildGuiInfo(TDTools.hood); - shawlGUI = new ToolBuildGuiInfo(TDTools.shawl); - robeGUI = new ToolBuildGuiInfo(TDTools.robe); - shoesGUI = new ToolBuildGuiInfo(TDTools.shoes); + hoodGUI = new ArmorBuildGuiInfo(TDTools.hood); + shawlGUI = new ArmorBuildGuiInfo(TDTools.shawl); + robeGUI = new ArmorBuildGuiInfo(TDTools.robe); + shoesGUI = new ArmorBuildGuiInfo(TDTools.shoes); - bootsGUI = new ToolBuildGuiInfo(TDTools.boots); + //bootsGUI = new ToolBuildGuiInfo(TDTools.boots); - helmGUI = new ToolBuildGuiInfo(TDTools.helm); - breastplateGUI = new ToolBuildGuiInfo(TDTools.breastplate); - grievesGUI = new ToolBuildGuiInfo(TDTools.grieves); - sabatonsGUI = new ToolBuildGuiInfo(TDTools.sabatons); + helmGUI = new ArmorBuildGuiInfo(TDTools.helm); + breastplateGUI = new ArmorBuildGuiInfo(TDTools.breastplate); + grievesGUI = new ArmorBuildGuiInfo(TDTools.grieves); + sabatonsGUI = new ArmorBuildGuiInfo(TDTools.sabatons); sheatheGUI = new ToolBuildGuiInfo(TDTools.sheathe); ringGUI = new ToolBuildGuiInfo(TDTools.ring); @@ -216,9 +223,9 @@ public class ClientProxy extends CommonProxy { shoesGUI.addSlotPosition(43, 51 + 8); shoesGUI.addSlotPosition(34, 51 + 8); - bootsGUI.addSlotPosition(34, 15 + 8); - bootsGUI.addSlotPosition(43, 33 + 8); - bootsGUI.addSlotPosition(34, 51 + 8); +// bootsGUI.addSlotPosition(34, 15 + 8); +// bootsGUI.addSlotPosition(43, 33 + 8); +// bootsGUI.addSlotPosition(34, 51 + 8); shearsGUI.addSlotPosition(34, 15 + 8); shearsGUI.addSlotPosition(43, 33 + 8); @@ -247,21 +254,21 @@ public class ClientProxy extends CommonProxy { TinkerRegistryClient.addToolBuilding(shearsGUI); TinkerRegistryClient.addToolBuilding(fishingRodGUI); - TinkerRegistryClient.addToolBuilding(hoodGUI); - TinkerRegistryClient.addToolBuilding(shawlGUI); - TinkerRegistryClient.addToolBuilding(robeGUI); - TinkerRegistryClient.addToolBuilding(shoesGUI); + TDClientRegistry.addArmorBuilding(hoodGUI); + TDClientRegistry.addArmorBuilding(shawlGUI); + TDClientRegistry.addArmorBuilding(robeGUI); + TDClientRegistry.addArmorBuilding(shoesGUI); - TinkerRegistryClient.addToolBuilding(bootsGUI); + //TinkerRegistryClient.addToolBuilding(bootsGUI); TinkerRegistryClient.addToolBuilding(sheatheGUI); TinkerRegistryClient.addToolBuilding(ringGUI); TinkerRegistryClient.addToolBuilding(amuletGUI); - TinkerRegistryClient.addToolBuilding(helmGUI); - TinkerRegistryClient.addToolBuilding(breastplateGUI); - TinkerRegistryClient.addToolBuilding(grievesGUI); - TinkerRegistryClient.addToolBuilding(sabatonsGUI); + TDClientRegistry.addArmorBuilding(helmGUI); + TDClientRegistry.addArmorBuilding(breastplateGUI); + TDClientRegistry.addArmorBuilding(grievesGUI); + TDClientRegistry.addArmorBuilding(sabatonsGUI); } public void registerPartModels() { @@ -326,10 +333,10 @@ public class ClientProxy extends CommonProxy { shoesGUI.addSlotPosition(43, 51 + 8); shoesGUI.addSlotPosition(34, 51 + 8); - bootsGUI.positions.clear(); - bootsGUI.addSlotPosition(34, 15 + 8); - bootsGUI.addSlotPosition(43, 33 + 8); - bootsGUI.addSlotPosition(34, 51 + 8); +// bootsGUI.positions.clear(); +// bootsGUI.addSlotPosition(34, 15 + 8); +// bootsGUI.addSlotPosition(43, 33 + 8); +// bootsGUI.addSlotPosition(34, 51 + 8); breastplateGUI.positions.clear(); breastplateGUI.addSlotPosition(34, 15 + 8); diff --git a/src/main/java/lance5057/tDefense/proxy/CommonProxy.java b/src/main/java/lance5057/tDefense/proxy/CommonProxy.java index 1830593..dde7d7a 100644 --- a/src/main/java/lance5057/tDefense/proxy/CommonProxy.java +++ b/src/main/java/lance5057/tDefense/proxy/CommonProxy.java @@ -2,13 +2,10 @@ package lance5057.tDefense.proxy; import lance5057.tDefense.Reference; import lance5057.tDefense.TinkersDefense; -import lance5057.tDefense.core.tools.armor.straps.ItemStrapsInv; -import lance5057.tDefense.core.tools.armor.straps.StrapsContainer; -import lance5057.tDefense.core.tools.armor.straps.StrapsGui; +import lance5057.tDefense.core.tools.bases.ArmorCore; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; -import net.minecraft.util.EnumHand; import net.minecraft.world.World; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fluids.Fluid; @@ -46,6 +43,10 @@ public class CommonProxy implements IGuiHandler { public void registerToolModel(ToolCore tool) { } + + public void registerArmorModel(ArmorCore tool) { + + } public void registerPartModel(ToolPart part) { @@ -63,9 +64,6 @@ public class CommonProxy implements IGuiHandler { // if(ID == TinkersDefense.GUI_ANVIL_INV) // return new Container_FinishingAnvil(player.inventory, // (TileEntity_FinishingAnvil) world.getTileEntity(x, y, z)); - if (ID == TinkersDefense.GUI_STRAPS_INV) - return new StrapsContainer(player, player.inventory, - new ItemStrapsInv(player.getHeldItem(EnumHand.MAIN_HAND))); return null; } @@ -78,9 +76,6 @@ public class CommonProxy implements IGuiHandler { // if(ID == TinkersDefense.GUI_ANVIL_INV) // return new Gui_FinishingAnvil(player.inventory, // (TileEntity_FinishingAnvil) world.getTileEntity(x, y, z)); - if (ID == TinkersDefense.GUI_STRAPS_INV) - return new StrapsGui((StrapsContainer) new StrapsContainer(player, player.inventory, - new ItemStrapsInv(player.getHeldItem(EnumHand.MAIN_HAND)))); return null; } diff --git a/src/main/java/lance5057/tDefense/util/ArmorBuildGuiInfo.java b/src/main/java/lance5057/tDefense/util/ArmorBuildGuiInfo.java new file mode 100644 index 0000000..a72b9ab --- /dev/null +++ b/src/main/java/lance5057/tDefense/util/ArmorBuildGuiInfo.java @@ -0,0 +1,48 @@ +package lance5057.tDefense.util; + +import java.util.List; + +import javax.annotation.Nonnull; + +import org.lwjgl.util.Point; + +import com.google.common.collect.Lists; + +import lance5057.tDefense.core.tools.bases.ArmorBase; +import net.minecraft.item.ItemStack; + +public class ArmorBuildGuiInfo { + + @Nonnull + public final ItemStack armor; + // the positions where the slots are located + public final List<Point> positions = Lists.newArrayList(); + + public ArmorBuildGuiInfo() { + // for repairing + this.armor = ItemStack.EMPTY; + } + + public ArmorBuildGuiInfo(@Nonnull ArmorBase tool) { + this.armor = tool.buildItemForRenderingInGui(); + } + + public static ArmorBuildGuiInfo default3Part(@Nonnull ArmorBase tool) { + ArmorBuildGuiInfo info = new ArmorBuildGuiInfo(tool); + info.addSlotPosition(33 - 20, 42 + 20); + info.addSlotPosition(33 + 20, 42 - 20); + info.addSlotPosition(33, 42); + return info; + } + + /** + * Add another slot at the specified position for the tool. + * The positions are usually located between: + * X: 7 - 69 + * Y: 18 - 64 + */ + public void addSlotPosition(int x, int y) { + positions.add(new Point(x, y)); + } + +}
\ No newline at end of file diff --git a/src/main/java/lance5057/tDefense/util/ArmorBuilder.java b/src/main/java/lance5057/tDefense/util/ArmorBuilder.java new file mode 100644 index 0000000..94014a6 --- /dev/null +++ b/src/main/java/lance5057/tDefense/util/ArmorBuilder.java @@ -0,0 +1,596 @@ +package lance5057.tDefense.util; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import javax.annotation.Nonnull; + +import org.apache.logging.log4j.Logger; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Sets; + +import gnu.trove.map.TIntIntMap; +import gnu.trove.map.hash.TIntIntHashMap; +import lance5057.tDefense.core.tools.bases.ArmorBase; +import lance5057.tDefense.core.tools.bases.ArmorCore; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.translation.I18n; +import slimeknights.mantle.util.ItemStackList; +import slimeknights.mantle.util.RecipeMatch; +import slimeknights.tconstruct.library.TinkerRegistry; +import slimeknights.tconstruct.library.Util; +import slimeknights.tconstruct.library.events.TinkerEvent; +import slimeknights.tconstruct.library.materials.Material; +import slimeknights.tconstruct.library.modifiers.IModifier; +import slimeknights.tconstruct.library.modifiers.TinkerGuiException; +import slimeknights.tconstruct.library.tinkering.IRepairable; +import slimeknights.tconstruct.library.tinkering.MaterialItem; +import slimeknights.tconstruct.library.tinkering.PartMaterialType; +import slimeknights.tconstruct.library.tools.IToolPart; +import slimeknights.tconstruct.library.tools.Pattern; +import slimeknights.tconstruct.library.tools.ToolCore; +import slimeknights.tconstruct.library.traits.AbstractTrait; +import slimeknights.tconstruct.library.traits.ITrait; +import slimeknights.tconstruct.library.utils.ListUtil; +import slimeknights.tconstruct.library.utils.TagUtil; +import slimeknights.tconstruct.library.utils.Tags; +import slimeknights.tconstruct.library.utils.TinkerUtil; + +public final class ArmorBuilder { + + private static Logger log = Util.getLogger("ArmorBuilder"); + + private ArmorBuilder() { + } + + @Nonnull + public static ItemStack tryBuildTool(NonNullList<ItemStack> stacks, String name) { + return tryBuildArmor(stacks, name, TDRegistry.getArmor()); + } + + /** + * Takes an array of Itemstacks and tries to build a tool with it. Amount of itemstacks has to match exactly. + * + * @param stacks Input. + * @return The built tool or null if none could be built. + */ + @Nonnull + public static ItemStack tryBuildArmor(NonNullList<ItemStack> stacks, String name, Collection<ArmorCore> possibleTools) { + int length = -1; + NonNullList<ItemStack> input; + // remove trailing empty slots + for(int i = 0; i < stacks.size(); i++) { + if(stacks.get(i).isEmpty()) { + if(length < 0) { + length = i; + } + } + else if(length >= 0) { + // incorrect input. gap with null in the stacks passed + return ItemStack.EMPTY; + } + } + + if(length < 0) { + return ItemStack.EMPTY; + } + + input = ItemStackList.of(stacks); + + for(Item item : possibleTools) { + if(!(item instanceof ToolCore)) { + continue; + } + ItemStack output = ((ToolCore) item).buildItemFromStacks(input); + if(!output.isEmpty()) { + // name the item + if(name != null && !name.isEmpty()) { + output.setStackDisplayName(name); + } + + return output; + } + } + + return ItemStack.EMPTY; + } + + /** + * Adds the trait to the tag, taking max-count and already existing traits into account. + * + * @param rootCompound The root compound of the item + * @param trait The trait to add. + * @param color The color used on the tooltip. Will not be used if the trait already exists on the tool. + */ + public static void addTrait(NBTTagCompound rootCompound, ITrait trait, int color) { + // only registered traits allowed + if(TinkerRegistry.getTrait(trait.getIdentifier()) == null) { + log.error("addTrait: Trying to apply unregistered Trait {}", trait.getIdentifier()); + return; + } + + IModifier modifier = TinkerRegistry.getModifier(trait.getIdentifier()); + + if(modifier == null || !(modifier instanceof AbstractTrait)) { + log.error("addTrait: No matching modifier for the Trait {} present", trait.getIdentifier()); + return; + } + + AbstractTrait traitModifier = (AbstractTrait) modifier; + + NBTTagCompound tag = new NBTTagCompound(); + NBTTagList tagList = TagUtil.getModifiersTagList(rootCompound); + int index = TinkerUtil.getIndexInList(tagList, traitModifier.getModifierIdentifier()); + if(index < 0) { + traitModifier.updateNBTforTrait(tag, color); + tagList.appendTag(tag); + TagUtil.setModifiersTagList(rootCompound, tagList); + } + else { + tag = tagList.getCompoundTagAt(index); + } + + traitModifier.applyEffect(rootCompound, tag); + } + + @Nonnull + public static ItemStack tryRepairTool(NonNullList<ItemStack> stacks, ItemStack toolStack, boolean removeItems) { + if(toolStack == null || !(toolStack.getItem() instanceof IRepairable)) { + return ItemStack.EMPTY; + } + + // obtain a working copy of the items if the originals shouldn't be modified + if(!removeItems) { + stacks = Util.deepCopyFixedNonNullList(stacks); + } + + return ((IRepairable) toolStack.getItem()).repair(toolStack, stacks); + } + + /** + * Takes a tool and an array of itemstacks and tries to modify the tool with those. + * If removeItems is true, the items used in the process will be removed from the array. + * + * @param input Items to modify the tool with + * @param toolStack The tool + * @param removeItems If true the applied items will be removed from the array + * @return The modified tool or null if something went wrong or no modifier applied. + * @throws TinkerGuiException Thrown when not matching modifiers could be applied. Contains extra-information why the process failed. + */ + @Nonnull + public static ItemStack tryModifyTool(NonNullList<ItemStack> input, ItemStack toolStack, boolean removeItems) + throws TinkerGuiException { + ItemStack copy = toolStack.copy(); + + // obtain a working copy of the items if the originals shouldn't be modified + NonNullList<ItemStack> stacks = Util.deepCopyFixedNonNullList(input); + NonNullList<ItemStack> usedStacks = Util.deepCopyFixedNonNullList(input); + + Set<IModifier> appliedModifiers = Sets.newHashSet(); + for(IModifier modifier : TinkerRegistry.getAllModifiers()) { + Optional<RecipeMatch.Match> matchOptional; + do { + matchOptional = modifier.matches(stacks); + ItemStack backup = copy.copy(); + + // found a modifier that is applicable. Try to apply the match + if(matchOptional.isPresent()) { + RecipeMatch.Match match = matchOptional.get(); + // we need to apply the whole match + while(match.amount > 0) { + TinkerGuiException caughtException = null; + boolean canApply = false; + try { + canApply = modifier.canApply(copy, toolStack); + } catch(TinkerGuiException e) { + caughtException = e; + } + + // but can it be applied? + if(canApply) { + modifier.apply(copy); + + appliedModifiers.add(modifier); + match.amount--; + } + else { + // materials would allow another application, but modifier doesn't + // if we have already applied another modifier we cancel the whole thing to prevent situations where + // only a part of the modifiers gets applied. either all or none. + // if we have a reason, rather tell the player that + if(caughtException != null && !appliedModifiers.contains(modifier)) { + throw caughtException; + } + + copy = backup; + RecipeMatch.removeMatch(stacks, match); + break; + } + } + + if(match.amount == 0) { + RecipeMatch.removeMatch(stacks, match); + RecipeMatch.removeMatch(usedStacks, match); + } + } + } while(matchOptional.isPresent()); + } + + // check if all itemstacks were touched - otherwise there's an invalid item in the input + for(int i = 0; i < input.size(); i++) { + if(!input.get(i).isEmpty() && ItemStack.areItemStacksEqual(input.get(i), stacks.get(i))) { + if(!appliedModifiers.isEmpty()) { + String error = I18n.translateToLocalFormatted("gui.error.no_modifier_for_item", input.get(i).getDisplayName()); + throw new TinkerGuiException(error); + } + return ItemStack.EMPTY; + } + } + + // update output itemstacks + if(removeItems) { + for(int i = 0; i < input.size(); i++) { + // stacks might be null because stacksize got 0 during processing, we have to reflect that in the input + // so the caller can identify that + if(usedStacks.get(i).isEmpty()) { + input.get(i).setCount(0); + } + else { + input.get(i).setCount(usedStacks.get(i).getCount()); + } + } + } + + if(!appliedModifiers.isEmpty()) { + // always rebuild tinkers items to ensure consistency and find problems earlier + if(copy.getItem() instanceof ArmorBase) { + NBTTagCompound root = TagUtil.getTagSafe(copy); + rebuildArmor(root, (ArmorBase) copy.getItem()); + copy.setTagCompound(root); + } + return copy; + } + + return ItemStack.EMPTY; + } + + /** + * Takes a tool and toolparts and replaces the parts inside the tool with the given ones. + * Toolparts have to be applicable to the tool. Toolparts must not be duplicates of currently used parts. + * + * @param toolStack The tool to replace the parts in + * @param toolPartsIn The toolparts. + * @param removeItems If true the applied items will be removed from the array + * @return The tool with the replaced parts or null if the conditions have not been met. + */ + @Nonnull + public static ItemStack tryReplaceToolParts(ItemStack toolStack, final NonNullList<ItemStack> toolPartsIn, final boolean removeItems) + throws TinkerGuiException { + if(toolStack == null || !(toolStack.getItem() instanceof ArmorBase)) { + return ItemStack.EMPTY; + } + + // we never modify the original. Caller can remove all of them if we return a result + NonNullList<ItemStack> inputItems = ItemStackList.of(Util.deepCopyFixedNonNullList(toolPartsIn)); + if(!TinkerEvent.OnToolPartReplacement.fireEvent(inputItems, toolStack)) { + // event cancelled + return ItemStack.EMPTY; + } + // technically we don't need a deep copy here, but meh. less code. + final NonNullList<ItemStack> toolParts = Util.deepCopyFixedNonNullList(inputItems); + + TIntIntMap assigned = new TIntIntHashMap(); + ArmorBase tool = (ArmorBase) toolStack.getItem(); + // materiallist has to be copied because it affects the actual NBT on the tool if it's changed + final NBTTagList materialList = TagUtil.getBaseMaterialsTagList(toolStack).copy(); + + // assing each toolpart to a slot in the tool + for(int i = 0; i < toolParts.size(); i++) { + ItemStack part = toolParts.get(i); + if(part.isEmpty()) { + continue; + } + if(!(part.getItem() instanceof IToolPart)) { + // invalid item for toolpart replacement + return ItemStack.EMPTY; + } + + int candidate = -1; + // find an applicable slot in the tool structure corresponding to the toolparts position + List<PartMaterialType> pms = tool.getRequiredComponents(); + for(int j = 0; j < pms.size(); j++) { + PartMaterialType pmt = pms.get(j); + String partMat = ((IToolPart) part.getItem()).getMaterial(part).getIdentifier(); + String currentMat = materialList.getStringTagAt(j); + // is valid and not the same material? + if(pmt.isValid(part) && !partMat.equals(currentMat)) { + // part not taken up by previous part already? + if(!assigned.valueCollection().contains(j)) { + candidate = j; + // if a tool has multiple of the same parts we may want to replace another one as the currently selected + // for that purpose we only allow to overwrite the current selection if the input slot is a later one than the current one + if(i <= j) { + break; + } + } + } + } + + // no assignment found for a part. Invalid input. + if(candidate < 0) { + return ItemStack.EMPTY; + } + assigned.put(i, candidate); + } + + // did we assign nothing? + if(assigned.isEmpty()) { + return ItemStack.EMPTY; + } + + // We now know which parts to replace with which inputs. Yay. Now we only have to do so. + // to do so we simply switch out the materials used and rebuild the tool + assigned.forEachEntry((i, j) -> { + String mat = ((IToolPart) toolParts.get(i).getItem()).getMaterial(toolParts.get(i)).getIdentifier(); + materialList.set(j, new NBTTagString(mat)); + if(removeItems) { + if(i < toolPartsIn.size() && !toolPartsIn.get(i).isEmpty()) { + toolPartsIn.get(i).shrink(1); + } + } + return true; + }); + + // check that each material is still compatible with each modifier + ArmorBase ArmorBase = (ArmorBase) toolStack.getItem(); + ItemStack copyToCheck = ArmorBase.buildItem(TinkerUtil.getMaterialsFromTagList(materialList)); + // this includes traits + NBTTagList modifiers = TagUtil.getBaseModifiersTagList(toolStack); + for(int i = 0; i < modifiers.tagCount(); i++) { + String id = modifiers.getStringTagAt(i); + IModifier mod = TinkerRegistry.getModifier(id); + + // will throw an exception if it can't apply + if(mod != null && !mod.canApply(copyToCheck, copyToCheck)) { + throw new TinkerGuiException(); + } + } + + ItemStack output = toolStack.copy(); + TagUtil.setBaseMaterialsTagList(output, materialList); + NBTTagCompound tag = TagUtil.getTagSafe(output); + rebuildArmor(tag, (ArmorBase) output.getItem()); + output.setTagCompound(tag); + + // check if the output has enough durability. we only allow it if the result would not be broken + if(output.getItemDamage() > output.getMaxDamage()) { + String error = I18n.translateToLocalFormatted("gui.error.not_enough_durability", output.getItemDamage() - output.getMaxDamage()); + throw new TinkerGuiException(error); + } + + return output; + } + + /** + * Takes a pattern and itemstacks and crafts the materialitem of the pattern out of it. + * The output consists of an ItemStack[2] array that contains the part in the first slot and eventual leftover output in the 2nd one. + * The itemstacks have to match at least 1 material. + * If multiple materials match, matches with multiple items are preferred. + * Otherwise the first match will be taken. + * + * @param pattern Input-pattern. Has to be a Pattern. + * @param materialItems The Itemstacks to craft the item out of + * @param removeItems If true the match will be removed from the passed items + * @return ItemStack[2] Array containing the built item in the first slot and eventual secondary output in the second one. Null if no item could be built. + */ + public static NonNullList<ItemStack> tryBuildToolPart(ItemStack pattern, NonNullList<ItemStack> materialItems, boolean removeItems) + throws TinkerGuiException { + Item itemPart = Pattern.getPartFromTag(pattern); + if(itemPart == null || !(itemPart instanceof MaterialItem) || !(itemPart instanceof IToolPart)) { + String error = I18n.translateToLocalFormatted("gui.error.invalid_pattern"); + throw new TinkerGuiException(error); + } + + IToolPart part = (IToolPart) itemPart; + + if(!removeItems) { + materialItems = Util.deepCopyFixedNonNullList(materialItems); + } + + // find the material from the input + Optional<RecipeMatch.Match> match = Optional.empty(); + Material foundMaterial = null; + for(Material material : TinkerRegistry.getAllMaterials()) { + // craftable? + if(!material.isCraftable()) { + continue; + } + Optional<RecipeMatch.Match> newMatch = material.matches(materialItems, part.getCost()); + if(!newMatch.isPresent()) { + continue; + } + + // we found a match, yay + if(!match.isPresent()) { + match = newMatch; + foundMaterial = material; + // is it more complex than the old one? + } + } + + // nope, no material + if(!match.isPresent()) { + return null; + } + + ItemStack output = ((MaterialItem) itemPart).getItemstackWithMaterial(foundMaterial); + if(output.isEmpty()) { + return null; + } + if(output.getItem() instanceof IToolPart && !((IToolPart) output.getItem()).canUseMaterial(foundMaterial)) { + return null; + } + + RecipeMatch.removeMatch(materialItems, match.get()); + + // check if we have secondary output + ItemStack secondary = ItemStack.EMPTY; + int leftover = (match.get().amount - part.getCost()) / Material.VALUE_Shard; + if(leftover > 0) { + secondary = TinkerRegistry.getShard(foundMaterial); + secondary.setCount(leftover); + } + + // build an item with this + return ListUtil.getListFrom(output, secondary); + } + + /** + * Rebuilds a tool from its raw data, material info and applied modifiers + * + * @param rootNBT The root NBT tag compound of the tool to to rebuild. The NBT will be modified, overwriting old + * data. + */ + public static void rebuildArmor(NBTTagCompound rootNBT, ArmorBase armor) throws TinkerGuiException { + boolean broken = TagUtil.getToolTag(rootNBT).getBoolean(Tags.BROKEN); + // Recalculate tool base stats from material stats + NBTTagList materialTag = TagUtil.getBaseMaterialsTagList(rootNBT); + List<Material> materials = TinkerUtil.getMaterialsFromTagList(materialTag); + List<PartMaterialType> pms = armor.getRequiredComponents(); + + // ensure all needed Stats are present + while(materials.size() < pms.size()) { + materials.add(Material.UNKNOWN); + } + for(int i = 0; i < pms.size(); i++) { + if(!pms.get(i).isValidMaterial(materials.get(i))) { + materials.set(i, Material.UNKNOWN); + } + } + + // the base stats of the tool + NBTTagCompound toolTag = armor.buildTag(materials); + TagUtil.setToolTag(rootNBT, toolTag); + // and its copy for reference + rootNBT.setTag(Tags.TOOL_DATA_ORIG, toolTag.copy()); + + // save the old modifiers list and clean up all tags that get set by modifiers/traits + NBTTagList modifiersTagOld = TagUtil.getModifiersTagList(rootNBT); + rootNBT.removeTag(Tags.TOOL_MODIFIERS); // the active-modifiers tag + rootNBT.setTag(Tags.TOOL_MODIFIERS, new NBTTagList()); + rootNBT.removeTag("ench"); // and the enchantments tag + rootNBT.removeTag(Tags.ENCHANT_EFFECT); // enchant effect too, will be readded by a trait either way + + // clean up traits + rootNBT.removeTag(Tags.TOOL_TRAITS); + armor.addMaterialTraits(rootNBT, materials); + + // fire event + ArmorEvent.OnItemBuilding.fireEvent(rootNBT, ImmutableList.copyOf(materials), armor); + + // reapply modifiers + NBTTagList modifiers = TagUtil.getBaseModifiersTagList(rootNBT); + NBTTagList modifiersTag = TagUtil.getModifiersTagList(rootNBT); + // copy over and reapply all relevant modifiers + for(int i = 0; i < modifiers.tagCount(); i++) { + String identifier = modifiers.getStringTagAt(i); + IModifier modifier = TinkerRegistry.getModifier(identifier); + if(modifier == null) { + log.debug("Missing modifier: {}", identifier); + continue; + } + + NBTTagCompound tag; + int index = TinkerUtil.getIndexInList(modifiersTagOld, modifier.getIdentifier()); + + if(index >= 0) { + tag = modifiersTagOld.getCompoundTagAt(index); + } + else { + tag = new NBTTagCompound(); + } + + modifier.applyEffect(rootNBT, tag); + if(!tag.hasNoTags()) { + int indexNew = TinkerUtil.getIndexInList(modifiersTag, modifier.getIdentifier()); + if(indexNew >= 0) { + modifiersTag.set(indexNew, tag); + } + else { + modifiersTag.appendTag(tag); + } + } + } + + // remaining info, get updated toolTag + toolTag = TagUtil.getToolTag(rootNBT); + // adjust free modifiers + int freeModifiers = toolTag.getInteger(Tags.FREE_MODIFIERS); + freeModifiers -= TagUtil.getBaseModifiersUsed(rootNBT); + toolTag.setInteger(Tags.FREE_MODIFIERS, Math.max(0, freeModifiers)); + + // broken? + if(broken) { + toolTag.setBoolean(Tags.BROKEN, true); + } + + TagUtil.setToolTag(rootNBT, toolTag); + + if(freeModifiers < 0) { + throw new TinkerGuiException(Util.translateFormatted("gui.error.not_enough_modifiers", -freeModifiers)); + } + } + + public static short getEnchantmentLevel(NBTTagCompound rootTag, Enchantment enchantment) { + NBTTagList enchantments = rootTag.getTagList("ench", 10); + + int id = Enchantment.getEnchantmentID(enchantment); + + for(int i = 0; i < enchantments.tagCount(); i++) { + if(enchantments.getCompoundTagAt(i).getShort("id") == id) { + return enchantments.getCompoundTagAt(i).getShort("lvl"); + } + } + + return 0; + } + + public static void addEnchantment(NBTTagCompound rootTag, Enchantment enchantment) { + NBTTagList enchantments = rootTag.getTagList("ench", 10); + + NBTTagCompound enchTag = new NBTTagCompound(); + int enchId = Enchantment.getEnchantmentID(enchantment); + + int id = -1; + for(int i = 0; i < enchantments.tagCount(); i++) { + if(enchantments.getCompoundTagAt(i).getShort("id") == enchId) { + enchTag = enchantments.getCompoundTagAt(i); + id = i; + break; + } + } + + int level = enchTag.getShort("lvl") + 1; + level = Math.min(level, enchantment.getMaxLevel()); + enchTag.setShort("id", (short) enchId); + enchTag.setShort("lvl", (short) level); + + if(id < 0) { + enchantments.appendTag(enchTag); + } + else { + enchantments.set(id, enchTag); + } + + rootTag.setTag("ench", enchantments); + } +}
\ No newline at end of file diff --git a/src/main/java/lance5057/tDefense/util/ArmorEvent.java b/src/main/java/lance5057/tDefense/util/ArmorEvent.java new file mode 100644 index 0000000..d83a930 --- /dev/null +++ b/src/main/java/lance5057/tDefense/util/ArmorEvent.java @@ -0,0 +1,65 @@ +package lance5057.tDefense.util; + +import com.google.common.collect.ImmutableList; + +import lance5057.tDefense.core.tools.bases.ArmorBase; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.eventhandler.Cancelable; +import net.minecraftforge.fml.common.eventhandler.Event; +import slimeknights.tconstruct.library.materials.Material; + +/** + * Base class for all tinkers events + */ +public abstract class ArmorEvent extends Event { + + /** + * Fired when a tool is built. + * This happens every time a tool is loaded as well as when the player actually builds the tool. + * You can make changes to the tag compound and it'll land on the resulting tool, but its itemstack is not available. + */ + public static class OnItemBuilding extends ArmorEvent { + + public NBTTagCompound tag; + public final ImmutableList<Material> materials; + public final ArmorBase tool; + + public OnItemBuilding(NBTTagCompound tag, ImmutableList<Material> materials, ArmorBase tool) { + this.tag = tag; + this.materials = materials; + this.tool = tool; + } + + public static OnItemBuilding fireEvent(NBTTagCompound tag, ImmutableList<Material> materials, ArmorBase tool) { + OnItemBuilding event = new OnItemBuilding(tag, materials, tool); + MinecraftForge.EVENT_BUS.post(event); + return event; + } + } + + /** + * Fired when the player tries to replace a toolpart. + * You can modify the input items to achieve different results, this will not modify the actual items in the game. + * If you're modifying the list itself, make sure to put new items into originally empty indices to prevent the usage of other items in the input. Just append to the list. + * You can not modify the tool that's getting modified + */ + @Cancelable + public static class OnToolPartReplacement extends ArmorEvent { + + /** The items in the tool station. Can be manipulated. */ + public NonNullList<ItemStack> replacementParts; + public ItemStack toolStack; + + public OnToolPartReplacement(NonNullList<ItemStack> replacementParts, ItemStack toolStack) { + this.replacementParts = replacementParts; + this.toolStack = toolStack.copy(); + } + + public static boolean fireEvent(NonNullList<ItemStack> replacementParts, ItemStack toolStack) { + return !MinecraftForge.EVENT_BUS.post(new OnToolPartReplacement(replacementParts, toolStack)); + } + } +}
\ No newline at end of file diff --git a/src/main/java/lance5057/tDefense/util/TDClientRegistry.java b/src/main/java/lance5057/tDefense/util/TDClientRegistry.java new file mode 100644 index 0000000..8fd47a1 --- /dev/null +++ b/src/main/java/lance5057/tDefense/util/TDClientRegistry.java @@ -0,0 +1,48 @@ +package lance5057.tDefense.util; + +import com.google.common.collect.Maps; + +import net.minecraft.item.Item; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import org.apache.logging.log4j.Logger; + +import java.util.Map; + +import slimeknights.tconstruct.library.Util; +import slimeknights.tconstruct.library.client.ToolBuildGuiInfo; +import slimeknights.tconstruct.library.client.texture.AbstractColoredTexture; + +@SideOnly(Side.CLIENT) +public final class TDClientRegistry { + + // the logger for the library + public static final Logger log = Util.getLogger("API-Client"); + + private TDClientRegistry() { + } + + /*--------------------------------------------------------------------------- + | GUI & CRAFTING | + ---------------------------------------------------------------------------*/ + private static final Map<Item, ArmorBuildGuiInfo> armorBuildInfo = Maps.newLinkedHashMap(); + + public static void addArmorBuilding(ArmorBuildGuiInfo info) { + armorBuildInfo.put(info.armor.getItem(), info); + } + + public static ArmorBuildGuiInfo getArmorBuildInfoForArmor(Item armor) { + return armorBuildInfo.get(armor); + } + + public static void clear() { + armorBuildInfo.clear(); + } + + /*--------------------------------------------------------------------------- + | MATERIAL TEXTURE CREATION | + ---------------------------------------------------------------------------*/ + private static final Map<String, AbstractColoredTexture> textureProcessors = Maps.newHashMap(); + +}
\ No newline at end of file diff --git a/src/main/java/lance5057/tDefense/util/TDModelLoader.java b/src/main/java/lance5057/tDefense/util/TDModelLoader.java new file mode 100644 index 0000000..5ecdacf --- /dev/null +++ b/src/main/java/lance5057/tDefense/util/TDModelLoader.java @@ -0,0 +1,204 @@ +package lance5057.tDefense.util; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import javax.annotation.Nonnull; + +import org.apache.commons.io.FilenameUtils; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import gnu.trove.map.hash.TIntObjectHashMap; +import lance5057.tDefense.core.tools.bases.ArmorCore; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.ICustomModelLoader; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.ModelLoaderRegistry; +import net.minecraftforge.common.model.TRSRTransformation; +import slimeknights.tconstruct.library.TinkerRegistry; +import slimeknights.tconstruct.library.client.CustomTextureCreator; +import slimeknights.tconstruct.library.client.model.MaterialModel; +import slimeknights.tconstruct.library.client.model.MaterialModelLoader; +import slimeknights.tconstruct.library.client.model.ModelHelper; +import slimeknights.tconstruct.library.client.model.ModifierModel; +import slimeknights.tconstruct.library.client.model.ModifierModelLoader; +import slimeknights.tconstruct.library.client.model.ToolModel; +import slimeknights.tconstruct.library.client.model.format.AmmoPosition; +import slimeknights.tconstruct.library.client.model.format.ToolModelOverride; +import slimeknights.tconstruct.library.tools.IToolPart; + +public class TDModelLoader implements ICustomModelLoader { + + public static String EXTENSION = ".td"; + + // used to create only actually needed textures in the texturegenerator instead of ALL materials for all parts + private static final Map<ResourceLocation, ArmorCore> modelItemMap = Maps.newHashMap(); + + public static void addPartMapping(ResourceLocation resourceLocation, ArmorCore tool) { + modelItemMap.put(resourceLocation, tool); + } + + @Override + public boolean accepts(ResourceLocation modelLocation) { + return modelLocation.getResourcePath().endsWith(EXTENSION); // tinkertoolmodel extension. Foo.tcon.json + } + + @Override + public IModel loadModel(ResourceLocation modelLocation) { + try { + // Modelblock is used since our format is compatible to the vanilla format + // and we don't have to write our own json deserializer + // it also provides us with the textures + Map<String, String> textures = ModelHelper.loadTexturesFromJson(modelLocation); + ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> transforms = ModelHelper.loadTransformFromJson(modelLocation); + ImmutableList<ToolModelOverride> overrides = ModelHelper.loadToolModelOverridesFromJson(modelLocation); + AmmoPosition ammoPosition = ModelHelper.loadAmmoPositionFromJson(modelLocation); + Float[] rotations = ModelHelper.loadLayerRotations(modelLocation); + + if(rotations.length > 0 && textures.size() != rotations.length) { + TinkerRegistry.log.error("Toolmodel {} has invalid layerrotation entry: Size should be {} but is {}; Skipping rotations.", modelLocation, textures.size(), rotations.length); + rotations = new Float[0]; + } + + ImmutableList.Builder<ResourceLocation> defaultTextureListBuilder = ImmutableList.builder(); + List<MaterialModel> parts = Lists.newArrayList(); + List<MaterialModel> brokenParts = Lists.newArrayList(); + + ArmorCore ArmorCore = modelItemMap.get(MaterialModelLoader.getReducedPath(modelLocation)); + + for(Map.Entry<String, String> entry : textures.entrySet()) { + String name = entry.getKey(); + try { + int i; + List<MaterialModel> listToAdd; + + if(name.startsWith("layer")) { + i = Integer.valueOf(name.substring(5)); + listToAdd = parts; + } + else if(name.startsWith("broken")) { + i = Integer.valueOf(name.substring(6)); + listToAdd = brokenParts; + } + // invalid entry, ignore + else { + TinkerRegistry.log.warn("Toolmodel {} has invalid texture entry {}; Skipping layer.", modelLocation, name); + continue; + } + + ResourceLocation location = new ResourceLocation(entry.getValue()); + MaterialModel partModel = new MaterialModel(ImmutableList.of(location)); + while(listToAdd.size() <= i) { + listToAdd.add(null); + } + listToAdd.set(i, partModel); + + defaultTextureListBuilder.add(location); + registerCustomTextures(i, location, ArmorCore); + } catch(NumberFormatException e) { + TinkerRegistry.log.error("Toolmodel {} has invalid texture entry {}; Skipping layer.", modelLocation, name); + } + } + + // create overrides + for(ToolModelOverride override : overrides) { + for(Map.Entry<String, String> entry : override.textures.entrySet()) { + String name = entry.getKey(); + try { + int i; + TIntObjectHashMap<MaterialModel> mapToAdd; + + if(name.startsWith("layer")) { + i = Integer.valueOf(name.substring(5)); + mapToAdd = override.partModelReplacement; + } + else if(name.startsWith("broken")) { + i = Integer.valueOf(name.substring(6)); + mapToAdd = override.brokenPartModelReplacement; + } + // invalid entry, ignore + else { + TinkerRegistry.log.warn("Toolmodel {} has invalid texture override entry {}; Skipping layer.", modelLocation, name); + continue; + } + + ResourceLocation location = new ResourceLocation(entry.getValue()); + MaterialModel partModel = new MaterialModel(ImmutableList.of(location)); + mapToAdd.put(i, partModel); + + registerCustomTextures(i, location, ArmorCore); + } catch(NumberFormatException e) { + TinkerRegistry.log.error("Toolmodel {} has invalid texture entry {}; Skipping layer.", modelLocation, name); + } + } + } + + // remove models/item/ and .tcon + String toolName = FilenameUtils.removeExtension(modelLocation.getResourcePath().substring(12)); + IModel mods; + ModifierModel modifiers = null; + try { + mods = ModelLoaderRegistry.getModel(ModifierModelLoader.getLocationForToolModifiers(modelLocation.getResourceDomain(), toolName)); + + if(mods == null || !(mods instanceof ModifierModel)) { + TinkerRegistry.log.trace( + "Toolmodel {} does not have any modifiers associated with it. Be sure that the Tools internal name, the Toolmodels filename and the name used inside the Modifier Model Definition match!", + modelLocation); + } + else { + modifiers = (ModifierModel) mods; + + for(ToolModelOverride toolModelOverride : overrides) { + if(toolModelOverride.modifierSuffix != null) { + String modifierName = toolName + toolModelOverride.modifierSuffix; + IModel extraModel = ModelLoaderRegistry.getModel(ModifierModelLoader.getLocationForToolModifiers(modelLocation.getResourceDomain(), modifierName)); + if(extraModel instanceof ModifierModel) { + ModifierModel overriddenModifierModel = new ModifierModel(); + // fill in non-overridden modifiers + for(Map.Entry<String, String> entry : modifiers.getModels().entrySet()) { + overriddenModifierModel.addModelForModifier(entry.getKey(), entry.getValue()); + } + // overwrite overridden modifiers + for(Map.Entry<String, String> entry : ((ModifierModel) extraModel).getModels().entrySet()) { + overriddenModifierModel.addModelForModifier(entry.getKey(), entry.getValue()); + } + toolModelOverride.overrideModifierModel = overriddenModifierModel; + } + } + } + } + } catch(Exception e) { + TinkerRegistry.log.error(e); + modifiers = null; + } + + return new ToolModel(defaultTextureListBuilder.build(), parts, brokenParts, rotations, modifiers, transforms, overrides, ammoPosition); + } catch(IOException e) { + TinkerRegistry.log.error("Could not load multimodel {}", modelLocation.toString()); + } + return ModelLoaderRegistry.getMissingModel(); + } + + private void registerCustomTextures(int i, ResourceLocation resourceLocation, ArmorCore ArmorCore) { + if(ArmorCore == null) { + CustomTextureCreator.registerTexture(resourceLocation); + } + else { + for(IToolPart part : ArmorCore.getRequiredComponents().get(i).getPossibleParts()) { + CustomTextureCreator.registerTextureForPart(resourceLocation, part); + } + } + } + + @Override + public void onResourceManagerReload(@Nonnull IResourceManager resourceManager) { + + } +}
\ No newline at end of file diff --git a/src/main/java/lance5057/tDefense/util/TDModelRegistar.java b/src/main/java/lance5057/tDefense/util/TDModelRegistar.java new file mode 100644 index 0000000..ad628b0 --- /dev/null +++ b/src/main/java/lance5057/tDefense/util/TDModelRegistar.java @@ -0,0 +1,62 @@ +package lance5057.tDefense.util; + +import javax.annotation.Nonnull; + +import lance5057.tDefense.core.tools.bases.ArmorCore; +import net.minecraft.client.renderer.ItemMeshDefinition; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.ModelLoader; +import slimeknights.tconstruct.TConstruct; +import slimeknights.tconstruct.library.client.model.ToolModelLoader; +import slimeknights.tconstruct.library.tools.ToolCore; + +public class TDModelRegistar { + public static ResourceLocation registerToolModel(ArmorCore armor) { + if (armor == null || armor.getRegistryName() == null) { + return null; + } + ResourceLocation itemLocation = armor.getRegistryName(); + String path = "tools/" + itemLocation.getResourcePath() + ToolModelLoader.EXTENSION; + + ResourceLocation location = new ResourceLocation(itemLocation.getResourceDomain(), path); + TDModelLoader.addPartMapping(location, armor); + + return registerToolModel(armor, location); + } + + /** + * Manual registration of a tool model. You probably shouldn't be using this. + */ + public static ResourceLocation registerToolModel(Item item, final ResourceLocation location) { + if (!location.getResourcePath().endsWith(ToolModelLoader.EXTENSION)) { + TConstruct.log.error("The material-model " + location.toString() + " does not end with '" + + ToolModelLoader.EXTENSION + "' and will therefore not be loaded by the custom model loader!"); + } + + return registerIt(item, location); + } + + private static ResourceLocation registerIt(Item item, final ResourceLocation location) { + // plop it in. + // This here is needed for the model to be found ingame when the game looks for + // a model to render an Itemstack + // we use an ItemMeshDefinition because it allows us to do it no matter what + // metadata we use + ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition() { + @Nonnull + @Override + public ModelResourceLocation getModelLocation(@Nonnull ItemStack stack) { + return new ModelResourceLocation(location, "inventory"); + } + }); + + // We have to readd the default variant if we have custom variants, since it + // wont be added otherwise and therefore not loaded + ModelLoader.registerItemVariants(item, location); + + return location; + } +} diff --git a/src/main/java/lance5057/tDefense/util/TDRegistry.java b/src/main/java/lance5057/tDefense/util/TDRegistry.java new file mode 100644 index 0000000..87fed5b --- /dev/null +++ b/src/main/java/lance5057/tDefense/util/TDRegistry.java @@ -0,0 +1,58 @@ +package lance5057.tDefense.util; + +import java.util.Set; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; + +import gnu.trove.set.hash.TLinkedHashSet; +import lance5057.tDefense.core.tools.bases.ArmorCore; +import slimeknights.tconstruct.library.TinkerRegistry; +import slimeknights.tconstruct.library.tinkering.PartMaterialType; +import slimeknights.tconstruct.library.tools.IToolPart; +import slimeknights.tconstruct.library.tools.ToolCore; + +public class TDRegistry { + private static final Set<ArmorCore> armor = new TLinkedHashSet<>(); + private static final Set<IToolPart> armorParts = new TLinkedHashSet<>(); + private static final Set<ArmorCore> armorStationCrafting = Sets.newLinkedHashSet(); + private static final Set<ArmorCore> armorForgeCrafting = Sets.newLinkedHashSet(); + + public static void registerTool(ArmorCore tool) { + armor.add(tool); + + for(PartMaterialType pmt : tool.getRequiredComponents()) { + for(IToolPart tp : pmt.getPossibleParts()) { + TinkerRegistry.registerToolPart(tp); + } + } + } + + /** Adds a armor to the Crafting UI of both the armor Station as well as the armor Forge */ + public static void registerArmorCrafting(ArmorCore armor) { + registerArmorStationCrafting(armor); + registerArmorForgeCrafting(armor); + } + + /** Adds a armor to the Crafting UI of the armor Station */ + public static void registerArmorStationCrafting(ArmorCore armor) { + armorStationCrafting.add(armor); + } + + public static ImmutableSet<ArmorCore> getArmorStationCrafting() { + return ImmutableSet.copyOf(armorStationCrafting); + } + + /** Adds a armor to the Crafting UI of the armor Forge */ + public static void registerArmorForgeCrafting(ArmorCore armor) { + armorForgeCrafting.add(armor); + } + + public static ImmutableSet<ArmorCore> getArmorForgeCrafting() { + return ImmutableSet.copyOf(armorForgeCrafting); + } + + public static Set<ArmorCore> getArmor() { + return ImmutableSet.copyOf(armor); + } +} diff --git a/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_chain.png b/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_chain.png Binary files differindex 15fe2bb..38b7dd9 100644 --- a/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_chain.png +++ b/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_chain.png diff --git a/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_top.png b/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_top.png Binary files differindex 1cf7bb2..2b7bac6 100644 --- a/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_top.png +++ b/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_top.png diff --git a/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_visor.png b/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_visor.png Binary files differindex fed10d6..a3db328 100644 --- a/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_visor.png +++ b/src/main/resources/assets/tinkersdefense/textures/armor/Helm/_helm_visor.png diff --git a/src/main/resources/assets/tinkersdefense/textures/armor/helm/_helm_plate.png b/src/main/resources/assets/tinkersdefense/textures/armor/helm/_helm_plate.png Binary files differindex f29fea3..f8ee03f 100644 --- a/src/main/resources/assets/tinkersdefense/textures/armor/helm/_helm_plate.png +++ b/src/main/resources/assets/tinkersdefense/textures/armor/helm/_helm_plate.png |
