Skip to content

API Changes in 1.21.1

All API Changes
All API Additions
  • OfflinePlayer#getPersistentDataContainer()
  • PlayerInsertLecternBookEvent extends PlayerEvent implements Cancellable
  • org.jspecify` annotations are now included in the api
  • BrewingStand#setRecipeBrewTime(int recipeBrewTime)
  • BrewingStand#getRecipeBrewTime(): int
  • BrewingStartEvent#getRecipeBrewTime(): int
  • BrewingStartEvent#setRecipeBrewTime(int recipeBrewTime)
  • BrewingStartEvent#getBrewingTime(): int
  • BrewingStartEvent#setBrewingTime(int brewingTime)
  • BrewingStandView#getRecipeBrewTime(): int
  • BrewingStandView#setRecipeBrewTime(int recipeBrewTime)
  • EntityEffect.TAMING_FAILED
  • EntityEffect.TAMING_SUCCEEDED
  • EntityEffect.ARMADILLO_PEEK
  • EntityEffect.BODY_BREAK
  • Entity#broadcastHurtAnimation(Collection<Player> players)
  • Player#sendEntityEffect(EntityEffect effect, Entity target)
  • ItemFactory#enchantWithLevels(ItemStack itemStack, int levels, RegistryKeySet<Enchantment> keySet, Random random): ItemStack
  • ItemStack#enchantWithLevels(int levels, RegistryKeySet<Enchantment> keySet, Random random): ItemStack
  • Datapack#getTitle(): Component
  • Datapack#getDescription(): Component
  • Datapack#isRequired(): boolean
  • Datapack#getRequiredFeatures(): Set<FeatureFlag>
  • Datapack#getSource(): DatapackSource
  • Datapack#computeDisplayName(): Component
  • DatapackManager#refreshPacks()
  • DatapackManager#getPack(String name): Datapack
  • DatapackSource
  • ItemStack.serializeItemsAsBytes(Collection<ItemStack> items): byte[]
  • ItemStack.serializeItemsAsBytes(ItemStack[] items): byte[]
  • ItemStack#deserializeItemsFromBytes(byte[] bytes): ItemStack[]
  • <T extends Projectile> ProjectileSource#launchProjective(Class<? extends T> projectile, Vector velocity, Consumer<? super T> function): T
  • TileStateInventoryHolder extends TileState, BlockInventoryHolder
  • Bed#setOccupied(boolean occupied)
  • DecoratedPot#isCracked(): boolean
  • DecoratedPot#setCracked(boolean cracked)
  • UnsafeValues#serializeItemAsJson(ItemStack itemStack): JsonObject
  • UnsafeValues#deserializeItemFromJson(JsonObject data): ItemStack
  • TagEventTypeProvider
  • PreFlattenTagRegistrar<T> extends Registrar
  • PostFlattenTagRegistrar<T> extends Registrar
  • TagEntry<T> extends Keyed
  • LifecycleEvents.TAGS: TagEventTypeProvider
  • FeatureDependant
  • FeatureFlagSetHolder
  • FeatureFlag.ALL_FLAGS: Index<Key, FeatureFlag>
  • EnchantmentView#setEnchantmentSeed(int seed)
  • CompassMeta#isLodestoneCompass(): boolean
  • CompassMeta#clearLodestone()
  • Bukkit.getWorld(Key worldKey): World
  • Server#getWorld(Key worldKey): World
  • Sign#getAllowedEditorUniqueId(): UUID
  • Sign#setAllowedEditorUniqueId(UUID uuid)
  • Leashable
  • Enchantment#description: Component
  • Enchantment#getSupportedItems(): RegistryKeySet<ItemType>
  • Enchantment#getPrimaryItems(): RegistryKeySet<ItemType>
  • Enchantment#getWeight(): int
  • Enchantment#getExclusiveWith(): RegistryKeySet<Enchantment>
  • FireworkMeta#hasPower(): boolean
  • All API Deprecations
  • BrewingStartEvent#getTotalBrewTime(): int
  • BrewingStartEvent#setTotalBrewTime(int brewTime)
  • EntityEffect.WORLD_SMOKE
  • EntityEffect.WOLF_HEARTS
  • EntityEffect.THORNS_HURT
  • EntityEffect.HURT_DROWN
  • EntityEffect.HURT_EXPLOSION
  • EntityEffect.PLAYER_BAD_OMEN_RAID
  • EntityEffect.HURT_BERRY_BUSH
  • Block#isValidTool(ItemStack itemStack): boolean
  • BukkitObjectInputStream
  • BukkitObjectOutputStream
  • BlockType#isInteractable(): boolean
  • BlockType#isEnabledByFeature(World world): boolean
  • ItemType#isEnabledByFeature(World world): boolean
  • InventoryView#getOriginalTitle(): String
  • InventoryView:setTitle(String title)
  • All Class Inheritance Changes
  • OfflinePlayer now extends PersistentDataViewHolder
  • MenuType now extends FeatureDependant
  • ChiseledBookshelf no longer extends TileState & BlockInventoryHolder and now extends TileStateInventoryHolder
  • Container no longer extends BlockInventoryHolder and now extends TileStateInventoryHolder
  • DecoratedPot no longer extends TileState & BlockInventoryHolder and now extends TileStateInventoryHolder
  • Jukebox no longer extends TileState & BlockInventoryHolder and now extends TileStateInventoryHolder
  • Lectern no longer extends TileState & BlockInventoryHolder and now extends TileStateInventoryHolder
  • Enchantment no longer extends FeatureDependant
  • RegionAccessor now extends FeatureFlagSetHolder
  • WorldInfo now extends FeatureFlagSetHolder
  • PotionEffectType now extends FeatureDependant
  • Enchantment now extends FeatureDependant
  • PotionType now extends FeatureDependant
  • EntityType now extends FeatureDependant
  • BlockType now extends FeatureDependant
  • Boat now extends Leashable
  • Mob now extends Leashable
  • All API Removals
  • UnsafeValues#getFeatureFlag(NamespacedKey key): FeatureFlag
  • #125 Updated Upstream (Bukkit/CraftBukkit)

    There have been minor API changes. View them in the PR description.

    #121 Add offline PDC API

    Additions:

    • OfflinePlayer#getPersistentDataContainer()

    Extensions:

    • OfflinePlayer now extends PersistentDataViewHolder

    #112 Add PlayerInsertLecternBookEvent [1.20 port]

    Additions:

    • PlayerInsertLecternBookEvent extends PlayerEvent implements Cancellable

    #111 Begin switching to JSpecify annotations

    Additions:

    • org.jspecify` annotations are now included in the api

    #109 Add API for explosions to damage the explosion cause

    Added a new parameter to World#explode

    #108 Add startingBrewTime

    Additions:

    • BrewingStand#setRecipeBrewTime(int recipeBrewTime)
    • BrewingStand#getRecipeBrewTime(): int
    • BrewingStartEvent#getRecipeBrewTime(): int
    • BrewingStartEvent#setRecipeBrewTime(int recipeBrewTime)
    • BrewingStartEvent#getBrewingTime(): int
    • BrewingStartEvent#setBrewingTime(int brewingTime)
    • BrewingStandView#getRecipeBrewTime(): int
    • BrewingStandView#setRecipeBrewTime(int recipeBrewTime)

    Deprecations:

    • BrewingStartEvent#getTotalBrewTime(): int
    • BrewingStartEvent#setTotalBrewTime(int brewTime)

    #107 Improve entity effect API

    Additions:

    • EntityEffect.TAMING_FAILED
    • EntityEffect.TAMING_SUCCEEDED
    • EntityEffect.ARMADILLO_PEEK
    • EntityEffect.BODY_BREAK
    • Entity#broadcastHurtAnimation(Collection<Player> players)
    • Player#sendEntityEffect(EntityEffect effect, Entity target)

    Deprecations:

    • EntityEffect.WORLD_SMOKE
    • EntityEffect.WOLF_HEARTS
    • EntityEffect.THORNS_HURT
    • EntityEffect.HURT_DROWN
    • EntityEffect.HURT_EXPLOSION
    • EntityEffect.PLAYER_BAD_OMEN_RAID
    • EntityEffect.HURT_BERRY_BUSH

    #105 Add enchantWithLevels with tag specification

    Additions:

    • ItemFactory#enchantWithLevels(ItemStack itemStack, int levels, RegistryKeySet<Enchantment> keySet, Random random): ItemStack
    • ItemStack#enchantWithLevels(int levels, RegistryKeySet<Enchantment> keySet, Random random): ItemStack

    #102 deprecate for removal Block#isValidTool

    Deprecations:

    • Block#isValidTool(ItemStack itemStack): boolean

    #97 make MenuType implement FeatureDependant

    Extensions:

    • MenuType now extends FeatureDependant

    #95 Expand out datapack API

    Additions:

    • Datapack#getTitle(): Component
    • Datapack#getDescription(): Component
    • Datapack#isRequired(): boolean
    • Datapack#getRequiredFeatures(): Set<FeatureFlag>
    • Datapack#getSource(): DatapackSource
    • Datapack#computeDisplayName(): Component
    • DatapackManager#refreshPacks()
    • DatapackManager#getPack(String name): Datapack
    • DatapackSource

    #92 Add ItemStack array serialization methods

    Additions:

    • ItemStack.serializeItemsAsBytes(Collection<ItemStack> items): byte[]
    • ItemStack.serializeItemsAsBytes(ItemStack[] items): byte[]
    • ItemStack#deserializeItemsFromBytes(byte[] bytes): ItemStack[]

    Deprecations:

    • BukkitObjectInputStream
    • BukkitObjectOutputStream

    #90 Deprecate BlockType#isInteractable

    Deprecations:

    • BlockType#isInteractable(): boolean

    #89 Update launchProjectile API

    Additions:

    • <T extends Projectile> ProjectileSource#launchProjective(Class<? extends T> projectile, Vector velocity, Consumer<? super T> function): T

    #88 create TileStateInventoryHolder

    Additions:

    • TileStateInventoryHolder extends TileState, BlockInventoryHolder

    Extensions:

    • ChiseledBookshelf no longer extends TileState & BlockInventoryHolder and now extends TileStateInventoryHolder
    • Container no longer extends BlockInventoryHolder and now extends TileStateInventoryHolder
    • DecoratedPot no longer extends TileState & BlockInventoryHolder and now extends TileStateInventoryHolder
    • Jukebox no longer extends TileState & BlockInventoryHolder and now extends TileStateInventoryHolder
    • Lectern no longer extends TileState & BlockInventoryHolder and now extends TileStateInventoryHolder

    #78 Updated Upstream (Bukkit/CraftBukkit/Spigot)

    A lot of API changes were merged in this build. Check the PR description for details.

    #75 deprecate isEnabledByFeature in Item/BlockType

    Deprecations:

    • BlockType#isEnabledByFeature(World world): boolean
    • ItemType#isEnabledByFeature(World world): boolean

    #74 Add Decorated Pot Cracked API

    Additions:

    • Bed#setOccupied(boolean occupied)
    • DecoratedPot#isCracked(): boolean
    • DecoratedPot#setCracked(boolean cracked)

    #73 Add Item serialization as json api

    Additions:

    • UnsafeValues#serializeItemAsJson(ItemStack itemStack): JsonObject
    • UnsafeValues#deserializeItemFromJson(JsonObject data): ItemStack

    #72 Tag Lifecycle Events

    Additions:

    • TagEventTypeProvider
    • PreFlattenTagRegistrar<T> extends Registrar
    • PostFlattenTagRegistrar<T> extends Registrar
    • TagEntry<T> extends Keyed
    • LifecycleEvents.TAGS: TagEventTypeProvider

    #70 Enchantment is data-driven, so not FeatureDependant

    Extensions:

    • Enchantment no longer extends FeatureDependant

    #69 Add FeatureFlag API

    Additions:

    • FeatureDependant
    • FeatureFlagSetHolder
    • FeatureFlag.ALL_FLAGS: Index<Key, FeatureFlag>

    Extensions:

    • RegionAccessor now extends FeatureFlagSetHolder
    • WorldInfo now extends FeatureFlagSetHolder
    • PotionEffectType now extends FeatureDependant
    • Enchantment now extends FeatureDependant
    • PotionType now extends FeatureDependant
    • EntityType now extends FeatureDependant
    • BlockType now extends FeatureDependant

    Removed:

    • UnsafeValues#getFeatureFlag(NamespacedKey key): FeatureFlag

    #50 Add enchantment seed update API

    Additions:

    • EnchantmentView#setEnchantmentSeed(int seed)

    #49 Add a method to reset Lodestone compasses back to normal ones

    Additions:

    • CompassMeta#isLodestoneCompass(): boolean
    • CompassMeta#clearLodestone()

    #47 Deprecate API relating to menu title changes

    Deprecations:

    • InventoryView#getOriginalTitle(): String
    • InventoryView:setTitle(String title)

    #36 Add getWorld method that uses adventure Key

    Additions:

    • Bukkit.getWorld(Key worldKey): World
    • Server#getWorld(Key worldKey): World

    #33 Allow getting/setting the sign's editor uuid

    Additions:

    • Sign#getAllowedEditorUniqueId(): UUID
    • Sign#setAllowedEditorUniqueId(UUID uuid)

    #31 Leashable API

    Additions:

    • Leashable

    Extensions:

    • Boat now extends Leashable
    • Mob now extends Leashable

    #30 Add even more Enchantment API

    Additions:

    • Enchantment#description: Component
    • Enchantment#getSupportedItems(): RegistryKeySet<ItemType>
    • Enchantment#getPrimaryItems(): RegistryKeySet<ItemType>
    • Enchantment#getWeight(): int
    • Enchantment#getExclusiveWith(): RegistryKeySet<Enchantment>

    #28 Updated Upstream (Bukkit/CraftBukkit/Spigot)

    Additions:

    • FireworkMeta#hasPower(): boolean

    Learn Paper Dev is licensed under CC BY-NC-SA 4.0