Не демажится предмет

svk

1,185
3
Не работает метод:
Код:
        item.damageItem(5, player);

Почему?
Вот весь класс:
Код:
package com.svk.industrialGuns.item;

import java.util.List;

import com.svk.industrialGuns.base.CommonProxy;

import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.util.DamageSource;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class Knife extends Item
{
    public String name;
    public int damage = 0;

    public Knife(String name, boolean doubleSword, int maxDamage, int damage) 
    {
        super();
        if(doubleSword){this.maxStackSize = 2;}else{this.maxStackSize = 1;}
        this.setMaxDamage(maxDamage);
        this.setUnlocalizedName(name);
        this.setCreativeTab(CommonProxy.TabOther);
        this.name = name;
        this.damage = damage;
    }

    @SideOnly(Side.CLIENT)
    public void registerIcons(IIconRegister ir) 
    {
        super.itemIcon = ir.registerIcon("industrialguns:" + name);
    }

    @Override
    public boolean hitEntity(ItemStack item, EntityLivingBase entity, EntityLivingBase player) 
    {
        if(entity instanceof EntityPlayer)
        {
            EntityPlayer entityPlayer = (EntityPlayer) entity;
            int procent = 0;
            for(int i = 0; i < 4; i++)
            {
                if(entityPlayer.getCurrentArmor(i) == null)
                {
                    procent += 25;
                }
            }
            if(procent > entity.worldObj.rand.nextInt(101))
            {
                entityPlayer.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) player), damage);
            }
            else
            {
                entityPlayer.getCurrentArmor((int) ((float) procent/25)).damageItem((int) ((float) damage/10) + 1, entityPlayer);;
            }
        }
        else
        {
            entity.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) player), damage);
        }
        
        item.damageItem(5, player);
        return true;
    }
    
    @Override
    public void addInformation(ItemStack item, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
    {
        par3List.add(I18n.format("Damage") + ": " + damage);
        par3List.add(I18n.format("State") + ": " + (this.getMaxDamage() - this.getDamage(item)) + " / " + this.getMaxDamage());
    }
}
 
а можно: 
Код:
Class.forName("непомнюппакет.Item").getMethod("damageItem").set(<нашметод>)

Или методы заменять через set нельзя?)
 
Лол, рефлексия - штука совсем не всемогущая :D
Делать что хочешь можно только когда работаешь с байткодом класса. Через рефлексию изменить код почти невозможно, единственное исключение - можно изменить модификаторы (убрать final, например).
 
Назад
Сверху