package jp.plusplus.fbs.spirit; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import jp.plusplus.fbs.AchievementRegistry; import jp.plusplus.fbs.exprop.SanityManager; import jp.plusplus.fbs.item.ItemBase; import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; import net.minecraft.world.World; import java.util.List; /** * Created by plusplus_F on 2015/11/02. */ public class ItemSwordSpirit extends ItemBase implements ISpiritTool { public ItemSwordSpirit() { setCreativeTab(null); setUnlocalizedName("spiritSword"); setTextureName("spiritSword"); setMaxStackSize(1); setNoRepair(); } @Override public boolean hitEntity(ItemStack itemStack, EntityLivingBase target, EntityLivingBase player) { if(player instanceof EntityPlayer){ SpiritStatus ss=SpiritStatus.readFromNBT(itemStack.getTagCompound()); int dur=calcDurable(ss); ss.addItemDamage(1); if(ss.getItemDamage()>dur){ ss.setItemDamage(dur); } if(ss.getItemDamage()==dur){ ((EntityPlayer) player).triggerAchievement(AchievementRegistry.evil); } if(ss.getItemDamage()0; //return true; } @Override public boolean isItemTool(ItemStack p_77616_1_) { return true; } @Override public boolean showDurabilityBar(ItemStack stack) { return isDamaged(stack); } //-------------------------------------------------------------------------------- @Override public float calcDamage(SpiritStatus ss) { if(ss.getItemDamage()>=calcDurable(ss)) return 0.5f; return 3.5f+ss.getMaxDamage()*ss.calcRatio(ss.getStrength()); } @Override public int calcDigLv(SpiritStatus ss) { return 0; } @Override public int calcDurable(SpiritStatus ss) { return 1000+(int)(ss.getMaxDurability()*ss.calcRatio(ss.getToughness())); } @Override public void calcInitialValue(SpiritStatus ss, ItemStack material){ ItemSword sword=(ItemSword)material.getItem(); ToolMaterial tm=ToolMaterial.valueOf(sword.getToolMaterialName()); //最大攻撃力は武器の攻撃力の10倍 float maxDamage=(tm.getDamageVsEntity())*10; //最大耐久力は武器の耐久*10+10000 float maxDurabity=tm.getMaxUses()*10+10000; ss.setMaxStatus(maxDamage, 0, maxDurabity); ss.addStrength(MathHelper.ceiling_float_int(tm.getDamageVsEntity() / (ss.getMaxDamage() / 255.f))); ss.addToughness(MathHelper.ceiling_float_int(tm.getMaxUses()/(ss.getMaxDurability()/255.f))); } }