Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.deadzoke.ignite.item;
- import java.util.List;
- import java.util.Random;
- import com.deadzoke.ignite.Ignite;
- import com.deadzoke.ignite.api.base.BaseSword;
- import com.deadzoke.ignite.util.EnumQuality;
- import com.google.common.collect.Multimap;
- import net.minecraft.client.Minecraft;
- import net.minecraft.client.resources.I18n;
- import net.minecraft.client.util.ITooltipFlag;
- import net.minecraft.entity.EntityLivingBase;
- import net.minecraft.entity.SharedMonsterAttributes;
- import net.minecraft.entity.ai.attributes.AttributeModifier;
- import net.minecraft.init.SoundEvents;
- import net.minecraft.inventory.EntityEquipmentSlot;
- import net.minecraft.item.ItemStack;
- import net.minecraft.util.SoundCategory;
- import net.minecraft.util.text.TextFormatting;
- import net.minecraft.world.World;
- public class Sword extends BaseSword {
- private String name;
- private EnumQuality quality;
- private int tier;
- private float attackSpeed;
- private float attackDamageMin;
- private float attackDamageMax;
- private float attackDamage;
- private boolean hasCriticalDamage = false;
- private float criticalDamageChance;
- private float criticalDamageValue;
- private float criticalDamage;
- private boolean hasLore = false;
- private String lore;
- private String bold = "\u00A7l";
- private String italic = "\u00A7o";
- private String reset = "\u00A7r";
- public Sword(String name, EnumQuality quality, int tier, float attackSpeed, float attackDamageMin, float attackDamageMax) {
- super(name);
- this.name = name;
- this.quality = quality;
- this.tier = tier;
- this.attackSpeed = attackSpeed - 4.0F;
- this.attackDamageMin = attackDamageMin - 1.0F;
- this.attackDamageMax = attackDamageMax - 1.0F;
- this.attackDamage = this.attackDamageMin;
- // Stack Size
- this.maxStackSize = 1;
- // Unbreakable
- this.setMaxDamage(-1);
- // Creative Tab
- this.setCreativeTab(Ignite.tabSwords);
- }
- public Sword setCriticalDamage(float chance, float damage) {
- this.hasCriticalDamage = true;
- this.criticalDamageChance = chance;
- this.criticalDamageValue = damage;
- return this;
- }
- public Sword hasLore() {
- this.hasLore = true;
- this.lore = I18n.format("item." + this.name + ".lore");
- return this;
- }
- //----------//
- public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) {
- World worldIn = Minecraft.getMinecraft().world;
- Random random = new Random();
- // Random Damage
- this.attackDamage = this.attackDamageMin + random.nextFloat() * (this.attackDamageMax - this.attackDamageMin);
- // Critical Random and Critical Damage
- if(this.hasCriticalDamage) {
- float criticalRand = random.nextFloat() * 100;
- if(criticalRand <= this.criticalDamageChance) {
- this.criticalDamage = this.attackDamage * (this.criticalDamageValue - 1F);
- worldIn.playSound(attacker.posX, attacker.posY, attacker.posZ, SoundEvents.ENTITY_ITEM_BREAK, SoundCategory.NEUTRAL, 1.0F, 1.0F, false);
- } else {
- this.criticalDamage = 0;
- }
- }
- stack.damageItem(1, attacker);
- return true;
- }
- @Override
- public String getItemStackDisplayName(ItemStack stack) {
- return this.quality.getQualityColor() + I18n.format(this.getUnlocalizedNameInefficiently(stack) + ".name").trim();
- }
- @Override
- public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) {
- Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(equipmentSlot);
- if (equipmentSlot == EntityEquipmentSlot.MAINHAND) {
- multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", ((double)this.attackDamage + (double)this.criticalDamage), 0));
- multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", (double)this.attackSpeed, 0));
- }
- return multimap;
- }
- //----------//
- @Override
- public void addInformation(ItemStack stack, World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
- tooltip.clear();
- // Item Name
- tooltip.add(this.quality.getQualityColor() + bold + I18n.format(this.getUnlocalizedNameInefficiently(stack) + ".name").trim());
- tooltip.add("");
- // Item Stats
- tooltip.add(TextFormatting.WHITE + bold + I18n.format("general.stats"));
- tooltip.add(TextFormatting.GRAY + "Tier: " + TextFormatting.WHITE + this.tier);
- tooltip.add(TextFormatting.GRAY + "Attack Damage: " + TextFormatting.RED + ((int)this.attackDamageMin + 1) + "-" + ((int)this.attackDamageMax + 1));
- tooltip.add(TextFormatting.GRAY + "Attack Speed: " + TextFormatting.AQUA + (this.attackSpeed + 4.0F));
- if(hasCriticalDamage) {
- tooltip.add(TextFormatting.GRAY + "Critical Chance: " + TextFormatting.GOLD + (int)this.criticalDamageChance + "%");
- tooltip.add(TextFormatting.GRAY + "Critical Damage: " + TextFormatting.YELLOW + "x" + this.criticalDamageValue);
- }
- tooltip.add("");
- // Orbs
- tooltip.add(TextFormatting.WHITE + bold + I18n.format("general.orbs"));
- tooltip.add(TextFormatting.GRAY + "-");
- tooltip.add("");
- // Requirements
- tooltip.add(TextFormatting.WHITE + bold + I18n.format("general.requirements"));
- tooltip.add(TextFormatting.GRAY + I18n.format("general.playerlevel") + ": " + TextFormatting.RED + "20");
- tooltip.add(TextFormatting.GRAY + I18n.format("general.vitalitypoints") + ": " + TextFormatting.GREEN + "5");
- tooltip.add(TextFormatting.GRAY + I18n.format("general.strenghtpoints") + ": " + TextFormatting.RED + "10");
- tooltip.add("");
- // Quality
- tooltip.add(this.quality.getQualityColor() + I18n.format("quality." + this.quality.getQualityName().toLowerCase() + "item.name"));
- // Lore
- if(this.hasLore) {
- tooltip.add("");
- tooltip.add((TextFormatting.DARK_GRAY + italic + this.lore));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment