Update to Minecraft 1.17

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot
2021-06-11 15:00:00 +10:00
parent 75faba7fde
commit b3a8254758
619 changed files with 10708 additions and 8451 deletions

View File

@@ -17,14 +17,14 @@ public class BiomeTest extends AbstractTestingBase {
continue;
}
Assert.assertNotNull("No NMS mapping for " + biome, CraftBlock.biomeToBiomeBase(RegistryGeneration.WORLDGEN_BIOME, biome));
Assert.assertNotNull("No NMS mapping for " + biome, CraftBlock.biomeToBiomeBase(RegistryGeneration.BIOME, biome));
}
}
@Test
public void testMinecraftToBukkit() {
for (BiomeBase biomeBase : RegistryGeneration.WORLDGEN_BIOME) {
Biome biome = CraftBlock.biomeBaseToBiome(RegistryGeneration.WORLDGEN_BIOME, biomeBase);
for (BiomeBase biomeBase : RegistryGeneration.BIOME) {
Biome biome = CraftBlock.biomeBaseToBiome(RegistryGeneration.BIOME, biomeBase);
Assert.assertTrue("No Bukkit mapping for " + biomeBase, biome != null && biome != Biome.CUSTOM);
}
}

View File

@@ -0,0 +1,19 @@
package org.bukkit;
import net.minecraft.core.IRegistry;
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
import org.bukkit.support.AbstractTestingBase;
import org.junit.Assert;
import org.junit.Test;
public class GameEventTest extends AbstractTestingBase {
@Test
public void toBukkit() {
for (net.minecraft.world.level.gameevent.GameEvent nms : IRegistry.GAME_EVENT) {
GameEvent bukkit = GameEvent.getByKey(CraftNamespacedKey.fromMinecraft(IRegistry.GAME_EVENT.getKey(nms)));
Assert.assertNotNull("Bukkit should not be null " + nms, bukkit);
}
}
}

View File

@@ -22,6 +22,10 @@ public class ParticleTest extends AbstractTestingBase {
data = new MaterialData(Material.LEGACY_STONE);
} else if (bukkit.getDataType() == Particle.DustOptions.class) {
data = new Particle.DustOptions(Color.BLACK, 0);
} else if (bukkit.getDataType() == Particle.DustTransition.class) {
data = new Particle.DustTransition(Color.BLACK, Color.WHITE, 0);
} else if (bukkit.getDataType() == Vibration.class) {
data = new Vibration(new Location(null, 0, 0, 0), new Vibration.Destination.BlockDestination(new Location(null, 0, 0, 0)), 0);
} else if (bukkit.getDataType() == BlockData.class) {
data = CraftBlockData.newData(Material.STONE, "");
}

View File

@@ -27,7 +27,6 @@ import org.bukkit.enchantments.EnchantmentTarget;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.bukkit.support.AbstractTestingBase;
import org.bukkit.support.Util;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -41,7 +40,7 @@ public class PerMaterialTest extends AbstractTestingBase {
@BeforeClass
public static void getFireValues() {
fireValues = Util.getInternalState(BlockFire.class, Blocks.FIRE, "flameChances");
fireValues = ((BlockFire) Blocks.FIRE).flameOdds;
}
@Parameters(name = "{index}: {0}")
@@ -232,7 +231,7 @@ public class PerMaterialTest extends AbstractTestingBase {
@Test
public void testBlockHardness() {
if (material.isBlock()) {
assertThat(material.getHardness(), is(CraftMagicNumbers.getBlock(material).getBlockData().strength));
assertThat(material.getHardness(), is(CraftMagicNumbers.getBlock(material).getBlockData().destroySpeed));
}
}
@@ -263,7 +262,7 @@ public class PerMaterialTest extends AbstractTestingBase {
@Test
public void testEquipmentSlot() {
if (material.isItem()) {
EquipmentSlot expected = CraftEquipmentSlot.getSlot(EntityInsentient.j(CraftItemStack.asNMSCopy(new ItemStack(material)))); // PAIL rename getEquipmentSlotForItem
EquipmentSlot expected = CraftEquipmentSlot.getSlot(EntityInsentient.getEquipmentSlotForItem(CraftItemStack.asNMSCopy(new ItemStack(material))));
assertThat(material.getEquipmentSlot(), is(expected));
}
}

View File

@@ -31,7 +31,7 @@ public class StatisticsAndAchievementsTest extends AbstractTestingBase {
@SuppressWarnings("unchecked")
public void verifyStatisticMapping() throws Throwable {
HashMultiset<Statistic> statistics = HashMultiset.create();
for (StatisticWrapper wrapper : IRegistry.STATS) {
for (StatisticWrapper wrapper : IRegistry.STAT_TYPE) {
for (Object child : wrapper.getRegistry()) {
net.minecraft.stats.Statistic<?> statistic = wrapper.b(child);
String message = String.format("org.bukkit.Statistic is missing: '%s'", statistic);

View File

@@ -32,16 +32,23 @@ public class ChunkDataTest extends AbstractTestingBase {
}
}
@Test
public void testMinHeight() {
CraftChunkData data = new CraftChunkData(-128, 128);
assertTrue("Could not set block below min height", testSetBlock(data, 0, -256, 0, RED_WOOL, AIR));
assertTrue("Could set block above min height", testSetBlock(data, 0, -64, 0, RED_WOOL, RED_WOOL));
}
@Test
public void testMaxHeight() {
CraftChunkData data = new CraftChunkData(128);
CraftChunkData data = new CraftChunkData(0, 128);
assertTrue("Could not set block above max height", testSetBlock(data, 0, 128, 0, RED_WOOL, AIR));
assertTrue("Could set block below max height", testSetBlock(data, 0, 127, 0, RED_WOOL, RED_WOOL));
}
@Test
public void testBoundsCheckingSingle() {
CraftChunkData data = new CraftChunkData(256);
CraftChunkData data = new CraftChunkData(0, 256);
assertTrue("Can set block inside chunk bounds", testSetBlock(data, 0, 0, 0, RED_WOOL, RED_WOOL));
assertTrue("Can set block inside chunk bounds", testSetBlock(data, 15, 255, 15, RED_WOOL, RED_WOOL));
assertTrue("Can no set block outside chunk bounds", testSetBlock(data, -1, 0, 0, RED_WOOL, AIR));
@@ -54,7 +61,7 @@ public class ChunkDataTest extends AbstractTestingBase {
@Test
public void testSetRegion() {
CraftChunkData data = new CraftChunkData(256);
CraftChunkData data = new CraftChunkData(0, 256);
testSetRegion(data, -100, 0, -100, 0, 256, 0, RED_WOOL); // exclusively outside
testSetRegion(data, 16, 256, 16, 0, 0, 0, RED_WOOL); // minimum >= maximum
testSetRegion(data, 0, 0, 0, 0, 0, 0, RED_WOOL); // minimum == maximum

View File

@@ -36,6 +36,7 @@ import org.bukkit.inventory.meta.BannerMeta;
import org.bukkit.inventory.meta.BlockDataMeta;
import org.bukkit.inventory.meta.BlockStateMeta;
import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.inventory.meta.BundleMeta;
import org.bukkit.inventory.meta.CrossbowMeta;
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import org.bukkit.inventory.meta.FireworkEffectMeta;
@@ -341,6 +342,14 @@ public class ItemMetaTest extends AbstractTestingBase {
cleanStack.setItemMeta(meta);
return cleanStack;
}
},
new StackProvider(Material.BUNDLE) {
@Override ItemStack operate(ItemStack cleanStack) {
final BundleMeta meta = (BundleMeta) cleanStack.getItemMeta();
meta.addItem(new ItemStack(Material.STONE));
cleanStack.setItemMeta(meta);
return cleanStack;
}
}
);

View File

@@ -12,7 +12,7 @@ public class NMSCraftItemStackTest extends AbstractTestingBase {
@Test
public void testCloneEnchantedItem() throws Exception {
net.minecraft.world.item.ItemStack nmsItemStack = new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.POTION);
nmsItemStack.addEnchantment(Enchantments.DAMAGE_ALL, 1);
nmsItemStack.addEnchantment(Enchantments.SHARPNESS, 1);
ItemStack itemStack = CraftItemStack.asCraftMirror(nmsItemStack);
ItemStack clone = itemStack.clone();
assertThat(clone.getType(), is(itemStack.getType()));

View File

@@ -64,6 +64,25 @@ public class LegacyTest extends AbstractTestingBase {
Material.SOUL_CAMPFIRE, Material.STRIDER_SPAWN_EGG, Material.WARPED_FUNGUS_ON_A_STICK, Material.ZOGLIN_SPAWN_EGG, Material.CHAIN, Material.MUSIC_DISC_PIGSTEP,
// 1.16.2
Material.PIGLIN_BRUTE_SPAWN_EGG,
// 1.17
Material.AMETHYST_BLOCK, Material.AMETHYST_CLUSTER, Material.AMETHYST_SHARD, Material.AXOLOTL_BUCKET, Material.AXOLOTL_SPAWN_EGG, Material.AZALEA, Material.AZALEA_LEAVES, Material.FLOWERING_AZALEA_LEAVES, Material.BIG_DRIPLEAF,
Material.BIG_DRIPLEAF_STEM, Material.BLACK_CANDLE, Material.BLACK_CANDLE_CAKE, Material.BLUE_CANDLE, Material.BLUE_CANDLE_CAKE, Material.BROWN_CANDLE, Material.BROWN_CANDLE_CAKE, Material.BUDDING_AMETHYST, Material.BUNDLE, Material.CALCITE,
Material.CANDLE, Material.CANDLE_CAKE, Material.CAVE_VINES, Material.CAVE_VINES_PLANT, Material.CHISELED_DEEPSLATE, Material.COBBLED_DEEPSLATE, Material.COBBLED_DEEPSLATE_SLAB, Material.COBBLED_DEEPSLATE_STAIRS, Material.COBBLED_DEEPSLATE_WALL,
Material.COPPER_BLOCK, Material.COPPER_INGOT, Material.COPPER_ORE, Material.CRACKED_DEEPSLATE_BRICKS, Material.CRACKED_DEEPSLATE_TILES, Material.CUT_COPPER, Material.CUT_COPPER_SLAB, Material.CUT_COPPER_STAIRS, Material.CYAN_CANDLE,
Material.CYAN_CANDLE_CAKE, Material.DEEPSLATE, Material.DEEPSLATE_BRICKS, Material.DEEPSLATE_BRICK_SLAB, Material.DEEPSLATE_BRICK_STAIRS, Material.DEEPSLATE_BRICK_WALL, Material.DEEPSLATE_COAL_ORE, Material.DEEPSLATE_COPPER_ORE,
Material.DEEPSLATE_DIAMOND_ORE, Material.DEEPSLATE_EMERALD_ORE, Material.DEEPSLATE_GOLD_ORE, Material.DEEPSLATE_IRON_ORE, Material.DEEPSLATE_LAPIS_ORE, Material.DEEPSLATE_REDSTONE_ORE, Material.DEEPSLATE_TILES, Material.DEEPSLATE_TILE_SLAB,
Material.DEEPSLATE_TILE_STAIRS, Material.DEEPSLATE_TILE_WALL, Material.DRIPSTONE_BLOCK, Material.EXPOSED_COPPER, Material.EXPOSED_CUT_COPPER, Material.EXPOSED_CUT_COPPER_SLAB, Material.EXPOSED_CUT_COPPER_STAIRS, Material.FLOWERING_AZALEA,
Material.GLOW_BERRIES, Material.GLOW_INK_SAC, Material.GLOW_ITEM_FRAME, Material.GLOW_LICHEN, Material.GLOW_SQUID_SPAWN_EGG, Material.GOAT_SPAWN_EGG, Material.GRAY_CANDLE, Material.GRAY_CANDLE_CAKE, Material.GREEN_CANDLE,
Material.GREEN_CANDLE_CAKE, Material.HANGING_ROOTS, Material.INFESTED_DEEPSLATE, Material.LARGE_AMETHYST_BUD, Material.LAVA_CAULDRON, Material.LIGHT, Material.LIGHTNING_ROD, Material.LIGHT_BLUE_CANDLE, Material.LIGHT_BLUE_CANDLE_CAKE,
Material.LIGHT_GRAY_CANDLE, Material.LIGHT_GRAY_CANDLE_CAKE, Material.LIME_CANDLE, Material.LIME_CANDLE_CAKE, Material.MAGENTA_CANDLE, Material.MAGENTA_CANDLE_CAKE, Material.MEDIUM_AMETHYST_BUD, Material.MOSS_BLOCK, Material.MOSS_CARPET,
Material.ORANGE_CANDLE, Material.ORANGE_CANDLE_CAKE, Material.OXIDIZED_COPPER, Material.OXIDIZED_CUT_COPPER, Material.OXIDIZED_CUT_COPPER_SLAB, Material.OXIDIZED_CUT_COPPER_STAIRS, Material.PINK_CANDLE, Material.PINK_CANDLE_CAKE,
Material.POINTED_DRIPSTONE, Material.POLISHED_DEEPSLATE, Material.POLISHED_DEEPSLATE_SLAB, Material.POLISHED_DEEPSLATE_STAIRS, Material.POLISHED_DEEPSLATE_WALL, Material.POWDER_SNOW, Material.POWDER_SNOW_BUCKET, Material.POWDER_SNOW_CAULDRON,
Material.PURPLE_CANDLE, Material.PURPLE_CANDLE_CAKE, Material.RAW_COPPER, Material.RAW_COPPER_BLOCK, Material.RAW_GOLD, Material.RAW_GOLD_BLOCK, Material.RAW_IRON, Material.RAW_IRON_BLOCK, Material.RED_CANDLE, Material.RED_CANDLE_CAKE,
Material.ROOTED_DIRT, Material.SCULK_SENSOR, Material.SMALL_AMETHYST_BUD, Material.SMALL_DRIPLEAF, Material.SMOOTH_BASALT, Material.SPORE_BLOSSOM, Material.SPYGLASS, Material.TINTED_GLASS, Material.TUFF, Material.WATER_CAULDRON,
Material.WAXED_COPPER_BLOCK, Material.WAXED_CUT_COPPER, Material.WAXED_CUT_COPPER_SLAB, Material.WAXED_CUT_COPPER_STAIRS, Material.WAXED_EXPOSED_COPPER, Material.WAXED_EXPOSED_CUT_COPPER, Material.WAXED_EXPOSED_CUT_COPPER_SLAB,
Material.WAXED_EXPOSED_CUT_COPPER_STAIRS, Material.WAXED_OXIDIZED_COPPER, Material.WAXED_OXIDIZED_CUT_COPPER, Material.WAXED_OXIDIZED_CUT_COPPER_SLAB, Material.WAXED_OXIDIZED_CUT_COPPER_STAIRS, Material.WAXED_WEATHERED_COPPER,
Material.WAXED_WEATHERED_CUT_COPPER, Material.WAXED_WEATHERED_CUT_COPPER_SLAB, Material.WAXED_WEATHERED_CUT_COPPER_STAIRS, Material.WEATHERED_COPPER, Material.WEATHERED_CUT_COPPER, Material.WEATHERED_CUT_COPPER_SLAB,
Material.WEATHERED_CUT_COPPER_STAIRS, Material.WHITE_CANDLE, Material.WHITE_CANDLE_CAKE, Material.YELLOW_CANDLE, Material.YELLOW_CANDLE_CAKE, Material.POTTED_AZALEA_BUSH, Material.POTTED_FLOWERING_AZALEA_BUSH,
//
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));

View File

@@ -28,7 +28,7 @@ public class EnderDragonPhaseTest {
Assert.assertEquals("ROAR_BEFORE_ATTACK", CraftEnderDragon.getMinecraftPhase(EnderDragon.Phase.ROAR_BEFORE_ATTACK), DragonControllerPhase.SITTING_ATTACKING);
Assert.assertEquals("CHARGE_PLAYER", CraftEnderDragon.getMinecraftPhase(EnderDragon.Phase.CHARGE_PLAYER), DragonControllerPhase.CHARGING_PLAYER);
Assert.assertEquals("DYING", CraftEnderDragon.getMinecraftPhase(EnderDragon.Phase.DYING), DragonControllerPhase.DYING);
Assert.assertEquals("HOVER", CraftEnderDragon.getMinecraftPhase(EnderDragon.Phase.HOVER), DragonControllerPhase.HOVER);
Assert.assertEquals("HOVER", CraftEnderDragon.getMinecraftPhase(EnderDragon.Phase.HOVER), DragonControllerPhase.HOVERING);
}
@Test
@@ -43,6 +43,6 @@ public class EnderDragonPhaseTest {
Assert.assertEquals("ROAR_BEFORE_ATTACK", CraftEnderDragon.getBukkitPhase(DragonControllerPhase.SITTING_ATTACKING), EnderDragon.Phase.ROAR_BEFORE_ATTACK);
Assert.assertEquals("CHARGE_PLAYER", CraftEnderDragon.getBukkitPhase(DragonControllerPhase.CHARGING_PLAYER), EnderDragon.Phase.CHARGE_PLAYER);
Assert.assertEquals("DYING", CraftEnderDragon.getBukkitPhase(DragonControllerPhase.DYING), EnderDragon.Phase.DYING);
Assert.assertEquals("HOVER", CraftEnderDragon.getBukkitPhase(DragonControllerPhase.HOVER), EnderDragon.Phase.HOVER);
Assert.assertEquals("HOVER", CraftEnderDragon.getBukkitPhase(DragonControllerPhase.HOVERING), EnderDragon.Phase.HOVER);
}
}

View File

@@ -49,7 +49,7 @@ public class CraftMemoryKeyTest extends AbstractTestingBase {
@Test
public void shouldReturnNullWhenBukkitRepresentationOfKeyisNotAvailable() {
MemoryKey bukkitNoKey = CraftMemoryKey.toMemoryKey(MemoryModuleType.MOBS);
MemoryKey bukkitNoKey = CraftMemoryKey.toMemoryKey(MemoryModuleType.NEAREST_LIVING_ENTITIES);
Assert.assertNull("MemoryModuleType should be null", bukkitNoKey);
}

View File

@@ -15,7 +15,7 @@ public class MapTest {
@Test
public void testColors() {
MaterialMapColor[] nmsColors = MaterialMapColor.a;
MaterialMapColor[] nmsColors = MaterialMapColor.MATERIAL_COLORS;
Color[] bukkitColors = MapPalette.colors;
boolean fail = false;
@@ -23,7 +23,7 @@ public class MapTest {
if (nmsColors[i] == null) {
break;
}
int rgb = nmsColors[i].rgb;
int rgb = nmsColors[i].col;
int r = (rgb >> 16) & 0xFF;
int g = (rgb >> 8) & 0xFF;

View File

@@ -5,9 +5,12 @@ import com.google.common.util.concurrent.MoreExecutors;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import net.minecraft.SharedConstants;
import net.minecraft.core.IRegistryCustom;
import net.minecraft.server.DispenserRegistry;
import net.minecraft.server.packs.EnumResourcePackType;
import net.minecraft.server.packs.ResourcePackVanilla;
import net.minecraft.server.packs.repository.ResourcePackSourceVanilla;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.tags.TagRegistry;
import net.minecraft.util.Unit;
@@ -33,14 +36,15 @@ public abstract class AbstractTestingBase {
public static final TagRegistry TAG_REGISTRY;
static {
SharedConstants.a();
DispenserRegistry.init();
// Set up resource manager
ResourceManager resourceManager = new ResourceManager(EnumResourcePackType.SERVER_DATA);
// add tags and loot tables for unit tests
resourceManager.a(TAG_REGISTRY = new TagRegistry());
resourceManager.a(TAG_REGISTRY = new TagRegistry(IRegistryCustom.a()));
resourceManager.a(LOOT_TABLE_REGISTRY = new LootTableRegistry(new LootPredicateManager()));
// Register vanilla pack
resourceManager.a(MoreExecutors.directExecutor(), MoreExecutors.directExecutor(), Collections.singletonList(new ResourcePackVanilla("minecraft")), CompletableFuture.completedFuture(Unit.INSTANCE)).join();
resourceManager.a(MoreExecutors.directExecutor(), MoreExecutors.directExecutor(), Collections.singletonList(new ResourcePackVanilla(ResourcePackSourceVanilla.BUILT_IN_METADATA, "minecraft")), CompletableFuture.completedFuture(Unit.INSTANCE)).join();
// Bind tags
TAG_REGISTRY.a().bind();
@@ -54,6 +58,6 @@ public abstract class AbstractTestingBase {
}
}
INVALIDATED_MATERIALS = builder.build();
Assert.assertEquals("Expected 564 invalidated materials (got " + INVALIDATED_MATERIALS.size() + ")", 564, INVALIDATED_MATERIALS.size());
Assert.assertEquals("Expected 590 invalidated materials (got " + INVALIDATED_MATERIALS.size() + ")", 590, INVALIDATED_MATERIALS.size());
}
}

View File

@@ -4,7 +4,7 @@ import net.minecraft.world.item.enchantment.Enchantments;
public class DummyEnchantments {
static {
Enchantments.DAMAGE_ALL.getClass();
Enchantments.SHARPNESS.getClass();
org.bukkit.enchantments.Enchantment.stopAcceptingRegistrations();
}

View File

@@ -1,31 +0,0 @@
package org.bukkit.support;
import java.lang.reflect.Field;
public class Util {
/*
public static <T> T getInternalState(Object object, String fieldName) {
return getInternalState(object.getClass(), object, fieldName);
}
*/
@SuppressWarnings("unchecked")
public static <T> T getInternalState(Class<?> clazz, Object object, String fieldName) {
Field field;
try {
field = clazz.getDeclaredField(fieldName);
} catch (SecurityException e) {
throw new RuntimeException("Not allowed to access " + clazz, e);
} catch (NoSuchFieldException e) {
throw new RuntimeException("Unable to find field " + fieldName, e);
}
field.setAccessible(true);
try {
return (T) field.get(object);
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
throw new RuntimeException("Unable to get internal value");
}
}