@Override public Multimap<String, AttributeModifier> getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { Multimap<String, AttributeModifier> attrib = super.getAttributeModifiers(slot, stack); // Remove these or else vanilla will double count it and ISpecialArmor attrib.removeAll(SharedMonsterAttributes.ARMOR.getName()); attrib.removeAll(SharedMonsterAttributes.ARMOR_TOUGHNESS.getName()); return attrib; }
@Override public Multimap<String, AttributeModifier> getAttributeModifiers(ItemStack stack) { Multimap<String, AttributeModifier> multimap = super.getAttributeModifiers(stack); multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", weaponDamage, 0)); return multimap; } }
@Override public void removeCitizen(final CitizenData citizen) { if (citizen != null) { final Optional<EntityCitizen> optCitizen = citizen.getCitizenEntity(); if (optCitizen.isPresent()) { optCitizen.get().removeAllHealthModifiers(); optCitizen.get().getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(SharedMonsterAttributes.ARMOR.getDefaultValue()); } } super.removeCitizen(citizen); }
/** * Gets the amount of melee damage delt by the specified item * @param itemStack * @return -1 if it doesn't have a damage modifier */ public static double GetItemWeaponDamage(ItemStack itemStack) { Multimap multimap = itemStack.getItem().getAttributeModifiers(itemStack); if (multimap.containsKey(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName())) { Collection attributes = multimap.get(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName()); if (attributes.size() > 0) { Object attribute = attributes.iterator().next(); if (attribute instanceof AttributeModifier) { AttributeModifier weaponModifier = (AttributeModifier)attribute; return weaponModifier.getAmount(); } } } return -1; }
/** * Add exhaustion * * @param amount * @param ignoreModifier If the entity exhaustion attribute {@link VReference#bloodExhaustion} should be ignored */ void addExhaustion(float amount, boolean ignoreModifier) { VampirePlayer.get(player).checkAttributes(VReference.bloodExhaustion); IAttributeInstance attribute = player.getEntityAttribute(VReference.bloodExhaustion); float mult; if (ignoreModifier) { mult = 1F; } else { if (attribute == null) { //Probably not needed anymore TODO remove VampirismMod.log.w(TAG, "Blood exhaustion attribute is null for player %s (%s)", player, player == null ? null : player.getAttributeMap()); mult = (float) VReference.bloodExhaustion.getDefaultValue(); } else { mult = (float) attribute.getAttributeValue(); } } this.bloodExhaustionLevel = Math.min(bloodExhaustionLevel + amount * mult, 40F); }
@Nonnull @Override public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) { Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(equipmentSlot); if (equipmentSlot == EntityEquipmentSlot.MAINHAND) { multimap.removeAll(SharedMonsterAttributes.ATTACK_SPEED.getName()); multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -1.5, 0)); } return multimap; }
private void renderAttributes() { EntityTameableDragon dragon = getSelectedDragon(); if (dragon == null) { return; } text.setOrigin(text.getX() + 180, 8); text.setColor(YELLOW); text.println("Attributes"); text.setColor(WHITE); Collection<IAttributeInstance> attribs = dragon.getAttributeMap().getAllAttributes(); attribs.forEach(attrib -> { String attribName = I18n.translateToLocal("attribute.name." + attrib.getAttribute().getAttributeUnlocalizedName()); String attribValue = dfShort.format(attrib.getAttributeValue()); String attribBase = dfShort.format(attrib.getBaseValue()); text.println(attribName + " = " + attribValue + " (" + attribBase + ")"); }); text.println(); }
@Override public boolean assignCitizen(final CitizenData citizen) { // Only change HP values if assign successful if (super.assignCitizen(citizen) && citizen != null) { final Optional<EntityCitizen> optCitizen = citizen.getCitizenEntity(); if (optCitizen.isPresent()) { final AttributeModifier healthModBuildingHP = new AttributeModifier(GUARD_HEALTH_MOD_BUILDING_NAME, getBonusHealth(), 0); optCitizen.get().increaseHPForGuards(); optCitizen .get() .getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH) .applyModifier(healthModBuildingHP); optCitizen .get() .getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH) .applyModifier(healthModConfig); optCitizen .get() .getEntityAttribute(SharedMonsterAttributes.ARMOR) .setBaseValue(SharedMonsterAttributes.ARMOR.getDefaultValue() + getDefenceBonus()); } return true; } return false; }
@Nonnull @Override public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) { Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(equipmentSlot); if (equipmentSlot == EntityEquipmentSlot.MAINHAND) { multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -1.25, 0)); } return multimap; }
@Override void fillModifiers(Multimap<String, AttributeModifier> attributes, ItemStack stack) { attributes.put(EntityPlayer.REACH_DISTANCE.getName(), new AttributeModifier(getBaubleUUID(stack), "Reach Ring", 3.5, 0).setSaved(false)); }
@Override void fillModifiers(Multimap<String, AttributeModifier> attributes, ItemStack stack) { if(stack.isEmpty()) // workaround for Azanor/Baubles#156 return; attributes.put(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getName(), new AttributeModifier(getBaubleUUID(stack), "Knockback Belt", 1, 0).setSaved(false)); }
@Nonnull @Override public Multimap<String, AttributeModifier> getAttributeModifiers(@Nonnull EntityEquipmentSlot slot, ItemStack stack) { Multimap<String, AttributeModifier> multimap = super.getAttributeModifiers(slot, stack); UUID uuid = new UUID((getTranslationKey(stack) + slot.toString()).hashCode(), 0); if (slot == armorType) { multimap.put(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getName(), new AttributeModifier(uuid, "Terrasteel modifier " + type, (double) getArmorDisplay(null, new ItemStack(this), type.getIndex()) / 20, 0)); } return multimap; }
private void fillModifiers(Multimap<String, AttributeModifier> attributes, ItemStack stack) { if(stack.isEmpty()) // workaround for Azanor/Baubles#156 return; attributes.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(getBaubleUUID(stack), "Odin Ring", 20, 0).setSaved(false)); }
public double getBaseAttack() { String attackKey = SharedMonsterAttributes.ATTACK_DAMAGE.getName(); return (attributes.containsKey(attackKey)) ? attributes.get(attackKey) : 0; }
public double getBaseHealth() { String healthKey = SharedMonsterAttributes.MAX_HEALTH.getName(); return (attributes.containsKey(healthKey)) ? attributes.get(healthKey) : 0; }
@Override public Multimap<String, AttributeModifier> getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(slot); if (slot == EntityEquipmentSlot.MAINHAND) { multimap.removeAll(SharedMonsterAttributes.ATTACK_DAMAGE.getName()); multimap.removeAll(SharedMonsterAttributes.ATTACK_SPEED.getName()); multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", attackDamage, 0)); multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", attackSpeed, 0)); } return multimap; }
@Override public Multimap<String, AttributeModifier> getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { Multimap<String, AttributeModifier> multimap = HashMultimap.create(); if (slot == EntityEquipmentSlot.MAINHAND) { multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Chisel Damage", type.attackDamage, 0)); } return multimap; }
@Override public Multimap<String, AttributeModifier> getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { Multimap<String, AttributeModifier> multimap = HashMultimap.create(); if (slot == EntityEquipmentSlot.MAINHAND) { multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(Item.ATTACK_DAMAGE_MODIFIER, "Tool modifier", 1, 0)); } return multimap; }
public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) { Multimap<String, AttributeModifier> multimap = HashMultimap.<String, AttributeModifier>create(); if (equipmentSlot == EntityEquipmentSlot.MAINHAND) { multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", 9D, 0)); multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -3.5D, 0)); } return multimap; }