From c8cb2309f68c8cfd8e09bc4219a701a7a56a905e Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Fri, 18 Oct 2024 22:59:47 +0200 Subject: [PATCH] Rename and enhance AttributeModifier Renamed AttributeModifier to EntityAttributeModifier for clarity. Added Main dependency and improved attribute setting logic with namespaced keys for better error handling and debugging. Updated MobTypes to pass Main instance accordingly. --- src/main/java/com/alttd/custommobs/Main.java | 2 +- .../modifiers/AttributeModifier.java | 34 ------------- .../modifiers/EntityAttributeModifier.java | 48 +++++++++++++++++++ .../com/alttd/custommobs/config/MobTypes.java | 13 +++-- 4 files changed, 57 insertions(+), 40 deletions(-) delete mode 100644 src/main/java/com/alttd/custommobs/abilities/modifiers/AttributeModifier.java create mode 100644 src/main/java/com/alttd/custommobs/abilities/modifiers/EntityAttributeModifier.java 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;