2024-06-22 19:48:50 +02:00
|
|
|
package com.minelittlepony.unicopia.entity;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
|
|
|
|
import it.unimi.dsi.fastutil.floats.Float2ObjectFunction;
|
|
|
|
import net.minecraft.entity.attribute.EntityAttribute;
|
|
|
|
import net.minecraft.entity.attribute.EntityAttributeInstance;
|
|
|
|
import net.minecraft.entity.attribute.EntityAttributeModifier;
|
|
|
|
import net.minecraft.util.math.MathHelper;
|
|
|
|
|
|
|
|
public interface AttributeContainer {
|
|
|
|
@Nullable
|
|
|
|
EntityAttributeInstance getAttributeInstance(EntityAttribute attribute);
|
|
|
|
|
|
|
|
default void updateAttributeModifier(UUID id, EntityAttribute attribute, float desiredValue, Float2ObjectFunction<EntityAttributeModifier> modifierSupplier, boolean permanent) {
|
|
|
|
@Nullable
|
|
|
|
EntityAttributeInstance instance = getAttributeInstance(attribute);
|
|
|
|
if (instance == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
EntityAttributeModifier modifier = instance.getModifier(id);
|
|
|
|
|
|
|
|
if (!MathHelper.approximatelyEquals(desiredValue, modifier == null ? 0 : modifier.getValue())) {
|
2024-09-16 21:10:38 +02:00
|
|
|
instance.removeModifier(id);
|
2024-06-22 19:48:50 +02:00
|
|
|
|
|
|
|
if (desiredValue != 0) {
|
|
|
|
if (permanent) {
|
|
|
|
instance.addPersistentModifier(modifierSupplier.get(desiredValue));
|
|
|
|
} else {
|
|
|
|
instance.addTemporaryModifier(modifierSupplier.get(desiredValue));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
default void applyAttributeModifiers(Map<EntityAttribute, EntityAttributeModifier> modifiers, boolean permanent, boolean apply) {
|
|
|
|
modifiers.forEach((attribute, modifier) -> {
|
|
|
|
applyAttributeModifier(attribute, modifier, permanent, apply);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
default void applyAttributeModifier(EntityAttribute attribute, EntityAttributeModifier modifier, boolean permanent, boolean apply) {
|
|
|
|
@Nullable
|
|
|
|
EntityAttributeInstance instance = getAttributeInstance(attribute);
|
|
|
|
if (instance == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
boolean present = instance.hasModifier(modifier);
|
|
|
|
|
|
|
|
if (present != apply) {
|
|
|
|
if (apply) {
|
|
|
|
if (permanent) {
|
|
|
|
instance.addPersistentModifier(modifier);
|
|
|
|
} else {
|
|
|
|
instance.addTemporaryModifier(modifier);
|
|
|
|
}
|
|
|
|
} else {
|
2024-06-24 02:15:50 +02:00
|
|
|
instance.removeModifier(modifier.getId());
|
2024-06-22 19:48:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|