private double computeValue() { double result = getBaseValue(); for (AttributeModifier modifier : modifiers.values()) { if (modifier.getOperation() == AttributeModifier.Operation.ADD_NUMBER) { result += modifier.getAmount(); } } double multiplier = 1.0; for (AttributeModifier modifier : modifiers.values()) { if (modifier.getOperation() == AttributeModifier.Operation.ADD_SCALAR) { multiplier += modifier.getAmount(); } } result *= multiplier; for (AttributeModifier modifier : modifiers.values()) { if (modifier.getOperation() == AttributeModifier.Operation.MULTIPLY_SCALAR_1) { result *= 1.0 + modifier.getAmount(); } } result = Math.max(result, key.min); result = Math.min(result, key.max); return result; }
@Override public ByteBuf encode(ByteBuf buf, EntityPropertyMessage message) throws IOException { ByteBufUtils.writeVarInt(buf, message.getId()); Map<String, Property> props = message.getProperties(); buf.writeInt(props.size()); for (Entry<String, Property> property : props.entrySet()) { ByteBufUtils.writeUTF8(buf, property.getKey()); buf.writeDouble(property.getValue().getValue()); Collection<AttributeModifier> modifiers = property.getValue().getModifiers(); if (modifiers == null) { ByteBufUtils.writeVarInt(buf, 0); } else { ByteBufUtils.writeVarInt(buf, modifiers.size()); for (AttributeModifier modifier : modifiers) { GlowBufUtils.writeUuid(buf, modifier.getUniqueId()); buf.writeDouble(modifier.getAmount()); buf.writeByte(modifier.getOperation().ordinal()); } } } return buf; } }
List<CompoundTag> modifierTags = modifiers.stream().map(modifier -> { CompoundTag modifierTag = new CompoundTag(); modifierTag.putDouble("Amount", modifier.getAmount()); modifierTag.putString("Name", modifier.getName()); modifierTag.putInt("Operation", modifier.getOperation().ordinal());
private double getMultiplier(final AttributeModifier mod) { return AttribUtil.getMultiplier(operationToInt(mod.getOperation()), mod.getAmount()); }