#1275: Add internal ItemType and BlockType, delegate Material methods to them
By: Jishuna <joshl5324@gmail.com> Also-by: Bjarne Koll <lynxplay101@gmail.com> Also-by: DerFrZocker <derrieple@gmail.com> Also-by: md_5 <git@md-5.net>
This commit is contained in:
@@ -8,6 +8,7 @@ import net.minecraft.world.level.block.BlockCake;
|
||||
import net.minecraft.world.level.block.BlockChest;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockType;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.block.data.type.Cake;
|
||||
import org.bukkit.block.data.type.Chest;
|
||||
@@ -21,7 +22,7 @@ public class BlockDataTest extends AbstractTestingBase {
|
||||
public void testParsing() {
|
||||
BlockData cakeTest = CraftBlockData.fromData(Blocks.CAKE.defaultBlockState().setValue(BlockCake.BITES, 3));
|
||||
|
||||
BlockData materialString = CraftBlockData.newData(Material.CAKE, "[bites=3]");
|
||||
BlockData materialString = CraftBlockData.newData(BlockType.CAKE, "[bites=3]");
|
||||
assertThat(materialString, is(cakeTest));
|
||||
|
||||
BlockData combined = CraftBlockData.newData(null, "cake[bites=3]");
|
||||
@@ -46,19 +47,14 @@ public class BlockDataTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void testDoubleMaterial() {
|
||||
assertThrows(IllegalArgumentException.class, () -> CraftBlockData.newData(Material.CAKE, "minecraft:cake[bites=3]"));
|
||||
assertThrows(IllegalArgumentException.class, () -> CraftBlockData.newData(BlockType.CAKE, "minecraft:cake[bites=3]"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMistake() {
|
||||
BlockData cakeTest = CraftBlockData.fromData(Blocks.CAKE.defaultBlockState().setValue(BlockCake.BITES, 3));
|
||||
|
||||
assertThrows(IllegalArgumentException.class, () -> CraftBlockData.newData(Material.CAKE, cakeTest.toString()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testItem() {
|
||||
assertThrows(IllegalArgumentException.class, () -> CraftBlockData.newData(Material.DIAMOND_AXE, null));
|
||||
assertThrows(IllegalArgumentException.class, () -> CraftBlockData.newData(BlockType.CAKE, cakeTest.toString()));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.bukkit.craftbukkit.block;
|
||||
|
||||
import static org.bukkit.support.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import java.lang.reflect.Field;
|
||||
import org.bukkit.block.BlockType;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class BlockTypeTest {
|
||||
|
||||
// Ensures all BlockType constants have the correct generics
|
||||
@Test
|
||||
public void testBlockDataClasses() throws Exception {
|
||||
for (Field f : BlockType.class.getDeclaredFields()) {
|
||||
BlockType type = (BlockType) f.get(null);
|
||||
|
||||
Class<?> expected = type.getBlockDataClass();
|
||||
Class<?> actual = type.typed().createBlockData().getClass().getInterfaces()[0];
|
||||
assertThat(actual, is(expected));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import org.bukkit.FireworkEffect.Type;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.MusicInstrument;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.attribute.AttributeModifier;
|
||||
import org.bukkit.block.banner.Pattern;
|
||||
@@ -35,6 +36,7 @@ import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Axolotl;
|
||||
import org.bukkit.entity.TropicalFish;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.ItemType;
|
||||
import org.bukkit.inventory.meta.ArmorMeta;
|
||||
import org.bukkit.inventory.meta.AxolotlBucketMeta;
|
||||
import org.bukkit.inventory.meta.BannerMeta;
|
||||
@@ -452,6 +454,29 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
assertThat(itemMeta.getBlockData(Material.CHEST), is(CraftBlockData.newData(null, "minecraft:chest[waterlogged=true]")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMetaClasses() {
|
||||
Registry.ITEM.forEach(itemType -> {
|
||||
if (itemType == ItemType.AIR) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemMeta meta = new ItemStack(itemType.asMaterial()).getItemMeta();
|
||||
Class<?> internal = meta == null ? CraftMetaItem.class : meta.getClass();
|
||||
Class<?>[] interfaces = internal.getInterfaces();
|
||||
Class<?> expected;
|
||||
if (interfaces.length > 0) {
|
||||
expected = interfaces[0];
|
||||
} else {
|
||||
expected = ItemMeta.class;
|
||||
}
|
||||
|
||||
// Currently the expected and actual for AIR are ItemMeta rather than null
|
||||
Class<?> actual = itemType.getItemMetaClass();
|
||||
assertThat(actual, is(expected));
|
||||
});
|
||||
}
|
||||
|
||||
private void downCastTest(final StackWrapper provider) {
|
||||
final String name = provider.toString();
|
||||
final ItemStack blank = new ItemStack(Material.STONE);
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
package org.bukkit.craftbukkit.inventory;
|
||||
|
||||
import static org.bukkit.support.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import java.lang.reflect.Field;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.ItemType;
|
||||
import org.bukkit.inventory.meta.ArmorMeta;
|
||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.trim.ArmorTrim;
|
||||
import org.bukkit.inventory.meta.trim.TrimMaterial;
|
||||
import org.bukkit.inventory.meta.trim.TrimPattern;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class ItemTypeTest extends AbstractTestingBase {
|
||||
|
||||
// Ensures all ItemType constants have the correct generics
|
||||
@Test
|
||||
public void testItemMetaClasses() throws Exception {
|
||||
for (Field f : ItemType.class.getDeclaredFields()) {
|
||||
ItemType type = (ItemType) f.get(null);
|
||||
if (type == ItemType.AIR) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemMeta meta = new ItemStack(type.asMaterial()).getItemMeta();
|
||||
Class<?> internal = meta == null ? CraftMetaItem.class : meta.getClass();
|
||||
Class<?>[] interfaces = internal.getInterfaces();
|
||||
Class<?> expected;
|
||||
if (interfaces.length > 0) {
|
||||
expected = interfaces[0];
|
||||
} else {
|
||||
expected = ItemMeta.class;
|
||||
}
|
||||
|
||||
Class<?> actual = type.getItemMetaClass();
|
||||
assertThat(actual, is(expected));
|
||||
}
|
||||
|
||||
assertThrows(UnsupportedOperationException.class, () -> ItemType.AIR.getItemMetaClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStaticItemTypeUsage() {
|
||||
final ItemStack itemStack = ItemType.DIAMOND.createItemStack();
|
||||
Assertions.assertEquals(itemStack.getType(), Material.DIAMOND);
|
||||
Assertions.assertEquals(itemStack.getType().asItemType(), ItemType.DIAMOND);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStaticItemTypeUsageBuilder() {
|
||||
final ItemStack armor = ItemType.DIAMOND_LEGGINGS.createItemStack(a ->
|
||||
a.setTrim(new ArmorTrim(TrimMaterial.EMERALD, TrimPattern.COAST))
|
||||
);
|
||||
|
||||
final ItemMeta itemMeta = armor.getItemMeta();
|
||||
Assertions.assertInstanceOf(ArmorMeta.class, itemMeta);
|
||||
|
||||
final ArmorTrim trim = ((ArmorMeta) itemMeta).getTrim();
|
||||
Assertions.assertEquals(trim.getMaterial(), TrimMaterial.EMERALD);
|
||||
Assertions.assertEquals(trim.getPattern(), TrimPattern.COAST);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRetyping() {
|
||||
final ItemType itemType = ItemType.ENCHANTED_BOOK;
|
||||
Assertions.assertDoesNotThrow(() -> itemType.typed());
|
||||
Assertions.assertDoesNotThrow(() -> itemType.typed(EnchantmentStorageMeta.class));
|
||||
Assertions.assertThrows(IllegalArgumentException.class, () -> itemType.typed(ArmorMeta.class));
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,9 @@ public class RegistryConversionTest extends AbstractTestingBase {
|
||||
private static final String MINECRAFT_TO_BUKKIT = "minecraftToBukkit";
|
||||
private static final String BUKKIT_TO_MINECRAFT = "bukkitToMinecraft";
|
||||
|
||||
private static final String MINECRAFT_TO_BUKKIT_NEW = "minecraftToBukkitNew";
|
||||
private static final String BUKKIT_TO_MINECRAFT_NEW = "bukkitToMinecraftNew";
|
||||
|
||||
private static final Map<Class<? extends Keyed>, Method> MINECRAFT_TO_BUKKIT_METHODS = new HashMap<>();
|
||||
private static final Map<Class<? extends Keyed>, Method> BUKKIT_TO_MINECRAFT_METHODS = new HashMap<>();
|
||||
|
||||
@@ -61,17 +64,18 @@ public class RegistryConversionTest extends AbstractTestingBase {
|
||||
@Order(2)
|
||||
@RegistriesTest
|
||||
public void testMinecraftToBukkitPresent(Class<? extends Keyed> clazz, ResourceKey<IRegistry<?>> registryKey,
|
||||
Class<? extends Keyed> craftClazz, Class<?> minecraftClazz) {
|
||||
Class<? extends Keyed> craftClazz, Class<?> minecraftClazz, boolean newMethod) {
|
||||
String methodName = (newMethod) ? MINECRAFT_TO_BUKKIT_NEW : MINECRAFT_TO_BUKKIT;
|
||||
Method method = null;
|
||||
try {
|
||||
method = craftClazz.getDeclaredMethod(MINECRAFT_TO_BUKKIT, minecraftClazz);
|
||||
method = craftClazz.getDeclaredMethod(methodName, minecraftClazz);
|
||||
} catch (NoSuchMethodException e) {
|
||||
fail(String.format("""
|
||||
The class %s does not have a public static method to convert a minecraft value to a bukkit value.
|
||||
|
||||
Following method should be add which, returns the bukkit value based on the minecraft value.
|
||||
%s
|
||||
""", craftClazz, buildMinecraftToBukkitMethod(clazz, minecraftClazz)));
|
||||
""", craftClazz, buildMinecraftToBukkitMethod(clazz, methodName, minecraftClazz)));
|
||||
}
|
||||
|
||||
assertTrue(Modifier.isPublic(method.getModifiers()), String.format("""
|
||||
@@ -79,47 +83,48 @@ public class RegistryConversionTest extends AbstractTestingBase {
|
||||
|
||||
The method should be made public, method structure:
|
||||
%s
|
||||
""", MINECRAFT_TO_BUKKIT, craftClazz, buildMinecraftToBukkitMethod(clazz, minecraftClazz)));
|
||||
""", methodName, craftClazz, buildMinecraftToBukkitMethod(clazz, methodName, minecraftClazz)));
|
||||
|
||||
assertTrue(Modifier.isStatic(method.getModifiers()), String.format("""
|
||||
The method %s in class %s is not static.
|
||||
|
||||
The method should be made static, method structure:
|
||||
%s
|
||||
""", MINECRAFT_TO_BUKKIT, craftClazz, buildMinecraftToBukkitMethod(clazz, minecraftClazz)));
|
||||
""", methodName, craftClazz, buildMinecraftToBukkitMethod(clazz, methodName, minecraftClazz)));
|
||||
|
||||
assertSame(clazz, method.getReturnType(), String.format("""
|
||||
The method %s in class %s has the wrong return value.
|
||||
|
||||
The method should have the correct return value, method structure:
|
||||
%s
|
||||
""", MINECRAFT_TO_BUKKIT, craftClazz, buildMinecraftToBukkitMethod(clazz, minecraftClazz)));
|
||||
""", methodName, craftClazz, buildMinecraftToBukkitMethod(clazz, methodName, minecraftClazz)));
|
||||
|
||||
MINECRAFT_TO_BUKKIT_METHODS.put(clazz, method);
|
||||
}
|
||||
|
||||
private String buildMinecraftToBukkitMethod(Class<? extends Keyed> clazz, Class<?> minecraftClazz) {
|
||||
private String buildMinecraftToBukkitMethod(Class<? extends Keyed> clazz, String methodName, Class<?> minecraftClazz) {
|
||||
return String.format("""
|
||||
public static %s minecraftToBukkit(%s minecraft) {
|
||||
public static %s %s(%s minecraft) {
|
||||
[...]
|
||||
}
|
||||
""", clazz.getSimpleName(), minecraftClazz.getName());
|
||||
""", clazz.getSimpleName(), methodName, minecraftClazz.getName());
|
||||
}
|
||||
|
||||
@Order(2)
|
||||
@RegistriesTest
|
||||
public void testBukkitToMinecraftPresent(Class<? extends Keyed> clazz, ResourceKey<IRegistry<?>> registryKey,
|
||||
Class<? extends Keyed> craftClazz, Class<?> minecraftClazz) {
|
||||
Class<? extends Keyed> craftClazz, Class<?> minecraftClazz, boolean newMethod) {
|
||||
String methodName = (newMethod) ? BUKKIT_TO_MINECRAFT_NEW : BUKKIT_TO_MINECRAFT;
|
||||
Method method = null;
|
||||
try {
|
||||
method = craftClazz.getDeclaredMethod(BUKKIT_TO_MINECRAFT, clazz);
|
||||
method = craftClazz.getDeclaredMethod(methodName, clazz);
|
||||
} catch (NoSuchMethodException e) {
|
||||
fail(String.format("""
|
||||
The class %s does not have a public static method to convert a bukkit value to a minecraft value.
|
||||
|
||||
Following method should be add which, returns the minecraft value based on the bukkit value.
|
||||
%s
|
||||
""", craftClazz, buildBukkitToMinecraftMethod(clazz, minecraftClazz)));
|
||||
""", craftClazz, buildBukkitToMinecraftMethod(clazz, methodName, minecraftClazz)));
|
||||
}
|
||||
|
||||
assertTrue(Modifier.isPublic(method.getModifiers()), String.format("""
|
||||
@@ -127,31 +132,31 @@ public class RegistryConversionTest extends AbstractTestingBase {
|
||||
|
||||
The method should be made public, method structure:
|
||||
%s
|
||||
""", BUKKIT_TO_MINECRAFT, craftClazz, buildBukkitToMinecraftMethod(clazz, minecraftClazz)));
|
||||
""", methodName, craftClazz, buildBukkitToMinecraftMethod(clazz, methodName, minecraftClazz)));
|
||||
|
||||
assertTrue(Modifier.isStatic(method.getModifiers()), String.format("""
|
||||
The method %s in class %s is not static.
|
||||
|
||||
The method should be made static, method structure:
|
||||
%s
|
||||
""", BUKKIT_TO_MINECRAFT, craftClazz, buildBukkitToMinecraftMethod(clazz, minecraftClazz)));
|
||||
""", methodName, craftClazz, buildBukkitToMinecraftMethod(clazz, methodName, minecraftClazz)));
|
||||
|
||||
assertSame(minecraftClazz, method.getReturnType(), String.format("""
|
||||
The method %s in class %s has the wrong return value.
|
||||
|
||||
The method should have the correct return value, method structure:
|
||||
%s
|
||||
""", BUKKIT_TO_MINECRAFT, craftClazz, buildBukkitToMinecraftMethod(clazz, minecraftClazz)));
|
||||
""", methodName, craftClazz, buildBukkitToMinecraftMethod(clazz, methodName, minecraftClazz)));
|
||||
|
||||
BUKKIT_TO_MINECRAFT_METHODS.put(clazz, method);
|
||||
}
|
||||
|
||||
private String buildBukkitToMinecraftMethod(Class<? extends Keyed> clazz, Class<?> minecraftClazz) {
|
||||
private String buildBukkitToMinecraftMethod(Class<? extends Keyed> clazz, String methodName, Class<?> minecraftClazz) {
|
||||
return String.format("""
|
||||
public static %s bukkitToMinecraft(%s bukkit) {
|
||||
public static %s %s(%s bukkit) {
|
||||
[...]
|
||||
}
|
||||
""", minecraftClazz.getName(), clazz.getSimpleName());
|
||||
""", minecraftClazz.getName(), methodName, clazz.getSimpleName());
|
||||
}
|
||||
|
||||
@Order(2)
|
||||
|
||||
@@ -40,7 +40,7 @@ public final class DummyServer {
|
||||
|
||||
when(instance.getUnsafe()).then(mock -> CraftMagicNumbers.INSTANCE);
|
||||
|
||||
when(instance.createBlockData(any(Material.class))).then(mock -> CraftBlockData.newData(mock.getArgument(0), null));
|
||||
when(instance.createBlockData(any(Material.class))).then(mock -> CraftBlockData.newData(((Material) mock.getArgument(0)).asBlockType(), null));
|
||||
|
||||
when(instance.getLootTable(any())).then(mock -> new CraftLootTable(mock.getArgument(0),
|
||||
AbstractTestingBase.DATA_PACK.fullRegistries().getLootTable(ResourceKey.create(Registries.LOOT_TABLE, CraftNamespacedKey.toMinecraft(mock.getArgument(0))))));
|
||||
|
||||
@@ -4,18 +4,22 @@ import com.google.common.collect.Lists;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.world.effect.MobEffectList;
|
||||
import net.minecraft.world.entity.animal.WolfVariant;
|
||||
import net.minecraft.world.item.Instrument;
|
||||
import org.bukkit.GameEvent;
|
||||
import org.bukkit.MusicInstrument;
|
||||
import org.bukkit.block.BlockType;
|
||||
import org.bukkit.craftbukkit.CraftGameEvent;
|
||||
import org.bukkit.craftbukkit.CraftMusicInstrument;
|
||||
import org.bukkit.craftbukkit.block.CraftBlockType;
|
||||
import org.bukkit.craftbukkit.damage.CraftDamageType;
|
||||
import org.bukkit.craftbukkit.enchantments.CraftEnchantment;
|
||||
import org.bukkit.craftbukkit.entity.CraftWolf;
|
||||
import org.bukkit.craftbukkit.generator.structure.CraftStructure;
|
||||
import org.bukkit.craftbukkit.generator.structure.CraftStructureType;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemType;
|
||||
import org.bukkit.craftbukkit.inventory.trim.CraftTrimMaterial;
|
||||
import org.bukkit.craftbukkit.inventory.trim.CraftTrimPattern;
|
||||
import org.bukkit.craftbukkit.potion.CraftPotionEffectType;
|
||||
@@ -24,6 +28,7 @@ import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.generator.structure.Structure;
|
||||
import org.bukkit.generator.structure.StructureType;
|
||||
import org.bukkit.inventory.ItemType;
|
||||
import org.bukkit.inventory.meta.trim.TrimMaterial;
|
||||
import org.bukkit.inventory.meta.trim.TrimPattern;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
@@ -37,16 +42,27 @@ public class RegistriesArgumentProvider implements ArgumentsProvider {
|
||||
|
||||
static {
|
||||
// Order: Bukkit class, Minecraft Registry key, CraftBukkit class, Minecraft class
|
||||
DATA.add(Arguments.of(Enchantment.class, Registries.ENCHANTMENT, CraftEnchantment.class, net.minecraft.world.item.enchantment.Enchantment.class));
|
||||
DATA.add(Arguments.of(GameEvent.class, Registries.GAME_EVENT, CraftGameEvent.class, net.minecraft.world.level.gameevent.GameEvent.class));
|
||||
DATA.add(Arguments.of(MusicInstrument.class, Registries.INSTRUMENT, CraftMusicInstrument.class, Instrument.class));
|
||||
DATA.add(Arguments.of(PotionEffectType.class, Registries.MOB_EFFECT, CraftPotionEffectType.class, MobEffectList.class));
|
||||
DATA.add(Arguments.of(Structure.class, Registries.STRUCTURE, CraftStructure.class, net.minecraft.world.level.levelgen.structure.Structure.class));
|
||||
DATA.add(Arguments.of(StructureType.class, Registries.STRUCTURE_TYPE, CraftStructureType.class, net.minecraft.world.level.levelgen.structure.StructureType.class));
|
||||
DATA.add(Arguments.of(TrimMaterial.class, Registries.TRIM_MATERIAL, CraftTrimMaterial.class, net.minecraft.world.item.armortrim.TrimMaterial.class));
|
||||
DATA.add(Arguments.of(TrimPattern.class, Registries.TRIM_PATTERN, CraftTrimPattern.class, net.minecraft.world.item.armortrim.TrimPattern.class));
|
||||
DATA.add(Arguments.of(DamageType.class, Registries.DAMAGE_TYPE, CraftDamageType.class, net.minecraft.world.damagesource.DamageType.class));
|
||||
DATA.add(Arguments.of(Wolf.Variant.class, Registries.WOLF_VARIANT, CraftWolf.CraftVariant.class, WolfVariant.class));
|
||||
register(Enchantment.class, Registries.ENCHANTMENT, CraftEnchantment.class, net.minecraft.world.item.enchantment.Enchantment.class);
|
||||
register(GameEvent.class, Registries.GAME_EVENT, CraftGameEvent.class, net.minecraft.world.level.gameevent.GameEvent.class);
|
||||
register(MusicInstrument.class, Registries.INSTRUMENT, CraftMusicInstrument.class, Instrument.class);
|
||||
register(PotionEffectType.class, Registries.MOB_EFFECT, CraftPotionEffectType.class, MobEffectList.class);
|
||||
register(Structure.class, Registries.STRUCTURE, CraftStructure.class, net.minecraft.world.level.levelgen.structure.Structure.class);
|
||||
register(StructureType.class, Registries.STRUCTURE_TYPE, CraftStructureType.class, net.minecraft.world.level.levelgen.structure.StructureType.class);
|
||||
register(TrimMaterial.class, Registries.TRIM_MATERIAL, CraftTrimMaterial.class, net.minecraft.world.item.armortrim.TrimMaterial.class);
|
||||
register(TrimPattern.class, Registries.TRIM_PATTERN, CraftTrimPattern.class, net.minecraft.world.item.armortrim.TrimPattern.class);
|
||||
register(DamageType.class, Registries.DAMAGE_TYPE, CraftDamageType.class, net.minecraft.world.damagesource.DamageType.class);
|
||||
register(Wolf.Variant.class, Registries.WOLF_VARIANT, CraftWolf.CraftVariant.class, WolfVariant.class);
|
||||
register(ItemType.class, Registries.ITEM, CraftItemType.class, net.minecraft.world.item.Item.class, true);
|
||||
register(BlockType.class, Registries.BLOCK, CraftBlockType.class, net.minecraft.world.level.block.Block.class, true);
|
||||
|
||||
}
|
||||
|
||||
private static void register(Class bukkit, ResourceKey registry, Class craft, Class minecraft) {
|
||||
register(bukkit, registry, craft, minecraft, false);
|
||||
}
|
||||
|
||||
private static void register(Class bukkit, ResourceKey registry, Class craft, Class minecraft, boolean newClass) {
|
||||
DATA.add(Arguments.of(bukkit, registry, craft, minecraft, newClass));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user