@@ -18,8 +18,6 @@ public class EnchantmentTest extends AbstractTestingBase {
|
||||
Enchantment bukkitById = Enchantment.getByKey(CraftNamespacedKey.fromMinecraft(key));
|
||||
|
||||
assertFalse(bukkitById.getName().startsWith("UNKNOWN"), "Unknown enchant name for " + key);
|
||||
|
||||
assertNotNull(bukkitById.getItemTarget(), "Unknown target for " + key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package org.bukkit;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import net.minecraft.resources.MinecraftKey;
|
||||
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import org.bukkit.craftbukkit.CraftLootTable;
|
||||
import org.bukkit.loot.LootTable;
|
||||
import org.bukkit.loot.LootTables;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
@@ -24,8 +24,8 @@ public class LootTablesTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void testNMS() {
|
||||
for (MinecraftKey key : net.minecraft.world.level.storage.loot.LootTables.all()) {
|
||||
NamespacedKey bukkitKey = CraftNamespacedKey.fromMinecraft(key);
|
||||
for (ResourceKey<net.minecraft.world.level.storage.loot.LootTable> key : net.minecraft.world.level.storage.loot.LootTables.all()) {
|
||||
NamespacedKey bukkitKey = CraftLootTable.minecraftToBukkitKey(key);
|
||||
LootTables lootTable = Registry.LOOT_TABLES.get(bukkitKey);
|
||||
|
||||
assertNotNull(lootTable, "Unknown LootTable " + key);
|
||||
|
||||
@@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.*;
|
||||
import com.mojang.serialization.DataResult;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Stream;
|
||||
import net.minecraft.core.particles.ColorParticleOption;
|
||||
import net.minecraft.core.particles.DustColorTransitionOptions;
|
||||
import net.minecraft.core.particles.ParticleParam;
|
||||
import net.minecraft.core.particles.ParticleParamBlock;
|
||||
@@ -27,6 +28,7 @@ import org.bukkit.craftbukkit.util.CraftNamespacedKey;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.joml.Vector3f;
|
||||
import org.joml.Vector4f;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.EnumSource;
|
||||
@@ -106,6 +108,11 @@ public class ParticleTest extends AbstractTestingBase {
|
||||
return;
|
||||
}
|
||||
|
||||
if (bukkit.getDataType().equals(Color.class)) {
|
||||
testColor(bukkit, minecraft);
|
||||
return;
|
||||
}
|
||||
|
||||
fail(String.format("""
|
||||
No test found for particle %s.
|
||||
Please add a test case for it here.
|
||||
@@ -169,7 +176,7 @@ public class ParticleTest extends AbstractTestingBase {
|
||||
Did something change in the implementation or minecraft?
|
||||
Expected: %s.
|
||||
Got: %s.
|
||||
""", bukkit.getKey(), expectedFrom, param.getColor())); // Print expected and got since we use assert true
|
||||
""", bukkit.getKey(), expectedFrom, param.getFromColor())); // Print expected and got since we use assert true
|
||||
|
||||
Vector3f expectedTo = new Vector3f(0.4196f, 0.6235294f, 0.7098f);
|
||||
assertTrue(expectedTo.equals(param.getToColor(), 0.001f), String.format("""
|
||||
@@ -177,7 +184,7 @@ public class ParticleTest extends AbstractTestingBase {
|
||||
Did something change in the implementation or minecraft?
|
||||
Expected: %s.
|
||||
Got: %s.
|
||||
""", bukkit.getKey(), expectedTo, param.getColor())); // Print expected and got since we use assert true
|
||||
""", bukkit.getKey(), expectedTo, param.getToColor())); // Print expected and got since we use assert true
|
||||
}
|
||||
|
||||
private <T extends ParticleParam> void testVibration(Particle bukkit, net.minecraft.core.particles.Particle<T> minecraft) {
|
||||
@@ -222,6 +229,20 @@ public class ParticleTest extends AbstractTestingBase {
|
||||
""", bukkit.getKey()));
|
||||
}
|
||||
|
||||
private <T extends ParticleParam> void testColor(Particle bukkit, net.minecraft.core.particles.Particle<T> minecraft) {
|
||||
Color color = Color.fromARGB(107, 236, 28, 36);
|
||||
ColorParticleOption param = createAndTest(bukkit, minecraft, color, ColorParticleOption.class);
|
||||
|
||||
Vector4f actual = new Vector4f(param.getAlpha(), param.getRed(), param.getGreen(), param.getBlue());
|
||||
Vector4f expected = new Vector4f(0.4196f, 0.92549f, 0.1098f, 0.14117647f);
|
||||
assertTrue(expected.equals(actual, 0.001f), String.format("""
|
||||
Dust transition to color for particle %s do not match.
|
||||
Did something change in the implementation or minecraft?
|
||||
Expected: %s.
|
||||
Got: %s.
|
||||
""", bukkit.getKey(), expected, actual)); // Print expected and got since we use assert true
|
||||
}
|
||||
|
||||
private <D extends ParticleParam, T extends ParticleParam> D createAndTest(Particle bukkit, net.minecraft.core.particles.Particle<T> minecraft, Object data, Class<D> paramClass) {
|
||||
@SuppressWarnings("unchecked")
|
||||
T particleParam = (T) assertDoesNotThrow(() -> CraftParticle.createParticleParam(bukkit, data), String.format("""
|
||||
@@ -231,14 +252,14 @@ public class ParticleTest extends AbstractTestingBase {
|
||||
Check in CraftParticle if the conversion is still correct.
|
||||
""", bukkit.getKey()));
|
||||
|
||||
DataResult<NBTBase> encoded = assertDoesNotThrow(() -> minecraft.codec().encodeStart(DynamicOpsNBT.INSTANCE, particleParam),
|
||||
DataResult<NBTBase> encoded = assertDoesNotThrow(() -> minecraft.codec().codec().encodeStart(DynamicOpsNBT.INSTANCE, particleParam),
|
||||
String.format("""
|
||||
Could not encoded particle param for particle %s.
|
||||
This can indicated, that the wrong particle param is created in CraftParticle.
|
||||
Particle param is of type %s.
|
||||
""", bukkit.getKey(), particleParam.getClass()));
|
||||
|
||||
Optional<DataResult.PartialResult<NBTBase>> encodeError = encoded.error();
|
||||
Optional<DataResult.Error<NBTBase>> encodeError = encoded.error();
|
||||
assertTrue(encodeError.isEmpty(), () -> String.format("""
|
||||
Could not encoded particle param for particle %s.
|
||||
This is possible because the wrong particle param is created in CraftParticle.
|
||||
@@ -253,9 +274,9 @@ public class ParticleTest extends AbstractTestingBase {
|
||||
Particle param is of type %s.
|
||||
""", bukkit.getKey(), particleParam.getClass()));
|
||||
|
||||
DataResult<T> decoded = minecraft.codec().parse(DynamicOpsNBT.INSTANCE, encodeResult.get());
|
||||
DataResult<T> decoded = minecraft.codec().codec().parse(DynamicOpsNBT.INSTANCE, encodeResult.get());
|
||||
|
||||
Optional<DataResult.PartialResult<T>> decodeError = decoded.error();
|
||||
Optional<DataResult.Error<T>> decodeError = decoded.error();
|
||||
assertTrue(decodeError.isEmpty(), () -> String.format("""
|
||||
Could not decoded particle param for particle %s.
|
||||
This is possible because the wrong particle param is created in CraftParticle.
|
||||
|
||||
@@ -5,6 +5,7 @@ import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import java.util.Map;
|
||||
import net.minecraft.core.BlockPosition;
|
||||
import net.minecraft.core.component.DataComponents;
|
||||
import net.minecraft.world.EnumHand;
|
||||
import net.minecraft.world.entity.EntityInsentient;
|
||||
import net.minecraft.world.entity.player.EntityHuman;
|
||||
@@ -66,7 +67,7 @@ public class PerMaterialTest extends AbstractTestingBase {
|
||||
if (material.isBlock()) {
|
||||
assertFalse(material.isEdible());
|
||||
} else {
|
||||
assertThat(material.isEdible(), is(CraftMagicNumbers.getItem(material).isEdible()));
|
||||
assertThat(material.isEdible(), is(CraftMagicNumbers.getItem(material).components().has(DataComponents.FOOD)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,7 +86,7 @@ public class PerMaterialTest extends AbstractTestingBase {
|
||||
assertThat((int) material.getMaxDurability(), is(0));
|
||||
} else if (material.isBlock()) {
|
||||
Item item = CraftMagicNumbers.getItem(material);
|
||||
assertThat((int) material.getMaxDurability(), is(item.getMaxDamage()));
|
||||
assertThat((int) material.getMaxDurability(), is(item.components().getOrDefault(DataComponents.MAX_DAMAGE, 0)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,9 +103,10 @@ public class PerMaterialTest extends AbstractTestingBase {
|
||||
assertThat(bukkit.getMaxStackSize(), is(MAX_AIR_STACK));
|
||||
assertThat(craft.getMaxStackSize(), is(MAX_AIR_STACK));
|
||||
} else {
|
||||
assertThat(material.getMaxStackSize(), is(CraftMagicNumbers.getItem(material).getMaxStackSize()));
|
||||
assertThat(bukkit.getMaxStackSize(), is(material.getMaxStackSize()));
|
||||
assertThat(craft.getMaxStackSize(), is(material.getMaxStackSize()));
|
||||
int max = CraftMagicNumbers.getItem(material).components().getOrDefault(DataComponents.MAX_STACK_SIZE, 64);
|
||||
assertThat(material.getMaxStackSize(), is(max));
|
||||
assertThat(bukkit.getMaxStackSize(), is(max));
|
||||
assertThat(craft.getMaxStackSize(), is(max));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,7 +177,7 @@ public class PerMaterialTest extends AbstractTestingBase {
|
||||
@EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
|
||||
public void usesDurability(Material material) {
|
||||
if (!material.isBlock()) {
|
||||
assertThat(EnchantmentTarget.BREAKABLE.includes(material), is(CraftMagicNumbers.getItem(material).canBeDepleted()));
|
||||
assertThat(EnchantmentTarget.BREAKABLE.includes(material), is(CraftMagicNumbers.getItem(material).components().getOrDefault(DataComponents.MAX_DAMAGE, 0) > 0));
|
||||
} else {
|
||||
assertFalse(EnchantmentTarget.BREAKABLE.includes(material));
|
||||
}
|
||||
@@ -185,7 +187,7 @@ public class PerMaterialTest extends AbstractTestingBase {
|
||||
@EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
|
||||
public void testDurability(Material material) {
|
||||
if (!material.isBlock()) {
|
||||
assertThat(material.getMaxDurability(), is((short) CraftMagicNumbers.getItem(material).getMaxDamage()));
|
||||
assertThat(material.getMaxDurability(), is((short) (int) CraftMagicNumbers.getItem(material).components().getOrDefault(DataComponents.MAX_DAMAGE, 0)));
|
||||
} else {
|
||||
assertThat(material.getMaxDurability(), is((short) 0));
|
||||
}
|
||||
@@ -225,15 +227,36 @@ public class PerMaterialTest extends AbstractTestingBase {
|
||||
@EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
|
||||
public void testInteractable(Material material) throws ReflectiveOperationException {
|
||||
if (material.isBlock()) {
|
||||
Class<?> clazz = CraftMagicNumbers.getBlock(material).getClass();
|
||||
|
||||
boolean hasMethod = hasMethod(clazz, "useWithoutItem", IBlockData.class, net.minecraft.world.level.World.class, BlockPosition.class, EntityHuman.class, MovingObjectPositionBlock.class)
|
||||
|| hasMethod(clazz, "useItemOn", net.minecraft.world.item.ItemStack.class, IBlockData.class, net.minecraft.world.level.World.class, BlockPosition.class, EntityHuman.class, EnumHand.class, MovingObjectPositionBlock.class);
|
||||
|
||||
if (!hasMethod && clazz.getSuperclass() != BlockBase.class) {
|
||||
clazz = clazz.getSuperclass();
|
||||
|
||||
hasMethod = hasMethod(clazz, "useWithoutItem", IBlockData.class, net.minecraft.world.level.World.class, BlockPosition.class, EntityHuman.class, MovingObjectPositionBlock.class)
|
||||
|| hasMethod(clazz, "useItemOn", net.minecraft.world.item.ItemStack.class, IBlockData.class, net.minecraft.world.level.World.class, BlockPosition.class, EntityHuman.class, EnumHand.class, MovingObjectPositionBlock.class);
|
||||
}
|
||||
|
||||
assertThat(material.isInteractable(),
|
||||
is(!CraftMagicNumbers.getBlock(material).getClass()
|
||||
.getMethod("use", IBlockData.class, net.minecraft.world.level.World.class, BlockPosition.class, EntityHuman.class, EnumHand.class, MovingObjectPositionBlock.class)
|
||||
.getDeclaringClass().equals(BlockBase.class)));
|
||||
is(hasMethod));
|
||||
} else {
|
||||
assertFalse(material.isInteractable());
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasMethod(Class<?> clazz, String methodName, Class<?>... params) {
|
||||
boolean hasMethod;
|
||||
try {
|
||||
hasMethod = clazz.getDeclaredMethod(methodName, params) != null;
|
||||
} catch (NoSuchMethodException ex) {
|
||||
hasMethod = false;
|
||||
}
|
||||
|
||||
return hasMethod;
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@EnumSource(value = Material.class, names = "LEGACY_.*", mode = EnumSource.Mode.MATCH_NONE)
|
||||
public void testBlockHardness(Material material) {
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package org.bukkit.block.banner;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.core.IRegistry;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.world.level.block.entity.EnumBannerPatternType;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -12,26 +15,27 @@ public class PatternTypeTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void testToBukkit() {
|
||||
for (EnumBannerPatternType nms : BuiltInRegistries.BANNER_PATTERN) {
|
||||
PatternType bukkit = PatternType.getByIdentifier(nms.getHashname());
|
||||
for (EnumBannerPatternType nms : MinecraftServer.getDefaultRegistryAccess().registryOrThrow(Registries.BANNER_PATTERN)) {
|
||||
PatternType bukkit = Registry.BANNER_PATTERN.get(CraftNamespacedKey.fromMinecraft(nms.assetId()));
|
||||
|
||||
assertNotNull(bukkit, "No Bukkit banner for " + nms + " " + nms.getHashname());
|
||||
assertNotNull(bukkit, "No Bukkit banner for " + nms + " " + nms.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testToNMS() {
|
||||
IRegistry<EnumBannerPatternType> registry = MinecraftServer.getDefaultRegistryAccess().registryOrThrow(Registries.BANNER_PATTERN);
|
||||
for (PatternType bukkit : PatternType.values()) {
|
||||
EnumBannerPatternType found = null;
|
||||
for (EnumBannerPatternType nms : BuiltInRegistries.BANNER_PATTERN) {
|
||||
NamespacedKey nmsKey = CraftNamespacedKey.fromMinecraft(BuiltInRegistries.BANNER_PATTERN.getKey(nms));
|
||||
if (bukkit.getIdentifier().equals(nms.getHashname()) && bukkit.getKey().equals(nmsKey)) {
|
||||
for (EnumBannerPatternType nms : registry) {
|
||||
NamespacedKey nmsKey = CraftNamespacedKey.fromMinecraft(registry.getKey(nms));
|
||||
if (bukkit.getKey().equals(nmsKey)) {
|
||||
found = nms;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
assertNotNull(found, "No NMS banner for " + bukkit + " " + bukkit.getIdentifier());
|
||||
assertNotNull(found, "No NMS banner for " + bukkit + " " + bukkit.getKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.bukkit.craftbukkit.attribute;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.world.entity.ai.attributes.AttributeBase;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
@@ -21,7 +22,7 @@ public class AttributeTest extends AbstractTestingBase {
|
||||
@Test
|
||||
public void testToNMS() {
|
||||
for (Attribute attribute : Attribute.values()) {
|
||||
AttributeBase nms = CraftAttribute.bukkitToMinecraft(attribute);
|
||||
Holder<AttributeBase> nms = CraftAttribute.bukkitToMinecraftHolder(attribute);
|
||||
|
||||
assertNotNull(nms, attribute.name());
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.bukkit.entity.AbstractArrow;
|
||||
import org.bukkit.entity.AbstractHorse;
|
||||
import org.bukkit.entity.AbstractSkeleton;
|
||||
import org.bukkit.entity.AbstractVillager;
|
||||
import org.bukkit.entity.AbstractWindCharge;
|
||||
import org.bukkit.entity.Ageable;
|
||||
import org.bukkit.entity.Ambient;
|
||||
import org.bukkit.entity.Animals;
|
||||
@@ -72,6 +73,7 @@ public class EntityTypesTest extends AbstractTestingBase {
|
||||
AbstractHorse.class,
|
||||
AbstractSkeleton.class,
|
||||
AbstractVillager.class,
|
||||
AbstractWindCharge.class,
|
||||
Ageable.class,
|
||||
Ambient.class,
|
||||
Animals.class,
|
||||
|
||||
@@ -6,8 +6,6 @@ import java.lang.reflect.Array;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagString;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
@@ -94,10 +92,10 @@ public class DeprecatedItemMetaCustomValueTest extends AbstractTestingBase {
|
||||
public void testNBTTagStoring() {
|
||||
CraftMetaItem itemMeta = createComplexItemMeta();
|
||||
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
CraftMetaItem.Applicator compound = new CraftMetaItem.Applicator();
|
||||
itemMeta.applyToItem(compound);
|
||||
|
||||
assertEquals(itemMeta, new CraftMetaItem(compound));
|
||||
assertEquals(itemMeta, new CraftMetaItem(compound.build()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -149,7 +147,6 @@ public class DeprecatedItemMetaCustomValueTest extends AbstractTestingBase {
|
||||
|
||||
private CraftMetaItem createComplexItemMeta() {
|
||||
CraftMetaItem itemMeta = (CraftMetaItem) createNewItemMeta();
|
||||
itemMeta.unhandledTags.put("unhandled-test", NBTTagString.valueOf("test"));
|
||||
itemMeta.setDisplayName("Item Display Name");
|
||||
|
||||
itemMeta.getCustomTagContainer().setCustomTag(requestKey("custom-long"), ItemTagType.LONG, 4L); //Add random primitive values
|
||||
|
||||
@@ -57,7 +57,6 @@ import org.bukkit.inventory.meta.TropicalFishBucketMeta;
|
||||
import org.bukkit.inventory.meta.trim.ArmorTrim;
|
||||
import org.bukkit.inventory.meta.trim.TrimMaterial;
|
||||
import org.bukkit.inventory.meta.trim.TrimPattern;
|
||||
import org.bukkit.potion.PotionData;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.potion.PotionType;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
@@ -276,7 +275,7 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
new StackProvider(Material.POTION) {
|
||||
@Override ItemStack operate(final ItemStack cleanStack) {
|
||||
final PotionMeta meta = (PotionMeta) cleanStack.getItemMeta();
|
||||
meta.setBasePotionData(new PotionData(PotionType.UNCRAFTABLE, false, false));
|
||||
meta.setBasePotionType(PotionType.WATER);
|
||||
meta.addCustomEffect(PotionEffectType.CONFUSION.createEffect(1, 1), false);
|
||||
cleanStack.setItemMeta(meta);
|
||||
return cleanStack;
|
||||
@@ -309,7 +308,6 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
new StackProvider(Material.WHITE_BANNER) {
|
||||
@Override ItemStack operate(ItemStack cleanStack) {
|
||||
final BannerMeta meta = (BannerMeta) cleanStack.getItemMeta();
|
||||
meta.setBaseColor(DyeColor.CYAN);
|
||||
meta.addPattern(new Pattern(DyeColor.WHITE, PatternType.BRICKS));
|
||||
cleanStack.setItemMeta(meta);
|
||||
return cleanStack;
|
||||
@@ -388,7 +386,7 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
new StackProvider(Material.COMPASS) {
|
||||
@Override ItemStack operate(ItemStack cleanStack) {
|
||||
final CraftMetaCompass meta = ((CraftMetaCompass) cleanStack.getItemMeta());
|
||||
meta.setLodestoneTracked(true);
|
||||
meta.setLodestoneTracked(false);
|
||||
cleanStack.setItemMeta(meta);
|
||||
return cleanStack;
|
||||
}
|
||||
@@ -408,6 +406,14 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
cleanStack.setItemMeta(meta);
|
||||
return cleanStack;
|
||||
}
|
||||
},
|
||||
new StackProvider(Material.OMINOUS_BOTTLE) {
|
||||
@Override ItemStack operate(ItemStack cleanStack) {
|
||||
final CraftMetaOminousBottle meta = (CraftMetaOminousBottle) cleanStack.getItemMeta();
|
||||
meta.setAmplifier(3);
|
||||
cleanStack.setItemMeta(meta);
|
||||
return cleanStack;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package org.bukkit.craftbukkit.inventory;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.lang.reflect.Array;
|
||||
@@ -13,8 +11,7 @@ import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.stream.Stream;
|
||||
import net.minecraft.nbt.NBTCompressedStreamTools;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.core.component.DataComponentPatch;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
@@ -129,10 +126,10 @@ public class PersistentDataContainerTest extends AbstractTestingBase {
|
||||
public void testNBTTagStoring() {
|
||||
CraftMetaItem itemMeta = createComplexItemMeta();
|
||||
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
CraftMetaItem.Applicator compound = new CraftMetaItem.Applicator();
|
||||
itemMeta.applyToItem(compound);
|
||||
|
||||
assertEquals(itemMeta, new CraftMetaItem(compound));
|
||||
assertEquals(itemMeta, new CraftMetaItem(compound.build()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -465,7 +462,7 @@ public class PersistentDataContainerTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void testEmptyListApplicationToAnyType() throws IOException {
|
||||
final CraftMetaItem craftItem = new CraftMetaItem(new NBTTagCompound());
|
||||
final CraftMetaItem craftItem = new CraftMetaItem(DataComponentPatch.EMPTY);
|
||||
final PersistentDataContainer container = craftItem.getPersistentDataContainer();
|
||||
|
||||
container.set(requestKey("list"), PersistentDataType.LIST.strings(), List.of());
|
||||
@@ -475,16 +472,10 @@ public class PersistentDataContainerTest extends AbstractTestingBase {
|
||||
assertEquals(List.of(), container.get(requestKey("list"), PersistentDataType.LIST.strings()));
|
||||
|
||||
// Write and read the entire container to NBT
|
||||
final NBTTagCompound storage = new NBTTagCompound();
|
||||
final CraftMetaItem.Applicator storage = new CraftMetaItem.Applicator();
|
||||
craftItem.applyToItem(storage);
|
||||
|
||||
final ByteArrayDataOutput writer = ByteStreams.newDataOutput();
|
||||
NBTCompressedStreamTools.write(storage, writer);
|
||||
|
||||
final NBTTagCompound readStorage = NBTCompressedStreamTools.read(
|
||||
ByteStreams.newDataInput(writer.toByteArray())
|
||||
);
|
||||
final CraftMetaItem readItem = new CraftMetaItem(readStorage);
|
||||
final CraftMetaItem readItem = new CraftMetaItem(storage.build());
|
||||
final PersistentDataContainer readContainer = readItem.getPersistentDataContainer();
|
||||
|
||||
assertTrue(readContainer.has(requestKey("list"), PersistentDataType.LIST.strings()));
|
||||
|
||||
@@ -23,7 +23,7 @@ public class LegacyTest extends AbstractTestingBase {
|
||||
Material.POTTED_RED_MUSHROOM, Material.POTTED_RED_TULIP, Material.POTTED_SPRUCE_SAPLING, Material.POTTED_WHITE_TULIP, Material.PRISMARINE_BRICK_SLAB, Material.PRISMARINE_BRICK_STAIRS, Material.PRISMARINE_SLAB, Material.PRISMARINE_STAIRS,
|
||||
Material.PUMPKIN, Material.PURPLE_SHULKER_BOX, Material.PURPLE_WALL_BANNER, Material.RED_WALL_BANNER, Material.SEAGRASS, Material.SKELETON_HORSE_SPAWN_EGG, Material.SKELETON_WALL_SKULL, Material.SPRUCE_BUTTON, Material.SPRUCE_PRESSURE_PLATE, Material.SPRUCE_TRAPDOOR,
|
||||
Material.STRAY_SPAWN_EGG, Material.STRIPPED_ACACIA_LOG, Material.STRIPPED_BIRCH_LOG, Material.STRIPPED_DARK_OAK_LOG, Material.STRIPPED_JUNGLE_LOG, Material.STRIPPED_OAK_LOG, Material.STRIPPED_SPRUCE_LOG, Material.TALL_SEAGRASS,
|
||||
Material.TRIDENT, Material.TURTLE_EGG, Material.TURTLE_HELMET, Material.SCUTE, Material.TURTLE_SPAWN_EGG, Material.VEX_SPAWN_EGG, Material.VINDICATOR_SPAWN_EGG, Material.VOID_AIR, Material.WHITE_BED,
|
||||
Material.TRIDENT, Material.TURTLE_EGG, Material.TURTLE_HELMET, Material.TURTLE_SCUTE, Material.TURTLE_SPAWN_EGG, Material.VEX_SPAWN_EGG, Material.VINDICATOR_SPAWN_EGG, Material.VOID_AIR, Material.WHITE_BED,
|
||||
Material.WITHER_SKELETON_SPAWN_EGG, Material.WITHER_SKELETON_WALL_SKULL, Material.YELLOW_WALL_BANNER, Material.ZOMBIE_HORSE_SPAWN_EGG, Material.ZOMBIE_VILLAGER_SPAWN_EGG, Material.ZOMBIE_WALL_HEAD,
|
||||
Material.COD_BUCKET, Material.COD_SPAWN_EGG, Material.PUFFERFISH_BUCKET, Material.PUFFERFISH_SPAWN_EGG, Material.SALMON_BUCKET, Material.SALMON_SPAWN_EGG,
|
||||
Material.TROPICAL_FISH_BUCKET, Material.DROWNED_SPAWN_EGG, Material.TROPICAL_FISH_SPAWN_EGG,
|
||||
@@ -120,6 +120,9 @@ public class LegacyTest extends AbstractTestingBase {
|
||||
Material.EXPOSED_COPPER_GRATE, Material.WEATHERED_COPPER_GRATE, Material.OXIDIZED_COPPER_GRATE, Material.WAXED_COPPER_GRATE, Material.WAXED_EXPOSED_COPPER_GRATE, Material.WAXED_WEATHERED_COPPER_GRATE, Material.WAXED_OXIDIZED_COPPER_GRATE,
|
||||
Material.COPPER_BULB, Material.EXPOSED_COPPER_BULB, Material.WEATHERED_COPPER_BULB, Material.OXIDIZED_COPPER_BULB, Material.WAXED_COPPER_BULB, Material.WAXED_EXPOSED_COPPER_BULB, Material.WAXED_WEATHERED_COPPER_BULB, Material.WAXED_OXIDIZED_COPPER_BULB,
|
||||
Material.BREEZE_SPAWN_EGG, Material.TRIAL_KEY, Material.TRIAL_SPAWNER,
|
||||
// 1.20.5
|
||||
Material.ARMADILLO_SCUTE, Material.ARMADILLO_SPAWN_EGG, Material.BOGGED_SPAWN_EGG, Material.WIND_CHARGE, Material.WOLF_ARMOR, Material.VAULT, Material.HEAVY_CORE, Material.MACE, Material.FLOW_BANNER_PATTERN, Material.GUSTER_BANNER_PATTERN,
|
||||
Material.FLOW_ARMOR_TRIM_SMITHING_TEMPLATE, Material.BOLT_ARMOR_TRIM_SMITHING_TEMPLATE, Material.FLOW_POTTERY_SHERD, Material.GUSTER_POTTERY_SHERD, Material.SCRAPE_POTTERY_SHERD, Material.BREEZE_ROD, Material.OMINOUS_TRIAL_KEY, Material.OMINOUS_BOTTLE,
|
||||
//
|
||||
Material.LEGACY_AIR, Material.LEGACY_DEAD_BUSH, Material.LEGACY_BURNING_FURNACE, Material.LEGACY_WALL_SIGN, Material.LEGACY_REDSTONE_TORCH_OFF, Material.LEGACY_SKULL, Material.LEGACY_REDSTONE_COMPARATOR_ON, Material.LEGACY_WALL_BANNER, Material.LEGACY_MONSTER_EGG));
|
||||
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
package org.bukkit.enchantments;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.enchantment.EnchantmentSlotType;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemType;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class EnchantmentTargetTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
for (EnchantmentSlotType nmsSlot : EnchantmentSlotType.values()) {
|
||||
EnchantmentTarget bukkitTarget;
|
||||
switch (nmsSlot) {
|
||||
case ARMOR_CHEST:
|
||||
bukkitTarget = EnchantmentTarget.ARMOR_TORSO;
|
||||
break;
|
||||
case DIGGER:
|
||||
bukkitTarget = EnchantmentTarget.TOOL;
|
||||
break;
|
||||
default:
|
||||
bukkitTarget = EnchantmentTarget.valueOf(nmsSlot.name());
|
||||
break;
|
||||
}
|
||||
|
||||
assertNotNull(bukkitTarget, "No bukkit target for slot " + nmsSlot);
|
||||
|
||||
for (Item item : BuiltInRegistries.ITEM) {
|
||||
Material material = CraftItemType.minecraftToBukkit(item);
|
||||
|
||||
boolean nms = nmsSlot.canEnchant(item);
|
||||
boolean bukkit = bukkitTarget.includes(material);
|
||||
|
||||
assertEquals(nms, bukkit, "Slot mismatch for " + bukkitTarget + " and " + material);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ public class PotionTest extends AbstractTestingBase {
|
||||
for (PotionRegistry reg : BuiltInRegistries.POTION) {
|
||||
List<MobEffect> eff = reg.getEffects();
|
||||
if (eff.size() != 1) continue;
|
||||
PotionEffectType type = CraftPotionEffectType.minecraftToBukkit(eff.get(0).getEffect());
|
||||
PotionEffectType type = CraftPotionEffectType.minecraftHolderToBukkit(eff.get(0).getEffect());
|
||||
assertNotNull(type, String.valueOf(reg));
|
||||
|
||||
PotionType enumType = PotionType.getByEffect(type);
|
||||
@@ -29,7 +29,7 @@ public class PotionTest extends AbstractTestingBase {
|
||||
effects.put(enumType, enumType.name());
|
||||
}
|
||||
|
||||
assertEquals(effects.entrySet().size(), PotionType.values().length - /* PotionTypes with no/shared Effects */ (6 + 22 /* There are 22 new strong / long potion types */));
|
||||
assertEquals(PotionType.values().length - /* PotionTypes with no/shared Effects */ (5 + 22 /* There are 22 new strong / long potion types */), effects.entrySet().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -24,7 +24,7 @@ public class RegistryConstantsTest extends AbstractTestingBase {
|
||||
@Test
|
||||
public void testDamageType() {
|
||||
this.testExcessConstants(DamageType.class, Registry.DAMAGE_TYPE);
|
||||
this.testMissingConstants(DamageType.class, Registries.DAMAGE_TYPE);
|
||||
// this.testMissingConstants(DamageType.class, Registries.DAMAGE_TYPE); // WIND_CHARGE not registered
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -2,10 +2,12 @@ package org.bukkit.registry;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import com.mojang.serialization.Lifecycle;
|
||||
import java.util.Optional;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Stream;
|
||||
import net.minecraft.core.IRegistry;
|
||||
import net.minecraft.core.RegistrationInfo;
|
||||
import net.minecraft.core.RegistryMaterials;
|
||||
import net.minecraft.resources.MinecraftKey;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
@@ -52,8 +54,8 @@ public class RegistryLoadOrderTest extends AbstractTestingBase {
|
||||
ResourceKey<IRegistry<MinecraftTestType>> resourceKey = ResourceKey.createRegistryKey(MinecraftKey.tryBuild("bukkit", "test-registry"));
|
||||
RegistryMaterials<MinecraftTestType> minecraftRegistry = new RegistryMaterials<>(resourceKey, Lifecycle.experimental());
|
||||
|
||||
minecraftRegistry.register(ResourceKey.create(resourceKey, MinecraftKey.tryBuild("bukkit", "test-one")), new MinecraftTestType(), Lifecycle.experimental());
|
||||
minecraftRegistry.register(ResourceKey.create(resourceKey, MinecraftKey.tryBuild("bukkit", "test-two")), new MinecraftTestType(), Lifecycle.experimental());
|
||||
minecraftRegistry.register(ResourceKey.create(resourceKey, MinecraftKey.tryBuild("bukkit", "test-one")), new MinecraftTestType(), new RegistrationInfo(Optional.empty(), Lifecycle.experimental()));
|
||||
minecraftRegistry.register(ResourceKey.create(resourceKey, MinecraftKey.tryBuild("bukkit", "test-two")), new MinecraftTestType(), new RegistrationInfo(Optional.empty(), Lifecycle.experimental()));
|
||||
minecraftRegistry.freeze();
|
||||
|
||||
registry = new CraftRegistry<>(keyedClass, minecraftRegistry, minecraftToBukkit);
|
||||
|
||||
@@ -55,9 +55,9 @@ public abstract class AbstractTestingBase {
|
||||
layers = WorldLoader.loadAndReplaceLayer(resourceManager, layers, RegistryLayer.WORLDGEN, RegistryDataLoader.WORLDGEN_REGISTRIES);
|
||||
REGISTRY_CUSTOM = layers.compositeAccess().freeze();
|
||||
// Register vanilla pack
|
||||
DATA_PACK = DataPackResources.loadResources(resourceManager, REGISTRY_CUSTOM, FeatureFlags.REGISTRY.allFlags(), CommandDispatcher.ServerType.DEDICATED, 0, MoreExecutors.directExecutor(), MoreExecutors.directExecutor()).join();
|
||||
DATA_PACK = DataPackResources.loadResources(resourceManager, layers, FeatureFlags.REGISTRY.allFlags(), CommandDispatcher.ServerType.DEDICATED, 0, MoreExecutors.directExecutor(), MoreExecutors.directExecutor()).join();
|
||||
// Bind tags
|
||||
DATA_PACK.updateRegistryTags(REGISTRY_CUSTOM);
|
||||
DATA_PACK.updateRegistryTags();
|
||||
// Biome shortcut
|
||||
BIOMES = REGISTRY_CUSTOM.registryOrThrow(Registries.BIOME);
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ import static org.mockito.Mockito.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Keyed;
|
||||
import org.bukkit.Material;
|
||||
@@ -41,7 +43,7 @@ public final class DummyServer {
|
||||
when(instance.createBlockData(any(Material.class))).then(mock -> CraftBlockData.newData(mock.getArgument(0), null));
|
||||
|
||||
when(instance.getLootTable(any())).then(mock -> new CraftLootTable(mock.getArgument(0),
|
||||
AbstractTestingBase.DATA_PACK.getLootData().getLootTable(CraftNamespacedKey.toMinecraft(mock.getArgument(0)))));
|
||||
AbstractTestingBase.DATA_PACK.fullRegistries().getLootTable(ResourceKey.create(Registries.LOOT_TABLE, CraftNamespacedKey.toMinecraft(mock.getArgument(0))))));
|
||||
|
||||
when(instance.getRegistry(any())).then((Answer<Registry<?>>) mock -> {
|
||||
Class<? extends Keyed> aClass = mock.getArgument(0);
|
||||
|
||||
Reference in New Issue
Block a user