diff --git a/pom.xml b/pom.xml
index 3a1ae84b..ae5f7d00 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.bukkit
bukkit
- 1.19.3-R0.1-SNAPSHOT
+ 1.19.4-R0.1-SNAPSHOT
jar
Bukkit
@@ -45,6 +45,13 @@
2.10
compile
+
+
+ org.joml
+ joml
+ 1.10.5
+ compile
+
org.yaml
snakeyaml
diff --git a/src/main/java/org/bukkit/GameEvent.java b/src/main/java/org/bukkit/GameEvent.java
index 4808824a..a472a6b8 100644
--- a/src/main/java/org/bukkit/GameEvent.java
+++ b/src/main/java/org/bukkit/GameEvent.java
@@ -45,9 +45,11 @@ public final class GameEvent implements Keyed {
@Deprecated
public static final GameEvent ENTITY_DAMAGED = getEvent("entity_damage");
public static final GameEvent ENTITY_DIE = getEvent("entity_die");
+ public static final GameEvent ENTITY_DISMOUNT = getEvent("entity_dismount");
@Deprecated
public static final GameEvent ENTITY_DYING = getEvent("entity_die");
public static final GameEvent ENTITY_INTERACT = getEvent("entity_interact");
+ public static final GameEvent ENTITY_MOUNT = getEvent("entity_mount");
@Deprecated
public static final GameEvent ENTITY_KILLED = getEvent("entity_die");
public static final GameEvent ENTITY_PLACE = getEvent("entity_place");
diff --git a/src/main/java/org/bukkit/GameRule.java b/src/main/java/org/bukkit/GameRule.java
index 0a66077d..753bfcec 100644
--- a/src/main/java/org/bukkit/GameRule.java
+++ b/src/main/java/org/bukkit/GameRule.java
@@ -202,6 +202,10 @@ public final class GameRule {
* end portal effects will propagate across the entire server.
*/
public static final GameRule GLOBAL_SOUND_EVENTS = new GameRule<>("globalSoundEvents", Boolean.class);
+ /**
+ * Whether vines will spread.
+ */
+ public static final GameRule DO_VINES_SPREAD = new GameRule<>("doVinesSpread", Boolean.class);
// Numerical rules
/**
@@ -235,6 +239,11 @@ public final class GameRule {
*/
public static final GameRule MAX_COMMAND_CHAIN_LENGTH = new GameRule<>("maxCommandChainLength", Integer.class);
+ /**
+ * Determines the maximum number of blocks which a command can modify.
+ */
+ public static final GameRule COMMAND_MODIFICATION_BLOCK_LIMIT = new GameRule<>("commandModificationBlockLimit", Integer.class);
+
/**
* The percentage of online players which must be sleeping for the night to
* advance.
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
index d1cb98a4..bef8b786 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
@@ -46,6 +46,7 @@ import org.bukkit.block.data.type.CommandBlock;
import org.bukkit.block.data.type.Comparator;
import org.bukkit.block.data.type.CoralWallFan;
import org.bukkit.block.data.type.DaylightDetector;
+import org.bukkit.block.data.type.DecoratedPot;
import org.bukkit.block.data.type.Dispenser;
import org.bukkit.block.data.type.Door;
import org.bukkit.block.data.type.Dripleaf;
@@ -72,6 +73,7 @@ import org.bukkit.block.data.type.LightningRod;
import org.bukkit.block.data.type.MangrovePropagule;
import org.bukkit.block.data.type.NoteBlock;
import org.bukkit.block.data.type.Observer;
+import org.bukkit.block.data.type.PinkPetals;
import org.bukkit.block.data.type.Piston;
import org.bukkit.block.data.type.PistonHead;
import org.bukkit.block.data.type.PointedDripstone;
@@ -93,6 +95,7 @@ import org.bukkit.block.data.type.SmallDripleaf;
import org.bukkit.block.data.type.Snow;
import org.bukkit.block.data.type.Stairs;
import org.bukkit.block.data.type.StructureBlock;
+import org.bukkit.block.data.type.SuspiciousSand;
import org.bukkit.block.data.type.Switch;
import org.bukkit.block.data.type.TNT;
import org.bukkit.block.data.type.TechnicalPiston;
@@ -151,6 +154,7 @@ public enum Material implements Keyed, Translatable {
BIRCH_PLANKS(29322),
JUNGLE_PLANKS(26445),
ACACIA_PLANKS(31312),
+ CHERRY_PLANKS(8354),
DARK_OAK_PLANKS(20869),
MANGROVE_PLANKS(7078),
BAMBOO_PLANKS(8520),
@@ -177,6 +181,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Sapling}
*/
ACACIA_SAPLING(20806, Sapling.class),
+ /**
+ * BlockData: {@link Sapling}
+ */
+ CHERRY_SAPLING(25204, Sapling.class),
/**
* BlockData: {@link Sapling}
*/
@@ -187,6 +195,10 @@ public enum Material implements Keyed, Translatable {
MANGROVE_PROPAGULE(18688, MangrovePropagule.class),
BEDROCK(23130),
SAND(11542),
+ /**
+ * BlockData: {@link SuspiciousSand}
+ */
+ SUSPICIOUS_SAND(18410, SuspiciousSand.class),
RED_SAND(16279),
GRAVEL(7804),
COAL_ORE(30965),
@@ -324,6 +336,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Orientable}
*/
ACACIA_LOG(8385, Orientable.class),
+ /**
+ * BlockData: {@link Orientable}
+ */
+ CHERRY_LOG(20847, Orientable.class),
/**
* BlockData: {@link Orientable}
*/
@@ -372,6 +388,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Orientable}
*/
STRIPPED_ACACIA_LOG(18167, Orientable.class),
+ /**
+ * BlockData: {@link Orientable}
+ */
+ STRIPPED_CHERRY_LOG(18061, Orientable.class),
/**
* BlockData: {@link Orientable}
*/
@@ -408,6 +428,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Orientable}
*/
STRIPPED_ACACIA_WOOD(27193, Orientable.class),
+ /**
+ * BlockData: {@link Orientable}
+ */
+ STRIPPED_CHERRY_WOOD(19647, Orientable.class),
/**
* BlockData: {@link Orientable}
*/
@@ -448,6 +472,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Orientable}
*/
ACACIA_WOOD(9541, Orientable.class),
+ /**
+ * BlockData: {@link Orientable}
+ */
+ CHERRY_WOOD(9826, Orientable.class),
/**
* BlockData: {@link Orientable}
*/
@@ -484,6 +512,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Leaves}
*/
ACACIA_LEAVES(16606, Leaves.class),
+ /**
+ * BlockData: {@link Leaves}
+ */
+ CHERRY_LEAVES(20856, Leaves.class),
/**
* BlockData: {@link Leaves}
*/
@@ -548,6 +580,7 @@ public enum Material implements Keyed, Translatable {
CORNFLOWER(15405),
LILY_OF_THE_VALLEY(7185),
WITHER_ROSE(8619),
+ TORCHFLOWER(4501),
SPORE_BLOSSOM(20627),
BROWN_MUSHROOM(9665),
RED_MUSHROOM(19728),
@@ -573,6 +606,10 @@ public enum Material implements Keyed, Translatable {
*/
KELP(21916, Ageable.class),
MOSS_CARPET(8221),
+ /**
+ * BlockData: {@link PinkPetals}
+ */
+ PINK_PETALS(10420, PinkPetals.class),
MOSS_BLOCK(9175),
/**
* BlockData: {@link Waterlogged}
@@ -610,6 +647,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Slab}
*/
ACACIA_SLAB(23730, Slab.class),
+ /**
+ * BlockData: {@link Slab}
+ */
+ CHERRY_SLAB(16673, Slab.class),
/**
* BlockData: {@link Slab}
*/
@@ -712,6 +753,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link ChiseledBookshelf}
*/
CHISELED_BOOKSHELF(8099, ChiseledBookshelf.class),
+ /**
+ * BlockData: {@link DecoratedPot}
+ */
+ DECORATED_POT(8720, 1, DecoratedPot.class),
MOSSY_COBBLESTONE(21900),
OBSIDIAN(32723),
TORCH(6063),
@@ -793,6 +838,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Fence}
*/
ACACIA_FENCE(4569, Fence.class),
+ /**
+ * BlockData: {@link Fence}
+ */
+ CHERRY_FENCE(32047, Fence.class),
/**
* BlockData: {@link Fence}
*/
@@ -969,6 +1018,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Stairs}
*/
ACACIA_STAIRS(17453, Stairs.class),
+ /**
+ * BlockData: {@link Stairs}
+ */
+ CHERRY_STAIRS(18380, Stairs.class),
/**
* BlockData: {@link Stairs}
*/
@@ -1816,6 +1869,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Switch}
*/
ACACIA_BUTTON(13993, Switch.class),
+ /**
+ * BlockData: {@link Switch}
+ */
+ CHERRY_BUTTON(9058, Switch.class),
/**
* BlockData: {@link Switch}
*/
@@ -1872,6 +1929,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Powerable}
*/
ACACIA_PRESSURE_PLATE(17586, Powerable.class),
+ /**
+ * BlockData: {@link Powerable}
+ */
+ CHERRY_PRESSURE_PLATE(8651, Powerable.class),
/**
* BlockData: {@link Powerable}
*/
@@ -1916,6 +1977,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Door}
*/
ACACIA_DOOR(23797, Door.class),
+ /**
+ * BlockData: {@link Door}
+ */
+ CHERRY_DOOR(12684, Door.class),
/**
* BlockData: {@link Door}
*/
@@ -1960,6 +2025,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link TrapDoor}
*/
ACACIA_TRAPDOOR(18343, TrapDoor.class),
+ /**
+ * BlockData: {@link TrapDoor}
+ */
+ CHERRY_TRAPDOOR(6293, TrapDoor.class),
/**
* BlockData: {@link TrapDoor}
*/
@@ -2000,6 +2069,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Gate}
*/
ACACIA_FENCE_GATE(14145, Gate.class),
+ /**
+ * BlockData: {@link Gate}
+ */
+ CHERRY_FENCE_GATE(28222, Gate.class),
/**
* BlockData: {@link Gate}
*/
@@ -2055,6 +2128,8 @@ public enum Material implements Keyed, Translatable {
JUNGLE_CHEST_BOAT(20133, 1),
ACACIA_BOAT(27326, 1),
ACACIA_CHEST_BOAT(28455, 1),
+ CHERRY_BOAT(13628, 1),
+ CHERRY_CHEST_BOAT(7165, 1),
DARK_OAK_BOAT(28618, 1),
DARK_OAK_CHEST_BOAT(8733, 1),
MANGROVE_BOAT(20792, 1),
@@ -2182,6 +2257,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Sign}
*/
ACACIA_SIGN(29808, 16, Sign.class),
+ /**
+ * BlockData: {@link Sign}
+ */
+ CHERRY_SIGN(16520, 16, Sign.class),
/**
* BlockData: {@link Sign}
*/
@@ -2222,6 +2301,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link HangingSign}
*/
ACACIA_HANGING_SIGN(30257, 16, HangingSign.class),
+ /**
+ * BlockData: {@link HangingSign}
+ */
+ CHERRY_HANGING_SIGN(5088, 16, HangingSign.class),
/**
* BlockData: {@link HangingSign}
*/
@@ -2451,6 +2534,7 @@ public enum Material implements Keyed, Translatable {
SKELETON_SPAWN_EGG(15261),
SKELETON_HORSE_SPAWN_EGG(21356),
SLIME_SPAWN_EGG(17196),
+ SNIFFER_SPAWN_EGG(27473),
SNOW_GOLEM_SPAWN_EGG(24732),
SPIDER_SPAWN_EGG(14984),
SQUID_SPAWN_EGG(10682),
@@ -2605,6 +2689,7 @@ public enum Material implements Keyed, Translatable {
END_CRYSTAL(19090),
CHORUS_FRUIT(7652),
POPPED_CHORUS_FRUIT(27844),
+ TORCHFLOWER_SEEDS(18153),
BEETROOT(23305),
BEETROOT_SEEDS(21282),
BEETROOT_SOUP(16036, 1),
@@ -2851,6 +2936,23 @@ public enum Material implements Keyed, Translatable {
PEARLESCENT_FROGLIGHT(21441, Orientable.class),
FROGSPAWN(8350),
ECHO_SHARD(12529),
+ BRUSH(30569, 1, 64),
+ NETHERITE_UPGRADE_SMITHING_TEMPLATE(7615),
+ SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE(16124),
+ DUNE_ARMOR_TRIM_SMITHING_TEMPLATE(30925),
+ COAST_ARMOR_TRIM_SMITHING_TEMPLATE(25501),
+ WILD_ARMOR_TRIM_SMITHING_TEMPLATE(5870),
+ WARD_ARMOR_TRIM_SMITHING_TEMPLATE(24534),
+ EYE_ARMOR_TRIM_SMITHING_TEMPLATE(14663),
+ VEX_ARMOR_TRIM_SMITHING_TEMPLATE(25818),
+ TIDE_ARMOR_TRIM_SMITHING_TEMPLATE(20420),
+ SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE(14386),
+ RIB_ARMOR_TRIM_SMITHING_TEMPLATE(6010),
+ SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE(29143),
+ POTTERY_SHARD_ARCHER(26154),
+ POTTERY_SHARD_PRIZE(31677),
+ POTTERY_SHARD_ARMS_UP(29222),
+ POTTERY_SHARD_SKULL(14619),
/**
* BlockData: {@link Levelled}
*/
@@ -2900,6 +3002,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link WallSign}
*/
ACACIA_WALL_SIGN(20316, 16, WallSign.class),
+ /**
+ * BlockData: {@link WallSign}
+ */
+ CHERRY_WALL_SIGN(20188, 16, WallSign.class),
/**
* BlockData: {@link WallSign}
*/
@@ -2932,6 +3038,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link WallHangingSign}
*/
ACACIA_WALL_HANGING_SIGN(22477, WallHangingSign.class),
+ /**
+ * BlockData: {@link WallHangingSign}
+ */
+ CHERRY_WALL_HANGING_SIGN(10953, WallHangingSign.class),
/**
* BlockData: {@link WallHangingSign}
*/
@@ -3002,11 +3112,13 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Tripwire}
*/
TRIPWIRE(8810, Tripwire.class),
+ POTTED_TORCHFLOWER(21278),
POTTED_OAK_SAPLING(11905),
POTTED_SPRUCE_SAPLING(29498),
POTTED_BIRCH_SAPLING(32484),
POTTED_JUNGLE_SAPLING(7525),
POTTED_ACACIA_SAPLING(14096),
+ POTTED_CHERRY_SAPLING(30785),
POTTED_DARK_OAK_SAPLING(6486),
POTTED_MANGROVE_PROPAGULE(22003),
POTTED_FERN(23315),
@@ -3127,6 +3239,10 @@ public enum Material implements Keyed, Translatable {
* BlockData: {@link Directional}
*/
BLACK_WALL_BANNER(4919, Directional.class),
+ /**
+ * BlockData: {@link Ageable}
+ */
+ TORCHFLOWER_CROP(28460, Ageable.class),
/**
* BlockData: {@link Ageable}
*/
@@ -4567,6 +4683,23 @@ public enum Material implements Keyed, Translatable {
case CAVE_VINES_PLANT:
case CHAIN:
case CHAIN_COMMAND_BLOCK:
+ case CHERRY_BUTTON:
+ case CHERRY_DOOR:
+ case CHERRY_FENCE:
+ case CHERRY_FENCE_GATE:
+ case CHERRY_HANGING_SIGN:
+ case CHERRY_LEAVES:
+ case CHERRY_LOG:
+ case CHERRY_PLANKS:
+ case CHERRY_PRESSURE_PLATE:
+ case CHERRY_SAPLING:
+ case CHERRY_SIGN:
+ case CHERRY_SLAB:
+ case CHERRY_STAIRS:
+ case CHERRY_TRAPDOOR:
+ case CHERRY_WALL_HANGING_SIGN:
+ case CHERRY_WALL_SIGN:
+ case CHERRY_WOOD:
case CHEST:
case CHIPPED_ANVIL:
case CHISELED_BOOKSHELF:
@@ -4692,6 +4825,7 @@ public enum Material implements Keyed, Translatable {
case DEAD_TUBE_CORAL_BLOCK:
case DEAD_TUBE_CORAL_FAN:
case DEAD_TUBE_CORAL_WALL_FAN:
+ case DECORATED_POT:
case DEEPSLATE:
case DEEPSLATE_BRICKS:
case DEEPSLATE_BRICK_SLAB:
@@ -5028,6 +5162,7 @@ public enum Material implements Keyed, Translatable {
case PINK_CONCRETE:
case PINK_CONCRETE_POWDER:
case PINK_GLAZED_TERRACOTTA:
+ case PINK_PETALS:
case PINK_SHULKER_BOX:
case PINK_STAINED_GLASS:
case PINK_STAINED_GLASS_PANE:
@@ -5076,6 +5211,7 @@ public enum Material implements Keyed, Translatable {
case POTTED_BLUE_ORCHID:
case POTTED_BROWN_MUSHROOM:
case POTTED_CACTUS:
+ case POTTED_CHERRY_SAPLING:
case POTTED_CORNFLOWER:
case POTTED_CRIMSON_FUNGUS:
case POTTED_CRIMSON_ROOTS:
@@ -5095,6 +5231,7 @@ public enum Material implements Keyed, Translatable {
case POTTED_RED_MUSHROOM:
case POTTED_RED_TULIP:
case POTTED_SPRUCE_SAPLING:
+ case POTTED_TORCHFLOWER:
case POTTED_WARPED_FUNGUS:
case POTTED_WARPED_ROOTS:
case POTTED_WHITE_TULIP:
@@ -5256,6 +5393,8 @@ public enum Material implements Keyed, Translatable {
case STRIPPED_BAMBOO_BLOCK:
case STRIPPED_BIRCH_LOG:
case STRIPPED_BIRCH_WOOD:
+ case STRIPPED_CHERRY_LOG:
+ case STRIPPED_CHERRY_WOOD:
case STRIPPED_CRIMSON_HYPHAE:
case STRIPPED_CRIMSON_STEM:
case STRIPPED_DARK_OAK_LOG:
@@ -5274,6 +5413,7 @@ public enum Material implements Keyed, Translatable {
case STRUCTURE_VOID:
case SUGAR_CANE:
case SUNFLOWER:
+ case SUSPICIOUS_SAND:
case SWEET_BERRY_BUSH:
case TALL_GRASS:
case TALL_SEAGRASS:
@@ -5282,6 +5422,8 @@ public enum Material implements Keyed, Translatable {
case TINTED_GLASS:
case TNT:
case TORCH:
+ case TORCHFLOWER:
+ case TORCHFLOWER_CROP:
case TRAPPED_CHEST:
case TRIPWIRE:
case TRIPWIRE_HOOK:
@@ -5726,6 +5868,21 @@ public enum Material implements Keyed, Translatable {
case CAULDRON:
case CHAIN:
case CHAIN_COMMAND_BLOCK:
+ case CHERRY_DOOR:
+ case CHERRY_FENCE:
+ case CHERRY_FENCE_GATE:
+ case CHERRY_HANGING_SIGN:
+ case CHERRY_LEAVES:
+ case CHERRY_LOG:
+ case CHERRY_PLANKS:
+ case CHERRY_PRESSURE_PLATE:
+ case CHERRY_SIGN:
+ case CHERRY_SLAB:
+ case CHERRY_STAIRS:
+ case CHERRY_TRAPDOOR:
+ case CHERRY_WALL_HANGING_SIGN:
+ case CHERRY_WALL_SIGN:
+ case CHERRY_WOOD:
case CHEST:
case CHIPPED_ANVIL:
case CHISELED_BOOKSHELF:
@@ -5834,6 +5991,7 @@ public enum Material implements Keyed, Translatable {
case DEAD_TUBE_CORAL_BLOCK:
case DEAD_TUBE_CORAL_FAN:
case DEAD_TUBE_CORAL_WALL_FAN:
+ case DECORATED_POT:
case DEEPSLATE:
case DEEPSLATE_BRICKS:
case DEEPSLATE_BRICK_SLAB:
@@ -6269,6 +6427,8 @@ public enum Material implements Keyed, Translatable {
case STRIPPED_BAMBOO_BLOCK:
case STRIPPED_BIRCH_LOG:
case STRIPPED_BIRCH_WOOD:
+ case STRIPPED_CHERRY_LOG:
+ case STRIPPED_CHERRY_WOOD:
case STRIPPED_CRIMSON_HYPHAE:
case STRIPPED_CRIMSON_STEM:
case STRIPPED_DARK_OAK_LOG:
@@ -6284,6 +6444,7 @@ public enum Material implements Keyed, Translatable {
case STRIPPED_WARPED_HYPHAE:
case STRIPPED_WARPED_STEM:
case STRUCTURE_BLOCK:
+ case SUSPICIOUS_SAND:
case TARGET:
case TERRACOTTA:
case TINTED_GLASS:
@@ -6862,6 +7023,21 @@ public enum Material implements Keyed, Translatable {
case BROWN_WOOL:
case CAMPFIRE:
case CARTOGRAPHY_TABLE:
+ case CHERRY_DOOR:
+ case CHERRY_FENCE:
+ case CHERRY_FENCE_GATE:
+ case CHERRY_HANGING_SIGN:
+ case CHERRY_LEAVES:
+ case CHERRY_LOG:
+ case CHERRY_PLANKS:
+ case CHERRY_PRESSURE_PLATE:
+ case CHERRY_SIGN:
+ case CHERRY_SLAB:
+ case CHERRY_STAIRS:
+ case CHERRY_TRAPDOOR:
+ case CHERRY_WALL_HANGING_SIGN:
+ case CHERRY_WALL_SIGN:
+ case CHERRY_WOOD:
case CHEST:
case CHISELED_BOOKSHELF:
case COMPOSTER:
@@ -7024,6 +7200,8 @@ public enum Material implements Keyed, Translatable {
case STRIPPED_BAMBOO_BLOCK:
case STRIPPED_BIRCH_LOG:
case STRIPPED_BIRCH_WOOD:
+ case STRIPPED_CHERRY_LOG:
+ case STRIPPED_CHERRY_WOOD:
case STRIPPED_DARK_OAK_LOG:
case STRIPPED_DARK_OAK_WOOD:
case STRIPPED_JUNGLE_LOG:
@@ -7169,6 +7347,14 @@ public enum Material implements Keyed, Translatable {
case BROWN_WOOL:
case CAVE_VINES:
case CAVE_VINES_PLANT:
+ case CHERRY_FENCE:
+ case CHERRY_FENCE_GATE:
+ case CHERRY_LEAVES:
+ case CHERRY_LOG:
+ case CHERRY_PLANKS:
+ case CHERRY_SLAB:
+ case CHERRY_STAIRS:
+ case CHERRY_WOOD:
case COAL_BLOCK:
case COMPOSTER:
case CORNFLOWER:
@@ -7239,6 +7425,7 @@ public enum Material implements Keyed, Translatable {
case OXEYE_DAISY:
case PEONY:
case PINK_CARPET:
+ case PINK_PETALS:
case PINK_TULIP:
case PINK_WOOL:
case POPPY:
@@ -7264,6 +7451,8 @@ public enum Material implements Keyed, Translatable {
case STRIPPED_BAMBOO_BLOCK:
case STRIPPED_BIRCH_LOG:
case STRIPPED_BIRCH_WOOD:
+ case STRIPPED_CHERRY_LOG:
+ case STRIPPED_CHERRY_WOOD:
case STRIPPED_DARK_OAK_LOG:
case STRIPPED_DARK_OAK_WOOD:
case STRIPPED_JUNGLE_LOG:
@@ -7692,6 +7881,9 @@ public enum Material implements Keyed, Translatable {
case CARTOGRAPHY_TABLE:
case CARVED_PUMPKIN:
case CHAIN_COMMAND_BLOCK:
+ case CHERRY_LOG:
+ case CHERRY_PLANKS:
+ case CHERRY_WOOD:
case CHISELED_BOOKSHELF:
case CHISELED_DEEPSLATE:
case CHISELED_NETHER_BRICKS:
@@ -7943,6 +8135,8 @@ public enum Material implements Keyed, Translatable {
case STRIPPED_BAMBOO_BLOCK:
case STRIPPED_BIRCH_LOG:
case STRIPPED_BIRCH_WOOD:
+ case STRIPPED_CHERRY_LOG:
+ case STRIPPED_CHERRY_WOOD:
case STRIPPED_CRIMSON_HYPHAE:
case STRIPPED_CRIMSON_STEM:
case STRIPPED_DARK_OAK_LOG:
@@ -7958,6 +8152,7 @@ public enum Material implements Keyed, Translatable {
case STRIPPED_WARPED_HYPHAE:
case STRIPPED_WARPED_STEM:
case STRUCTURE_BLOCK:
+ case SUSPICIOUS_SAND:
case TARGET:
case TERRACOTTA:
case TUBE_CORAL_BLOCK:
@@ -8174,6 +8369,8 @@ public enum Material implements Keyed, Translatable {
case CAVE_AIR:
case CAVE_VINES:
case CAVE_VINES_PLANT:
+ case CHERRY_WALL_HANGING_SIGN:
+ case CHERRY_WALL_SIGN:
case COCOA:
case CREEPER_WALL_HEAD:
case CRIMSON_WALL_HANGING_SIGN:
@@ -8235,6 +8432,7 @@ public enum Material implements Keyed, Translatable {
case POTTED_BLUE_ORCHID:
case POTTED_BROWN_MUSHROOM:
case POTTED_CACTUS:
+ case POTTED_CHERRY_SAPLING:
case POTTED_CORNFLOWER:
case POTTED_CRIMSON_FUNGUS:
case POTTED_CRIMSON_ROOTS:
@@ -8254,6 +8452,7 @@ public enum Material implements Keyed, Translatable {
case POTTED_RED_MUSHROOM:
case POTTED_RED_TULIP:
case POTTED_SPRUCE_SAPLING:
+ case POTTED_TORCHFLOWER:
case POTTED_WARPED_FUNGUS:
case POTTED_WARPED_ROOTS:
case POTTED_WHITE_TULIP:
@@ -8274,6 +8473,7 @@ public enum Material implements Keyed, Translatable {
case SPRUCE_WALL_SIGN:
case SWEET_BERRY_BUSH:
case TALL_SEAGRASS:
+ case TORCHFLOWER_CROP:
case TRIPWIRE:
case TUBE_CORAL_WALL_FAN:
case TWISTING_VINES_PLANT:
@@ -8432,6 +8632,16 @@ public enum Material implements Keyed, Translatable {
case CAVE_VINES:
case CAVE_VINES_PLANT:
case CHAIN_COMMAND_BLOCK:
+ case CHERRY_BUTTON:
+ case CHERRY_DOOR:
+ case CHERRY_FENCE:
+ case CHERRY_FENCE_GATE:
+ case CHERRY_HANGING_SIGN:
+ case CHERRY_SIGN:
+ case CHERRY_STAIRS:
+ case CHERRY_TRAPDOOR:
+ case CHERRY_WALL_HANGING_SIGN:
+ case CHERRY_WALL_SIGN:
case CHEST:
case CHIPPED_ANVIL:
case CHISELED_BOOKSHELF:
@@ -8581,6 +8791,7 @@ public enum Material implements Keyed, Translatable {
case POTTED_BLUE_ORCHID:
case POTTED_BROWN_MUSHROOM:
case POTTED_CACTUS:
+ case POTTED_CHERRY_SAPLING:
case POTTED_CORNFLOWER:
case POTTED_CRIMSON_FUNGUS:
case POTTED_CRIMSON_ROOTS:
@@ -8600,6 +8811,7 @@ public enum Material implements Keyed, Translatable {
case POTTED_RED_MUSHROOM:
case POTTED_RED_TULIP:
case POTTED_SPRUCE_SAPLING:
+ case POTTED_TORCHFLOWER:
case POTTED_WARPED_FUNGUS:
case POTTED_WARPED_ROOTS:
case POTTED_WHITE_TULIP:
@@ -8755,6 +8967,7 @@ public enum Material implements Keyed, Translatable {
case BLUE_BED:
case BROWN_BED:
case BROWN_MUSHROOM_BLOCK:
+ case CHERRY_LEAVES:
case COCOA:
case CYAN_BED:
case DARK_OAK_LEAVES:
@@ -8785,6 +8998,7 @@ public enum Material implements Keyed, Translatable {
case YELLOW_BED:
return 0.2F;
case POWDER_SNOW:
+ case SUSPICIOUS_SAND:
return 0.25F;
case BEE_NEST:
case BLACK_STAINED_GLASS:
@@ -8852,6 +9066,8 @@ public enum Material implements Keyed, Translatable {
case BROWN_CONCRETE_POWDER:
case CAKE:
case CANDLE_CAKE:
+ case CHERRY_BUTTON:
+ case CHERRY_PRESSURE_PLATE:
case COARSE_DIRT:
case CRIMSON_BUTTON:
case CRIMSON_PRESSURE_PLATE:
@@ -8998,6 +9214,10 @@ public enum Material implements Keyed, Translatable {
case BROWN_BANNER:
case BROWN_WALL_BANNER:
case CARVED_PUMPKIN:
+ case CHERRY_HANGING_SIGN:
+ case CHERRY_SIGN:
+ case CHERRY_WALL_HANGING_SIGN:
+ case CHERRY_WALL_SIGN:
case CREEPER_HEAD:
case CREEPER_WALL_HEAD:
case CRIMSON_HANGING_SIGN:
@@ -9249,6 +9469,13 @@ public enum Material implements Keyed, Translatable {
case BROWN_SHULKER_BOX:
case CAMPFIRE:
case CAULDRON:
+ case CHERRY_FENCE:
+ case CHERRY_FENCE_GATE:
+ case CHERRY_LOG:
+ case CHERRY_PLANKS:
+ case CHERRY_SLAB:
+ case CHERRY_STAIRS:
+ case CHERRY_WOOD:
case CHISELED_NETHER_BRICKS:
case COBBLESTONE:
case COBBLESTONE_SLAB:
@@ -9357,6 +9584,8 @@ public enum Material implements Keyed, Translatable {
case STRIPPED_BAMBOO_BLOCK:
case STRIPPED_BIRCH_LOG:
case STRIPPED_BIRCH_WOOD:
+ case STRIPPED_CHERRY_LOG:
+ case STRIPPED_CHERRY_WOOD:
case STRIPPED_CRIMSON_HYPHAE:
case STRIPPED_CRIMSON_STEM:
case STRIPPED_DARK_OAK_LOG:
@@ -9401,6 +9630,8 @@ public enum Material implements Keyed, Translatable {
case BEACON:
case BIRCH_DOOR:
case BIRCH_TRAPDOOR:
+ case CHERRY_DOOR:
+ case CHERRY_TRAPDOOR:
case COAL_ORE:
case CONDUIT:
case COPPER_BLOCK:
@@ -9612,6 +9843,7 @@ public enum Material implements Keyed, Translatable {
case BLUE_BED:
case BROWN_BED:
case BROWN_MUSHROOM_BLOCK:
+ case CHERRY_LEAVES:
case CYAN_BED:
case DARK_OAK_LEAVES:
case DAYLIGHT_DETECTOR:
@@ -9641,6 +9873,7 @@ public enum Material implements Keyed, Translatable {
case YELLOW_BED:
return 0.2F;
case POWDER_SNOW:
+ case SUSPICIOUS_SAND:
return 0.25F;
case BEE_NEST:
case BLACK_STAINED_GLASS:
@@ -9708,6 +9941,8 @@ public enum Material implements Keyed, Translatable {
case BROWN_CONCRETE_POWDER:
case CAKE:
case CANDLE_CAKE:
+ case CHERRY_BUTTON:
+ case CHERRY_PRESSURE_PLATE:
case COARSE_DIRT:
case CRIMSON_BUTTON:
case CRIMSON_PRESSURE_PLATE:
@@ -9855,6 +10090,10 @@ public enum Material implements Keyed, Translatable {
case BROWN_BANNER:
case BROWN_WALL_BANNER:
case CARVED_PUMPKIN:
+ case CHERRY_HANGING_SIGN:
+ case CHERRY_SIGN:
+ case CHERRY_WALL_HANGING_SIGN:
+ case CHERRY_WALL_SIGN:
case CREEPER_HEAD:
case CREEPER_WALL_HEAD:
case CRIMSON_HANGING_SIGN:
@@ -9989,6 +10228,8 @@ public enum Material implements Keyed, Translatable {
case BROWN_SHULKER_BOX:
case CAMPFIRE:
case CAULDRON:
+ case CHERRY_LOG:
+ case CHERRY_WOOD:
case CRIMSON_HYPHAE:
case CRIMSON_STEM:
case CYAN_SHULKER_BOX:
@@ -10021,6 +10262,8 @@ public enum Material implements Keyed, Translatable {
case STRIPPED_BAMBOO_BLOCK:
case STRIPPED_BIRCH_LOG:
case STRIPPED_BIRCH_WOOD:
+ case STRIPPED_CHERRY_LOG:
+ case STRIPPED_CHERRY_WOOD:
case STRIPPED_CRIMSON_HYPHAE:
case STRIPPED_CRIMSON_STEM:
case STRIPPED_DARK_OAK_LOG:
@@ -10079,6 +10322,13 @@ public enum Material implements Keyed, Translatable {
case BIRCH_SLAB:
case BIRCH_STAIRS:
case BIRCH_TRAPDOOR:
+ case CHERRY_DOOR:
+ case CHERRY_FENCE:
+ case CHERRY_FENCE_GATE:
+ case CHERRY_PLANKS:
+ case CHERRY_SLAB:
+ case CHERRY_STAIRS:
+ case CHERRY_TRAPDOOR:
case COAL_ORE:
case COCOA:
case CONDUIT:
@@ -10497,6 +10747,7 @@ public enum Material implements Keyed, Translatable {
case DRAGON_HEAD:
case GOLDEN_HELMET:
case IRON_HELMET:
+ case JACK_O_LANTERN:
case LEATHER_HELMET:
case NETHERITE_HELMET:
case PLAYER_HEAD:
diff --git a/src/main/java/org/bukkit/Particle.java b/src/main/java/org/bukkit/Particle.java
index 9f646171..0ca79550 100644
--- a/src/main/java/org/bukkit/Particle.java
+++ b/src/main/java/org/bukkit/Particle.java
@@ -123,6 +123,9 @@ public enum Particle {
SCULK_CHARGE(Float.class),
SCULK_CHARGE_POP,
SHRIEK(Integer.class),
+ DRIPPING_CHERRY_LEAVES,
+ FALLING_CHERRY_LEAVES,
+ LANDING_CHERRY_LEAVES,
/**
* Uses {@link BlockData} as DataType
*/
diff --git a/src/main/java/org/bukkit/Sound.java b/src/main/java/org/bukkit/Sound.java
index 6b360758..5676389b 100644
--- a/src/main/java/org/bukkit/Sound.java
+++ b/src/main/java/org/bukkit/Sound.java
@@ -158,6 +158,36 @@ public enum Sound implements Keyed {
BLOCK_CHAIN_HIT("block.chain.hit"),
BLOCK_CHAIN_PLACE("block.chain.place"),
BLOCK_CHAIN_STEP("block.chain.step"),
+ BLOCK_CHERRY_LEAVES_BREAK("block.cherry_leaves.break"),
+ BLOCK_CHERRY_LEAVES_FALL("block.cherry_leaves.fall"),
+ BLOCK_CHERRY_LEAVES_HIT("block.cherry_leaves.hit"),
+ BLOCK_CHERRY_LEAVES_PLACE("block.cherry_leaves.place"),
+ BLOCK_CHERRY_LEAVES_STEP("block.cherry_leaves.step"),
+ BLOCK_CHERRY_SAPLING_BREAK("block.cherry_sapling.break"),
+ BLOCK_CHERRY_SAPLING_FALL("block.cherry_sapling.fall"),
+ BLOCK_CHERRY_SAPLING_HIT("block.cherry_sapling.hit"),
+ BLOCK_CHERRY_SAPLING_PLACE("block.cherry_sapling.place"),
+ BLOCK_CHERRY_SAPLING_STEP("block.cherry_sapling.step"),
+ BLOCK_CHERRY_WOOD_BREAK("block.cherry_wood.break"),
+ BLOCK_CHERRY_WOOD_BUTTON_CLICK_OFF("block.cherry_wood_button.click_off"),
+ BLOCK_CHERRY_WOOD_BUTTON_CLICK_ON("block.cherry_wood_button.click_on"),
+ BLOCK_CHERRY_WOOD_DOOR_CLOSE("block.cherry_wood_door.close"),
+ BLOCK_CHERRY_WOOD_DOOR_OPEN("block.cherry_wood_door.open"),
+ BLOCK_CHERRY_WOOD_FALL("block.cherry_wood.fall"),
+ BLOCK_CHERRY_WOOD_FENCE_GATE_CLOSE("block.cherry_wood_fence_gate.close"),
+ BLOCK_CHERRY_WOOD_FENCE_GATE_OPEN("block.cherry_wood_fence_gate.open"),
+ BLOCK_CHERRY_WOOD_HANGING_SIGN_BREAK("block.cherry_wood_hanging_sign.break"),
+ BLOCK_CHERRY_WOOD_HANGING_SIGN_FALL("block.cherry_wood_hanging_sign.fall"),
+ BLOCK_CHERRY_WOOD_HANGING_SIGN_HIT("block.cherry_wood_hanging_sign.hit"),
+ BLOCK_CHERRY_WOOD_HANGING_SIGN_PLACE("block.cherry_wood_hanging_sign.place"),
+ BLOCK_CHERRY_WOOD_HANGING_SIGN_STEP("block.cherry_wood_hanging_sign.step"),
+ BLOCK_CHERRY_WOOD_HIT("block.cherry_wood.hit"),
+ BLOCK_CHERRY_WOOD_PLACE("block.cherry_wood.place"),
+ BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_OFF("block.cherry_wood_pressure_plate.click_off"),
+ BLOCK_CHERRY_WOOD_PRESSURE_PLATE_CLICK_ON("block.cherry_wood_pressure_plate.click_on"),
+ BLOCK_CHERRY_WOOD_STEP("block.cherry_wood.step"),
+ BLOCK_CHERRY_WOOD_TRAPDOOR_CLOSE("block.cherry_wood_trapdoor.close"),
+ BLOCK_CHERRY_WOOD_TRAPDOOR_OPEN("block.cherry_wood_trapdoor.open"),
BLOCK_CHEST_CLOSE("block.chest.close"),
BLOCK_CHEST_LOCKED("block.chest.locked"),
BLOCK_CHEST_OPEN("block.chest.open"),
@@ -193,6 +223,12 @@ public enum Sound implements Keyed {
BLOCK_CORAL_BLOCK_PLACE("block.coral_block.place"),
BLOCK_CORAL_BLOCK_STEP("block.coral_block.step"),
BLOCK_CROP_BREAK("block.crop.break"),
+ BLOCK_DECORATED_POT_BREAK("block.decorated_pot.break"),
+ BLOCK_DECORATED_POT_FALL("block.decorated_pot.fall"),
+ BLOCK_DECORATED_POT_HIT("block.decorated_pot.hit"),
+ BLOCK_DECORATED_POT_PLACE("block.decorated_pot.place"),
+ BLOCK_DECORATED_POT_SHATTER("block.decorated_pot.shatter"),
+ BLOCK_DECORATED_POT_STEP("block.decorated_pot.step"),
BLOCK_DEEPSLATE_BREAK("block.deepslate.break"),
BLOCK_DEEPSLATE_BRICKS_BREAK("block.deepslate_bricks.break"),
BLOCK_DEEPSLATE_BRICKS_FALL("block.deepslate_bricks.fall"),
@@ -434,6 +470,11 @@ public enum Sound implements Keyed {
BLOCK_PACKED_MUD_HIT("block.packed_mud.hit"),
BLOCK_PACKED_MUD_PLACE("block.packed_mud.place"),
BLOCK_PACKED_MUD_STEP("block.packed_mud.step"),
+ BLOCK_PINK_PETALS_BREAK("block.pink_petals.break"),
+ BLOCK_PINK_PETALS_FALL("block.pink_petals.fall"),
+ BLOCK_PINK_PETALS_HIT("block.pink_petals.hit"),
+ BLOCK_PINK_PETALS_PLACE("block.pink_petals.place"),
+ BLOCK_PINK_PETALS_STEP("block.pink_petals.step"),
BLOCK_PISTON_CONTRACT("block.piston.contract"),
BLOCK_PISTON_EXTEND("block.piston.extend"),
BLOCK_POINTED_DRIPSTONE_BREAK("block.pointed_dripstone.break"),
@@ -571,6 +612,11 @@ public enum Sound implements Keyed {
BLOCK_STONE_PRESSURE_PLATE_CLICK_OFF("block.stone_pressure_plate.click_off"),
BLOCK_STONE_PRESSURE_PLATE_CLICK_ON("block.stone_pressure_plate.click_on"),
BLOCK_STONE_STEP("block.stone.step"),
+ BLOCK_SUSPICIOUS_SAND_BREAK("block.suspicious_sand.break"),
+ BLOCK_SUSPICIOUS_SAND_FALL("block.suspicious_sand.fall"),
+ BLOCK_SUSPICIOUS_SAND_HIT("block.suspicious_sand.hit"),
+ BLOCK_SUSPICIOUS_SAND_PLACE("block.suspicious_sand.place"),
+ BLOCK_SUSPICIOUS_SAND_STEP("block.suspicious_sand.step"),
BLOCK_SWEET_BERRY_BUSH_BREAK("block.sweet_berry_bush.break"),
BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES("block.sweet_berry_bush.pick_berries"),
BLOCK_SWEET_BERRY_BUSH_PLACE("block.sweet_berry_bush.place"),
@@ -1113,6 +1159,18 @@ public enum Sound implements Keyed {
ENTITY_SLIME_JUMP_SMALL("entity.slime.jump_small"),
ENTITY_SLIME_SQUISH("entity.slime.squish"),
ENTITY_SLIME_SQUISH_SMALL("entity.slime.squish_small"),
+ ENTITY_SNIFFER_DEATH("entity.sniffer.death"),
+ ENTITY_SNIFFER_DIGGING("entity.sniffer.digging"),
+ ENTITY_SNIFFER_DIGGING_STOP("entity.sniffer.digging_stop"),
+ ENTITY_SNIFFER_DROP_SEED("entity.sniffer.drop_seed"),
+ ENTITY_SNIFFER_EAT("entity.sniffer.eat"),
+ ENTITY_SNIFFER_HAPPY("entity.sniffer.happy"),
+ ENTITY_SNIFFER_HURT("entity.sniffer.hurt"),
+ ENTITY_SNIFFER_IDLE("entity.sniffer.idle"),
+ ENTITY_SNIFFER_SCENTING("entity.sniffer.scenting"),
+ ENTITY_SNIFFER_SEARCHING("entity.sniffer.searching"),
+ ENTITY_SNIFFER_SNIFFING("entity.sniffer.sniffing"),
+ ENTITY_SNIFFER_STEP("entity.sniffer.step"),
ENTITY_SNOWBALL_THROW("entity.snowball.throw"),
ENTITY_SNOW_GOLEM_AMBIENT("entity.snow_golem.ambient"),
ENTITY_SNOW_GOLEM_DEATH("entity.snow_golem.death"),
@@ -1276,6 +1334,7 @@ public enum Sound implements Keyed {
ENTITY_ZOMBIFIED_PIGLIN_DEATH("entity.zombified_piglin.death"),
ENTITY_ZOMBIFIED_PIGLIN_HURT("entity.zombified_piglin.hurt"),
EVENT_RAID_HORN("event.raid.horn"),
+ INTENTIONALLY_EMPTY("intentionally_empty"),
ITEM_ARMOR_EQUIP_CHAIN("item.armor.equip_chain"),
ITEM_ARMOR_EQUIP_DIAMOND("item.armor.equip_diamond"),
ITEM_ARMOR_EQUIP_ELYTRA("item.armor.equip_elytra"),
@@ -1294,6 +1353,8 @@ public enum Sound implements Keyed {
ITEM_BOTTLE_EMPTY("item.bottle.empty"),
ITEM_BOTTLE_FILL("item.bottle.fill"),
ITEM_BOTTLE_FILL_DRAGONBREATH("item.bottle.fill_dragonbreath"),
+ ITEM_BRUSH_BRUSHING("item.brush.brushing"),
+ ITEM_BRUSH_BRUSH_SAND_COMPLETED("item.brush.brush_sand_completed"),
ITEM_BUCKET_EMPTY("item.bucket.empty"),
ITEM_BUCKET_EMPTY_AXOLOTL("item.bucket.empty_axolotl"),
ITEM_BUCKET_EMPTY_FISH("item.bucket.empty_fish"),
@@ -1379,6 +1440,7 @@ public enum Sound implements Keyed {
MUSIC_NETHER_NETHER_WASTES("music.nether.nether_wastes"),
MUSIC_NETHER_SOUL_SAND_VALLEY("music.nether.soul_sand_valley"),
MUSIC_NETHER_WARPED_FOREST("music.nether.warped_forest"),
+ MUSIC_OVERWORLD_CHERRY_GROVE("music.overworld.cherry_grove"),
MUSIC_OVERWORLD_DEEP_DARK("music.overworld.deep_dark"),
MUSIC_OVERWORLD_DRIPSTONE_CAVES("music.overworld.dripstone_caves"),
MUSIC_OVERWORLD_FROZEN_PEAKS("music.overworld.frozen_peaks"),
diff --git a/src/main/java/org/bukkit/Tag.java b/src/main/java/org/bukkit/Tag.java
index bceaa1a9..3ba1efc1 100644
--- a/src/main/java/org/bukkit/Tag.java
+++ b/src/main/java/org/bukkit/Tag.java
@@ -115,6 +115,10 @@ public interface Tag extends Keyed {
* Vanilla block tag representing all acacia log and bark variants.
*/
Tag ACACIA_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("acacia_logs"), Material.class);
+ /**
+ * Vanilla block tag representing all cherry log and bark variants.
+ */
+ Tag CHERRY_LOGS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("cherry_logs"), Material.class);
/**
* Vanilla block tag representing all jungle log and bark variants.
*/
@@ -147,6 +151,10 @@ public interface Tag extends Keyed {
* Vanilla block tag representing all sand blocks.
*/
Tag SAND = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sand"), Material.class);
+ /**
+ * Vanilla block tag representing all blocks which smelt to glass in a furnace.
+ */
+ Tag SMELTS_TO_GLASS = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("smelts_to_glass"), Material.class);
/**
* Vanilla block tag representing all stairs.
*/
@@ -676,6 +684,10 @@ public interface Tag extends Keyed {
* Vanilla block tag representing blocks which cannot be dismounted into.
*/
Tag INVALID_SPAWN_INSIDE = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("invalid_spawn_inside"), Material.class);
+ /**
+ * Vanilla block tag representing blocks which can be dug by sniffers.
+ */
+ Tag SNIFFER_DIGGABLE_BLOCK = Bukkit.getTag(REGISTRY_BLOCKS, NamespacedKey.minecraft("sniffer_diggable_block"), Material.class);
/**
* Key for the built in item registry.
*/
@@ -761,6 +773,58 @@ public interface Tag extends Keyed {
* interacted with.
*/
Tag ITEMS_CREEPER_IGNITERS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("creeper_igniters"), Material.class);
+ /**
+ * Vanilla item tag representing all items which modify note block sounds when placed on top.
+ */
+ Tag ITEMS_NOTE_BLOCK_TOP_INSTRUMENTS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("noteblock_top_instruments"), Material.class);
+ /**
+ * Vanilla item tag representing all trimmable armor items.
+ */
+ Tag ITEMS_TRIMMABLE_ARMOR = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("trimmable_armor"), Material.class);
+ /**
+ * Vanilla item tag representing all materials which can be used for trimming armor.
+ */
+ Tag ITEMS_TRIM_MATERIALS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("trim_materials"), Material.class);
+ /**
+ * Vanilla item tag representing all trimming templates.
+ */
+ Tag ITEMS_TRIM_TEMPLATES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("trim_templates"), Material.class);
+ /**
+ * Vanilla item tag representing all food for sniffers.
+ */
+ Tag ITEMS_SNIFFER_FOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("sniffer_food"), Material.class);
+ /**
+ * Vanilla item tag representing all decorated pot shards.
+ */
+ Tag ITEMS_DECORATED_POT_SHARDS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("decorated_pot_shards"), Material.class);
+ /**
+ * Vanilla item tag representing all swords.
+ */
+ Tag ITEMS_SWORDS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("swords"), Material.class);
+ /**
+ * Vanilla item tag representing all axes.
+ */
+ Tag ITEMS_AXES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("axes"), Material.class);
+ /**
+ * Vanilla item tag representing all hoes.
+ */
+ Tag ITEMS_HOES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("hoes"), Material.class);
+ /**
+ * Vanilla item tag representing all pickaxes.
+ */
+ Tag ITEMS_PICKAXES = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("pickaxes"), Material.class);
+ /**
+ * Vanilla item tag representing all shovels.
+ */
+ Tag ITEMS_SHOVELS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("shovels"), Material.class);
+ /**
+ * Vanilla item tag representing all tools.
+ */
+ Tag ITEMS_TOOLS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("tools"), Material.class);
+ /**
+ * Vanilla item tag representing all item which break decorated pots.
+ */
+ Tag ITEMS_BREAKS_DECORATED_POTS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("breaks_decorated_pots"), Material.class);
/**
* Vanilla item tag representing all items that confer freeze immunity on
* the wearer.
@@ -835,6 +899,14 @@ public interface Tag extends Keyed {
* Vanilla tag representing entities which can be eaten by frogs.
*/
Tag ENTITY_TYPES_FROG_FOOD = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("frog_food"), EntityType.class);
+ /**
+ * Vanilla tag representing entities which are immune from fall damage.
+ */
+ Tag ENTITY_TYPES_FALL_DAMAGE_IMMUNE = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("fall_damage_immune"), EntityType.class);
+ /**
+ * Vanilla tag representing entities which are dismounted when underwater.
+ */
+ Tag ENTITY_TYPES_DISMOUNTS_UNDERWATER = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("dismounts_underwater"), EntityType.class);
/**
* Returns whether or not this tag has an entry for the specified item.
diff --git a/src/main/java/org/bukkit/TreeType.java b/src/main/java/org/bukkit/TreeType.java
index 0104e464..d355c917 100644
--- a/src/main/java/org/bukkit/TreeType.java
+++ b/src/main/java/org/bukkit/TreeType.java
@@ -93,4 +93,8 @@ public enum TreeType {
* Tall mangrove tree
*/
TALL_MANGROVE,
+ /**
+ * Cherry tree
+ */
+ CHERRY,
}
diff --git a/src/main/java/org/bukkit/block/DecoratedPot.java b/src/main/java/org/bukkit/block/DecoratedPot.java
new file mode 100644
index 00000000..c943d2e5
--- /dev/null
+++ b/src/main/java/org/bukkit/block/DecoratedPot.java
@@ -0,0 +1,34 @@
+package org.bukkit.block;
+
+import java.util.List;
+import org.bukkit.Material;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Represents a captured state of a decorated pot.
+ */
+public interface DecoratedPot extends TileState {
+
+ /**
+ * Gets the shards which will be dropped when this pot is broken.
+ *
+ * @return shards
+ */
+ @NotNull
+ public List getShards();
+
+ /**
+ * Add a shard item which will be dropped when this pot is broken.
+ *
+ * @param material shard item
+ */
+ public void addShard(@NotNull Material material);
+
+ /**
+ * Set the shards which will be dropped when this pot is broken.
+ *
+ * @param shard list of items
+ */
+ public void setShards(@Nullable List shard);
+}
diff --git a/src/main/java/org/bukkit/block/SuspiciousSand.java b/src/main/java/org/bukkit/block/SuspiciousSand.java
new file mode 100644
index 00000000..2f64b66d
--- /dev/null
+++ b/src/main/java/org/bukkit/block/SuspiciousSand.java
@@ -0,0 +1,28 @@
+package org.bukkit.block;
+
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.loot.Lootable;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Represents a captured state of suspicious sand.
+ */
+public interface SuspiciousSand extends Lootable, TileState {
+
+ /**
+ * Get the item which will be revealed when the sand is fully brushed away
+ * and uncovered.
+ *
+ * @return the item
+ */
+ @Nullable
+ public ItemStack getItem();
+
+ /**
+ * Sets the item which will be revealed when the sand is fully brushed away
+ * and uncovered.
+ *
+ * @param item the item
+ */
+ public void setItem(@Nullable ItemStack item);
+}
diff --git a/src/main/java/org/bukkit/block/data/type/DecoratedPot.java b/src/main/java/org/bukkit/block/data/type/DecoratedPot.java
new file mode 100644
index 00000000..eb0ffa97
--- /dev/null
+++ b/src/main/java/org/bukkit/block/data/type/DecoratedPot.java
@@ -0,0 +1,7 @@
+package org.bukkit.block.data.type;
+
+import org.bukkit.block.data.Directional;
+import org.bukkit.block.data.Waterlogged;
+
+public interface DecoratedPot extends Directional, Waterlogged {
+}
diff --git a/src/main/java/org/bukkit/block/data/type/PinkPetals.java b/src/main/java/org/bukkit/block/data/type/PinkPetals.java
new file mode 100644
index 00000000..a84b36f7
--- /dev/null
+++ b/src/main/java/org/bukkit/block/data/type/PinkPetals.java
@@ -0,0 +1,30 @@
+package org.bukkit.block.data.type;
+
+import org.bukkit.block.data.Directional;
+
+/**
+ * 'flower_amount' represents the number of petals.
+ */
+public interface PinkPetals extends Directional {
+
+ /**
+ * Gets the value of the 'flower_amount' property.
+ *
+ * @return the 'flower_amount' value
+ */
+ int getFlowerAmount();
+
+ /**
+ * Sets the value of the 'flower_amount' property.
+ *
+ * @param flower_amount the new 'flower_amount' value
+ */
+ void setFlowerAmount(int flower_amount);
+
+ /**
+ * Gets the maximum allowed value of the 'flower_amount' property.
+ *
+ * @return the maximum 'flower_amount' value
+ */
+ int getMaximumFlowerAmount();
+}
diff --git a/src/main/java/org/bukkit/block/data/type/SuspiciousSand.java b/src/main/java/org/bukkit/block/data/type/SuspiciousSand.java
new file mode 100644
index 00000000..bb10fda9
--- /dev/null
+++ b/src/main/java/org/bukkit/block/data/type/SuspiciousSand.java
@@ -0,0 +1,30 @@
+package org.bukkit.block.data.type;
+
+import org.bukkit.block.data.BlockData;
+
+/**
+ * 'dusted' represents how far uncovered by brush the block is.
+ */
+public interface SuspiciousSand extends BlockData {
+
+ /**
+ * Gets the value of the 'dusted' property.
+ *
+ * @return the 'dusted' value
+ */
+ int getDusted();
+
+ /**
+ * Sets the value of the 'dusted' property.
+ *
+ * @param dusted the new 'dusted' value
+ */
+ void setDusted(int dusted);
+
+ /**
+ * Gets the maximum allowed value of the 'dusted' property.
+ *
+ * @return the maximum 'dusted' value
+ */
+ int getMaximumDusted();
+}
diff --git a/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java b/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java
index 559b876d..4b17c796 100644
--- a/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java
+++ b/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java
@@ -56,16 +56,16 @@ public class YamlConfiguration extends FileConfiguration {
private final Yaml yaml;
public YamlConfiguration() {
- constructor = new YamlConstructor();
- representer = new YamlRepresenter();
- representer.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
-
yamlDumperOptions = new DumperOptions();
yamlDumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
yamlLoaderOptions = new LoaderOptions();
yamlLoaderOptions.setMaxAliasesForCollections(Integer.MAX_VALUE); // SPIGOT-5881: Not ideal, but was default pre SnakeYAML 1.26
yamlLoaderOptions.setCodePointLimit(Integer.MAX_VALUE); // SPIGOT-7161: Not ideal, but was default pre SnakeYAML 1.32
+ constructor = new YamlConstructor(yamlLoaderOptions);
+ representer = new YamlRepresenter(yamlDumperOptions);
+ representer.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
+
yaml = new Yaml(constructor, representer, yamlDumperOptions, yamlLoaderOptions);
}
diff --git a/src/main/java/org/bukkit/configuration/file/YamlConstructor.java b/src/main/java/org/bukkit/configuration/file/YamlConstructor.java
index 09259942..6235fe0d 100644
--- a/src/main/java/org/bukkit/configuration/file/YamlConstructor.java
+++ b/src/main/java/org/bukkit/configuration/file/YamlConstructor.java
@@ -5,6 +5,7 @@ import java.util.Map;
import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.constructor.SafeConstructor;
import org.yaml.snakeyaml.error.YAMLException;
import org.yaml.snakeyaml.nodes.MappingNode;
@@ -13,7 +14,16 @@ import org.yaml.snakeyaml.nodes.Tag;
public class YamlConstructor extends SafeConstructor {
+ /**
+ * @deprecated options required
+ */
+ @Deprecated
public YamlConstructor() {
+ this(new LoaderOptions());
+ }
+
+ public YamlConstructor(@NotNull LoaderOptions loaderOptions) {
+ super(loaderOptions);
this.yamlConstructors.put(Tag.MAP, new ConstructCustomObject());
}
diff --git a/src/main/java/org/bukkit/configuration/file/YamlRepresenter.java b/src/main/java/org/bukkit/configuration/file/YamlRepresenter.java
index 4670f866..09a85c4a 100644
--- a/src/main/java/org/bukkit/configuration/file/YamlRepresenter.java
+++ b/src/main/java/org/bukkit/configuration/file/YamlRepresenter.java
@@ -6,12 +6,22 @@ import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.jetbrains.annotations.NotNull;
+import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.nodes.Node;
import org.yaml.snakeyaml.representer.Representer;
public class YamlRepresenter extends Representer {
+ /**
+ * @deprecated options required
+ */
+ @Deprecated
public YamlRepresenter() {
+ this(new DumperOptions());
+ }
+
+ public YamlRepresenter(@NotNull DumperOptions options) {
+ super(options);
this.multiRepresenters.put(ConfigurationSection.class, new RepresentConfigurationSection());
this.multiRepresenters.put(ConfigurationSerializable.class, new RepresentConfigurationSerializable());
// SPIGOT-6234: We could just switch YamlConstructor to extend Constructor rather than SafeConstructor, however there is a very small risk of issues with plugins treating config as untrusted input
diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java
index cb9e8b53..bea786a8 100644
--- a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java
+++ b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java
@@ -195,7 +195,8 @@ public enum EnchantmentTarget {
|| item.equals(Material.PIGLIN_HEAD)
|| item.equals(Material.PLAYER_HEAD)
|| item.equals(Material.CREEPER_HEAD)
- || item.equals(Material.DRAGON_HEAD);
+ || item.equals(Material.DRAGON_HEAD)
+ || item.equals(Material.SHIELD);
}
},
diff --git a/src/main/java/org/bukkit/entity/BlockDisplay.java b/src/main/java/org/bukkit/entity/BlockDisplay.java
new file mode 100644
index 00000000..bc478623
--- /dev/null
+++ b/src/main/java/org/bukkit/entity/BlockDisplay.java
@@ -0,0 +1,25 @@
+package org.bukkit.entity;
+
+import org.bukkit.block.data.BlockData;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Represents a block display entity.
+ */
+public interface BlockDisplay extends Display {
+
+ /**
+ * Gets the displayed block.
+ *
+ * @return the displayed block
+ */
+ @NotNull
+ public BlockData getBlock();
+
+ /**
+ * Sets the displayed block.
+ *
+ * @param block the new block
+ */
+ public void setBlock(@NotNull BlockData block);
+}
diff --git a/src/main/java/org/bukkit/entity/Boat.java b/src/main/java/org/bukkit/entity/Boat.java
index ebab99bd..88852215 100644
--- a/src/main/java/org/bukkit/entity/Boat.java
+++ b/src/main/java/org/bukkit/entity/Boat.java
@@ -141,6 +141,7 @@ public interface Boat extends Vehicle {
BIRCH(Material.BIRCH_PLANKS),
JUNGLE(Material.JUNGLE_PLANKS),
ACACIA(Material.ACACIA_PLANKS),
+ CHERRY(Material.CHERRY_PLANKS),
DARK_OAK(Material.DARK_OAK_PLANKS),
MANGROVE(Material.MANGROVE_PLANKS),
BAMBOO(Material.BAMBOO_PLANKS),
diff --git a/src/main/java/org/bukkit/entity/Display.java b/src/main/java/org/bukkit/entity/Display.java
new file mode 100644
index 00000000..ae0f7536
--- /dev/null
+++ b/src/main/java/org/bukkit/entity/Display.java
@@ -0,0 +1,267 @@
+package org.bukkit.entity;
+
+import com.google.common.base.Preconditions;
+import org.bukkit.Color;
+import org.bukkit.util.Transformation;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Represents a display entity which is designed to only have a visual function.
+ */
+public interface Display extends Entity {
+
+ /**
+ * Gets the transformation applied to this display.
+ *
+ * @return the transformation
+ */
+ @NotNull
+ public Transformation getTransformation();
+
+ /**
+ * Sets the transformation applied to this display
+ *
+ * @param transformation the new transformation
+ */
+ public void setTransformation(@NotNull Transformation transformation);
+
+ /**
+ * Gets the interpolation duration of this display.
+ *
+ * @return interpolation duration
+ */
+ public int getInterpolationDuration();
+
+ /**
+ * Sets the interpolation duration of this display.
+ *
+ * @param duration new duration
+ */
+ public void setInterpolationDuration(int duration);
+
+ /**
+ * Gets the view distance/range of this display.
+ *
+ * @return view range
+ */
+ public float getViewRange();
+
+ /**
+ * Sets the view distance/range of this display.
+ *
+ * @param range new range
+ */
+ public void setViewRange(float range);
+
+ /**
+ * Gets the shadow radius of this display.
+ *
+ * @return radius
+ */
+ public float getShadowRadius();
+
+ /**
+ * Sets the shadow radius of this display.
+ *
+ * @param radius new radius
+ */
+ public void setShadowRadius(float radius);
+
+ /**
+ * Gets the shadow strength of this display.
+ *
+ * @return shadow strength
+ */
+ public float getShadowStrength();
+
+ /**
+ * Sets the shadow strength of this display.
+ *
+ * @param strength new strength
+ */
+ public void setShadowStrength(float strength);
+
+ /**
+ * Gets the width of this display.
+ *
+ * @return width
+ */
+ public float getDisplayWidth();
+
+ /**
+ * Sets the width of this display.
+ *
+ * @param width new width
+ */
+ public void setDisplayWidth(float width);
+
+ /**
+ * Gets the height of this display.
+ *
+ * @return height
+ */
+ public float getDisplayHeight();
+
+ /**
+ * Sets the height if this display.
+ *
+ * @param height new height
+ */
+ public void setDisplayHeight(float height);
+
+ /**
+ * Gets the amount of ticks before client-side interpolation will commence.
+ *
+ * @return interpolation delay ticks
+ */
+ public int getInterpolationDelay();
+
+ /**
+ * Sets the amount of ticks before client-side interpolation will commence.
+ *
+ * @param ticks interpolation delay ticks
+ */
+ public void setInterpolationDelay(int ticks);
+
+ /**
+ * Gets the billboard setting of this entity.
+ *
+ * The billboard setting controls the automatic rotation of the entity to
+ * face the player.
+ *
+ * @return billboard setting
+ */
+ @NotNull
+ public Billboard getBillboard();
+
+ /**
+ * Sets the billboard setting of this entity.
+ *
+ * The billboard setting controls the automatic rotation of the entity to
+ * face the player.
+ *
+ * @param billboard new setting
+ */
+ @NotNull
+ public void setBillboard(@NotNull Billboard billboard);
+
+ /**
+ * Gets the scoreboard team overridden glow color of this display.
+ *
+ * @return glow color
+ */
+ @Nullable
+ public Color getGlowColorOverride();
+
+ /**
+ * Sets the scoreboard team overridden glow color of this display.
+ *
+ * @param color new color
+ */
+ public void setGlowColorOverride(@Nullable Color color);
+
+ /**
+ * Gets the brightness override of the entity.
+ *
+ * @return brightness override, if set
+ */
+ @Nullable
+ public Brightness getBrightness();
+
+ /**
+ * Sets the brightness override of the entity.
+ *
+ * @param brightness new brightness override
+ */
+ public void setBrightness(@Nullable Brightness brightness);
+
+ /**
+ * Describes the axes/points around which the entity can pivot.
+ */
+ public enum Billboard {
+
+ /**
+ * No rotation (default).
+ */
+ FIXED,
+ /**
+ * Can pivot around vertical axis.
+ */
+ VERTICAL,
+ /**
+ * Can pivot around horizontal axis.
+ */
+ HORIZONTAL,
+ /**
+ * Can pivot around center point.
+ */
+ CENTER;
+ }
+
+ /**
+ * Represents the brightness rendering parameters of the entity.
+ */
+ public static class Brightness {
+
+ private final int blockLight;
+ private final int skyLight;
+
+ public Brightness(int blockLight, int skyLight) {
+ Preconditions.checkArgument(0 <= blockLight && blockLight <= 15, "Block brightness out of range: %s", blockLight);
+ Preconditions.checkArgument(0 <= skyLight && skyLight <= 15, "Sky brightness out of range: %s", skyLight);
+
+ this.blockLight = blockLight;
+ this.skyLight = skyLight;
+ }
+
+ /**
+ * Gets the block lighting component of this brightness.
+ *
+ * @return block light, between 0-15
+ */
+ public int getBlockLight() {
+ return this.blockLight;
+ }
+
+ /**
+ * Gets the sky lighting component of this brightness.
+ *
+ * @return sky light, between 0-15
+ */
+ public int getSkyLight() {
+ return this.skyLight;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 7;
+ hash = 47 * hash + this.blockLight;
+ hash = 47 * hash + this.skyLight;
+ return hash;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final Brightness other = (Brightness) obj;
+ if (this.blockLight != other.blockLight) {
+ return false;
+ }
+ return this.skyLight == other.skyLight;
+ }
+
+ @Override
+ public String toString() {
+ return "Brightness{" + "blockLight=" + this.blockLight + ", skyLight=" + this.skyLight + '}';
+ }
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/EntityType.java b/src/main/java/org/bukkit/entity/EntityType.java
index 2caa5f82..8b913a94 100644
--- a/src/main/java/org/bukkit/entity/EntityType.java
+++ b/src/main/java/org/bukkit/entity/EntityType.java
@@ -279,6 +279,11 @@ public enum EntityType implements Keyed, Translatable {
TADPOLE("tadpole", Tadpole.class, -1),
WARDEN("warden", Warden.class, -1),
CAMEL("camel", Camel.class, -1),
+ BLOCK_DISPLAY("block_display", BlockDisplay.class, -1),
+ INTERACTION("interaction", Interaction.class, -1),
+ ITEM_DISPLAY("item_display", ItemDisplay.class, -1),
+ SNIFFER("sniffer", Sniffer.class, -1),
+ TEXT_DISPLAY("text_display", TextDisplay.class, -1),
/**
* A fishing line and bobber.
*/
diff --git a/src/main/java/org/bukkit/entity/Interaction.java b/src/main/java/org/bukkit/entity/Interaction.java
new file mode 100644
index 00000000..37fda1dc
--- /dev/null
+++ b/src/main/java/org/bukkit/entity/Interaction.java
@@ -0,0 +1,92 @@
+package org.bukkit.entity;
+
+import org.bukkit.OfflinePlayer;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Represents an entity designed to only record interactions.
+ */
+public interface Interaction extends Entity {
+
+ /**
+ * Gets the width of this interaction entity.
+ *
+ * @return width
+ */
+ public float getInteractionWidth();
+
+ /**
+ * Sets the width of this interaction entity.
+ *
+ * @param width new width
+ */
+ public void setInteractionWidth(float width);
+
+ /**
+ * Gets the height of this interaction entity.
+ *
+ * @return height
+ */
+ public float getInteractionHeight();
+
+ /**
+ * Sets the height of this interaction entity.
+ *
+ * @param height new height
+ */
+ public void setInteractionHeight(float height);
+
+ /**
+ * Gets if this interaction entity should trigger a response when interacted
+ * with.
+ *
+ * @return response setting
+ */
+ public boolean isResponsive();
+
+ /**
+ * Sets if this interaction entity should trigger a response when interacted
+ * with.
+ *
+ * @param response new setting
+ */
+ public void setResponsive(boolean response);
+
+ /**
+ * Gets the last attack on this interaction entity.
+ *
+ * @return last attack data, if present
+ */
+ @Nullable
+ public PreviousInteraction getLastAttack();
+
+ /**
+ * Gets the last interaction on this entity.
+ *
+ * @return last interaction data, if present
+ */
+ @Nullable
+ public PreviousInteraction getLastInteraction();
+
+ /**
+ * Represents a previous interaction with this entity.
+ */
+ public interface PreviousInteraction {
+
+ /**
+ * Get the previous interacting player.
+ *
+ * @return interacting player
+ */
+ @NotNull
+ public OfflinePlayer getPlayer();
+
+ /**
+ * Gets the Unix timestamp at when this interaction occurred.
+ *
+ * @return interaction timestamp
+ */
+ public long getTimestamp();
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/ItemDisplay.java b/src/main/java/org/bukkit/entity/ItemDisplay.java
new file mode 100644
index 00000000..bd718c1c
--- /dev/null
+++ b/src/main/java/org/bukkit/entity/ItemDisplay.java
@@ -0,0 +1,61 @@
+package org.bukkit.entity;
+
+import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Represents an item display entity.
+ */
+public interface ItemDisplay extends Display {
+
+ /**
+ * Gets the displayed item stack.
+ *
+ * @return the displayed item stack
+ */
+ @Nullable
+ ItemStack getItemStack();
+
+ /**
+ * Sets the displayed item stack.
+ *
+ * @param item the new item stack
+ */
+ void setItemStack(@Nullable ItemStack item);
+
+ /**
+ * Gets the item display transform for this entity.
+ *
+ * Defaults to {@link ItemDisplayTransform#FIXED}.
+ *
+ * @return item display transform
+ */
+ @NotNull
+ ItemDisplayTransform getItemDisplayTransform();
+
+ /**
+ * Sets the item display transform for this entity.
+ *
+ * Defaults to {@link ItemDisplayTransform#FIXED}.
+ *
+ * @param display new display
+ */
+ void setItemDisplayTransform(@NotNull ItemDisplayTransform display);
+
+ /**
+ * Represents the item model transform to be applied to the displayed item.
+ */
+ public enum ItemDisplayTransform {
+
+ NONE,
+ THIRDPERSON_LEFTHAND,
+ THIRDPERSON_RIGHTHAND,
+ FIRSTPERSON_LEFTHAND,
+ FIRSTPERSON_RIGHTHAND,
+ HEAD,
+ GUI,
+ GROUND,
+ FIXED;
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/Sniffer.java b/src/main/java/org/bukkit/entity/Sniffer.java
new file mode 100644
index 00000000..dc640c44
--- /dev/null
+++ b/src/main/java/org/bukkit/entity/Sniffer.java
@@ -0,0 +1,8 @@
+package org.bukkit.entity;
+
+/**
+ * Represents a Sniffer.
+ */
+public interface Sniffer extends Animals {
+
+}
diff --git a/src/main/java/org/bukkit/entity/TextDisplay.java b/src/main/java/org/bukkit/entity/TextDisplay.java
new file mode 100644
index 00000000..766d6f00
--- /dev/null
+++ b/src/main/java/org/bukkit/entity/TextDisplay.java
@@ -0,0 +1,145 @@
+package org.bukkit.entity;
+
+import org.bukkit.Color;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Represents a text display entity.
+ */
+public interface TextDisplay extends Display {
+
+ /**
+ * Gets the displayed text.
+ *
+ * @return the displayed text.
+ */
+ @Nullable
+ String getText();
+
+ /**
+ * Sets the displayed text.
+ *
+ * @param text the new text
+ */
+ void setText(@Nullable String text);
+
+ /**
+ * Gets the maximum line width before wrapping.
+ *
+ * @return the line width
+ */
+ int getLineWidth();
+
+ /**
+ * Sets the maximum line width before wrapping.
+ *
+ * @param width new line width
+ */
+ void setLineWidth(int width);
+
+ /**
+ * Gets the text background color.
+ *
+ * @return the background color
+ */
+ @Nullable
+ Color getBackgroundColor();
+
+ /**
+ * Sets the text background color.
+ *
+ * @param color new background color
+ */
+ void setBackgroundColor(@Nullable Color color);
+
+ /**
+ * Gets the text opacity.
+ *
+ * @return opacity or -1 if not set
+ */
+ byte getTextOpacity();
+
+ /**
+ * Sets the text opacity.
+ *
+ * @param opacity new opacity or -1 if default
+ */
+ void setTextOpacity(byte opacity);
+
+ /**
+ * Gets if the text is shadowed.
+ *
+ * @return shadow status
+ */
+ boolean isShadowed();
+
+ /**
+ * Sets if the text is shadowed.
+ *
+ * @param shadow if shadowed
+ */
+ void setShadowed(boolean shadow);
+
+ /**
+ * Gets if the text is see through.
+ *
+ * @return see through status
+ */
+ boolean isSeeThrough();
+
+ /**
+ * Sets if the text is see through.
+ *
+ * @param seeThrough if see through
+ */
+ void setSeeThrough(boolean seeThrough);
+
+ /**
+ * Gets if the text has its default background.
+ *
+ * @return default background
+ */
+ boolean isDefaultBackground();
+
+ /**
+ * Sets if the text has its default background.
+ *
+ * @param defaultBackground if default
+ */
+ void setDefaultBackground(boolean defaultBackground);
+
+ /**
+ * Gets the text alignment for this display.
+ *
+ * @return text alignment
+ */
+ @NotNull
+ TextAligment getAlignment();
+
+ /**
+ * Sets the text alignment for this display.
+ *
+ * @param alignment new alignment
+ */
+ void setAlignment(@NotNull TextAligment alignment);
+
+ /**
+ * Represents possible text alignments for this display.
+ */
+ public enum TextAligment {
+
+ /**
+ * Center aligned text (default).
+ */
+ CENTER,
+ /**
+ * Left aligned text.
+ */
+ LEFT,
+ /**
+ * Right aligned text.
+ */
+ RIGHT;
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/memory/MemoryKey.java b/src/main/java/org/bukkit/entity/memory/MemoryKey.java
index 147714f3..8f601e85 100644
--- a/src/main/java/org/bukkit/entity/memory/MemoryKey.java
+++ b/src/main/java/org/bukkit/entity/memory/MemoryKey.java
@@ -69,6 +69,7 @@ public final class MemoryKey implements Keyed {
public static final MemoryKey LIKED_NOTEBLOCK_POSITION = new MemoryKey<>(NamespacedKey.minecraft("liked_noteblock"), Location.class);
public static final MemoryKey LIKED_NOTEBLOCK_COOLDOWN_TICKS = new MemoryKey<>(NamespacedKey.minecraft("liked_noteblock_cooldown_ticks"), Integer.class);
public static final MemoryKey ITEM_PICKUP_COOLDOWN_TICKS = new MemoryKey<>(NamespacedKey.minecraft("item_pickup_cooldown_ticks"), Integer.class);
+ public static final MemoryKey SNIFFER_EXPLORED_POSITIONS = new MemoryKey<>(NamespacedKey.minecraft("sniffer_explored_positions"), Location.class);
/**
* Returns a {@link MemoryKey} by a {@link NamespacedKey}.
diff --git a/src/main/java/org/bukkit/event/inventory/InventoryType.java b/src/main/java/org/bukkit/event/inventory/InventoryType.java
index 21ef4150..8573f5d1 100644
--- a/src/main/java/org/bukkit/event/inventory/InventoryType.java
+++ b/src/main/java/org/bukkit/event/inventory/InventoryType.java
@@ -138,6 +138,13 @@ public enum InventoryType {
* Pseudo chiseled bookshelf inventory, with 6 slots of undefined type.
*/
CHISELED_BOOKSHELF(6, "Chiseled Bookshelf"),
+ /**
+ * The new smithing inventory, with 3 CRAFTING slots and 1 RESULT slot.
+ *
+ * @deprecated draft, experimental 1.20 API
+ */
+ @Deprecated
+ SMITHING_NEW(4, "Upgrade Gear"),
;
private final int size;
diff --git a/src/main/java/org/bukkit/inventory/InventoryView.java b/src/main/java/org/bukkit/inventory/InventoryView.java
index 14346d83..5fc95b83 100644
--- a/src/main/java/org/bukkit/inventory/InventoryView.java
+++ b/src/main/java/org/bukkit/inventory/InventoryView.java
@@ -388,6 +388,7 @@ public abstract class InventoryView {
}
break;
case LOOM:
+ case SMITHING_NEW:
if (slot == 3) {
type = InventoryType.SlotType.RESULT;
} else {
diff --git a/src/main/java/org/bukkit/inventory/SmithingTransformRecipe.java b/src/main/java/org/bukkit/inventory/SmithingTransformRecipe.java
new file mode 100644
index 00000000..08fd3eca
--- /dev/null
+++ b/src/main/java/org/bukkit/inventory/SmithingTransformRecipe.java
@@ -0,0 +1,36 @@
+package org.bukkit.inventory;
+
+import org.bukkit.NamespacedKey;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Represents a smithing transform recipe.
+ */
+public class SmithingTransformRecipe extends SmithingRecipe {
+
+ private final RecipeChoice template;
+
+ /**
+ * Create a smithing recipe to produce the specified result ItemStack.
+ *
+ * @param key The unique recipe key
+ * @param result The item you want the recipe to create.
+ * @param template The template item.
+ * @param base The base ingredient
+ * @param addition The addition ingredient
+ */
+ public SmithingTransformRecipe(@NotNull NamespacedKey key, @NotNull ItemStack result, @NotNull RecipeChoice template, @NotNull RecipeChoice base, @NotNull RecipeChoice addition) {
+ super(key, result, base, addition);
+ this.template = template;
+ }
+
+ /**
+ * Get the template recipe item.
+ *
+ * @return template choice
+ */
+ @NotNull
+ public RecipeChoice getTemplate() {
+ return template.clone();
+ }
+}
diff --git a/src/main/java/org/bukkit/inventory/SmithingTrimRecipe.java b/src/main/java/org/bukkit/inventory/SmithingTrimRecipe.java
new file mode 100644
index 00000000..32cbdc34
--- /dev/null
+++ b/src/main/java/org/bukkit/inventory/SmithingTrimRecipe.java
@@ -0,0 +1,36 @@
+package org.bukkit.inventory;
+
+import org.bukkit.Material;
+import org.bukkit.NamespacedKey;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Represents a smithing trim recipe.
+ */
+public class SmithingTrimRecipe extends SmithingRecipe implements ComplexRecipe {
+
+ private final RecipeChoice template;
+
+ /**
+ * Create a smithing recipe to produce the specified result ItemStack.
+ *
+ * @param key The unique recipe key
+ * @param template The template item.
+ * @param base The base ingredient
+ * @param addition The addition ingredient
+ */
+ public SmithingTrimRecipe(@NotNull NamespacedKey key, @NotNull RecipeChoice template, @NotNull RecipeChoice base, @NotNull RecipeChoice addition) {
+ super(key, new ItemStack(Material.AIR), base, addition);
+ this.template = template;
+ }
+
+ /**
+ * Get the template recipe item.
+ *
+ * @return template choice
+ */
+ @NotNull
+ public RecipeChoice getTemplate() {
+ return template.clone();
+ }
+}
diff --git a/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java b/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java
index 0c9f4d1e..77a38053 100644
--- a/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java
+++ b/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java
@@ -23,6 +23,7 @@ import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.AbstractConstruct;
import org.yaml.snakeyaml.constructor.SafeConstructor;
@@ -200,7 +201,7 @@ public final class PluginDescriptionFile {
@Override
@NotNull
protected Yaml initialValue() {
- return new Yaml(new SafeConstructor() {
+ return new Yaml(new SafeConstructor(new LoaderOptions()) {
{
yamlConstructors.put(null, new AbstractConstruct() {
@NotNull
diff --git a/src/main/java/org/bukkit/util/Transformation.java b/src/main/java/org/bukkit/util/Transformation.java
new file mode 100644
index 00000000..39f9e50c
--- /dev/null
+++ b/src/main/java/org/bukkit/util/Transformation.java
@@ -0,0 +1,126 @@
+package org.bukkit.util;
+
+import com.google.common.base.Preconditions;
+import java.util.Objects;
+import org.jetbrains.annotations.NotNull;
+import org.joml.AxisAngle4f;
+import org.joml.Quaternionf;
+import org.joml.Vector3f;
+
+/**
+ * Represents an arbitrary affine transformation.
+ */
+public class Transformation {
+
+ @NotNull
+ private final Vector3f translation;
+ @NotNull
+ private final Quaternionf leftRotation;
+ @NotNull
+ private final Vector3f scale;
+ @NotNull
+ private final Quaternionf rightRotation;
+
+ public Transformation(@NotNull Vector3f translation, @NotNull AxisAngle4f leftRotation, @NotNull Vector3f scale, @NotNull AxisAngle4f rightRotation) {
+ Preconditions.checkArgument(translation != null, "translation cannot be null");
+ Preconditions.checkArgument(leftRotation != null, "leftRotation cannot be null");
+ Preconditions.checkArgument(scale != null, "scale cannot be null");
+ Preconditions.checkArgument(rightRotation != null, "rightRotation cannot be null");
+
+ this.translation = translation;
+ this.leftRotation = new Quaternionf(leftRotation);
+ this.scale = scale;
+ this.rightRotation = new Quaternionf(rightRotation);
+ }
+
+ public Transformation(@NotNull Vector3f translation, @NotNull Quaternionf leftRotation, @NotNull Vector3f scale, @NotNull Quaternionf rightRotation) {
+ Preconditions.checkArgument(translation != null, "translation cannot be null");
+ Preconditions.checkArgument(leftRotation != null, "leftRotation cannot be null");
+ Preconditions.checkArgument(scale != null, "scale cannot be null");
+ Preconditions.checkArgument(rightRotation != null, "rightRotation cannot be null");
+
+ this.translation = translation;
+ this.leftRotation = leftRotation;
+ this.scale = scale;
+ this.rightRotation = rightRotation;
+ }
+
+ /**
+ * Gets the translation component of this transformation.
+ *
+ * @return translation component
+ */
+ @NotNull
+ public Vector3f getTranslation() {
+ return this.translation;
+ }
+
+ /**
+ * Gets the left rotation component of this transformation.
+ *
+ * @return left rotation component
+ */
+ @NotNull
+ public Quaternionf getLeftRotation() {
+ return this.leftRotation;
+ }
+
+ /**
+ * Gets the scale component of this transformation.
+ *
+ * @return scale component
+ */
+ @NotNull
+ public Vector3f getScale() {
+ return this.scale;
+ }
+
+ /**
+ * Gets the right rotation component of this transformation.
+ *
+ * @return right rotation component
+ */
+ @NotNull
+ public Quaternionf getRightRotation() {
+ return this.rightRotation;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 7;
+ hash = 11 * hash + Objects.hashCode(this.translation);
+ hash = 11 * hash + Objects.hashCode(this.leftRotation);
+ hash = 11 * hash + Objects.hashCode(this.scale);
+ hash = 11 * hash + Objects.hashCode(this.rightRotation);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final Transformation other = (Transformation) obj;
+ if (!Objects.equals(this.translation, other.translation)) {
+ return false;
+ }
+ if (!Objects.equals(this.leftRotation, other.leftRotation)) {
+ return false;
+ }
+ if (!Objects.equals(this.scale, other.scale)) {
+ return false;
+ }
+ return Objects.equals(this.rightRotation, other.rightRotation);
+ }
+
+ @Override
+ public String toString() {
+ return "Transformation{" + "translation=" + this.translation + ", leftRotation=" + this.leftRotation + ", scale=" + this.scale + ", rightRotation=" + this.rightRotation + '}';
+ }
+}