Guest User

Untitled

a guest
Mar 28th, 2018
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.21 KB | None | 0 0
  1. package com.deadzoke.ignite.item;
  2.  
  3. import java.util.List;
  4. import java.util.Random;
  5.  
  6. import com.deadzoke.ignite.Ignite;
  7. import com.deadzoke.ignite.api.base.BaseSword;
  8. import com.deadzoke.ignite.util.EnumQuality;
  9. import com.google.common.collect.Multimap;
  10.  
  11. import net.minecraft.client.Minecraft;
  12. import net.minecraft.client.resources.I18n;
  13. import net.minecraft.client.util.ITooltipFlag;
  14. import net.minecraft.entity.EntityLivingBase;
  15. import net.minecraft.entity.SharedMonsterAttributes;
  16. import net.minecraft.entity.ai.attributes.AttributeModifier;
  17. import net.minecraft.init.SoundEvents;
  18. import net.minecraft.inventory.EntityEquipmentSlot;
  19. import net.minecraft.item.ItemStack;
  20. import net.minecraft.util.SoundCategory;
  21. import net.minecraft.util.text.TextFormatting;
  22. import net.minecraft.world.World;
  23.  
  24. public class Sword extends BaseSword {
  25.  
  26.     private String name;
  27.     private EnumQuality quality;
  28.     private int tier;
  29.     private float attackSpeed;
  30.  
  31.     private float attackDamageMin;
  32.     private float attackDamageMax;
  33.     private float attackDamage;
  34.  
  35.     private boolean hasCriticalDamage = false;
  36.     private float criticalDamageChance;
  37.     private float criticalDamageValue;
  38.     private float criticalDamage;
  39.    
  40.     private boolean hasLore = false;
  41.     private String lore;
  42.    
  43.     private String bold = "\u00A7l";
  44.     private String italic = "\u00A7o";
  45.     private String reset = "\u00A7r";
  46.  
  47.     public Sword(String name, EnumQuality quality, int tier, float attackSpeed, float attackDamageMin, float attackDamageMax) {
  48.         super(name);
  49.        
  50.         this.name = name;
  51.         this.quality = quality;
  52.         this.tier = tier;
  53.         this.attackSpeed = attackSpeed - 4.0F;
  54.  
  55.         this.attackDamageMin = attackDamageMin - 1.0F;
  56.         this.attackDamageMax = attackDamageMax - 1.0F;
  57.         this.attackDamage = this.attackDamageMin;
  58.        
  59.         // Stack Size
  60.         this.maxStackSize = 1;
  61.         // Unbreakable
  62.         this.setMaxDamage(-1);
  63.         // Creative Tab
  64.         this.setCreativeTab(Ignite.tabSwords);
  65.     }
  66.    
  67.     public Sword setCriticalDamage(float chance, float damage) {
  68.         this.hasCriticalDamage = true;
  69.         this.criticalDamageChance = chance;
  70.         this.criticalDamageValue = damage;
  71.         return this;
  72.     }
  73.    
  74.     public Sword hasLore() {
  75.         this.hasLore = true;
  76.         this.lore = I18n.format("item." + this.name + ".lore");
  77.         return this;
  78.     }
  79.    
  80.     //----------//
  81.    
  82.     public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) {
  83.         World worldIn = Minecraft.getMinecraft().world;
  84.         Random random = new Random();
  85.        
  86.         // Random Damage
  87.         this.attackDamage = this.attackDamageMin + random.nextFloat() * (this.attackDamageMax - this.attackDamageMin);
  88.        
  89.         // Critical Random and Critical Damage
  90.         if(this.hasCriticalDamage) {
  91.             float criticalRand = random.nextFloat() * 100;
  92.             if(criticalRand <= this.criticalDamageChance) {
  93.                 this.criticalDamage = this.attackDamage * (this.criticalDamageValue - 1F);
  94.                 worldIn.playSound(attacker.posX, attacker.posY, attacker.posZ, SoundEvents.ENTITY_ITEM_BREAK, SoundCategory.NEUTRAL, 1.0F, 1.0F, false);
  95.             } else {
  96.                 this.criticalDamage = 0;
  97.             }
  98.         }
  99.        
  100.         stack.damageItem(1, attacker);
  101.         return true;
  102.     }
  103.  
  104.     @Override
  105.     public String getItemStackDisplayName(ItemStack stack) {
  106.         return this.quality.getQualityColor() + I18n.format(this.getUnlocalizedNameInefficiently(stack) + ".name").trim();
  107.     }
  108.    
  109.     @Override
  110.     public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) {
  111.         Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(equipmentSlot);
  112.         if (equipmentSlot == EntityEquipmentSlot.MAINHAND) {
  113.             multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", ((double)this.attackDamage + (double)this.criticalDamage), 0));
  114.             multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", (double)this.attackSpeed, 0));
  115.         }
  116.         return multimap;
  117.     }
  118.    
  119.     //----------//
  120.    
  121.     @Override
  122.     public void addInformation(ItemStack stack, World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
  123.         tooltip.clear();
  124.        
  125.         // Item Name
  126.         tooltip.add(this.quality.getQualityColor() + bold + I18n.format(this.getUnlocalizedNameInefficiently(stack) + ".name").trim());
  127.         tooltip.add("");
  128.        
  129.         // Item Stats
  130.         tooltip.add(TextFormatting.WHITE + bold + I18n.format("general.stats"));
  131.         tooltip.add(TextFormatting.GRAY + "Tier: " + TextFormatting.WHITE + this.tier);
  132.         tooltip.add(TextFormatting.GRAY + "Attack Damage: " + TextFormatting.RED + ((int)this.attackDamageMin + 1) + "-" + ((int)this.attackDamageMax + 1));
  133.         tooltip.add(TextFormatting.GRAY + "Attack Speed: " + TextFormatting.AQUA + (this.attackSpeed + 4.0F));
  134.         if(hasCriticalDamage) {
  135.             tooltip.add(TextFormatting.GRAY + "Critical Chance: " + TextFormatting.GOLD + (int)this.criticalDamageChance + "%");
  136.             tooltip.add(TextFormatting.GRAY + "Critical Damage: " + TextFormatting.YELLOW + "x" + this.criticalDamageValue);
  137.         }
  138.         tooltip.add("");
  139.  
  140.         // Orbs
  141.         tooltip.add(TextFormatting.WHITE + bold + I18n.format("general.orbs"));
  142.         tooltip.add(TextFormatting.GRAY + "-");
  143.         tooltip.add("");
  144.        
  145.         // Requirements
  146.         tooltip.add(TextFormatting.WHITE + bold + I18n.format("general.requirements"));
  147.         tooltip.add(TextFormatting.GRAY + I18n.format("general.playerlevel") + ": " + TextFormatting.RED + "20");
  148.         tooltip.add(TextFormatting.GRAY + I18n.format("general.vitalitypoints") + ": " + TextFormatting.GREEN + "5");
  149.         tooltip.add(TextFormatting.GRAY + I18n.format("general.strenghtpoints") + ": " + TextFormatting.RED + "10");
  150.         tooltip.add("");
  151.        
  152.         // Quality
  153.         tooltip.add(this.quality.getQualityColor() + I18n.format("quality." + this.quality.getQualityName().toLowerCase() + "item.name"));
  154.        
  155.         // Lore
  156.         if(this.hasLore) {
  157.             tooltip.add("");
  158.             tooltip.add((TextFormatting.DARK_GRAY + italic + this.lore));
  159.         }
  160.     }
  161. }
Advertisement
Add Comment
Please, Sign In to add comment