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.
This commit is contained in:
Teriuihi 2024-10-18 22:59:47 +02:00
parent 73cfb772b1
commit c8cb2309f6
4 changed files with 57 additions and 40 deletions

View File

@ -30,7 +30,7 @@ public class Main extends JavaPlugin {
public void reloadConfigs() {
Config.reload();
Messages.reload();
MobTypes.reload();
MobTypes.reload(this);
}
@Override

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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;