geforkt von Mirrors/Paper
2873869bb1
Signs no longer have a specific isEdiable state, the entire API in this regard needs updating/deprecation. The boolean field is completely gone, replaced by a uuid (which will need a new setEditingPlayer(UUID) method on the Sign interface), and the current upstream implementation of setEdiable simply flips the is_waxed state. This patch is hence not needed as it neither allows editing (which will be redone in a later patch) nor is required to copy the is_waxed boolean flag as it lives in the signs compound tag and is covered by applyTo.
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 57decf4156f176ebcc988478c17856cbc555c5e4..3d0ce0803e1da8a2681a3cb41096ac942ece54a1 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 37148ccf704dd8e5aa7d9ab100e6df142e822255..b38d72e921c4705cae72eb65113b36c87e4250fd 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
|
@@ -930,5 +930,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..62b56b5b43696b03fc72cac59f986d006edc3f76
|
|
--- /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.Test;
|
|
+
|
|
+import static org.junit.Assert.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..b9824b1f9491304ceb91be18f4f3b3068526bb33
|
|
--- /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.Test;
|
|
+
|
|
+import java.lang.reflect.Field;
|
|
+import java.util.Map;
|
|
+import java.util.Set;
|
|
+
|
|
+import static org.junit.Assert.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(MobType.class.getName() + " instance(s): " + Joiner.on(", ").join(enumMonsterTypeFieldMap.values()) + " do not have bukkit equivalents", enumMonsterTypeFieldMap.size() == 0);
|
|
+ }
|
|
+}
|