public static ProjectileLauncherNBT from(ItemStack itemStack) { return new ProjectileLauncherNBT(TagUtil.getToolTag(itemStack)); } }
@Override public ProjectileLauncherNBT buildTagData(List<Material> materials) { ProjectileLauncherNBT data = new ProjectileLauncherNBT(); HeadMaterialStats head1 = materials.get(0).getStatsOrUnknown(MaterialTypes.HEAD); HeadMaterialStats head2 = materials.get(1).getStatsOrUnknown(MaterialTypes.HEAD); BowMaterialStats limb1 = materials.get(0).getStatsOrUnknown(MaterialTypes.BOW); BowMaterialStats limb2 = materials.get(1).getStatsOrUnknown(MaterialTypes.BOW); BowStringMaterialStats bowstring = materials.get(2).getStatsOrUnknown(MaterialTypes.BOWSTRING); data.head(head1, head2); data.limb(limb1, limb2); data.bowstring(bowstring); return data; }
@Override public ProjectileLauncherNBT buildTagData(List<Material> materials) { ProjectileLauncherNBT data = new ProjectileLauncherNBT(); HeadMaterialStats head1 = materials.get(0).getStatsOrUnknown(MaterialTypes.HEAD); HeadMaterialStats head2 = materials.get(1).getStatsOrUnknown(MaterialTypes.HEAD); BowMaterialStats limb1 = materials.get(0).getStatsOrUnknown(MaterialTypes.BOW); BowMaterialStats limb2 = materials.get(1).getStatsOrUnknown(MaterialTypes.BOW); ExtraMaterialStats grip = materials.get(2).getStatsOrUnknown(MaterialTypes.EXTRA); BowStringMaterialStats bowstring = materials.get(3).getStatsOrUnknown(MaterialTypes.BOWSTRING); data.head(head1, head2); data.limb(limb1, limb2); data.extra(grip); data.bowstring(bowstring); data.durability *= DURABILITY_MODIFIER; return data; } }
@Override public ProjectileLauncherNBT buildTagData(List<Material> materials) { ProjectileLauncherNBT data = new ProjectileLauncherNBT(); HandleMaterialStats body = materials.get(0).getStatsOrUnknown(MaterialTypes.HANDLE); ExtraMaterialStats bodyExtra = materials.get(0).getStatsOrUnknown(MaterialTypes.EXTRA); HeadMaterialStats head = materials.get(1).getStatsOrUnknown(MaterialTypes.HEAD); BowMaterialStats limb = materials.get(1).getStatsOrUnknown(MaterialTypes.BOW); ExtraMaterialStats binding = materials.get(2).getStatsOrUnknown(MaterialTypes.EXTRA); BowStringMaterialStats bowstring = materials.get(3).getStatsOrUnknown(MaterialTypes.BOWSTRING); data.head(head); data.limb(limb); data.extra(binding, bodyExtra); data.handle(body); data.bowstring(bowstring); data.bonusDamage *= 1.5f; return data; }
@Override public void applyEffect(NBTTagCompound rootCompound, NBTTagCompound modifierTag) { ModifierNBT.IntegerNBT modData = ModifierNBT.readInteger(modifierTag); Set<Category> categories = ImmutableSet.copyOf(TagUtil.getCategories(rootCompound)); boolean harvest = categories.contains(Category.HARVEST); boolean weapon = categories.contains(Category.WEAPON); boolean launcher = categories.contains(Category.LAUNCHER); ToolNBT data = TagUtil.getToolStats(rootCompound); int level = modData.current / max; // only boost mining speed if we have a harvest tool if(harvest) { applyHarvestBoost(modData, data, level); } // attack speed: each total level adds 0.2 to the modifier, though individual redstone piece above the level add 0.004 each // so in short: 0.004 per redstone if(weapon) { data.attackSpeedMultiplier += getSpeedBonus(modData); } TagUtil.setToolTag(rootCompound, data.get()); // bow speed: if(launcher) { ProjectileLauncherNBT launcherData = new ProjectileLauncherNBT(TagUtil.getToolTag(rootCompound)); launcherData.drawSpeed += launcherData.drawSpeed * getDrawspeedBonus(modData); TagUtil.setToolTag(rootCompound, launcherData.get()); } }
@Override public void applyEffect(NBTTagCompound rootCompound, NBTTagCompound modifierTag) { super.applyEffect(rootCompound, modifierTag); // add the attack speed boost ToolNBT data = TagUtil.getToolStats(rootCompound); // apply using the base value of 1.0f, as otherwise this will apply twice on tools with multiple lightweight parts data.attackSpeedMultiplier = 1.0f + bonus; TagUtil.setToolTag(rootCompound, data.get()); if(TinkerUtil.hasCategory(rootCompound, Category.LAUNCHER)) { ProjectileLauncherNBT launcherData = new ProjectileLauncherNBT(TagUtil.getToolTag(rootCompound)); launcherData.drawSpeed += launcherData.drawSpeed * bonus; TagUtil.setToolTag(rootCompound, launcherData.get()); } }