geforkt von Mirrors/Paper
bffb08c2f9
The Paper method was chosen for deprecation because it was more restrictive in that it has an isGliding check.
158 Zeilen
6.8 KiB
Diff
158 Zeilen
6.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Thu, 6 May 2021 19:57:58 -0700
|
|
Subject: [PATCH] More Enchantment API
|
|
|
|
== AT ==
|
|
public net.minecraft.world.item.enchantment.Enchantment slots
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
|
|
index 5b09e7e08c61b10044ac5f481bf10bb79feda8a3..06a857ae432fc81737b53a6d2b8742c1e80e5f8a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
|
|
@@ -71,7 +71,7 @@ public class CraftEnchantment extends Enchantment {
|
|
|
|
@Override
|
|
public boolean isCursed() {
|
|
- return this.target instanceof BindingCurseEnchantment || this.target instanceof VanishingCurseEnchantment;
|
|
+ return this.target.isCurse(); // Paper
|
|
}
|
|
|
|
@Override
|
|
@@ -199,6 +199,45 @@ public class CraftEnchantment extends Enchantment {
|
|
public String translationKey() {
|
|
return this.target.getDescriptionId();
|
|
}
|
|
+
|
|
+ @Override
|
|
+ public boolean isTradeable() {
|
|
+ return target.isTradeable();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isDiscoverable() {
|
|
+ return target.isDiscoverable();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public io.papermc.paper.enchantments.EnchantmentRarity getRarity() {
|
|
+ return fromNMSRarity(target.getRarity());
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public float getDamageIncrease(int level, org.bukkit.entity.EntityCategory entityCategory) {
|
|
+ return target.getDamageBonus(level, org.bukkit.craftbukkit.entity.CraftLivingEntity.fromBukkitEntityCategory(entityCategory));
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public java.util.Set<org.bukkit.inventory.EquipmentSlot> getActiveSlots() {
|
|
+ return java.util.stream.Stream.of(target.slots).map(org.bukkit.craftbukkit.CraftEquipmentSlot::getSlot).collect(java.util.stream.Collectors.toSet());
|
|
+ }
|
|
+
|
|
+ public static io.papermc.paper.enchantments.EnchantmentRarity fromNMSRarity(net.minecraft.world.item.enchantment.Enchantment.Rarity nmsRarity) {
|
|
+ if (nmsRarity == net.minecraft.world.item.enchantment.Enchantment.Rarity.COMMON) {
|
|
+ return io.papermc.paper.enchantments.EnchantmentRarity.COMMON;
|
|
+ } else if (nmsRarity == net.minecraft.world.item.enchantment.Enchantment.Rarity.UNCOMMON) {
|
|
+ return io.papermc.paper.enchantments.EnchantmentRarity.UNCOMMON;
|
|
+ } else if (nmsRarity == net.minecraft.world.item.enchantment.Enchantment.Rarity.RARE) {
|
|
+ return io.papermc.paper.enchantments.EnchantmentRarity.RARE;
|
|
+ } else if (nmsRarity == net.minecraft.world.item.enchantment.Enchantment.Rarity.VERY_RARE) {
|
|
+ return io.papermc.paper.enchantments.EnchantmentRarity.VERY_RARE;
|
|
+ }
|
|
+
|
|
+ throw new IllegalArgumentException(String.format("Unable to convert %s to a enum value of %s.", nmsRarity, io.papermc.paper.enchantments.EnchantmentRarity.class));
|
|
+ }
|
|
// Paper end
|
|
|
|
public net.minecraft.world.item.enchantment.Enchantment getHandle() {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
|
index 62700f1190bda9cb05514096e426eb3eeb87504c..3d3f7198a6134ced5c2dd25e369cb4e8d8f45fd1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
|
@@ -949,5 +949,21 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
|
public void setHurtDirection(float hurtDirection) {
|
|
throw new UnsupportedOperationException("Cannot set the hurt direction on a non player");
|
|
}
|
|
+
|
|
+ public static MobType fromBukkitEntityCategory(EntityCategory entityCategory) {
|
|
+ switch (entityCategory) {
|
|
+ case NONE:
|
|
+ return MobType.UNDEFINED;
|
|
+ case UNDEAD:
|
|
+ return MobType.UNDEAD;
|
|
+ case ARTHROPOD:
|
|
+ return MobType.ARTHROPOD;
|
|
+ case ILLAGER:
|
|
+ return MobType.ILLAGER;
|
|
+ case WATER:
|
|
+ return MobType.WATER;
|
|
+ }
|
|
+ throw new IllegalArgumentException(entityCategory + " is an unrecognized entity category");
|
|
+ }
|
|
// Paper end
|
|
}
|
|
diff --git a/src/test/java/io/papermc/paper/enchantments/EnchantmentRarityTest.java b/src/test/java/io/papermc/paper/enchantments/EnchantmentRarityTest.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..03a53ceb0dc3aaff7b5d10ec57f74d71be90ec3a
|
|
--- /dev/null
|
|
+++ b/src/test/java/io/papermc/paper/enchantments/EnchantmentRarityTest.java
|
|
@@ -0,0 +1,18 @@
|
|
+package io.papermc.paper.enchantments;
|
|
+
|
|
+import net.minecraft.world.item.enchantment.Enchantment.Rarity;
|
|
+import org.bukkit.craftbukkit.enchantments.CraftEnchantment;
|
|
+import org.junit.jupiter.api.Test;
|
|
+
|
|
+import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
+
|
|
+public class EnchantmentRarityTest {
|
|
+
|
|
+ @Test
|
|
+ public void test() {
|
|
+ for (Rarity nmsRarity : Rarity.values()) {
|
|
+ // Will throw exception if a bukkit counterpart is not found
|
|
+ CraftEnchantment.fromNMSRarity(nmsRarity);
|
|
+ }
|
|
+ }
|
|
+}
|
|
diff --git a/src/test/java/io/papermc/paper/entity/EntityCategoryTest.java b/src/test/java/io/papermc/paper/entity/EntityCategoryTest.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..4ee48ef89f0e31a7bda4b04453fca8177874f540
|
|
--- /dev/null
|
|
+++ b/src/test/java/io/papermc/paper/entity/EntityCategoryTest.java
|
|
@@ -0,0 +1,34 @@
|
|
+package io.papermc.paper.entity;
|
|
+
|
|
+import com.google.common.base.Joiner;
|
|
+import com.google.common.collect.Maps;
|
|
+import com.google.common.collect.Sets;
|
|
+import net.minecraft.world.entity.MobType;
|
|
+import org.bukkit.craftbukkit.entity.CraftLivingEntity;
|
|
+import org.bukkit.entity.EntityCategory;
|
|
+import org.junit.jupiter.api.Test;
|
|
+
|
|
+import java.lang.reflect.Field;
|
|
+import java.util.Map;
|
|
+import java.util.Set;
|
|
+
|
|
+import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
+
|
|
+public class EntityCategoryTest {
|
|
+
|
|
+ @Test
|
|
+ public void test() throws IllegalAccessException {
|
|
+
|
|
+ Map<MobType, String> enumMonsterTypeFieldMap = Maps.newHashMap();
|
|
+ for (Field field : MobType.class.getDeclaredFields()) {
|
|
+ if (field.getType() == MobType.class) {
|
|
+ enumMonsterTypeFieldMap.put( (MobType) field.get(null), field.getName());
|
|
+ }
|
|
+ }
|
|
+
|
|
+ for (EntityCategory entityCategory : EntityCategory.values()) {
|
|
+ enumMonsterTypeFieldMap.remove(CraftLivingEntity.fromBukkitEntityCategory(entityCategory));
|
|
+ }
|
|
+ assertTrue(enumMonsterTypeFieldMap.size() == 0, MobType.class.getName() + " instance(s): " + Joiner.on(", ").join(enumMonsterTypeFieldMap.values()) + " do not have bukkit equivalents");
|
|
+ }
|
|
+}
|