2024-10-18 20:59:47 +00:00
|
|
|
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) {
|
2024-10-18 21:21:49 +00:00
|
|
|
log.info("DEBUG: Setting attribute {} to {}", attribute.name(), value);
|
2024-10-18 20:59:47 +00:00
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
}
|