Sir_Salty

Soul Stealer2

Jul 2nd, 2017
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.26 KB | None | 0 0
  1. package sirsalty.wodolotry.items;
  2.  
  3. import java.util.Collection;
  4. import java.util.List;
  5. import java.util.Optional;
  6. import java.util.Set;
  7. import java.util.UUID;
  8.  
  9. import com.google.common.collect.Multimap;
  10. import com.google.common.collect.Sets;
  11.  
  12. import net.minecraft.block.Block;
  13. import net.minecraft.entity.SharedMonsterAttributes;
  14. import net.minecraft.entity.ai.attributes.AttributeModifier;
  15. import net.minecraft.entity.ai.attributes.IAttribute;
  16. import net.minecraft.entity.player.EntityPlayer;
  17. import net.minecraft.inventory.EntityEquipmentSlot;
  18. import net.minecraft.item.ItemStack;
  19. import net.minecraft.item.ItemSword;
  20. import net.minecraft.item.ItemTool;
  21. import net.minecraft.util.ResourceLocation;
  22. import net.minecraft.util.text.TextFormatting;
  23. import net.minecraftforge.common.util.EnumHelper;
  24. import sirsalty.wodolotry.Main;
  25. import sirsalty.wodolotry.Reference;
  26. import sirsalty.wodolotry.Util;
  27.  
  28. public class ItemSoulStealer extends ItemTool {
  29.    
  30.     private static final Set<Block> EFFECTIVE_BLOCKS = Sets.newHashSet(new Block[] {});
  31.  
  32.     public ItemSoulStealer(String unlocalizedName, int uses, int damage) {
  33.         super(EnumHelper.addToolMaterial(Reference.MODID, 0, uses, 0, damage, 0), EFFECTIVE_BLOCKS);
  34.         this.setUnlocalizedName(unlocalizedName);
  35.         this.setRegistryName(new ResourceLocation(Reference.MODID, unlocalizedName));
  36.         this.setCreativeTab(Main.magic);
  37.     }
  38.    
  39.     @Override
  40.     public void addInformation(ItemStack stack, EntityPlayer playerIn, List<String> tooltip, boolean advanced) {
  41.         super.addInformation(stack, playerIn, tooltip, advanced);
  42.         tooltip.add(TextFormatting.GOLD + Util.getLang().localize("soulstealer.tooltip"));
  43.     }
  44.    
  45.     @Override
  46.  
  47.     public Multimap<String, AttributeModifier> getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) {
  48.  
  49.         final Multimap<String, AttributeModifier> modifiers = super.getAttributeModifiers(slot, stack);
  50.  
  51.  
  52.  
  53.         if (slot == EntityEquipmentSlot.MAINHAND) {
  54.  
  55.             replaceModifier(modifiers, SharedMonsterAttributes.ATTACK_SPEED, ATTACK_SPEED_MODIFIER, 2);
  56.  
  57.         }
  58.  
  59.  
  60.  
  61.         return modifiers;
  62.  
  63.     }
  64.  
  65.  
  66.  
  67.     /**
  68.  
  69.      * Replace a modifier in the {@link Multimap} with a copy that's had {@code multiplier} applied to its value.
  70.  
  71.      *
  72.  
  73.      * @param modifierMultimap The MultiMap
  74.  
  75.      * @param attribute        The attribute being modified
  76.  
  77.      * @param id               The ID of the modifier
  78.  
  79.      * @param multiplier       The multiplier to apply
  80.  
  81.      */
  82.  
  83.     private void replaceModifier(Multimap<String, AttributeModifier> modifierMultimap, IAttribute attribute, UUID id, double multiplier) {
  84.  
  85.         // Get the modifiers for the specified attribute
  86.  
  87.         final Collection<AttributeModifier> modifiers = modifierMultimap.get(attribute.getAttributeUnlocalizedName());
  88.  
  89.  
  90.  
  91.         // Find the modifier with the specified ID, if any
  92.  
  93.         final Optional<AttributeModifier> modifierOptional = modifiers.stream().filter(attributeModifier -> attributeModifier.getID().equals(id)).findFirst();
  94.  
  95.  
  96.  
  97.         if (modifierOptional.isPresent()) { // If it exists,
  98.  
  99.             final AttributeModifier modifier = modifierOptional.get();
  100.  
  101.             modifiers.remove(modifier); // Remove it
  102.  
  103.             modifiers.add(new AttributeModifier(modifier.getID(), modifier.getName(), modifier.getAmount() * multiplier, modifier.getOperation())); // Add the new modifier
  104.  
  105.         }
  106.  
  107.     }
  108.  
  109. }
Add Comment
Please, Sign In to add comment