mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-03 13:42:25 -07:00
Update to Minecraft 1.13-pre7
This commit is contained in:
@@ -5,10 +5,12 @@ import static org.hamcrest.Matchers.*;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraft.server.EntityPainting.EnumArt;
|
||||
import net.minecraft.server.MinecraftKey;
|
||||
import net.minecraft.server.Paintings;
|
||||
|
||||
import org.bukkit.craftbukkit.CraftArt;
|
||||
import org.junit.Test;
|
||||
@@ -22,15 +24,15 @@ public class ArtTest {
|
||||
public void verifyMapping() {
|
||||
List<Art> arts = Lists.newArrayList(Art.values());
|
||||
|
||||
for (EnumArt enumArt : EnumArt.values()) {
|
||||
int id = enumArt.ordinal();
|
||||
String name = enumArt.B;
|
||||
int width = enumArt.C / UNIT_MULTIPLIER;
|
||||
int height = enumArt.D / UNIT_MULTIPLIER;
|
||||
for (MinecraftKey key : Paintings.a.keySet()) {
|
||||
Paintings enumArt = Paintings.a.get(key);
|
||||
String name = key.getKey();
|
||||
int width = enumArt.b() / UNIT_MULTIPLIER;
|
||||
int height = enumArt.c() / UNIT_MULTIPLIER;
|
||||
|
||||
Art subject = Art.getById(id);
|
||||
Art subject = CraftArt.NotchToBukkit(enumArt);
|
||||
|
||||
String message = String.format("org.bukkit.Art is missing id: %d named: '%s'", id, name);
|
||||
String message = String.format("org.bukkit.Art is missing '%s'", name);
|
||||
assertNotNull(message, subject);
|
||||
|
||||
assertThat(Art.getByName(name), is(subject));
|
||||
@@ -45,9 +47,9 @@ public class ArtTest {
|
||||
|
||||
@Test
|
||||
public void testCraftArtToNotch() {
|
||||
Map<EnumArt, Art> cache = new EnumMap(EnumArt.class);
|
||||
Map<Paintings, Art> cache = new HashMap<>();
|
||||
for (Art art : Art.values()) {
|
||||
EnumArt enumArt = CraftArt.BukkitToNotch(art);
|
||||
Paintings enumArt = CraftArt.BukkitToNotch(art);
|
||||
assertNotNull(art.name(), enumArt);
|
||||
assertThat(art.name(), cache.put(enumArt, art), is(nullValue()));
|
||||
}
|
||||
@@ -55,11 +57,11 @@ public class ArtTest {
|
||||
|
||||
@Test
|
||||
public void testCraftArtToBukkit() {
|
||||
Map<Art, EnumArt> cache = new EnumMap(Art.class);
|
||||
for (EnumArt enumArt : EnumArt.values()) {
|
||||
Map<Art, Paintings> cache = new EnumMap(Art.class);
|
||||
for (Paintings enumArt : (Iterable<Paintings>) Paintings.a) { // Eclipse fail
|
||||
Art art = CraftArt.NotchToBukkit(enumArt);
|
||||
assertNotNull(enumArt.name(), art);
|
||||
assertThat(enumArt.name(), cache.put(art, enumArt), is(nullValue()));
|
||||
assertNotNull("Could not CraftArt.NotchToBukkit " + enumArt, art);
|
||||
assertThat("Duplicate artwork " + enumArt, cache.put(art, enumArt), is(nullValue()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
58
src/test/java/org/bukkit/BlockDataTest.java
Normal file
58
src/test/java/org/bukkit/BlockDataTest.java
Normal file
@@ -0,0 +1,58 @@
|
||||
package org.bukkit;
|
||||
|
||||
import net.minecraft.server.BlockCake;
|
||||
import net.minecraft.server.Blocks;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.block.data.type.Cake;
|
||||
import org.bukkit.craftbukkit.block.data.CraftBlockData;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class BlockDataTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void testParsing() {
|
||||
BlockData cakeTest = CraftBlockData.fromData(Blocks.CAKE.getBlockData().set(BlockCake.BITES, 3));
|
||||
|
||||
BlockData materialString = CraftBlockData.newData(Material.CAKE, "[bites=3]");
|
||||
Assert.assertThat(materialString, is(cakeTest));
|
||||
|
||||
BlockData combined = CraftBlockData.newData(null, "cake[bites=3]");
|
||||
Assert.assertThat(combined, is(cakeTest));
|
||||
|
||||
BlockData combinedMinecraft = CraftBlockData.newData(null, "minecraft:cake[bites=3]");
|
||||
Assert.assertThat(combinedMinecraft, is(cakeTest));
|
||||
|
||||
BlockData inverted = CraftBlockData.newData(null, cakeTest.getAsString());
|
||||
Assert.assertThat(inverted, is(cakeTest));
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testBadMaterial() {
|
||||
CraftBlockData.newData(null, "invalid");
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testBadSyntax() {
|
||||
CraftBlockData.newData(null, "minecraft:cake[bites=3");
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testDoubleMaterial() {
|
||||
CraftBlockData.newData(Material.CAKE, "minecraft:cake[bites=3]");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClone() {
|
||||
Cake cakeTest = (Cake) CraftBlockData.fromData(Blocks.CAKE.getBlockData().set(BlockCake.BITES, 3));
|
||||
Cake clone = (Cake) cakeTest.clone();
|
||||
|
||||
Assert.assertFalse("Clone did not return new object", cakeTest == clone);
|
||||
Assert.assertThat("Clone is not equal", clone, is(cakeTest));
|
||||
|
||||
clone.setBites(1);
|
||||
Assert.assertThat("Clone is not actually clone", clone, is(not(cakeTest)));
|
||||
}
|
||||
}
|
@@ -7,7 +7,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.server.EnumColor;
|
||||
import net.minecraft.server.ItemDye;
|
||||
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.Test;
|
||||
@@ -33,7 +32,7 @@ public class DyeColorsTest extends AbstractTestingBase {
|
||||
@Test
|
||||
public void checkColor() {
|
||||
Color color = dye.getColor();
|
||||
float[] nmsColorArray = EnumColor.fromColorIndex(dye.getWoolData()).f();
|
||||
float[] nmsColorArray = EnumColor.fromColorIndex(dye.getWoolData()).d();
|
||||
Color nmsColor = Color.fromRGB((int) (nmsColorArray[0] * 255), (int) (nmsColorArray[1] * 255), (int) (nmsColorArray[2] * 255));
|
||||
assertThat(color, is(nmsColor));
|
||||
}
|
||||
@@ -41,7 +40,7 @@ public class DyeColorsTest extends AbstractTestingBase {
|
||||
@Test
|
||||
public void checkFireworkColor() {
|
||||
Color color = dye.getFireworkColor();
|
||||
int nmsColor = ItemDye.a[dye.getDyeData()];
|
||||
int nmsColor = EnumColor.fromColorIndex(dye.getWoolData()).f();
|
||||
assertThat(color, is(Color.fromRGB(nmsColor)));
|
||||
}
|
||||
}
|
||||
|
24
src/test/java/org/bukkit/EnchantmentTest.java
Normal file
24
src/test/java/org/bukkit/EnchantmentTest.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package org.bukkit;
|
||||
|
||||
import net.minecraft.server.MinecraftKey;
|
||||
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class EnchantmentTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void verifyMapping() {
|
||||
for (MinecraftKey key : net.minecraft.server.Enchantment.enchantments.keySet()) {
|
||||
net.minecraft.server.Enchantment nms = net.minecraft.server.Enchantment.enchantments.get(key);
|
||||
|
||||
Enchantment bukkitById = Enchantment.getByKey(CraftNamespacedKey.fromMinecraft(key));
|
||||
|
||||
Assert.assertFalse("Unknown enchant name for " + key, bukkitById.getName().startsWith("UNKNOWN"));
|
||||
|
||||
Assert.assertNotNull("Unknown target for " + key, bukkitById.getItemTarget());
|
||||
}
|
||||
}
|
||||
}
|
89
src/test/java/org/bukkit/LegacyTest.java
Normal file
89
src/test/java/org/bukkit/LegacyTest.java
Normal file
@@ -0,0 +1,89 @@
|
||||
package org.bukkit;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import org.bukkit.craftbukkit.util.CraftLegacy;
|
||||
import org.bukkit.material.MaterialData;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class LegacyTest extends AbstractTestingBase {
|
||||
|
||||
private final Set<Material> INVALIDATED_MATERIALS = new HashSet<>(Arrays.asList(Material.ACACIA_BUTTON, Material.ACACIA_PRESSURE_PLATE, Material.ACACIA_TRAPDOOR, Material.AIR, Material.ATTACHED_MELON_STEM, Material.ATTACHED_PUMPKIN_STEM,
|
||||
Material.BIRCH_BUTTON, Material.BIRCH_PRESSURE_PLATE, Material.BIRCH_TRAPDOOR, Material.BLACK_WALL_BANNER, Material.BLUE_WALL_BANNER, Material.BROWN_WALL_BANNER, Material.BUBBLE_COLUMN, Material.CAVE_AIR, Material.CREEPER_WALL_HEAD,
|
||||
Material.CYAN_WALL_BANNER, Material.DARK_OAK_BUTTON, Material.DARK_OAK_PRESSURE_PLATE, Material.DARK_OAK_TRAPDOOR, Material.DARK_PRISMARINE_SLAB, Material.DARK_PRISMARINE_STAIRS, Material.DEBUG_STICK, Material.DONKEY_SPAWN_EGG,
|
||||
Material.DRAGON_WALL_HEAD, Material.DRIED_KELP, Material.DRIED_KELP_BLOCK, Material.ELDER_GUARDIAN_SPAWN_EGG, Material.EVOKER_SPAWN_EGG, Material.GRAY_WALL_BANNER, Material.GREEN_WALL_BANNER, Material.HUSK_SPAWN_EGG,
|
||||
Material.JUNGLE_BUTTON, Material.JUNGLE_PRESSURE_PLATE, Material.JUNGLE_TRAPDOOR, Material.KELP, Material.KELP_PLANT, Material.LIGHT_BLUE_WALL_BANNER, Material.LIGHT_GRAY_WALL_BANNER, Material.LIME_WALL_BANNER, Material.LLAMA_SPAWN_EGG,
|
||||
Material.MAGENTA_WALL_BANNER, Material.MULE_SPAWN_EGG, Material.ORANGE_WALL_BANNER, Material.PARROT_SPAWN_EGG, Material.PHANTOM_SPAWN_EGG, Material.PINK_WALL_BANNER, Material.PLAYER_WALL_HEAD, Material.POLAR_BEAR_SPAWN_EGG,
|
||||
Material.POTTED_ACACIA_SAPLING, Material.POTTED_ALLIUM, Material.POTTED_AZURE_BLUET, Material.POTTED_BIRCH_SAPLING, Material.POTTED_BLUE_ORCHID, Material.POTTED_BROWN_MUSHROOM, Material.POTTED_DANDELION, Material.POTTED_DARK_OAK_SAPLING,
|
||||
Material.POTTED_DEAD_BUSH, Material.POTTED_FERN, Material.POTTED_JUNGLE_SAPLING, Material.POTTED_OAK_SAPLING, Material.POTTED_ORANGE_TULIP, Material.POTTED_OXEYE_DAISY, Material.POTTED_PINK_TULIP, Material.POTTED_POPPY,
|
||||
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_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.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.SHULKER_BOX, Material.TROPICAL_FISH_SPAWN_EGG,
|
||||
Material.BLUE_ICE, Material.BRAIN_CORAL, Material.BRAIN_CORAL_BLOCK, Material.BRAIN_CORAL_FAN, Material.BUBBLE_CORAL, Material.BUBBLE_CORAL_BLOCK, Material.BUBBLE_CORAL_FAN, Material.CONDUIT, Material.DEAD_BRAIN_CORAL_BLOCK,
|
||||
Material.DEAD_BUBBLE_CORAL_BLOCK, Material.DEAD_FIRE_CORAL_BLOCK, Material.DEAD_HORN_CORAL_BLOCK, Material.DEAD_TUBE_CORAL_BLOCK, Material.DOLPHIN_SPAWN_EGG, Material.FIRE_CORAL, Material.FIRE_CORAL_BLOCK, Material.FIRE_CORAL_FAN,
|
||||
Material.HEART_OF_THE_SEA, Material.HORN_CORAL, Material.HORN_CORAL_BLOCK, Material.HORN_CORAL_FAN, Material.NAUTILUS_SHELL, Material.PHANTOM_MEMBRANE, Material.SEA_PICKLE, Material.TUBE_CORAL, Material.TUBE_CORAL_BLOCK,
|
||||
Material.TUBE_CORAL_FAN, Material.STRIPPED_ACACIA_WOOD, Material.STRIPPED_BIRCH_WOOD, Material.STRIPPED_DARK_OAK_WOOD, Material.STRIPPED_JUNGLE_WOOD, Material.STRIPPED_OAK_WOOD, Material.STRIPPED_SPRUCE_WOOD,
|
||||
Material.ACACIA_WOOD, Material.BIRCH_WOOD, Material.DARK_OAK_WOOD, Material.JUNGLE_WOOD, Material.OAK_WOOD, Material.SPRUCE_WOOD,
|
||||
//
|
||||
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));
|
||||
|
||||
private final Set<Material> INVERSION_FAILS = new HashSet<>(Arrays.asList(Material.LEGACY_DOUBLE_STEP, Material.LEGACY_GLOWING_REDSTONE_ORE, Material.LEGACY_DIODE_BLOCK_ON, Material.LEGACY_REDSTONE_LAMP_ON, Material.LEGACY_WOOD_DOUBLE_STEP,
|
||||
Material.LEGACY_DAYLIGHT_DETECTOR_INVERTED, Material.LEGACY_DOUBLE_STONE_SLAB2, Material.LEGACY_PURPUR_DOUBLE_SLAB, Material.LEGACY_WHEAT, Material.LEGACY_SIGN, Material.LEGACY_WOOD_DOOR, Material.LEGACY_IRON_DOOR, Material.LEGACY_SUGAR_CANE,
|
||||
Material.LEGACY_CAKE, Material.LEGACY_BED, Material.LEGACY_DIODE, Material.LEGACY_NETHER_STALK, Material.LEGACY_BREWING_STAND_ITEM, Material.LEGACY_CAULDRON_ITEM, Material.LEGACY_REDSTONE_COMPARATOR, Material.LEGACY_SPRUCE_DOOR_ITEM,
|
||||
Material.LEGACY_BIRCH_DOOR_ITEM, Material.LEGACY_JUNGLE_DOOR_ITEM, Material.LEGACY_ACACIA_DOOR_ITEM, Material.LEGACY_DARK_OAK_DOOR_ITEM, Material.LEGACY_STATIONARY_LAVA, Material.LEGACY_STATIONARY_WATER));
|
||||
|
||||
@Test
|
||||
public void toLegacyMaterial() {
|
||||
for (Material material : Material.values()) {
|
||||
if (!INVALIDATED_MATERIALS.contains(material) && !material.isLegacy()) {
|
||||
MaterialData converted = CraftLegacy.toLegacyData(material);
|
||||
|
||||
Assert.assertNotEquals("Could not toLegacy " + material, Material.LEGACY_AIR, converted.getItemType());
|
||||
|
||||
if (!INVALIDATED_MATERIALS.contains(converted.getItemType())) {
|
||||
Assert.assertNotEquals("Could not fromLegacy(toLegacy) " + converted + "(" + material + ")", Material.AIR, CraftLegacy.fromLegacy(converted));
|
||||
}
|
||||
if (!INVERSION_FAILS.contains(material)) {
|
||||
Assert.assertEquals("Could not fromLegacy(toLegacy) " + converted + "(" + material + ")", material, CraftLegacy.fromLegacy(converted));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Assert.assertEquals("Could not toLegacy Air", Material.LEGACY_AIR, CraftLegacy.toLegacy(Material.AIR));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fromLegacyMaterial() {
|
||||
for (Material material : Material.values()) {
|
||||
if (!INVALIDATED_MATERIALS.contains(material) && material.isLegacy()) {
|
||||
Material converted = CraftLegacy.fromLegacy(material);
|
||||
Assert.assertNotEquals("Could not fromLegacy " + material, Material.AIR, converted);
|
||||
|
||||
Assert.assertNotEquals("Could not toLegacy(fromLegacy) " + converted + "(" + material + ")", Material.AIR, CraftLegacy.toLegacy(converted));
|
||||
if (!INVERSION_FAILS.contains(material)) {
|
||||
Assert.assertEquals("Could not toLegacy(fromLegacy) " + converted + "(" + material + ")", material, CraftLegacy.toLegacy(converted));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Assert.assertEquals("Could not fromLegacy Air", Material.AIR, CraftLegacy.fromLegacy(Material.LEGACY_AIR));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRestricted() {
|
||||
for (Material material : CraftLegacy.values()) {
|
||||
Assert.assertTrue("Must iterate only legacy materials", material.isLegacy());
|
||||
}
|
||||
|
||||
for (Material material : CraftLegacy.modern_values()) {
|
||||
Assert.assertFalse("Must iterate only modern materials", material.isLegacy());
|
||||
}
|
||||
}
|
||||
}
|
@@ -7,6 +7,7 @@ import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraft.server.Item;
|
||||
import net.minecraft.server.MinecraftKey;
|
||||
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.Test;
|
||||
@@ -19,13 +20,13 @@ public class MaterialTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void verifyMapping() {
|
||||
Map<Integer, Material> materials = Maps.newHashMap();
|
||||
Map<MinecraftKey, Material> materials = Maps.newHashMap();
|
||||
for (Material material : Material.values()) {
|
||||
if (INVALIDATED_MATERIALS.contains(material)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
materials.put(material.getId(), material);
|
||||
materials.put(CraftMagicNumbers.key(material), material);
|
||||
}
|
||||
|
||||
Iterator<Item> items = Item.REGISTRY.iterator();
|
||||
@@ -34,12 +35,13 @@ public class MaterialTest extends AbstractTestingBase {
|
||||
Item item = items.next();
|
||||
if (item == null) continue;
|
||||
|
||||
int id = CraftMagicNumbers.getId(item);
|
||||
MinecraftKey id = Item.REGISTRY.b(item);
|
||||
String name = item.getName();
|
||||
|
||||
Material material = materials.remove(id);
|
||||
|
||||
assertThat("Missing " + name + "(" + id + ")", material, is(not(nullValue())));
|
||||
assertNotNull("No item mapping for " + name, CraftMagicNumbers.getMaterial(item));
|
||||
}
|
||||
|
||||
assertThat(materials, is(Collections.EMPTY_MAP));
|
||||
|
@@ -1,19 +1,34 @@
|
||||
package org.bukkit;
|
||||
|
||||
import net.minecraft.server.EnumParticle;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.craftbukkit.CraftParticle;
|
||||
import org.bukkit.craftbukkit.block.data.CraftBlockData;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.material.MaterialData;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class ParticleTest {
|
||||
public class ParticleTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void verifyMapping() {
|
||||
for (Particle bukkit : Particle.values()) {
|
||||
Assert.assertNotNull("Missing Bukkit->NMS particle mapping", CraftParticle.toNMS(bukkit));
|
||||
Object data = null;
|
||||
if (bukkit.getDataType().equals(ItemStack.class)) {
|
||||
data = new ItemStack(Material.STONE);
|
||||
} else if (bukkit.getDataType() == MaterialData.class) {
|
||||
data = new MaterialData(Material.LEGACY_STONE);
|
||||
} else if (bukkit.getDataType() == Particle.DustOptions.class) {
|
||||
data = new Particle.DustOptions(Color.BLACK, 0);
|
||||
} else if (bukkit.getDataType() == BlockData.class) {
|
||||
data = CraftBlockData.newData(Material.STONE, "");
|
||||
}
|
||||
|
||||
Assert.assertNotNull("Missing Bukkit->NMS particle mapping for " + bukkit, CraftParticle.toNMS(bukkit, data));
|
||||
}
|
||||
for (EnumParticle nms : EnumParticle.values()) {
|
||||
Assert.assertNotNull("Missing NMS->Bukkit particle mapping", CraftParticle.toBukkit(nms));
|
||||
for (net.minecraft.server.Particle nms : (Iterable<net.minecraft.server.Particle<?>>) net.minecraft.server.Particle.REGISTRY) { // Eclipse fail
|
||||
Assert.assertNotNull("Missing NMS->Bukkit particle mapping for " + nms, CraftParticle.toBukkit(nms));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -43,13 +43,22 @@ public class PerMaterialTest extends AbstractTestingBase {
|
||||
public static List<Object[]> data() {
|
||||
List<Object[]> list = Lists.newArrayList();
|
||||
for (Material material : Material.values()) {
|
||||
list.add(new Object[] {material});
|
||||
if (!material.isLegacy()) {
|
||||
list.add(new Object[] {material});
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Parameter public Material material;
|
||||
|
||||
@Test
|
||||
public void isBlock() {
|
||||
if (material != Material.AIR && material != Material.CAVE_AIR && material != Material.VOID_AIR) {
|
||||
assertThat(material.isBlock(), is(not(CraftMagicNumbers.getBlock(material).getBlockData().isAir())));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isSolid() {
|
||||
if (material == Material.AIR) {
|
||||
@@ -106,7 +115,7 @@ public class PerMaterialTest extends AbstractTestingBase {
|
||||
if (material == Material.AIR) {
|
||||
assertTrue(material.isTransparent());
|
||||
} else if (material.isBlock()) {
|
||||
assertThat(material.isTransparent(), is(not(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().blocksLight())));
|
||||
// assertThat(material.isTransparent(), is(not(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().blocksLight()))); // PAIL: not unit testable anymore (17w50a)
|
||||
} else {
|
||||
assertFalse(material.isTransparent());
|
||||
}
|
||||
@@ -163,6 +172,15 @@ public class PerMaterialTest extends AbstractTestingBase {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDurability() {
|
||||
if (!material.isBlock()) {
|
||||
assertThat(material.getMaxDurability(), is((short) CraftMagicNumbers.getItem(material).getMaxDurability()));
|
||||
} else {
|
||||
assertThat(material.getMaxDurability(), is((short) 0));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBlock() {
|
||||
if (material == Material.AIR) {
|
||||
|
@@ -3,10 +3,13 @@ package org.bukkit;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.server.Block;
|
||||
import net.minecraft.server.EntityTypes;
|
||||
import net.minecraft.server.Item;
|
||||
import net.minecraft.server.StatisticList;
|
||||
import net.minecraft.server.StatisticWrapper;
|
||||
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.craftbukkit.CraftStatistic;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.Test;
|
||||
@@ -15,19 +18,40 @@ import com.google.common.collect.HashMultiset;
|
||||
|
||||
public class StatisticsAndAchievementsTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
public void verifyEntityMapping() throws Throwable {
|
||||
for (Statistic statistic : Statistic.values()) {
|
||||
if (statistic.getType() == Statistic.Type.ENTITY) {
|
||||
for (EntityType entity : EntityType.values()) {
|
||||
if (entity.getName() != null) {
|
||||
assertNotNull(statistic + " missing for " + entity, CraftStatistic.getEntityStatistic(statistic, entity));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
public void verifyStatisticMapping() throws Throwable {
|
||||
HashMultiset<Statistic> statistics = HashMultiset.create();
|
||||
for (net.minecraft.server.Statistic statistic : (List<net.minecraft.server.Statistic>) StatisticList.stats) {
|
||||
String name = statistic.name;
|
||||
for (StatisticWrapper wrapper : (Iterable<StatisticWrapper<?>>) StatisticList.REGISTRY) { // Eclipse fail
|
||||
for (Object child : wrapper.a()) {
|
||||
net.minecraft.server.Statistic<?> statistic = wrapper.b(child);
|
||||
String message = String.format("org.bukkit.Statistic is missing: '%s'", statistic);
|
||||
|
||||
String message = String.format("org.bukkit.Statistic is missing: '%s'", name);
|
||||
Statistic subject = CraftStatistic.getBukkitStatistic(statistic);
|
||||
assertThat(message, subject, is(not(nullValue())));
|
||||
|
||||
Statistic subject = CraftStatistic.getBukkitStatistic(statistic);
|
||||
assertThat(message, subject, is(not(nullValue())));
|
||||
if (wrapper.a() == Block.REGISTRY || wrapper.a() == Item.REGISTRY) {
|
||||
assertNotNull("Material type map missing for " + child, CraftStatistic.getMaterialFromStatistic(statistic));
|
||||
} else if (wrapper.a() == EntityTypes.REGISTRY) {
|
||||
assertNotNull("Entity type map missing for " + EntityTypes.getName((EntityTypes<?>) child), CraftStatistic.getEntityTypeFromStatistic((net.minecraft.server.Statistic<EntityTypes<?>>) statistic));
|
||||
}
|
||||
|
||||
statistics.add(subject);
|
||||
statistics.add(subject);
|
||||
}
|
||||
}
|
||||
|
||||
for (Statistic statistic : Statistic.values()) {
|
||||
|
@@ -1,32 +1,31 @@
|
||||
package org.bukkit.craftbukkit.generator;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.material.MaterialData;
|
||||
import org.bukkit.material.Wool;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.Test;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class ChunkDataTest {
|
||||
public class ChunkDataTest extends AbstractTestingBase {
|
||||
|
||||
private static final MaterialData RED_WOOL = new Wool(DyeColor.RED);
|
||||
private static final MaterialData AIR = new MaterialData(Material.AIR);
|
||||
private static final BlockData RED_WOOL = Material.RED_WOOL.createBlockData();
|
||||
private static final BlockData AIR = Material.AIR.createBlockData();
|
||||
|
||||
private boolean testSetBlock(CraftChunkData data, int x, int y, int z, MaterialData type, MaterialData expected) {
|
||||
private boolean testSetBlock(CraftChunkData data, int x, int y, int z, BlockData type, BlockData expected) {
|
||||
data.setBlock(x, y, z, type);
|
||||
return expected.equals(data.getTypeAndData(x, y, z));
|
||||
return expected.equals(data.getBlockData(x, y, z));
|
||||
}
|
||||
|
||||
private void testSetRegion(CraftChunkData data, int minx, int miny, int minz, int maxx, int maxy, int maxz, MaterialData type) {
|
||||
private void testSetRegion(CraftChunkData data, int minx, int miny, int minz, int maxx, int maxy, int maxz, BlockData type) {
|
||||
data.setRegion(minx, miny, minz, maxx, maxy, maxz, type);
|
||||
for (int y = 0; y < data.getMaxHeight(); y++) {
|
||||
for (int z = 0; z < 16; z++) {
|
||||
for (int x = 0; x < 16; x++) {
|
||||
boolean inRegion = miny <= y && y < maxy && minx <= x && x < maxx && minz <= z && z < maxz;
|
||||
if (inRegion != type.equals(data.getTypeAndData(x, y, z))) {
|
||||
if (inRegion != type.equals(data.getBlockData(x, y, z))) {
|
||||
throw new IllegalStateException(
|
||||
"setRegion(" + minx + ", " + miny + ", " + minz + ", " + maxx + ", " + maxy + ", " + maxz + ", " + type + ")"
|
||||
+ "-> block at " + x + ", " + y + ", " + z + " is " + data.getTypeAndData(x, y, z));
|
||||
+ "-> block at " + x + ", " + y + ", " + z + " is " + data.getBlockData(x, y, z));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -6,6 +6,7 @@ import static org.hamcrest.Matchers.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
@@ -25,23 +26,23 @@ public class CompositeSerialization extends AbstractTestingBase {
|
||||
YamlConfiguration out = getConfig();
|
||||
|
||||
List<ItemStack> stacks = new ArrayList<ItemStack>();
|
||||
stacks.add(new ItemStack(1));
|
||||
stacks.add(new ItemStack(2));
|
||||
stacks.add(new ItemStack(3));
|
||||
stacks.add(new ItemStack(4, 17));
|
||||
stacks.add(new ItemStack(5, 63));
|
||||
stacks.add(new ItemStack(6, 1, (short) 1));
|
||||
stacks.add(new ItemStack(18, 32, (short) 2));
|
||||
stacks.add(new ItemStack(Material.STONE));
|
||||
stacks.add(new ItemStack(Material.GRASS));
|
||||
stacks.add(new ItemStack(Material.DIRT));
|
||||
stacks.add(new ItemStack(Material.COBBLESTONE, 17));
|
||||
stacks.add(new ItemStack(Material.OAK_PLANKS, 63));
|
||||
stacks.add(new ItemStack(Material.OAK_SAPLING, 1, (short) 1));
|
||||
stacks.add(new ItemStack(Material.OAK_LEAVES, 32, (short) 2));
|
||||
|
||||
ItemStack item7 = new ItemStack(256);
|
||||
item7.addUnsafeEnchantment(Enchantment.getById(1), 1);
|
||||
ItemStack item7 = new ItemStack(Material.IRON_SHOVEL);
|
||||
item7.addUnsafeEnchantment(Enchantment.PROTECTION_FIRE, 1);
|
||||
stacks.add(item7);
|
||||
|
||||
ItemStack item8 = new ItemStack(257);
|
||||
item8.addUnsafeEnchantment(Enchantment.getById(2), 2);
|
||||
item8.addUnsafeEnchantment(Enchantment.getById(3), 1);
|
||||
item8.addUnsafeEnchantment(Enchantment.getById(4), 5);
|
||||
item8.addUnsafeEnchantment(Enchantment.getById(5), 4);
|
||||
ItemStack item8 = new ItemStack(Material.IRON_PICKAXE);
|
||||
item8.addUnsafeEnchantment(Enchantment.PROTECTION_FALL, 2);
|
||||
item8.addUnsafeEnchantment(Enchantment.PROTECTION_EXPLOSIONS, 1);
|
||||
item8.addUnsafeEnchantment(Enchantment.PROTECTION_PROJECTILE, 5);
|
||||
item8.addUnsafeEnchantment(Enchantment.OXYGEN, 4);
|
||||
stacks.add(item8);
|
||||
|
||||
out.set("composite-list.abc.def", stacks);
|
||||
|
@@ -10,7 +10,7 @@ import java.util.HashSet;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
|
||||
import net.minecraft.server.CommandAbstract;
|
||||
import net.minecraft.server.IAnimal;
|
||||
import net.minecraft.server.IAttribute;
|
||||
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
@@ -20,7 +20,7 @@ public class ItemFactoryTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void testKnownAttributes() throws Throwable {
|
||||
final ZipInputStream nmsZipStream = new ZipInputStream(CommandAbstract.class/* Magic class that isn't imported! */.getProtectionDomain().getCodeSource().getLocation().openStream());
|
||||
final ZipInputStream nmsZipStream = new ZipInputStream(IAnimal.class/* Magic class that isn't imported! */.getProtectionDomain().getCodeSource().getLocation().openStream());
|
||||
final Collection<String> names = new HashSet<String>();
|
||||
for (ZipEntry clazzEntry; (clazzEntry = nmsZipStream.getNextEntry()) != null; ) {
|
||||
final String entryName = clazzEntry.getName();
|
||||
|
@@ -3,13 +3,14 @@ package org.bukkit.craftbukkit.inventory;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import net.minecraft.server.Block;
|
||||
import net.minecraft.server.ITileEntity;
|
||||
import net.minecraft.server.Item;
|
||||
import net.minecraft.server.ItemBlock;
|
||||
import net.minecraft.server.ItemReed;
|
||||
import net.minecraft.server.ItemBlockWallable;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Color;
|
||||
@@ -26,6 +27,7 @@ import org.bukkit.craftbukkit.inventory.ItemStackTest.BukkitWrapper;
|
||||
import org.bukkit.craftbukkit.inventory.ItemStackTest.CraftWrapper;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.TropicalFish;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.BannerMeta;
|
||||
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||
@@ -39,6 +41,7 @@ import org.bukkit.inventory.meta.LeatherArmorMeta;
|
||||
import org.bukkit.inventory.meta.MapMeta;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.inventory.meta.SpawnEggMeta;
|
||||
import org.bukkit.inventory.meta.TropicalFishBucketMeta;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.potion.PotionData;
|
||||
import org.bukkit.potion.PotionType;
|
||||
@@ -125,12 +128,12 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
}
|
||||
|
||||
private static FireworkMeta newFireworkMeta() {
|
||||
return ((FireworkMeta) Bukkit.getItemFactory().getItemMeta(Material.FIREWORK));
|
||||
return ((FireworkMeta) Bukkit.getItemFactory().getItemMeta(Material.FIREWORK_ROCKET));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCrazyEquality() {
|
||||
CraftItemStack craft = CraftItemStack.asCraftCopy(new ItemStack(1));
|
||||
CraftItemStack craft = CraftItemStack.asCraftCopy(new ItemStack(Material.STONE));
|
||||
craft.setItemMeta(craft.getItemMeta());
|
||||
ItemStack bukkit = new ItemStack(craft);
|
||||
assertThat(craft, is(bukkit));
|
||||
@@ -139,21 +142,24 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void testBlockStateMeta() {
|
||||
for (Item item : (Iterable<Item>) Item.REGISTRY) {
|
||||
Block block = null;
|
||||
List<Block> queue = new ArrayList<>();
|
||||
|
||||
for (Item item : (Iterable<Item>) Item.REGISTRY) { // Eclipse fail
|
||||
if (item instanceof ItemBlock) {
|
||||
block = ((ItemBlock) item).getBlock();
|
||||
} else if (item instanceof ItemReed) {
|
||||
block = ((ItemReed) item).a;
|
||||
queue.add(((ItemBlock) item).getBlock());
|
||||
}
|
||||
if (item instanceof ItemBlockWallable) {
|
||||
queue.add(((ItemBlockWallable) item).wallBlock);
|
||||
}
|
||||
}
|
||||
|
||||
for (Block block : queue) {
|
||||
if (block != null) {
|
||||
if (block instanceof ITileEntity) {
|
||||
ItemStack stack = CraftItemStack.asNewCraftStack(Item.getItemOf(block));
|
||||
|
||||
// Command blocks aren't unit testable atm
|
||||
if (stack.getType() == Material.AIR || stack.getType() == Material.COMMAND || stack.getType() == Material.COMMAND_CHAIN || stack.getType() == Material.COMMAND_REPEATING) {
|
||||
if (stack.getType() == Material.COMMAND_BLOCK || stack.getType() == Material.CHAIN_COMMAND_BLOCK || stack.getType() == Material.REPEATING_COMMAND_BLOCK) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -172,7 +178,7 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
@Test
|
||||
public void testEachExtraData() {
|
||||
final List<StackProvider> providers = Arrays.asList(
|
||||
new StackProvider(Material.BOOK_AND_QUILL) {
|
||||
new StackProvider(Material.WRITABLE_BOOK) {
|
||||
@Override ItemStack operate(final ItemStack cleanStack) {
|
||||
final BookMeta meta = (BookMeta) cleanStack.getItemMeta();
|
||||
meta.setAuthor("Some author");
|
||||
@@ -202,7 +208,7 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
}
|
||||
},
|
||||
*/
|
||||
new StackProvider(Material.MAP) {
|
||||
new StackProvider(Material.FILLED_MAP) {
|
||||
@Override ItemStack operate(final ItemStack cleanStack) {
|
||||
final MapMeta meta = (MapMeta) cleanStack.getItemMeta();
|
||||
meta.setScaling(true);
|
||||
@@ -227,7 +233,7 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
return cleanStack;
|
||||
}
|
||||
},
|
||||
new StackProvider(Material.FIREWORK) {
|
||||
new StackProvider(Material.FIREWORK_ROCKET) {
|
||||
@Override ItemStack operate(final ItemStack cleanStack) {
|
||||
final FireworkMeta meta = (FireworkMeta) cleanStack.getItemMeta();
|
||||
meta.addEffect(FireworkEffect.builder().withColor(Color.GREEN).withFade(Color.OLIVE).with(Type.BALL_LARGE).build());
|
||||
@@ -243,7 +249,7 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
return cleanStack;
|
||||
}
|
||||
},
|
||||
new StackProvider(Material.FIREWORK_CHARGE) {
|
||||
new StackProvider(Material.FIREWORK_STAR) {
|
||||
@Override ItemStack operate(final ItemStack cleanStack) {
|
||||
final FireworkEffectMeta meta = (FireworkEffectMeta) cleanStack.getItemMeta();
|
||||
meta.setEffect(FireworkEffect.builder().withColor(Color.MAROON, Color.BLACK).with(Type.CREEPER).withFlicker().build());
|
||||
@@ -251,7 +257,7 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
return cleanStack;
|
||||
}
|
||||
},
|
||||
new StackProvider(Material.BANNER) {
|
||||
new StackProvider(Material.WHITE_BANNER) {
|
||||
@Override ItemStack operate(ItemStack cleanStack) {
|
||||
final BannerMeta meta = (BannerMeta) cleanStack.getItemMeta();
|
||||
meta.setBaseColor(DyeColor.CYAN);
|
||||
@@ -259,26 +265,38 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
cleanStack.setItemMeta(meta);
|
||||
return cleanStack;
|
||||
}
|
||||
},
|
||||
new StackProvider(Material.MONSTER_EGG) {
|
||||
},
|
||||
/* No distinguishing features, add back with virtual entity API
|
||||
new StackProvider(Material.ZOMBIE_SPAWN_EGG) {
|
||||
@Override ItemStack operate(ItemStack cleanStack) {
|
||||
final SpawnEggMeta meta = (SpawnEggMeta) cleanStack.getItemMeta();
|
||||
meta.setSpawnedType(EntityType.ZOMBIE);
|
||||
cleanStack.setItemMeta(meta);
|
||||
return cleanStack;
|
||||
}
|
||||
},
|
||||
new StackProvider(Material.KNOWLEDGE_BOOK) {
|
||||
}
|
||||
},
|
||||
*/
|
||||
new StackProvider(Material.KNOWLEDGE_BOOK) {
|
||||
@Override ItemStack operate(ItemStack cleanStack) {
|
||||
final KnowledgeBookMeta meta = (KnowledgeBookMeta) cleanStack.getItemMeta();
|
||||
meta.addRecipe(new NamespacedKey("minecraft", "test"), new NamespacedKey("plugin", "test"));
|
||||
cleanStack.setItemMeta(meta);
|
||||
return cleanStack;
|
||||
}
|
||||
},
|
||||
new StackProvider(Material.TROPICAL_FISH_BUCKET) {
|
||||
@Override ItemStack operate(ItemStack cleanStack) {
|
||||
final TropicalFishBucketMeta meta = (TropicalFishBucketMeta) cleanStack.getItemMeta();
|
||||
meta.setBodyColor(DyeColor.ORANGE);
|
||||
meta.setPatternColor(DyeColor.BLACK);
|
||||
meta.setPattern(TropicalFish.Pattern.DASHER);
|
||||
cleanStack.setItemMeta(meta);
|
||||
return cleanStack;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
assertThat("Forgotten test?", providers, hasSize(ItemStackTest.COMPOUND_MATERIALS.length - 3/* Normal item meta, skulls and tile entities */));
|
||||
assertThat("Forgotten test?", providers, hasSize(ItemStackTest.COMPOUND_MATERIALS.length - 4/* Normal item meta, skulls, eggs and tile entities */));
|
||||
|
||||
for (final StackProvider provider : providers) {
|
||||
downCastTest(new BukkitWrapper(provider));
|
||||
@@ -288,7 +306,7 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
|
||||
private void downCastTest(final StackWrapper provider) {
|
||||
final String name = provider.toString();
|
||||
final ItemStack blank = new ItemStack(1);
|
||||
final ItemStack blank = new ItemStack(Material.STONE);
|
||||
final ItemStack craftBlank = CraftItemStack.asCraftCopy(blank);
|
||||
|
||||
downCastTest(name, provider.stack(), blank);
|
||||
@@ -304,7 +322,7 @@ public class ItemMetaTest extends AbstractTestingBase {
|
||||
assertThat(name, stack, is(not(blank)));
|
||||
assertThat(name, stack.getItemMeta(), is(not(blank.getItemMeta())));
|
||||
|
||||
stack.setTypeId(1);
|
||||
stack.setType(Material.STONE);
|
||||
|
||||
assertThat(name, stack, is(blank));
|
||||
}
|
||||
|
@@ -17,7 +17,7 @@ public class ItemStackBookTest extends ItemStackTest {
|
||||
|
||||
@Parameters(name="[{index}]:{" + NAME_PARAMETER + "}")
|
||||
public static List<Object[]> data() {
|
||||
return StackProvider.compound(operators(), "%s %s", NAME_PARAMETER, Material.WRITTEN_BOOK, Material.BOOK_AND_QUILL);
|
||||
return StackProvider.compound(operators(), "%s %s", NAME_PARAMETER, Material.WRITTEN_BOOK, Material.WRITABLE_BOOK);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@@ -20,7 +20,7 @@ public class ItemStackFireworkChargeTest extends ItemStackTest {
|
||||
|
||||
@Parameters(name="[{index}]:{" + NAME_PARAMETER + "}")
|
||||
public static List<Object[]> data() {
|
||||
return StackProvider.compound(operators(), "%s %s", NAME_PARAMETER, Material.FIREWORK_CHARGE);
|
||||
return StackProvider.compound(operators(), "%s %s", NAME_PARAMETER, Material.FIREWORK_STAR);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@@ -20,7 +20,7 @@ public class ItemStackFireworkTest extends ItemStackTest {
|
||||
|
||||
@Parameters(name="[{index}]:{" + NAME_PARAMETER + "}")
|
||||
public static List<Object[]> data() {
|
||||
return StackProvider.compound(operators(), "%s %s", NAME_PARAMETER, Material.FIREWORK);
|
||||
return StackProvider.compound(operators(), "%s %s", NAME_PARAMETER, Material.FIREWORK_ROCKET);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@@ -17,7 +17,7 @@ public class ItemStackMapTest extends ItemStackTest {
|
||||
|
||||
@Parameters(name="[{index}]:{" + NAME_PARAMETER + "}")
|
||||
public static List<Object[]> data() {
|
||||
return StackProvider.compound(operators(), "%s %s", NAME_PARAMETER, Material.MAP);
|
||||
return StackProvider.compound(operators(), "%s %s", NAME_PARAMETER, Material.FILLED_MAP);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@@ -17,7 +17,7 @@ public class ItemStackSkullTest extends ItemStackTest {
|
||||
|
||||
@Parameters(name="[{index}]:{" + NAME_PARAMETER + "}")
|
||||
public static List<Object[]> data() {
|
||||
return StackProvider.compound(operators(), "%s %s", NAME_PARAMETER, Material.SKULL_ITEM);
|
||||
return StackProvider.compound(operators(), "%s %s", NAME_PARAMETER, Material.PLAYER_HEAD);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@@ -21,7 +21,6 @@ public class NMSCraftItemStackTest extends AbstractTestingBase {
|
||||
assertThat(clone.getAmount(), is(itemStack.getAmount()));
|
||||
assertThat(clone.getDurability(), is(itemStack.getDurability()));
|
||||
assertThat(clone.getEnchantments(), is(itemStack.getEnchantments()));
|
||||
assertThat(clone.getTypeId(), is(itemStack.getTypeId()));
|
||||
assertThat(clone.getData(), is(itemStack.getData()));
|
||||
assertThat(clone, is(itemStack));
|
||||
}
|
||||
|
29
src/test/java/org/bukkit/entity/EntityTypesTest.java
Normal file
29
src/test/java/org/bukkit/entity/EntityTypesTest.java
Normal file
@@ -0,0 +1,29 @@
|
||||
package org.bukkit.entity;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import net.minecraft.server.EntityTypes;
|
||||
import net.minecraft.server.MinecraftKey;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class EntityTypesTest {
|
||||
|
||||
@Test
|
||||
public void testMaps() {
|
||||
Set<EntityType> allBukkit = Arrays.stream(EntityType.values()).filter((b) -> b.getName() != null).collect(Collectors.toSet());
|
||||
|
||||
for (Object o : EntityTypes.REGISTRY) {
|
||||
EntityTypes<?> nms = (EntityTypes<?>) o; // Eclipse fail
|
||||
MinecraftKey key = EntityTypes.getName(nms);
|
||||
|
||||
EntityType bukkit = EntityType.fromName(key.getKey());
|
||||
Assert.assertNotNull("Missing nms->bukkit " + key, bukkit);
|
||||
|
||||
Assert.assertTrue("Duplicate entity nms->" + bukkit, allBukkit.remove(bukkit));
|
||||
}
|
||||
|
||||
Assert.assertTrue("Unmapped bukkit entities " + allBukkit, allBukkit.isEmpty());
|
||||
}
|
||||
}
|
45
src/test/java/org/bukkit/entity/TropicalFishTest.java
Normal file
45
src/test/java/org/bukkit/entity/TropicalFishTest.java
Normal file
@@ -0,0 +1,45 @@
|
||||
package org.bukkit.entity;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.craftbukkit.entity.CraftTropicalFish;
|
||||
import org.bukkit.entity.TropicalFish.Pattern;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class TropicalFishTest {
|
||||
|
||||
@Test
|
||||
public void testVariants() {
|
||||
testVariant(65536, DyeColor.ORANGE, DyeColor.WHITE, Pattern.KOB);
|
||||
testVariant(917504, DyeColor.RED, DyeColor.WHITE, Pattern.KOB);
|
||||
testVariant(918273, DyeColor.RED, DyeColor.WHITE, Pattern.BLOCKFISH);
|
||||
testVariant(918529, DyeColor.RED, DyeColor.WHITE, Pattern.BETTY);
|
||||
testVariant(16778497, DyeColor.WHITE, DyeColor.ORANGE, Pattern.CLAYFISH);
|
||||
testVariant(50660352, DyeColor.LIME, DyeColor.LIGHT_BLUE, Pattern.BRINELY);
|
||||
testVariant(50726144, DyeColor.PINK, DyeColor.LIGHT_BLUE, Pattern.SPOTTY);
|
||||
testVariant(50790656, DyeColor.GRAY, DyeColor.LIGHT_BLUE, Pattern.SUNSTREAK);
|
||||
testVariant(67108865, DyeColor.WHITE, DyeColor.YELLOW, Pattern.FLOPPER);
|
||||
testVariant(67110144, DyeColor.WHITE, DyeColor.YELLOW, Pattern.SPOTTY);
|
||||
testVariant(67371265, DyeColor.YELLOW, DyeColor.YELLOW, Pattern.STRIPEY);
|
||||
testVariant(67764993, DyeColor.PURPLE, DyeColor.YELLOW, Pattern.BLOCKFISH);
|
||||
testVariant(101253888, DyeColor.CYAN, DyeColor.PINK, Pattern.DASHER);
|
||||
testVariant(117441025, DyeColor.WHITE, DyeColor.GRAY, Pattern.GLITTER);
|
||||
testVariant(117441280, DyeColor.WHITE, DyeColor.GRAY, Pattern.DASHER);
|
||||
testVariant(117441536, DyeColor.WHITE, DyeColor.GRAY, Pattern.BRINELY);
|
||||
testVariant(117506305, DyeColor.ORANGE, DyeColor.GRAY, Pattern.STRIPEY);
|
||||
testVariant(117899265, DyeColor.GRAY, DyeColor.GRAY, Pattern.FLOPPER);
|
||||
testVariant(118161664, DyeColor.BLUE, DyeColor.GRAY, Pattern.SUNSTREAK);
|
||||
testVariant(134217984, DyeColor.WHITE, DyeColor.SILVER, Pattern.SUNSTREAK);
|
||||
testVariant(234882305, DyeColor.WHITE, DyeColor.RED, Pattern.CLAYFISH);
|
||||
testVariant(235340288, DyeColor.GRAY, DyeColor.RED, Pattern.SNOOPER);
|
||||
}
|
||||
|
||||
private void testVariant(int variant, DyeColor bodyColor, DyeColor patternColor, Pattern pattern) {
|
||||
assertThat("variant write", CraftTropicalFish.getData(patternColor, bodyColor, pattern), is(variant));
|
||||
assertThat("pattern colour read", CraftTropicalFish.getPatternColor(variant), is(patternColor));
|
||||
assertThat("body colour read", CraftTropicalFish.getBodyColor(variant), is(bodyColor));
|
||||
assertThat("pattern read", CraftTropicalFish.getPattern(variant), is(pattern));
|
||||
}
|
||||
}
|
@@ -24,7 +24,7 @@ public class MapTest {
|
||||
if (nmsColors[i] == null) {
|
||||
break;
|
||||
}
|
||||
int rgb = nmsColors[i].ac;
|
||||
int rgb = nmsColors[i].rgb;
|
||||
|
||||
int r = (rgb >> 16) & 0xFF;
|
||||
int g = (rgb >> 8) & 0xFF;
|
||||
|
@@ -30,6 +30,6 @@ public class PotionTest extends AbstractTestingBase {
|
||||
effects.put(enumType, enumType.name());
|
||||
}
|
||||
|
||||
assertEquals(effects.entrySet().size(), PotionType.values().length - /* PotionTypes with no Effects */ 5);
|
||||
assertEquals(effects.entrySet().size(), PotionType.values().length - /* PotionTypes with no/shared Effects */ 6);
|
||||
}
|
||||
}
|
||||
|
@@ -1,10 +1,16 @@
|
||||
package org.bukkit.support;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import net.minecraft.server.DispenserRegistry;
|
||||
import net.minecraft.server.EnumResourcePackType;
|
||||
import net.minecraft.server.ResourceManager;
|
||||
import net.minecraft.server.ResourcePackVanilla;
|
||||
import net.minecraft.server.TagRegistry;
|
||||
import org.bukkit.Material;
|
||||
import org.junit.BeforeClass;
|
||||
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
import org.junit.Assert;
|
||||
|
||||
/**
|
||||
* If you are getting: java.lang.ExceptionInInitializerError
|
||||
@@ -15,67 +21,28 @@ import org.junit.BeforeClass;
|
||||
* extend this class to solve it.
|
||||
*/
|
||||
public abstract class AbstractTestingBase {
|
||||
public static final List<Material> INVALIDATED_MATERIALS = ImmutableList.<Material>builder()
|
||||
.add(
|
||||
Material.BREWING_STAND,
|
||||
Material.BED_BLOCK,
|
||||
Material.NETHER_WARTS,
|
||||
Material.CAULDRON,
|
||||
Material.FLOWER_POT,
|
||||
Material.CROPS,
|
||||
Material.SUGAR_CANE_BLOCK,
|
||||
Material.CAKE_BLOCK,
|
||||
Material.SKULL,
|
||||
Material.PISTON_EXTENSION,
|
||||
Material.PISTON_MOVING_PIECE,
|
||||
Material.GLOWING_REDSTONE_ORE,
|
||||
Material.DIODE_BLOCK_ON,
|
||||
Material.PUMPKIN_STEM,
|
||||
Material.SIGN_POST,
|
||||
Material.REDSTONE_COMPARATOR_ON,
|
||||
Material.TRIPWIRE,
|
||||
Material.REDSTONE_LAMP_ON,
|
||||
Material.MELON_STEM,
|
||||
Material.REDSTONE_TORCH_OFF,
|
||||
Material.REDSTONE_COMPARATOR_OFF,
|
||||
Material.REDSTONE_WIRE,
|
||||
Material.WALL_SIGN,
|
||||
Material.DIODE_BLOCK_OFF,
|
||||
Material.IRON_DOOR_BLOCK,
|
||||
Material.WOODEN_DOOR,
|
||||
Material.WATER,
|
||||
Material.STATIONARY_WATER,
|
||||
Material.LAVA,
|
||||
Material.STATIONARY_LAVA,
|
||||
Material.DOUBLE_STEP,
|
||||
Material.DOUBLE_STEP,
|
||||
Material.FIRE,
|
||||
Material.PORTAL,
|
||||
Material.ENDER_PORTAL,
|
||||
Material.WOOD_DOUBLE_STEP,
|
||||
Material.COCOA,
|
||||
Material.CARROT,
|
||||
Material.POTATO,
|
||||
Material.STANDING_BANNER,
|
||||
Material.WALL_BANNER,
|
||||
Material.DAYLIGHT_DETECTOR_INVERTED,
|
||||
Material.DOUBLE_STONE_SLAB2,
|
||||
Material.SPRUCE_DOOR,
|
||||
Material.BIRCH_DOOR,
|
||||
Material.JUNGLE_DOOR,
|
||||
Material.ACACIA_DOOR,
|
||||
Material.DARK_OAK_DOOR,
|
||||
Material.PURPUR_DOUBLE_SLAB,
|
||||
Material.BEETROOT_BLOCK,
|
||||
Material.END_GATEWAY,
|
||||
Material.BURNING_FURNACE,
|
||||
Material.FROSTED_ICE
|
||||
).build();
|
||||
// Materials that only exist in block form (or are legacy)
|
||||
public static final List<Material> INVALIDATED_MATERIALS;
|
||||
|
||||
@BeforeClass
|
||||
public static void setup() {
|
||||
static {
|
||||
DispenserRegistry.c();
|
||||
// Set up resource manager
|
||||
ResourceManager resourceManager = new ResourceManager(EnumResourcePackType.SERVER_DATA);
|
||||
// add tags for unit tests
|
||||
resourceManager.a(new TagRegistry());
|
||||
// Register vanilla pack
|
||||
resourceManager.a(Collections.singletonList(new ResourcePackVanilla("minecraft")));
|
||||
|
||||
DummyServer.setup();
|
||||
DummyEnchantments.setup();
|
||||
|
||||
ImmutableList.Builder<Material> builder = ImmutableList.builder();
|
||||
for (Material m : Material.values()) {
|
||||
if (m.isLegacy() || CraftMagicNumbers.getItem(m) == null) {
|
||||
builder.add(m);
|
||||
}
|
||||
}
|
||||
INVALIDATED_MATERIALS = builder.build();
|
||||
Assert.assertTrue("Expected 533 invalidated materials (got " + INVALIDATED_MATERIALS.size() + ")", INVALIDATED_MATERIALS.size() == 533);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -7,8 +7,11 @@ import java.util.HashMap;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.craftbukkit.block.data.CraftBlockData;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemFactory;
|
||||
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
import org.bukkit.craftbukkit.util.Versioning;
|
||||
|
||||
public class DummyServer implements InvocationHandler {
|
||||
@@ -59,6 +62,23 @@ public class DummyServer implements InvocationHandler {
|
||||
}
|
||||
}
|
||||
);
|
||||
methods.put(
|
||||
Server.class.getMethod("getUnsafe"),
|
||||
new MethodHandler() {
|
||||
public Object handle(DummyServer server, Object[] args) {
|
||||
return CraftMagicNumbers.INSTANCE;
|
||||
}
|
||||
}
|
||||
);
|
||||
methods.put(
|
||||
Server.class.getMethod("createBlockData", Material.class),
|
||||
new MethodHandler() {
|
||||
final Logger logger = Logger.getLogger(DummyServer.class.getCanonicalName());
|
||||
public Object handle(DummyServer server, Object[] args) {
|
||||
return CraftBlockData.newData((Material) args[0], null);
|
||||
}
|
||||
}
|
||||
);
|
||||
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