mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-09 00:22:08 -07:00
More PotionEffectType API
== AT == public net.minecraft.world.effect.MobEffect attributeModifiers public net.minecraft.world.effect.MobEffect$AttributeTemplate
This commit is contained in:
@@ -129,6 +129,48 @@ public class CraftPotionEffectType extends PotionEffectType implements Handleabl
|
|||||||
return this.handle.getDescriptionId();
|
return this.handle.getDescriptionId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Paper start
|
||||||
|
@Override
|
||||||
|
public java.util.Map<org.bukkit.attribute.Attribute, org.bukkit.attribute.AttributeModifier> getEffectAttributes() {
|
||||||
|
// re-create map each time because a nms MobEffect can have its attributes modified
|
||||||
|
final java.util.Map<org.bukkit.attribute.Attribute, org.bukkit.attribute.AttributeModifier> attributeMap = new java.util.HashMap<>();
|
||||||
|
this.handle.attributeModifiers.forEach((attribute, attributeModifier) -> {
|
||||||
|
attributeMap.put(
|
||||||
|
org.bukkit.craftbukkit.attribute.CraftAttribute.minecraftHolderToBukkit(attribute),
|
||||||
|
// use zero as amplifier to get the base amount, as it is amount = base * (amplifier + 1)
|
||||||
|
org.bukkit.craftbukkit.attribute.CraftAttributeInstance.convert(attributeModifier.create(0))
|
||||||
|
);
|
||||||
|
});
|
||||||
|
return java.util.Map.copyOf(attributeMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getAttributeModifierAmount(org.bukkit.attribute.Attribute attribute, int effectAmplifier) {
|
||||||
|
com.google.common.base.Preconditions.checkArgument(effectAmplifier >= 0, "effectAmplifier must be greater than or equal to 0");
|
||||||
|
Holder<net.minecraft.world.entity.ai.attributes.Attribute> nmsAttribute = org.bukkit.craftbukkit.attribute.CraftAttribute.bukkitToMinecraftHolder(attribute);
|
||||||
|
com.google.common.base.Preconditions.checkArgument(this.handle.attributeModifiers.containsKey(nmsAttribute), attribute + " is not present on " + this.getKey());
|
||||||
|
return this.handle.attributeModifiers.get(nmsAttribute).create(effectAmplifier).amount();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PotionEffectType.Category getEffectCategory() {
|
||||||
|
return fromNMS(handle.getCategory());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String translationKey() {
|
||||||
|
return this.handle.getDescriptionId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PotionEffectType.Category fromNMS(net.minecraft.world.effect.MobEffectCategory mobEffectInfo) {
|
||||||
|
return switch (mobEffectInfo) {
|
||||||
|
case BENEFICIAL -> PotionEffectType.Category.BENEFICIAL;
|
||||||
|
case HARMFUL -> PotionEffectType.Category.HARMFUL;
|
||||||
|
case NEUTRAL -> PotionEffectType.Category.NEUTRAL;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// Paper end
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object other) {
|
public boolean equals(Object other) {
|
||||||
if (this == other) {
|
if (this == other) {
|
||||||
|
@@ -0,0 +1,30 @@
|
|||||||
|
package io.papermc.paper.effects;
|
||||||
|
|
||||||
|
import io.papermc.paper.adventure.PaperAdventure;
|
||||||
|
import net.minecraft.world.effect.MobEffectCategory;
|
||||||
|
import org.bukkit.craftbukkit.potion.CraftPotionEffectType;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
import org.bukkit.support.environment.AllFeatures;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
|
||||||
|
@AllFeatures
|
||||||
|
public class EffectCategoryTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEffectCategoriesExist() {
|
||||||
|
for (MobEffectCategory mobEffectInfo : MobEffectCategory.values()) {
|
||||||
|
assertNotNull(CraftPotionEffectType.fromNMS(mobEffectInfo), mobEffectInfo + " is missing a bukkit equivalent");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCategoryHasEquivalentColors() {
|
||||||
|
for (MobEffectCategory mobEffectInfo : MobEffectCategory.values()) {
|
||||||
|
PotionEffectType.Category bukkitEffectCategory = CraftPotionEffectType.fromNMS(mobEffectInfo);
|
||||||
|
assertEquals(bukkitEffectCategory.getColor(), PaperAdventure.asAdventure(mobEffectInfo.getTooltipFormatting()), mobEffectInfo.getTooltipFormatting().name() + " doesn't equal " + bukkitEffectCategory.getColor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user