Jump to content
  • Home
  • Files
  • Docs
  • Merch
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • [1.7.10]AbsorbRatio not changing for custom armor
1.13 Update Notes for Mod Creators
Sign in to follow this  
Followers 0
Taji34

[1.7.10]AbsorbRatio not changing for custom armor

By Taji34, January 15, 2015 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

Taji34    5

Taji34

Taji34    5

  • Creeper Killer
  • Taji34
  • Forge Modder
  • 5
  • 147 posts
Posted January 15, 2015

So I'm creating a custom set of armor using ISpecialArmor. I've made it so that it should change what the AbsorbRatio is based on an NBT tag, However it's not working. Here's one of the classes:

EnerginiumArmorHelmet.java

 

package com.taji34.troncraft.items;

import java.util.List;

import org.lwjgl.input.Keyboard;

import com.taji34.troncraft.Troncraft;
import com.taji34.troncraft.packetHandlers.TajiMessage;
import com.taji34.troncraft.proxies.ClientProxy;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemArmor.ArmorMaterial;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.common.ISpecialArmor;

public class EnerginiumArmorHelmet extends ItemArmor implements ISpecialArmor{

public int armorType = 0;

public EnerginiumArmorHelmet(){
	super(Troncraft.dummyMaterial, 0, 0);
	setCreativeTab(CreativeTabs.tabMisc);
	setMaxStackSize(1);
	setTextureName("troncraft:energiniumarmorhelmet");
	setUnlocalizedName("energiniumarmorhelmet");
}
@Override
public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type)
{
    return "troncraft:textures/armor/energinium_layer_1.png";
}
public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean par4)
{
	if (itemStack.stackTagCompound == null){
		list.add(EnumChatFormatting.GRAY + "" + EnumChatFormatting.ITALIC + "Hold helmet and Press " + Keyboard.getKeyName(ClientProxy.keyBindings[0].getKeyCode()) + " to bind");
	}
	else
	{
		String owner = itemStack.stackTagCompound.getString("Owner");
		int durabilityLeft = itemStack.stackTagCompound.getInteger("Durability Left");
		String level = itemStack.stackTagCompound.getString("Level");
		list.add("Owner: " + owner);
		switch(level){
    		case "Leather":
    			list.add( "Level: " + EnumChatFormatting.DARK_GREEN + level);
    			break;
    		case "Chain":
    			list.add( "Level: " + EnumChatFormatting.GRAY + level); // not accessible currently
    			break;
    		case "Iron":
    			list.add("Level: " + EnumChatFormatting.WHITE + level);
    			break;
    		case "Gold":
    			list.add( "Level: " + EnumChatFormatting.YELLOW + level);
    			break;
    		case "Diamond":
    			list.add( "Level: " + EnumChatFormatting.AQUA + level);
    			break;
		}
		list.add(EnumChatFormatting.BLUE + "Durability Left: " + durabilityLeft);
	}
}
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    	if (stack.stackTagCompound == null)
    	{
        		ChatComponentText message = new ChatComponentText("This helmet is not bound to you");
    			ChatStyle formatting = new ChatStyle();
    			formatting.setColor(EnumChatFormatting.RED);
    			formatting.setItalic(true);
    			message.setChatStyle(formatting);
    			if ((!world.isRemote))
    			{
    				player.addChatMessage(message);
    			}
    	} else {
    			if(player.getCommandSenderName().equals(stack.stackTagCompound.getString("Owner"))){
		        int i = 3;
		        ItemStack itemstack1 = player.getCurrentArmor(i);

		        if (itemstack1 == null)
		        {
		            player.setCurrentItemOrArmor(i + 1, stack.copy());  //Forge: Vanilla bug fix associated with fixed setCurrentItemOrArmor indexs for players.
	            	stack.stackSize = 0;
	        	}
    			}
    	}
        return stack;
    }
    
    public boolean isValidArmor(ItemStack stack, int armorType, Entity entity)
    {
    	if(stack.stackTagCompound != null){
    	if(entity instanceof EntityPlayer){
    		EntityPlayer player = (EntityPlayer) entity;
    		if(player.getCommandSenderName().equalsIgnoreCase(stack.stackTagCompound.getString("Owner"))){
    			return this.armorType == armorType;
    		}
    	}
    	}
    	return false;
    }
    public int getDamageReductionAmount(ItemStack stack)
    {
    	int answer = 0;
    	switch(stack.stackTagCompound.getString("Level")){
    		case "Leather":
    			answer = ArmorMaterial.CLOTH.getDamageReductionAmount(this.armorType);
    			//System.out.println("here1");
    			break;
    		case "Chain":
    			answer = ArmorMaterial.CHAIN.getDamageReductionAmount(this.armorType);
    			//System.out.println("here2");
    			break;
    		case "Iron":
    			answer = ArmorMaterial.IRON.getDamageReductionAmount(this.armorType);
    			//System.out.println("here3");
    			break;
    		case "Gold":
    			answer = ArmorMaterial.GOLD.getDamageReductionAmount(this.armorType);
    			//System.out.println("here4");
    			break;
    		case "Diamond":
    			answer = ArmorMaterial.DIAMOND.getDamageReductionAmount(this.armorType);
    			//System.out.println("here5");
    			break;
    		default:
    			answer = 0;
    			break;
    	}
    	return answer;
    }

@Override
public ArmorProperties getProperties(EntityLivingBase player,
		ItemStack armor, DamageSource source, double damage, int slot) {
	// TODO Auto-generated method stub
	System.out.println(.04*this.getDamageReductionAmount(armor));
	return new ArmorProperties(1,.04*this.getDamageReductionAmount(armor), 11);
}

@Override
public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) {
	// TODO Auto-generated method stub
	return this.getDamageReductionAmount(armor);
}

@Override
public void damageArmor(EntityLivingBase entity, ItemStack stack,
		DamageSource source, int damage, int slot) {
	stack.stackTagCompound.setInteger("Durability Left", stack.stackTagCompound.getInteger("Durability Left")-1);

}

 

That's just one piece of the armor, but they all follow the same method of calculating the AbsorbRatio. The problem is that the armor only blocks the amount of damage that it should when in leather mode, even if it's been changed to diamond mode. What makes me even more confused is that the println I have before it returns the ArmorProperties prints out the correct ratio for the mode, it just doesn't seem to use it. Any ideas?

  • Quote

Share this post


Link to post
Share on other sites

Taji34    5

Taji34

Taji34    5

  • Creeper Killer
  • Taji34
  • Forge Modder
  • 5
  • 147 posts
Posted January 16, 2015

Any one? I can think of a work around using events, but I'd like to use the interface given to me. I found that if I either use 0 (nothing blocked) or 1 (everything blocked), it works and I can even use conditionals to switch between the two Absorb Ratios. The second I seem to use decimal numbers or more than one conditional check, it just defaults to leather mode. I don't think it's a sync issue with the server and client NBT data because it's printing out the correct mode from the server. Any ideas on anything it could be? Even if my code looks fine?

  • Quote

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Insert image from URL
×
  • Desktop
  • Tablet
  • Phone
Sign in to follow this  
Followers 0
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • DragonITA
      [1.14.4]What are API/Library and how to make a custom/own API/Library?

      By DragonITA · Posted 12 minutes ago

      Hi, a exemple: i just installed Tabula and i see, that i should install a Library or a API, iChunc or something else, else the mod wont work. Question: What is a Library/API and how to make a own?
    • Kangoro
      Mc Forge 1.14.4

      By Kangoro · Posted 33 minutes ago

      Where do I find it? and i copy paste here or in other web and link here?
    • thedarkcolour
      [1.14] Patching method with coremod in TreeFeature causes IncompatibleClassChangeError

      By thedarkcolour · Posted 45 minutes ago

      Now it just freezes with no error at all.
    • thedarkcolour
      [1.14] Patching method with coremod in TreeFeature causes IncompatibleClassChangeError

      By thedarkcolour · Posted 46 minutes ago

      I just realized what I've done. I forgot to make the BeeNestGenerator method static. I'll check if that fixes it.
    • thedarkcolour
      [1.14] Patching method with coremod in TreeFeature causes IncompatibleClassChangeError

      By thedarkcolour · Posted 50 minutes ago

      BeeNestGenerator class
  • Topics

    • DragonITA
      0
      [1.14.4]What are API/Library and how to make a custom/own API/Library?

      By DragonITA
      Started 12 minutes ago

    • Kangoro
      4
      Mc Forge 1.14.4

      By Kangoro
      Started Yesterday at 05:17 PM

    • thedarkcolour
      13
      [1.14] Patching method with coremod in TreeFeature causes IncompatibleClassChangeError

      By thedarkcolour
      Started 11 hours ago

    • Pixelboss4d
      2
      1.89 crash forge

      By Pixelboss4d
      Started 2 hours ago

    • Junior240
      4
      I'm having trouble with Java on !MAC!

      By Junior240
      Started November 9

  • Who's Online (See full list)

    • Puddingsworth
    • Choco
    • Kangoro
    • tomatoBhutan
    • plugsmustard
    • LexManos
    • Simon_kungen
    • DragonITA
    • loordgek
    • Ryagal
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • [1.7.10]AbsorbRatio not changing for custom armor
  • Theme
  • Contact Us
  • Discord

Copyright © 2019 ForgeDevelopment LLC · Ads by Curse Powered by Invision Community