SPIGOT-6026: Pull PotionEffectType and Enchantment from registry
By: DerFrZocker <derrieple@gmail.com>
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
package org.bukkit.craftbukkit.enchantments;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import net.minecraft.core.IRegistry;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.world.item.enchantment.EnchantmentBinding;
|
||||
import net.minecraft.world.item.enchantment.EnchantmentVanishing;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.craftbukkit.CraftRegistry;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
@@ -12,171 +17,133 @@ import org.bukkit.enchantments.EnchantmentWrapper;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class CraftEnchantment extends Enchantment {
|
||||
private final net.minecraft.world.item.enchantment.Enchantment target;
|
||||
|
||||
public CraftEnchantment(net.minecraft.world.item.enchantment.Enchantment target) {
|
||||
super(CraftNamespacedKey.fromMinecraft(BuiltInRegistries.ENCHANTMENT.getKey(target)));
|
||||
this.target = target;
|
||||
public static Enchantment minecraftToBukkit(net.minecraft.world.item.enchantment.Enchantment minecraft) {
|
||||
Preconditions.checkArgument(minecraft != null);
|
||||
|
||||
IRegistry<net.minecraft.world.item.enchantment.Enchantment> registry = CraftRegistry.getMinecraftRegistry(Registries.ENCHANTMENT);
|
||||
Enchantment bukkit = Registry.ENCHANTMENT.get(CraftNamespacedKey.fromMinecraft(registry.getResourceKey(minecraft).orElseThrow().location()));
|
||||
|
||||
Preconditions.checkArgument(bukkit != null);
|
||||
|
||||
return bukkit;
|
||||
}
|
||||
|
||||
public static net.minecraft.world.item.enchantment.Enchantment bukkitToMinecraft(Enchantment bukkit) {
|
||||
Preconditions.checkArgument(bukkit != null);
|
||||
|
||||
return ((CraftEnchantment) bukkit).getHandle();
|
||||
}
|
||||
|
||||
private final NamespacedKey key;
|
||||
private final net.minecraft.world.item.enchantment.Enchantment handle;
|
||||
private final int id;
|
||||
|
||||
public CraftEnchantment(NamespacedKey key, net.minecraft.world.item.enchantment.Enchantment handle) {
|
||||
this.key = key;
|
||||
this.handle = handle;
|
||||
this.id = BuiltInRegistries.ENCHANTMENT.getId(handle);
|
||||
}
|
||||
|
||||
public net.minecraft.world.item.enchantment.Enchantment getHandle() {
|
||||
return handle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NamespacedKey getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxLevel() {
|
||||
return target.getMaxLevel();
|
||||
return handle.getMaxLevel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStartLevel() {
|
||||
return target.getMinLevel();
|
||||
return handle.getMinLevel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnchantmentTarget getItemTarget() {
|
||||
switch (target.category) {
|
||||
case ARMOR:
|
||||
return EnchantmentTarget.ARMOR;
|
||||
case ARMOR_FEET:
|
||||
return EnchantmentTarget.ARMOR_FEET;
|
||||
case ARMOR_HEAD:
|
||||
return EnchantmentTarget.ARMOR_HEAD;
|
||||
case ARMOR_LEGS:
|
||||
return EnchantmentTarget.ARMOR_LEGS;
|
||||
case ARMOR_CHEST:
|
||||
return EnchantmentTarget.ARMOR_TORSO;
|
||||
case DIGGER:
|
||||
return EnchantmentTarget.TOOL;
|
||||
case WEAPON:
|
||||
return EnchantmentTarget.WEAPON;
|
||||
case BOW:
|
||||
return EnchantmentTarget.BOW;
|
||||
case FISHING_ROD:
|
||||
return EnchantmentTarget.FISHING_ROD;
|
||||
case BREAKABLE:
|
||||
return EnchantmentTarget.BREAKABLE;
|
||||
case WEARABLE:
|
||||
return EnchantmentTarget.WEARABLE;
|
||||
case TRIDENT:
|
||||
return EnchantmentTarget.TRIDENT;
|
||||
case CROSSBOW:
|
||||
return EnchantmentTarget.CROSSBOW;
|
||||
case VANISHABLE:
|
||||
return EnchantmentTarget.VANISHABLE;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
return switch (handle.category) {
|
||||
case ARMOR -> EnchantmentTarget.ARMOR;
|
||||
case ARMOR_FEET -> EnchantmentTarget.ARMOR_FEET;
|
||||
case ARMOR_HEAD -> EnchantmentTarget.ARMOR_HEAD;
|
||||
case ARMOR_LEGS -> EnchantmentTarget.ARMOR_LEGS;
|
||||
case ARMOR_CHEST -> EnchantmentTarget.ARMOR_TORSO;
|
||||
case DIGGER -> EnchantmentTarget.TOOL;
|
||||
case WEAPON -> EnchantmentTarget.WEAPON;
|
||||
case BOW -> EnchantmentTarget.BOW;
|
||||
case FISHING_ROD -> EnchantmentTarget.FISHING_ROD;
|
||||
case BREAKABLE -> EnchantmentTarget.BREAKABLE;
|
||||
case WEARABLE -> EnchantmentTarget.WEARABLE;
|
||||
case TRIDENT -> EnchantmentTarget.TRIDENT;
|
||||
case CROSSBOW -> EnchantmentTarget.CROSSBOW;
|
||||
case VANISHABLE -> EnchantmentTarget.VANISHABLE;
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTreasure() {
|
||||
return target.isTreasureOnly();
|
||||
return handle.isTreasureOnly();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCursed() {
|
||||
return target instanceof EnchantmentBinding || target instanceof EnchantmentVanishing;
|
||||
return handle instanceof EnchantmentBinding || handle instanceof EnchantmentVanishing;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canEnchantItem(ItemStack item) {
|
||||
return target.canEnchant(CraftItemStack.asNMSCopy(item));
|
||||
return handle.canEnchant(CraftItemStack.asNMSCopy(item));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
// PAIL: migration paths
|
||||
switch (BuiltInRegistries.ENCHANTMENT.getId(target)) {
|
||||
case 0:
|
||||
return "PROTECTION_ENVIRONMENTAL";
|
||||
case 1:
|
||||
return "PROTECTION_FIRE";
|
||||
case 2:
|
||||
return "PROTECTION_FALL";
|
||||
case 3:
|
||||
return "PROTECTION_EXPLOSIONS";
|
||||
case 4:
|
||||
return "PROTECTION_PROJECTILE";
|
||||
case 5:
|
||||
return "OXYGEN";
|
||||
case 6:
|
||||
return "WATER_WORKER";
|
||||
case 7:
|
||||
return "THORNS";
|
||||
case 8:
|
||||
return "DEPTH_STRIDER";
|
||||
case 9:
|
||||
return "FROST_WALKER";
|
||||
case 10:
|
||||
return "BINDING_CURSE";
|
||||
case 11:
|
||||
return "SOUL_SPEED";
|
||||
case 12:
|
||||
return "SWIFT_SNEAK";
|
||||
case 13:
|
||||
return "DAMAGE_ALL";
|
||||
case 14:
|
||||
return "DAMAGE_UNDEAD";
|
||||
case 15:
|
||||
return "DAMAGE_ARTHROPODS";
|
||||
case 16:
|
||||
return "KNOCKBACK";
|
||||
case 17:
|
||||
return "FIRE_ASPECT";
|
||||
case 18:
|
||||
return "LOOT_BONUS_MOBS";
|
||||
case 19:
|
||||
return "SWEEPING_EDGE";
|
||||
case 20:
|
||||
return "DIG_SPEED";
|
||||
case 21:
|
||||
return "SILK_TOUCH";
|
||||
case 22:
|
||||
return "DURABILITY";
|
||||
case 23:
|
||||
return "LOOT_BONUS_BLOCKS";
|
||||
case 24:
|
||||
return "ARROW_DAMAGE";
|
||||
case 25:
|
||||
return "ARROW_KNOCKBACK";
|
||||
case 26:
|
||||
return "ARROW_FIRE";
|
||||
case 27:
|
||||
return "ARROW_INFINITE";
|
||||
case 28:
|
||||
return "LUCK";
|
||||
case 29:
|
||||
return "LURE";
|
||||
case 30:
|
||||
return "LOYALTY";
|
||||
case 31:
|
||||
return "IMPALING";
|
||||
case 32:
|
||||
return "RIPTIDE";
|
||||
case 33:
|
||||
return "CHANNELING";
|
||||
case 34:
|
||||
return "MULTISHOT";
|
||||
case 35:
|
||||
return "QUICK_CHARGE";
|
||||
case 36:
|
||||
return "PIERCING";
|
||||
case 37:
|
||||
return "MENDING";
|
||||
case 38:
|
||||
return "VANISHING_CURSE";
|
||||
default:
|
||||
return "UNKNOWN_ENCHANT_" + BuiltInRegistries.ENCHANTMENT.getId(target);
|
||||
}
|
||||
}
|
||||
|
||||
public static net.minecraft.world.item.enchantment.Enchantment getRaw(Enchantment enchantment) {
|
||||
if (enchantment instanceof EnchantmentWrapper) {
|
||||
enchantment = ((EnchantmentWrapper) enchantment).getEnchantment();
|
||||
}
|
||||
|
||||
if (enchantment instanceof CraftEnchantment) {
|
||||
return ((CraftEnchantment) enchantment).target;
|
||||
}
|
||||
|
||||
return null;
|
||||
return switch (id) {
|
||||
case 0 -> "PROTECTION_ENVIRONMENTAL";
|
||||
case 1 -> "PROTECTION_FIRE";
|
||||
case 2 -> "PROTECTION_FALL";
|
||||
case 3 -> "PROTECTION_EXPLOSIONS";
|
||||
case 4 -> "PROTECTION_PROJECTILE";
|
||||
case 5 -> "OXYGEN";
|
||||
case 6 -> "WATER_WORKER";
|
||||
case 7 -> "THORNS";
|
||||
case 8 -> "DEPTH_STRIDER";
|
||||
case 9 -> "FROST_WALKER";
|
||||
case 10 -> "BINDING_CURSE";
|
||||
case 11 -> "SOUL_SPEED";
|
||||
case 12 -> "SWIFT_SNEAK";
|
||||
case 13 -> "DAMAGE_ALL";
|
||||
case 14 -> "DAMAGE_UNDEAD";
|
||||
case 15 -> "DAMAGE_ARTHROPODS";
|
||||
case 16 -> "KNOCKBACK";
|
||||
case 17 -> "FIRE_ASPECT";
|
||||
case 18 -> "LOOT_BONUS_MOBS";
|
||||
case 19 -> "SWEEPING_EDGE";
|
||||
case 20 -> "DIG_SPEED";
|
||||
case 21 -> "SILK_TOUCH";
|
||||
case 22 -> "DURABILITY";
|
||||
case 23 -> "LOOT_BONUS_BLOCKS";
|
||||
case 24 -> "ARROW_DAMAGE";
|
||||
case 25 -> "ARROW_KNOCKBACK";
|
||||
case 26 -> "ARROW_FIRE";
|
||||
case 27 -> "ARROW_INFINITE";
|
||||
case 28 -> "LUCK";
|
||||
case 29 -> "LURE";
|
||||
case 30 -> "LOYALTY";
|
||||
case 31 -> "IMPALING";
|
||||
case 32 -> "RIPTIDE";
|
||||
case 33 -> "CHANNELING";
|
||||
case 34 -> "MULTISHOT";
|
||||
case 35 -> "QUICK_CHARGE";
|
||||
case 36 -> "PIERCING";
|
||||
case 37 -> "MENDING";
|
||||
case 38 -> "VANISHING_CURSE";
|
||||
default -> getKey().toString();
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -188,10 +155,29 @@ public class CraftEnchantment extends Enchantment {
|
||||
return false;
|
||||
}
|
||||
CraftEnchantment ench = (CraftEnchantment) other;
|
||||
return !target.isCompatibleWith(ench.target);
|
||||
return !handle.isCompatibleWith(ench.getHandle());
|
||||
}
|
||||
|
||||
public net.minecraft.world.item.enchantment.Enchantment getHandle() {
|
||||
return target;
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (this == other) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(other instanceof CraftEnchantment)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return getKey().equals(((Enchantment) other).getKey());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return getKey().hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CraftEnchantment[" + getKey() + "]";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user