forked from Upstream/mmocore
Fixed attributes not reseting
This commit is contained in:
parent
bc9f5ac6f8
commit
7810e3695b
@ -1,36 +1,30 @@
|
||||
package net.Indyuce.mmocore.api.player.attribute;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
||||
import io.lumine.mythic.lib.api.player.MMOPlayerData;
|
||||
import io.lumine.mythic.lib.api.stat.modifier.StatModifier;
|
||||
import io.lumine.mythic.lib.api.stat.api.InstanceModifier;
|
||||
import io.lumine.mythic.lib.player.modifier.ModifierSource;
|
||||
import io.lumine.mythic.lib.player.modifier.ModifierType;
|
||||
import io.lumine.mythic.lib.player.modifier.PlayerModifier;
|
||||
import io.lumine.mythic.lib.util.configobject.ConfigObject;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import org.apache.commons.lang.Validate;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
public class AttributeModifier extends PlayerModifier {
|
||||
public class AttributeModifier extends InstanceModifier {
|
||||
private final String attribute;
|
||||
private final double value;
|
||||
private final ModifierType type;
|
||||
|
||||
private static final DecimalFormat oneDigit = MythicLib.plugin.getMMOConfig().newDecimalFormat("0.#");
|
||||
|
||||
/**
|
||||
* Flat attribute modifier (simplest modifier you can think about)
|
||||
*/
|
||||
public AttributeModifier(String key, String attribute, double value) {
|
||||
this(key, attribute, value, ModifierType.FLAT, EquipmentSlot.OTHER, ModifierSource.OTHER);
|
||||
super(key, value);
|
||||
|
||||
this.attribute = attribute;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attribute modifier given by an external mecanic, like a party buff, item set bonuses,
|
||||
* skills or abilities... Anything apart from items and armor.
|
||||
* Attribute modifier given by an external mechanic, like a party buff, item
|
||||
* set bonuses, skills or abilities... Anything apart from items and armor.
|
||||
*/
|
||||
public AttributeModifier(String key, String attribute, double value, ModifierType type) {
|
||||
this(key, attribute, value, type, EquipmentSlot.OTHER, ModifierSource.OTHER);
|
||||
@ -47,11 +41,23 @@ public class AttributeModifier extends PlayerModifier {
|
||||
* @param source Type of the item granting the stat modifier
|
||||
*/
|
||||
public AttributeModifier(String key, String attribute, double value, ModifierType type, EquipmentSlot slot, ModifierSource source) {
|
||||
super(key, slot, source);
|
||||
this(UUID.randomUUID(), key, attribute, value, type, slot, source);
|
||||
}
|
||||
|
||||
/**
|
||||
* Attribute modifier given by an item, either a weapon or an armor piece.
|
||||
*
|
||||
* @param key Player modifier key
|
||||
* @param attribute Attribute being modified
|
||||
* @param value Value of stat modifier
|
||||
* @param type Is the modifier flat or multiplicative
|
||||
* @param slot Slot of the item granting the stat modifier
|
||||
* @param source Type of the item granting the stat modifier
|
||||
*/
|
||||
public AttributeModifier(UUID uniqueId, String key, String attribute, double value, ModifierType type, EquipmentSlot slot, ModifierSource source) {
|
||||
super(uniqueId, key, slot, source, value, type);
|
||||
|
||||
this.attribute = attribute;
|
||||
this.value = value;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -62,22 +68,14 @@ public class AttributeModifier extends PlayerModifier {
|
||||
* @param str The string to be parsed
|
||||
*/
|
||||
public AttributeModifier(String key, String attribute, String str) {
|
||||
super(key, EquipmentSlot.OTHER, ModifierSource.OTHER);
|
||||
super(key, EquipmentSlot.OTHER, ModifierSource.OTHER, str);
|
||||
|
||||
Validate.notNull(str, "String cannot be null");
|
||||
Validate.notEmpty(str, "String cannot be empty");
|
||||
|
||||
type = str.toCharArray()[str.length() - 1] == '%' ? ModifierType.RELATIVE : ModifierType.FLAT;
|
||||
value = Double.parseDouble(type == ModifierType.RELATIVE ? str.substring(0, str.length() - 1) : str);
|
||||
this.attribute = attribute;
|
||||
}
|
||||
|
||||
public AttributeModifier(ConfigObject object) {
|
||||
super(object.getString("key"), EquipmentSlot.OTHER, ModifierSource.OTHER);
|
||||
super(object);
|
||||
|
||||
String str = Objects.requireNonNull(object.getString("value"));
|
||||
type = str.toCharArray()[str.length() - 1] == '%' ? ModifierType.RELATIVE : ModifierType.FLAT;
|
||||
value = Double.parseDouble(type == ModifierType.RELATIVE ? str.substring(0, str.length() - 1) : str);
|
||||
this.attribute = object.getString("attribute");
|
||||
}
|
||||
|
||||
@ -85,14 +83,6 @@ public class AttributeModifier extends PlayerModifier {
|
||||
return attribute;
|
||||
}
|
||||
|
||||
public ModifierType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public double getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to multiply some existing stat modifier by a constant, usually an
|
||||
* integer, for instance when MMOCore party modifiers scale with the
|
||||
@ -101,8 +91,8 @@ public class AttributeModifier extends PlayerModifier {
|
||||
* @param coef The multiplicative constant
|
||||
* @return A new instance of StatModifier with modified value
|
||||
*/
|
||||
public StatModifier multiply(double coef) {
|
||||
return new StatModifier(getKey(), attribute, value * coef, type, getSlot(), getSource());
|
||||
public AttributeModifier multiply(double coef) {
|
||||
return new AttributeModifier(getUniqueId(), getKey(), attribute, value * coef, type, getSlot(), getSource());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -116,9 +106,4 @@ public class AttributeModifier extends PlayerModifier {
|
||||
PlayerData playerData = PlayerData.get(mmoPlayerData);
|
||||
playerData.getAttributes().getInstance(attribute).removeModifier(getKey());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return oneDigit.format(value) + (type == io.lumine.mythic.lib.player.modifier.ModifierType.RELATIVE ? "%" : "");
|
||||
}
|
||||
}
|
@ -113,6 +113,7 @@ public class PlayerAttributes {
|
||||
return n;
|
||||
}
|
||||
|
||||
// TODO have it extend ModifiedInstance
|
||||
public class AttributeInstance {
|
||||
private int spent;
|
||||
|
||||
@ -223,10 +224,9 @@ public class PlayerAttributes {
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setBaseAttribute(String id, int value) {
|
||||
getInstances().forEach(ins -> {
|
||||
if (ins.getId().equals(id))
|
||||
ins.setBase(value);
|
||||
});
|
||||
AttributeInstance ins = instances.get(id);
|
||||
if (ins != null) ins.setBase(value);
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import io.lumine.mythic.lib.gson.JsonObject;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.attribute.PlayerAttribute;
|
||||
import net.Indyuce.mmocore.api.player.attribute.PlayerAttributes;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.player.ClassDataContainer;
|
||||
import net.Indyuce.mmocore.skill.RegisteredSkill;
|
||||
@ -327,7 +328,10 @@ public class SavedClassInformation implements ClassDataContainer {
|
||||
player.bindSkill(slot, profess.getSkill(boundSkills.get(slot)));
|
||||
|
||||
skillLevels.forEach(player::setSkillLevel);
|
||||
attributeLevels.forEach((id, pts) -> player.getAttributes().setBaseAttribute(id, pts));
|
||||
attributeLevels.forEach((id, pts) -> {
|
||||
final PlayerAttributes.AttributeInstance ins = player.getAttributes().getInstance(id);
|
||||
if (ins != null) ins.setBase(pts);
|
||||
});
|
||||
|
||||
// Careful, the global points must not be forgotten.
|
||||
player.setSkillTreePoints("global", skillTreePoints.getOrDefault("global", 0));
|
||||
|
@ -109,7 +109,7 @@ public class AttributeView extends EditableInventory {
|
||||
playerData.getAttributes().getInstances().forEach(ins -> ins.setBase(0));
|
||||
playerData.giveAttributePoints(spent);
|
||||
playerData.giveAttributeReallocationPoints(-1);
|
||||
MMOCore.plugin.configManager.getSimpleMessage("attribute-points-reallocated", "points", "" + playerData.getAttributePoints()).send(player);
|
||||
MMOCore.plugin.configManager.getSimpleMessage("attribute-points-reallocated", "points", String.valueOf(playerData.getAttributePoints())).send(player);
|
||||
MMOCore.plugin.soundManager.getSound(SoundEvent.RESET_ATTRIBUTES).playTo(getPlayer());
|
||||
open();
|
||||
}
|
||||
|
@ -207,7 +207,7 @@ public class ConfigManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge with {@link net.Indyuce.mmocore.api.ConfigMessage}
|
||||
* @deprecated TODO Merge with {@link net.Indyuce.mmocore.api.ConfigMessage}
|
||||
*/
|
||||
@Deprecated
|
||||
public SimpleMessage getSimpleMessage(String key, String... placeholders) {
|
||||
@ -218,7 +218,7 @@ public class ConfigManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge with {@link net.Indyuce.mmocore.api.ConfigMessage}
|
||||
* @deprecated TODO Merge with {@link net.Indyuce.mmocore.api.ConfigMessage}
|
||||
*/
|
||||
@Deprecated
|
||||
public static class SimpleMessage {
|
||||
|
@ -8,8 +8,6 @@ import java.util.Set;
|
||||
/**
|
||||
* All the class-specific information i.e information being saved
|
||||
* in {@link SavedClassInformation} when a player changes its current class.
|
||||
*
|
||||
* TODO move {@link SavedClassInformation} method to ClassDataContainer
|
||||
*/
|
||||
public interface ClassDataContainer {
|
||||
|
||||
|
@ -32,7 +32,7 @@ items:
|
||||
- ''
|
||||
- '&8When Leveled Up:'
|
||||
- '&7 +{buff_weapon_damage}% Weapon Damage (&a+{total_weapon_damage}%&7)'
|
||||
- '&7 +{buff_max_health} Max Health (&a+{total_max_health}&7)'
|
||||
- '&7 +{buff_max_health}% Max Health (&a+{total_max_health}%&7)'
|
||||
- ''
|
||||
- '&eClick to level up for 1 attribute point.'
|
||||
- '&e◆ Current Attribute Points: {attribute_points}'
|
||||
@ -50,7 +50,7 @@ items:
|
||||
- '&8When Leveled Up:'
|
||||
- '&7 +{buff_physical_damage}% Physical Damage (&a+{total_physical_damage}%&7)'
|
||||
- '&7 +{buff_projectile_damage}% Projectile Damage (&a+{total_projectile_damage}%&7)'
|
||||
- '&7 +{buff_attack_speed} Attack Speed (&a+{total_attack_speed}&7)'
|
||||
- '&7 +{buff_attack_speed}% Attack Speed (&a+{total_attack_speed}%&7)'
|
||||
- ''
|
||||
- '&eClick to level up for 1 attribute point.'
|
||||
- '&e◆ Current Attribute Points: {attribute_points}'
|
||||
|
Loading…
Reference in New Issue
Block a user