Content: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Background: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Pattern: Blank Waves Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Welcome to TerraFirmaCraft Forums

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

  • Announcements

    • Dries007

      ATTENTION Forum Database Breach   03/04/2019

      There has been a breach of our database. Please make sure you change your password (use a password manager, like Lastpass).
      If you used this password anywhere else, change that too! The passwords themselves are stored hashed, but may old accounts still had old, insecure (by today's standards) hashes from back when they where created. This means they can be "cracked" more easily. Other leaked information includes: email, IP, account name.
      I'm trying my best to find out more and keep everyone up to date. Discord (http://invite.gg/TerraFirmaCraft) is the best option for up to date news and questions. I'm sorry for this, but the damage has been done. All I can do is try to make sure it doesn't happen again.
    • Claycorp

      This forum is now READ ONLY!   01/20/2020

      As of this post and forever into the future this forum has been put into READ ONLY MODE. There will be no new posts! A replacement is coming SoonTM . If you wish to stay up-to-date on whats going on or post your content. Please use the Discord or Sub-Reddit until the new forums are running.

      Any questions or comments can be directed to Claycorp on either platform.

Necoxus

Members
  • Content count

    414
  • Joined

  • Last visited

Everything posted by Necoxus

  1. [Request] Addon Devlopment Guide

    What I'm trying to do is basically create an item that works a lot like an ingot, except it can't be placed on the ground. Which is why my item code is largely based off of the ingot code. Thanks for the suggestion I'll look into the knife blades and see if that helps, and I saw the heat registry bit but I hadn't dug into yet so I'll do that. I know that the user error is common and the item would indeed end up melting at some point but I wasn't for sure if the result was handled on my end or if it was an automatic thing. I see the melted metal item class, but I yet to find an example of how such a recipe would be set up as it would have to give the item damage when its created to correspond with the correct amount of units and I'm assuming it would check for a ceramic mold somewhere to see if it actually yields a result or not. As molds are consumed from the forge to create the melted metal item in the game. Edit: After looking into the other part of the forge slot its checking the heat list of information and if there isn't heat information don't allow it, which makes complete sense. Just for clarification the file I'm looking at is:https://github.com/Deadrik/TFCraft/blob/master/src/Common/com/bioxx/tfc/Containers/Slots/SlotForge.java#L20 or should I be looking at another file as to what is allowed into the forge?
  2. [Request] Addon Devlopment Guide

    My issue is that I have an item that isn't being allowed into the forge to be heated, I'll look more into the slot thing but from briefing looking at it my item is not ore or food so it shouldn't be a problem, but like I said I'll look further into that. I was basically wondering if there was a simple way of telling the forge "hey this item needs to be heated up.", the problem with using a heat recipe to effectively trick the forge into allowing the item is that I'm for sure what to return for the output of the heat recipe as the ingot molds use lots data to specify what type of metal, how much and its temperature. I think that would just be a pain to code and would be somewhat messy. The reason I say trick the forge is that the objective of the recipe wouldn't be to turn into something else it would be to allow it to be heated to a working temperature. Btw I'm assuming that by using the setMetal(the one that uses a string name, and a value) method the system would automatically get information on working, welding, and melting temperatures which seems to be the case with the crucible but its hard to tell from that alone.
  3. [Request] Addon Devlopment Guide

    So I've been doing some more digging and playing around with the heat system and heat recipes. I successfully created a recipe that changes one item to another via the fire pit/forge, and I also have some other items that extends ItemTerra and implement ISmeltable much like the ingot item. Those items can be placed in the crucible and melted down to return the correct amount of metal of the type I specify. The whole purpose of the metal item is to be worked on the anvil to yield another item, so should I create a heat recipe to allow it to be placed in the forge and be heated to working temperature? I'm assuming there is a better method than this to specify that the item needs to be allowed into the forge, cause the heat recipe method I theorized has flaws, if there isn't another way it would be nice if it was added to the api.
  4. Added information about beta testing and testers in the op, please apply if you're interested! Thanks to those willing to help make this addon better.
  5. Just wanted to post a small bit of information since I haven't done much with TerraMisc or posted much on the forums lately. I've been very busy with my school work the past few weeks and before that I had been busy with a thanksgiving trip. Currently I'm working on modifying how mob drops work, so that it functions closer to how TFC does it. Meaning you won't always get the same number of drops, the age and weight of the animal will be taken into account to decide how much is dropped. I'm also thinking about revisiting a few of my older additions to clean them up and make more of how I originally planned it as honestly I did some things in a way that wasn't as accurate as it could have been simply because it was easier. I'm hoping to have a good chunk of this done by new years, as I'm officially on break from school until January as of tomorrow.
  6. Separation of fluxes

    Instead of reducing durability based on the flux, using the correct flux could provide a bonus, like how in TFC1 we have the bonus from smithing skills. This way it will incentivise using the correct fluxes without making players feel like they have been "cheated" out of their hard work spent smithing.
  7. Thanks for the crash report, it appears to be throwing the same error. Which means that its most likely a mod conflict, if you could try to replicate the issue with just TFC, and TerraMisc that would be great. If the error doesn't crop up that means its just a conflict, honestly this addon is intended to play nicely with TFC and other TFC addons not so much with large mod packs using tweak mods to try and hold things together between TFC and generally incompatible mods.
  8. The errors are coming up on the lines involving nbt data, meaning that either the item was spawned in through creative or nei, or that the item was crafted before 0.8.2. You can either craft a new longbow, or use the repair recipe which requires casein glue and lumber. It could also be an issue somewhere with the other mods but I doubt it. Furthermore the quiver is completely unused by the longbow as the quiver doesn't support metal arrows, a new quiver will be added eventually that can handle metal arrows.
  9. API and Visibility

    I completely missed that in the changelog thanks Kitty.
  10. API and Visibility

    I was wondering if a change could be made so that addon creators could access different bits of information regarding mobs, such as mob size, age, gender, maybe even strength to determine our mob drops. Currently all of this information is set to private within the mob classes, and is therefore inaccessible.
  11. Thanks Daniel, for responding...I was out of town for most of this past week and couldn't respond easily to these posts. I included repair recipes that restore the durability and update the nbt data for both the crossbow and longbow, these recipes just require lumber and casein glue (milk and flux), so that's another option over having to either cheat in materials or having to obtain more sinew. For now on I will not be bothering to respond to bug reports that are not formated properly, there is a format in the main post that contains the format it is very similar to the one that TFC uses for their bug reports. The bug reports I received recently are not done properly, and they don't tell me what version of TFC or forge, plus they don't contain crash reports. A crash report is extremely helpful as I can find the exact line of code that is causing the issue. One of the first things you should do when you think something isn't working correctly is look in the main post where descriptions for everything is posted and see if there is an explanation for the behavior that you are finding odd as it may be intended, for example the quiver currently not working with the longbow.
  12. [Won't Fix] Cant the alloy issue be fixed like this?

    NBT data could be written to each individual ingot to save proportions so "breaking" down the ingot into its base materials could work, but like Kitty said that would require a rather large rewrite, and it would mean that ingots of different mixtures wouldn't stack and would cause inventory issues. Would be nice to see such a system in place in TFC2 though, as alloys are going to be a large part of expanded progression.
  13. Try a the newer version of TerraMisc, the crossbow was not completely implemented in 6.8, it was added in the 8.0 versions.
  14. I have a support section in the main post with the format for proper crash reports, please fill this out. I can't track down a bug like this without additional information including what version of TFC, Forge, and the crash report itself.
  15. Metal Tiers

    I know this is mainly about metal tiers, but has there been any thought towards the tiers before metal? Currently in TFC1 we have just stone, but I think it would be interesting to have several options before metal such as obsidian(Only viable for cutting tools), and flint.
  16. Most likely this is a temporary fix, I haven't really dug into the quiver code yet as I'm on limited time during the week, it may or maynot be possible for me to add my arrows to it. As for bolts ideally I would create a separate bolt bag of sorts for the crossbow.
  17. Bug1: I'm just going to remove compatibility with the quiver all together, no sense in it supporting stone arrows when it doesn't support the tiered ones. Bug2: I'm adding a simple check to make sure you can't draw it without arrows in your inventory. Bug3: The fix for bug 2 should also fix this. I'm thinking about maybe a test team to test new features before releases to try and limit the amount of bugs that are in the full released versions, as its hard for me to anticipate where there could be errors as I test things under ideal conditions. TerraMisc(0.8.3) Released! Check changelog for more details. Regarding the release testing team thing, I'll put something more official together if people are interested in it.
  18. TerraMisc(0.8.2) Released! Check change log for additional details. Please note if you have a longbow you need to either craft a new one, or use the repair recipe to update it. This prevents crashes, as either of these two methods will update the nbt data on the item. Edit: Btw the longbow is no longer compatible with the quiver, except for when your using normal stone arrows.
  19. I'll get that fixed, O_o I'm not use to doing these config things...some many things one number can affect!
  20. TerraMisc(0.8.1) Released! Everything should be fully functional now, check change log for additional details. Please note if you have already crafted a crossbow in an older version you need to either craft a new one, or use the repair recipe to update it.
  21. [Request] Addon Devlopment Guide

    When I made the crossbow I based it largely off of the longbow class, for the sake of learning something what is assigning the textures to the array in the longbow class? Edit: There isn't anything assigning textures to the array, however that doesn't matter in this instance because that array is completely unnecessary; don't ask me why it is there. Somewhere along the line when I was coding the longbow I just used a different tactic for assigning the textures, even with changing the crossbow to register textures with the string tactic it still has the same problem when its exported. public class ItemCustomLongbow extends ItemBow implements ISize { private IIcon[] iconArray; public static IIcon LongBow_pulling_0; // No pull public static IIcon LongBow_pulling_1; //Right Click Animation public static IIcon LongBow_pulling_2; public static IIcon LongBow_pulling_3; public ItemCustomLongbow() { super(); this.maxStackSize = 1; this.setMaxDamage(800); } public boolean consumeArrowInQuiver(EntityPlayer player, boolean shouldConsume) { ItemStack quiver = ((InventoryPlayerTFC) player.inventory).extraEquipInventory[0]; if(quiver != null && quiver.getItem() instanceof ItemQuiver) { if(((ItemQuiver)quiver.getItem()).consumeAmmo(quiver, EnumAmmo.ARROW, shouldConsume) != null) { return true; } } return false; } @Override public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player) { ArrowNockEvent event = new ArrowNockEvent(player, is); MinecraftForge.EVENT_BUS.post(event); if (event.isCanceled()) return event.result; if (player.capabilities.isCreativeMode || player.inventory.hasItem(TFCItems.arrow) || consumeArrowInQuiver(player, false)) player.setItemInUse(is, this.getMaxItemUseDuration(is)); return is; } @Override public void onPlayerStoppedUsing(ItemStack is, World world, EntityPlayer player, int inUseCount) { int j = this.getMaxItemUseDuration(is) - inUseCount; double drawSpeed = ModOptions.LongbowDrawSpeedMult; ArrowLooseEvent event = new ArrowLooseEvent(player, is, j); MinecraftForge.EVENT_BUS.post(event); if (event.isCanceled()) return; j = event.charge; //Check to see if player is in creative mode or has enchantments. boolean flag = player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, is) > 0; //First we run the normal ammo check to see if the arrow is in the players inventory boolean hasAmmo = flag || player.inventory.hasItem(TFCItems.arrow); boolean hasAmmoInQuiver = false; //If there was no ammo in the inventory then we need to check if there is a quiver and if there is ammo inside of it. if(!hasAmmo) { hasAmmoInQuiver = consumeArrowInQuiver(player, false); } if (hasAmmo || hasAmmoInQuiver) { float forceMult = j / getUseSpeed(player); if (forceMult < 0.25D * drawSpeed) return; if (forceMult > 1.00F * drawSpeed) forceMult = (float) (1.00F * drawSpeed); EntityProjectileTFC entityarrow = new EntityProjectileTFC(world, player, forceMult * 3.0F); entityarrow.setDamage((forceMult * 275.0)); if (forceMult == 1.00F * drawSpeed) entityarrow.setIsCritical(true); int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, is); if (k > 0) entityarrow.setDamage(entityarrow.getDamage() + k * 0.5D + 0.5D); int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, is); if (l > 0) entityarrow.setKnockbackStrength(l); if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, is) > 0) entityarrow.setFire(100); is.damageItem(1, player); world.playSoundAtEntity(player, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + forceMult * 0.5F); if (flag) entityarrow.canBePickedUp = 2; else if(hasAmmo) player.inventory.consumeInventoryItem(TFCItems.arrow); else if(hasAmmoInQuiver) consumeArrowInQuiver(player, true); if (!world.isRemote) world.spawnEntityInWorld(entityarrow); } } public float getUseSpeed(EntityPlayer player) { float speed = 60.0f; ItemStack[] armor = player.inventory.armorInventory; if(armor[0] != null && armor[0].getItem() instanceof ISize) speed += 20.0f / ((ISize)armor[0].getItem()).getWeight(armor[0]).multiplier; if(armor[1] != null && armor[1].getItem() instanceof ISize) speed += 20.0f / ((ISize)armor[1].getItem()).getWeight(armor[1]).multiplier; if(armor[2] != null && armor[2].getItem() instanceof ISize) speed += 20.0f / ((ISize)armor[2].getItem()).getWeight(armor[2]).multiplier; if(armor[3] != null && armor[3].getItem() instanceof ISize) speed += 20.0f / ((ISize)armor[3].getItem()).getWeight(armor[3]).multiplier; return speed; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void addInformation(ItemStack is, EntityPlayer player, List arraylist, boolean flag) { ItemTerra.addSizeInformation(is, arraylist); } @Override public EnumSize getSize(ItemStack is) { return EnumSize.HUGE; } @Override public EnumWeight getWeight(ItemStack is) { return EnumWeight.LIGHT; } @Override public boolean canStack() { return false; } @Override public EnumItemReach getReach(ItemStack is) { return EnumItemReach.SHORT; } @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister par1IconRegister) { this.itemIcon = par1IconRegister.registerIcon("tfcm:LongBow"); LongBow_pulling_0 = par1IconRegister.registerIcon("tfcm:LongBow_pulling_0"); LongBow_pulling_1 = par1IconRegister.registerIcon("tfcm:LongBow_pulling_1"); LongBow_pulling_2 = par1IconRegister.registerIcon("tfcm:LongBow_pulling_2"); LongBow_pulling_3 = par1IconRegister.registerIcon("tfcm:LongBow_pulling_3"); } @Override @SideOnly(Side.CLIENT) public IIcon getItemIconForUseDuration(int par1) { return iconArray[par1]; } @Override public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { if (usingItem != null && usingItem.getItem() == this) { int j = usingItem.getMaxItemUseDuration() - useRemaining; double drawSpeed = ModOptions.LongbowDrawSpeedMult; float force = j / getUseSpeed(player); if (force >= 1.00 * drawSpeed) // Fully drawn { return LongBow_pulling_3; } else if (force > 0.50 * drawSpeed) { return LongBow_pulling_2; } else if (force > 0.25 * drawSpeed) // Minimum required force to fire { return LongBow_pulling_1; } else if (force > 0) { return LongBow_pulling_0; } } return getIcon(stack, renderPass); } }
  22. [Request] Addon Devlopment Guide

    I checked all of the file names, locations, everything, and I opened the exported jar and it contains the right files. I've been narrowing down the issues and I've came to the conclusion that it has to do with the item class, more specifically the getIcon method in it. My problem is that I lack experience with that method and with items that change textures.I suspect it has something to with how values are passed from one method to another that there is a gap somewhere but if there is I haven't gotten it narrowed down that far. Crossbow Item Class public class ItemCustomCrossbow extends ItemBow implements ISize { private IIcon[] iconArray; public static IIcon CrossBow_loaded; public static IIcon CrossBow_loading_0; public static IIcon CrossBow_loading_1; public static IIcon CrossBow_loading_2; public ItemCustomCrossbow() { super(); this.maxStackSize = 1; this.setMaxDamage(800); } //Creates NBT tags when item is crafted and stores them to that item stack. public void onCreated(ItemStack itemStack, World world, EntityPlayer player) { itemStack.stackTagCompound = new NBTTagCompound(); itemStack.stackTagCompound.setBoolean("load", false); itemStack.stackTagCompound.setInteger("ammo", 0); itemStack.stackTagCompound.setFloat("forceMult", 0); } //Activates when player right clicks with crossbow. @Override public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player) { //Check to see if player is in creative mode or has enchantments. boolean hasAmmo = this.hasAmmo(is, player); //To try to prevent crashing, from cheated in crossbows. if(is.stackTagCompound != null) { //Load the crossbow if its unloaded, and has ammo. if(hasAmmo == true && is.getTagCompound().getBoolean("load") == false) { ArrowNockEvent event = new ArrowNockEvent(player, is); MinecraftForge.EVENT_BUS.post(event); if (event.isCanceled()) { return event.result; } player.setItemInUse(is, this.getMaxItemUseDuration(is)); } //If Crossbow is already loaded if(is.getTagCompound().getBoolean("load") == true) { this.fireCrossbow(is, world, player, is.getTagCompound().getFloat("forceMult")); } } return is; } @Override public void onPlayerStoppedUsing(ItemStack is, World world, EntityPlayer player, int inUseCount) { boolean load = is.getTagCompound().getBoolean("load"); int ammo = is.getTagCompound().getInteger("ammo"); int j = this.getMaxItemUseDuration(is) - inUseCount; float forceMult = j / getUseSpeed(player); if(load == false) { if (forceMult < 1.80F) { return; } if (forceMult > 1.80F) { forceMult = 1.80F; switch(ammo) { case 1: player.inventory.consumeInventoryItem(ModItems.itemBolt_Copper); break; case 2: player.inventory.consumeInventoryItem(ModItems.itemBolt_BismuthBronze); break; case 3: player.inventory.consumeInventoryItem(ModItems.itemBolt_Bronze); break; case 4: player.inventory.consumeInventoryItem(ModItems.itemBolt_BlackBronze); break; case 5: player.inventory.consumeInventoryItem(ModItems.itemBolt_WroughtIron); break; case 6: player.inventory.consumeInventoryItem(ModItems.itemBolt_Steel); break; case 7: player.inventory.consumeInventoryItem(ModItems.itemBolt_BlackSteel); break; case 8: player.inventory.consumeInventoryItem(ModItems.itemBolt_BlueSteel); break; case 9: player.inventory.consumeInventoryItem(ModItems.itemBolt_RedSteel); break; } is.stackTagCompound.setFloat("forceMult", forceMult); is.stackTagCompound.setBoolean("load", true); } } } //Checks to see if player has ammo, and what type of ammo he/she has. //Selects the lowest tier of ammo first. public boolean hasAmmo(ItemStack is, EntityPlayer player) { is.getTagCompound().getInteger("ammo"); for(int i = 0; i <= 8; i++) { if(player.inventory.hasItem(ModItems.itemBolt_Copper)) { is.stackTagCompound.setInteger("ammo", 1); return true; } if(player.inventory.hasItem(ModItems.itemBolt_BismuthBronze)) { is.stackTagCompound.setInteger("ammo", 2); return true; } if(player.inventory.hasItem(ModItems.itemBolt_Bronze)) { is.stackTagCompound.setInteger("ammo", 3); return true; } if(player.inventory.hasItem(ModItems.itemBolt_BlackBronze)) { is.stackTagCompound.setInteger("ammo", 4); return true; } if(player.inventory.hasItem(ModItems.itemBolt_WroughtIron)) { is.stackTagCompound.setInteger("ammo", 5); return true; } if(player.inventory.hasItem(ModItems.itemBolt_Steel)) { is.stackTagCompound.setInteger("ammo", 6); return true; } if(player.inventory.hasItem(ModItems.itemBolt_BlackSteel)) { is.stackTagCompound.setInteger("ammo", 7); return true; } if(player.inventory.hasItem(ModItems.itemBolt_BlueSteel)) { is.stackTagCompound.setInteger("ammo", 8); return true; } if(player.inventory.hasItem(ModItems.itemBolt_RedSteel)) { is.stackTagCompound.setInteger("ammo", 9); return true; } } return false; } public void fireCrossbow(ItemStack is, World world, EntityPlayer player, float forceMult) { int ammo = is.getTagCompound().getInteger("ammo"); float ammoMult = 0; EntityArrow entityarrow = null; switch(ammo) { case 1: ammoMult = 0.5F; //Copper entityarrow = new EntityBoltCopper(world, player, 2); break; case 2: ammoMult = 0.55F; //Bismuth Bronze entityarrow = new EntityBoltBismuthBronze(world, player, 2); break; case 3: ammoMult = 0.6F; //Bronze entityarrow = new EntityBoltBronze(world, player, 2); break; case 4: ammoMult = 0.65F; //Black Bronze entityarrow = new EntityBoltBlackBronze(world, player, 2); break; case 5: ammoMult = 0.7F; //Wrought Iron entityarrow = new EntityBoltWroughtIron(world, player, 2); break; case 6: ammoMult = 0.85F; //Steel entityarrow = new EntityBoltSteel(world, player, 2); break; case 7: ammoMult = 0.9F; //Black Steel entityarrow = new EntityBoltBlackSteel(world, player, 2); break; case 8: ammoMult = 1.0F; //Blue Steel entityarrow = new EntityBoltBlueSteel(world, player, 2); break; case 9: ammoMult = 1.0F; //Red Steel entityarrow = new EntityBoltRedSteel(world, player, 2); break; } entityarrow.setDamage((325.0) * ammoMult); is.damageItem(1, player); world.playSoundAtEntity(player, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + forceMult * 0.5F); if (!world.isRemote) { world.spawnEntityInWorld(entityarrow); } is.getTagCompound().setInteger("ammo", 0); is.stackTagCompound.setFloat("forceMult", 0); is.stackTagCompound.setBoolean("load", false); } public float getUseSpeed(EntityPlayer player) { float speed = 60.0f; ItemStack[] armor = player.inventory.armorInventory; if(armor[0] != null && armor[0].getItem() instanceof ISize) speed += 20.0f / ((ISize)armor[0].getItem()).getWeight(armor[0]).multiplier; if(armor[1] != null && armor[1].getItem() instanceof ISize) speed += 20.0f / ((ISize)armor[1].getItem()).getWeight(armor[1]).multiplier; if(armor[2] != null && armor[2].getItem() instanceof ISize) speed += 20.0f / ((ISize)armor[2].getItem()).getWeight(armor[2]).multiplier; if(armor[3] != null && armor[3].getItem() instanceof ISize) speed += 20.0f / ((ISize)armor[3].getItem()).getWeight(armor[3]).multiplier; return speed; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void addInformation(ItemStack is, EntityPlayer player, List arraylist, boolean flag) { ItemTerra.addSizeInformation(is, arraylist); if(is.stackTagCompound != null) { if(is.getTagCompound().getBoolean("load") == true) { arraylist.add("Condition: Loaded"); } else { arraylist.add("Condition: Unloaded"); } } } @Override public EnumSize getSize(ItemStack is) { return EnumSize.LARGE; } @Override public EnumWeight getWeight(ItemStack is) { return EnumWeight.HEAVY; } @Override public boolean canStack() { return false; } @Override public EnumItemReach getReach(ItemStack is) { return EnumItemReach.SHORT; } @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister par1IconRegister) { this.itemIcon = par1IconRegister.registerIcon("tfcm:CrossBow"); CrossBow_loaded = par1IconRegister.registerIcon("tfcm:CrossBow_loaded"); CrossBow_loading_0 = par1IconRegister.registerIcon("tfcm:CrossBow_loading_0"); CrossBow_loading_1 = par1IconRegister.registerIcon("tfcm:CrossBow_loading_1"); CrossBow_loading_2 = par1IconRegister.registerIcon("tfcm:CrossBow_loading_2"); } @Override @SideOnly(Side.CLIENT) public IIcon getItemIconForUseDuration(int par1) { return iconArray[par1]; } @SideOnly(Side.CLIENT) public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { if(stack.stackTagCompound != null) { if(stack.getTagCompound().getBoolean("load") == true) { return CrossBow_loaded; //While loaded } else if (usingItem != null && usingItem.getItem() == ModItems.itemCrossBow) { int j = usingItem.getMaxItemUseDuration() - useRemaining; float force = j / getUseSpeed(player); if (force >= 1.80) // Fully loaded { return CrossBow_loaded; } else if (force > 0.90) { return CrossBow_loading_2; } else if (force > 0.30) { return CrossBow_loading_1; } else if (force > 0) // Beginning to load { return CrossBow_loading_0; } } } return getIcon(stack, renderPass); } }
  23. I won't say no cause I can always get bored and could end up coding something, I would push back the tier requirements on the crossbow, and longbow if slings were introduced and have slings has a low or mid tier at or below the normal bow. I think for the most part I've introduced plenty of weapon options for now, so this would be at the end of my list of things to do. Already fixed for the next update, thanks for reporting it. The longbow will be getting a revamp soonish though, not so much draw speed but something a bit more interesting.
  24. [Request] Addon Devlopment Guide

    Just wanted to ask here to see if anyone has any solutions or if anyone has delt with this issue before. So inside of the dev environment everything works correctly textures transition and it all looks great. In the exported mod itself once the player begins using the item and the texture goes to transition the texture becomes broken(purple/black). Icon Code @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister par1IconRegister) { this.itemIcon = par1IconRegister.registerIcon("tfcm:CrossBow"); CrossBow_loading_0 = par1IconRegister.registerIcon("tfcm:CrossBow_loading_0"); CrossBow_loading_1 = par1IconRegister.registerIcon("tfcm:CrossBow_loading_1"); CrossBow_loading_2 = par1IconRegister.registerIcon("tfcm:CrossBow_loading_2"); CrossBow_loaded = par1IconRegister.registerIcon("tfcm:CrossBow_loaded"); CrossBow_Unloaded = par1IconRegister.registerIcon("tfcm:CrossBow"); } @Override @SideOnly(Side.CLIENT) public IIcon getItemIconForUseDuration(int par1) { return iconArray[par1]; } @Override public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { if (usingItem != null && usingItem.getItem() == this) { int j = usingItem.getMaxItemUseDuration() - useRemaining; float force = j / getUseSpeed(player); if (force >= 1.80) // Fully loaded { return CrossBow_loaded; } else if (force > 0.90) { return CrossBow_loading_2; } else if (force > 0.30) { return CrossBow_loading_1; } else if (force > 0) // Beginning to load { return CrossBow_loading_0; } } else if(stack.stackTagCompound != null) { if(stack.getTagCompound().getBoolean("load") == true) { return CrossBow_loaded; //While loaded } else { return CrossBow_Unloaded; } } return getIcon(stack, renderPass); }