diff --git a/src/main/java/com/alttd/custommobs/Main.java b/src/main/java/com/alttd/custommobs/Main.java index fdcd179..8fa4f31 100644 --- a/src/main/java/com/alttd/custommobs/Main.java +++ b/src/main/java/com/alttd/custommobs/Main.java @@ -30,7 +30,7 @@ public class Main extends JavaPlugin { public void reloadConfigs() { Config.reload(); Messages.reload(); - MobTypes.reload(); + MobTypes.reload(this); } @Override diff --git a/src/main/java/com/alttd/custommobs/abilities/modifiers/AttributeModifier.java b/src/main/java/com/alttd/custommobs/abilities/modifiers/AttributeModifier.java deleted file mode 100644 index 16ee8c1..0000000 --- a/src/main/java/com/alttd/custommobs/abilities/modifiers/AttributeModifier.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.alttd.custommobs.abilities.modifiers; - -import com.alttd.custommobs.abilities.EntityModifier; -import lombok.extern.slf4j.Slf4j; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeInstance; -import org.bukkit.entity.LivingEntity; - -@Slf4j -public class AttributeModifier implements EntityModifier { - - private final double value; - private final Attribute attribute; - - public AttributeModifier(Attribute attribute, double value) { - this.value = value; - this.attribute = attribute; - } - - @Override - public void apply(LivingEntity entity) { - AttributeInstance attributeInstance = entity.getAttribute(attribute); - if (attributeInstance == null) { - log.warn("Entity {} has no {} attribute", entity.getName(), attribute.name()); - return; - } - attributeInstance.setBaseValue(value); - } - - @Override - public String getName() { - return attribute.name(); - } -} diff --git a/src/main/java/com/alttd/custommobs/abilities/modifiers/EntityAttributeModifier.java b/src/main/java/com/alttd/custommobs/abilities/modifiers/EntityAttributeModifier.java new file mode 100644 index 0000000..8674fc9 --- /dev/null +++ b/src/main/java/com/alttd/custommobs/abilities/modifiers/EntityAttributeModifier.java @@ -0,0 +1,48 @@ +package com.alttd.custommobs.abilities.modifiers; + +import com.alttd.custommobs.Main; +import com.alttd.custommobs.abilities.EntityModifier; +import lombok.extern.slf4j.Slf4j; +import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.entity.LivingEntity; + +@Slf4j +public class EntityAttributeModifier implements EntityModifier { + + private final double value; + private final Attribute attribute; + private final Main main; + + public EntityAttributeModifier(Main main, Attribute attribute, double value) { + this.main = main; + this.value = value; + this.attribute = attribute; + } + + @Override + public void apply(LivingEntity entity) { + AttributeInstance attributeInstance = entity.getAttribute(attribute); + if (attributeInstance == null) { + log.warn("Entity {} has no {} attribute", entity.getName(), attribute.name()); + return; + } + log.info("DEBUG: Setting attribute {} to {}", attribute.name(), value); + NamespacedKey namespacedKey = NamespacedKey.fromString("cm", main); + if (namespacedKey == null) { + log.error("Namespaced key was null when applying attribute modifier"); + return; + } + AttributeModifier attributeModifier = new AttributeModifier(namespacedKey, + attributeInstance.getValue() - value, + AttributeModifier.Operation.ADD_NUMBER); + attributeInstance.addModifier(attributeModifier); + } + + @Override + public String getName() { + return attribute.name(); + } +} diff --git a/src/main/java/com/alttd/custommobs/config/MobTypes.java b/src/main/java/com/alttd/custommobs/config/MobTypes.java index 7643868..1cf05df 100644 --- a/src/main/java/com/alttd/custommobs/config/MobTypes.java +++ b/src/main/java/com/alttd/custommobs/config/MobTypes.java @@ -1,7 +1,8 @@ package com.alttd.custommobs.config; +import com.alttd.custommobs.Main; import com.alttd.custommobs.abilities.Ability; -import com.alttd.custommobs.abilities.modifiers.AttributeModifier; +import com.alttd.custommobs.abilities.modifiers.EntityAttributeModifier; import com.alttd.custommobs.abilities.EntityModifier; import com.alttd.custommobs.abilities.MobType; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -16,19 +17,21 @@ import java.util.*; @Slf4j public class MobTypes extends AbstractConfig { static MobTypes config; + private final Main main; - MobTypes() { + MobTypes(Main main) { super( new File(File.separator + "mnt" + File.separator + "configs" + File.separator + "custommobs"), "mob-types.yml"); + this.main = main; } - public static void reload() { + public static void reload(Main main) { log.info("Reloading mob types"); - config = new MobTypes(); + config = new MobTypes(main); config.readConfig(MobTypes.class, null); } @@ -80,7 +83,7 @@ public class MobTypes extends AbstractConfig { private static EntityModifier getAttribute(String attributeName, double value) { try { Attribute attribute = Attribute.valueOf(attributeName); - return new AttributeModifier(attribute, value); + return new EntityAttributeModifier(config.main, attribute, value); } catch (IllegalArgumentException e) { log.error("Invalid attribute {}", attributeName, e); return null;