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:
parent
73cfb772b1
commit
c8cb2309f6
|
|
@ -30,7 +30,7 @@ public class Main extends JavaPlugin {
|
|||
public void reloadConfigs() {
|
||||
Config.reload();
|
||||
Messages.reload();
|
||||
MobTypes.reload();
|
||||
MobTypes.reload(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user