mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-23 13:14:32 +01:00
69 lines
2.4 KiB
Java
69 lines
2.4 KiB
Java
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())) {
|
|
instance.removeModifier(id);
|
|
|
|
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 {
|
|
instance.removeModifier(modifier.getId());
|
|
}
|
|
}
|
|
}
|
|
}
|