SPIGOT-7011, SPIGOT-7065: Overhaul of structures
By: DerFrZocker <derrieple@gmail.com>
This commit is contained in:
@@ -1,49 +0,0 @@
|
||||
package org.bukkit;
|
||||
|
||||
import java.util.Map;
|
||||
import net.minecraft.core.IRegistry;
|
||||
import net.minecraft.resources.MinecraftKey;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* This test makes sure that Bukkit always has Minecraft structure types up to
|
||||
* date.
|
||||
*/
|
||||
public class StructureTypeTest extends AbstractTestingBase {
|
||||
|
||||
private static Map<String, StructureType> structures;
|
||||
|
||||
@BeforeClass
|
||||
public static void setUp() {
|
||||
structures = StructureType.getStructureTypes();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore("Some types missing during unit test run")
|
||||
public void testMinecraftToBukkit() {
|
||||
for (MinecraftKey key : IRegistry.STRUCTURE_TYPES.keySet()) {
|
||||
Assert.assertNotNull(key.getPath(), structures.get(key.getPath()));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBukkit() {
|
||||
for (Map.Entry<String, StructureType> entry : structures.entrySet()) {
|
||||
Assert.assertNotNull(entry.getKey(), StructureType.getStructureTypes().get(entry.getKey()));
|
||||
Assert.assertNotNull(entry.getValue().getName(), StructureType.getStructureTypes().get(entry.getValue().getName()));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore("Some types missing during unit test run")
|
||||
public void testBukkitToMinecraft() {
|
||||
for (Map.Entry<String, StructureType> entry : structures.entrySet()) {
|
||||
Assert.assertNotNull(entry.getKey(), IRegistry.STRUCTURE_TYPES.get(new MinecraftKey(entry.getKey())));
|
||||
Assert.assertNotNull(entry.getValue().getName(), IRegistry.STRUCTURE_TYPES.get(new MinecraftKey(entry.getValue().getName())));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package org.bukkit.generator.structure;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import net.minecraft.core.IRegistry;
|
||||
import net.minecraft.resources.MinecraftKey;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class StructureTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void testBukkitToMinecraftFieldName() {
|
||||
for (Field field : Structure.class.getFields()) {
|
||||
if (field.getType() != Structure.class) {
|
||||
continue;
|
||||
}
|
||||
if (!Modifier.isStatic(field.getModifiers())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String name = field.getName();
|
||||
Assert.assertNotNull("No structure for field name " + name, Registry.STRUCTURE.get(NamespacedKey.fromString(name.toLowerCase())));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMinecraftToBukkitFieldName() {
|
||||
IRegistry<net.minecraft.world.level.levelgen.structure.Structure> structureIRegistry = AbstractTestingBase.REGISTRY_CUSTOM.registryOrThrow(IRegistry.STRUCTURE_REGISTRY);
|
||||
for (net.minecraft.world.level.levelgen.structure.Structure structure : structureIRegistry) {
|
||||
MinecraftKey minecraftKey = structureIRegistry.getKey(structure);
|
||||
|
||||
try {
|
||||
Structure bukkit = (Structure) Structure.class.getField(minecraftKey.getPath().toUpperCase()).get(null);
|
||||
|
||||
Assert.assertEquals("Keys are not the same for " + minecraftKey, minecraftKey, CraftNamespacedKey.toMinecraft(bukkit.getKey()));
|
||||
} catch (NoSuchFieldException e) {
|
||||
Assert.fail("No Bukkit default structure for " + minecraftKey);
|
||||
} catch (IllegalAccessException e) {
|
||||
Assert.fail("Bukkit field is not access able for " + minecraftKey);
|
||||
} catch (ClassCastException e) {
|
||||
Assert.fail("Bukkit field is not of type structure for" + minecraftKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package org.bukkit.generator.structure;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import net.minecraft.core.IRegistry;
|
||||
import net.minecraft.resources.MinecraftKey;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class StructureTypeTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void testBukkitToMinecraftFieldName() {
|
||||
for (Field field : StructureType.class.getFields()) {
|
||||
if (field.getType() != StructureType.class) {
|
||||
continue;
|
||||
}
|
||||
if (!Modifier.isStatic(field.getModifiers())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String name = field.getName();
|
||||
Assert.assertNotNull("No structure type for field name " + name, Registry.STRUCTURE_TYPE.get(NamespacedKey.fromString(name.toLowerCase())));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMinecraftToBukkitFieldName() {
|
||||
for (net.minecraft.world.level.levelgen.structure.StructureType<?> structureType : IRegistry.STRUCTURE_TYPES) {
|
||||
MinecraftKey minecraftKey = IRegistry.STRUCTURE_TYPES.getKey(structureType);
|
||||
|
||||
try {
|
||||
StructureType bukkit = (StructureType) StructureType.class.getField(minecraftKey.getPath().toUpperCase()).get(null);
|
||||
|
||||
Assert.assertEquals("Keys are not the same for " + minecraftKey, minecraftKey, CraftNamespacedKey.toMinecraft(bukkit.getKey()));
|
||||
} catch (NoSuchFieldException e) {
|
||||
Assert.fail("No Bukkit default structure type for " + minecraftKey);
|
||||
} catch (IllegalAccessException e) {
|
||||
Assert.fail("Bukkit field is not access able for " + minecraftKey);
|
||||
} catch (ClassCastException e) {
|
||||
Assert.fail("Bukkit field is not of type structure type for" + minecraftKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -30,6 +30,7 @@ public abstract class AbstractTestingBase {
|
||||
public static final List<Material> INVALIDATED_MATERIALS;
|
||||
|
||||
public static final DataPackResources DATA_PACK;
|
||||
public static final IRegistryCustom.Dimension REGISTRY_CUSTOM;
|
||||
|
||||
static {
|
||||
SharedConstants.tryDetectVersion();
|
||||
@@ -37,11 +38,11 @@ public abstract class AbstractTestingBase {
|
||||
// Set up resource manager
|
||||
ResourceManager resourceManager = new ResourceManager(EnumResourcePackType.SERVER_DATA, Collections.singletonList(new ResourcePackVanilla(ResourcePackSourceVanilla.BUILT_IN_METADATA, "minecraft")));
|
||||
// add tags and loot tables for unit tests
|
||||
IRegistryCustom.Dimension registry = IRegistryCustom.builtinCopy().freeze();
|
||||
REGISTRY_CUSTOM = IRegistryCustom.builtinCopy().freeze();
|
||||
// Register vanilla pack
|
||||
DATA_PACK = DataPackResources.loadResources(resourceManager, registry, CommandDispatcher.ServerType.DEDICATED, 0, MoreExecutors.directExecutor(), MoreExecutors.directExecutor()).join();
|
||||
DATA_PACK = DataPackResources.loadResources(resourceManager, REGISTRY_CUSTOM, CommandDispatcher.ServerType.DEDICATED, 0, MoreExecutors.directExecutor(), MoreExecutors.directExecutor()).join();
|
||||
// Bind tags
|
||||
DATA_PACK.updateRegistryTags(registry);
|
||||
DATA_PACK.updateRegistryTags(REGISTRY_CUSTOM);
|
||||
|
||||
DummyServer.setup();
|
||||
DummyEnchantments.setup();
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.craftbukkit.CraftLootTable;
|
||||
import org.bukkit.craftbukkit.CraftRegistry;
|
||||
import org.bukkit.craftbukkit.block.data.CraftBlockData;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemFactory;
|
||||
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
@@ -97,6 +98,14 @@ public final class DummyServer implements InvocationHandler {
|
||||
}
|
||||
}
|
||||
);
|
||||
methods.put(Server.class.getMethod("getRegistry", Class.class),
|
||||
new MethodHandler() {
|
||||
@Override
|
||||
public Object handle(DummyServer server, Object[] args) {
|
||||
return CraftRegistry.createRegistry((Class) args[0], AbstractTestingBase.REGISTRY_CUSTOM);
|
||||
}
|
||||
}
|
||||
);
|
||||
Bukkit.setServer(Proxy.getProxyClass(Server.class.getClassLoader(), Server.class).asSubclass(Server.class).getConstructor(InvocationHandler.class).newInstance(new DummyServer()));
|
||||
} catch (Throwable t) {
|
||||
throw new Error(t);
|
||||
|
||||
Reference in New Issue
Block a user