protected ProjectileLauncherNBT getData(ItemStack stack) { return ProjectileLauncherNBT.from(stack); }
public TooltipBuilder addRange() { tips.add(BowMaterialStats.formatRange(ProjectileLauncherNBT.from(stack).range)); return this; }
public TooltipBuilder addProjectileBonusDamage() { tips.add(BowMaterialStats.formatDamage(ProjectileLauncherNBT.from(stack).bonusDamage)); return this; }
protected float getDrawbackProgress(ItemStack itemStack, int timePassed) { float drawProgress = ProjectileLauncherNBT.from(itemStack).drawSpeed * (float) timePassed; return Math.min(1f, drawProgress / (float) getDrawTime()); }
public TooltipBuilder addDrawSpeed() { float speed = ProjectileLauncherNBT.from(stack).drawSpeed; // convert speed per tick to seconds drawtime if(stack.getItem() instanceof BowCore) { speed = (float)((BowCore) stack.getItem()).getDrawTime()/(20f * speed); } tips.add(BowMaterialStats.formatDrawspeed(speed)); return this; }
@Override public void modifyProjectileAttributes(Multimap<String, AttributeModifier> projectileAttributes, @Nullable ItemStack launcher, ItemStack projectile, float power) { double dmg = baseProjectileDamage() * power; dmg += ProjectileLauncherNBT.from(launcher).bonusDamage; if(dmg != 0) { projectileAttributes.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(LAUNCHER_BONUS_DAMAGE, "Launcher bonus damage", dmg, 0)); } if(projectileDamageModifier() != 0f) { projectileAttributes.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(LAUNCHER_DAMAGE_MODIFIER, "Launcher damage modifier", projectileDamageModifier() - 1f, 1)); } }
public void shootProjectile(@Nonnull ItemStack ammoIn, @Nonnull ItemStack bow, World worldIn, EntityPlayer player, int useTime) { float progress = getDrawbackProgress(bow, useTime); float power = ItemBow.getArrowVelocity((int)(progress * 20f)) * progress * baseProjectileSpeed(); power *= ProjectileLauncherNBT.from(bow).range;