aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2023-06-20 09:40:14 -0700
committerJake Potrebic <[email protected]>2023-06-20 09:50:05 -0700
commit3fa4ea66682488002ec01ff1638ffc3951183d20 (patch)
treec583f1df959c5faaebecfa4629385f1522928e07 /patches/api
parent873533b1297480d6157ee5bbdbe51720c790e575 (diff)
downloadPaper-3fa4ea66682488002ec01ff1638ffc3951183d20.tar.gz
Paper-3fa4ea66682488002ec01ff1638ffc3951183d20.zip
Updated Upstream (Bukkit/CraftBukkit/Spigot)
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 6680169e [#660/Enum] Merge remote-tracking branch 'origin/pr/660' into experimental 8b97f215 Add missing AbstractTestingBase extension 9f21f42b [#660/Enum] Merge remote-tracking branch 'origin/pr/660' into experimental fb59a4a0 Create experimental version a7c1393b Merge branch 'master' into enums-to-registers 1af01165 Merge branch 'master' into enums-to-registers 4ee82e4e Implement feedback af8ffd60 Merge branch 'master' into enums-to-registers 6a8ea63f Updated to 1.20 22ae9ebc Merge branch 'master' into enums-to-registers b1d669be Some clean up 685d812e Merge branch 'master' into enums-to-registers 00d778c7 Convert MusicInstrument bba2eb5f Convert GameEvent ffbf67a1 Convert PotionType eacaa45d Convert Particle d08d21d1 Convert PatternType c6b51f7c Convert Cat type af6c2987 Make missing Frog variant abstract a67a5f5c Add missing Annotation 6ab21c50 Change how converting from / to BlockType and ItemType work e3e84e69 Add Objects.requireNonNull so that there are not marked as nullable fceddab5 Add missing deprecation e91906f5 Don't convert legacy in register instead, only in required method 2200b334 Use static constructors for ItemStack b5f483b0 Deprecated Material a995df2a Fix typo getItemTyp 9cedb664 import ItemType 27e282b2 getSteerItemType -> getSteerItem d8d0e43b Better Piglin method names 3a2ab399 BLOCK_TYPE -> BLOCK, ITEM_TYPE -> ITEM a0eb63ac Interface it is 4bb0b646 Split Material into BlockType and ItemType b6bfcff5 Merge branch 'master' into enums-to-registers 1f86c847 Updated to Mockito 5.3.1 280ee1f7 Fix merge, updated to 1.19.4 9e0c7ad5 Merge branch 'master' into enums-to-registers fdbed698 Updated to 1.19.3 85c3e2d3 Merge branch 'master' into enums-to-registers b2c390af Fix merge 4e405647 Merge branch 'master' into enums-to-registers d01b4c90 Fix copy/paste ba2c8cb1 Update to 1.19 7e4f2db2 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/bukkit into enums-to-registers a1a974f0 Fix merge 7d3a91d3 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/bukkit into enums-to-registers 499e22d9 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/bukkit into enums-to-registers a0cf419f Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/bukkit into enums-to-registers d5bd36a2 Fix / Implement merge changes fe643952 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/bukkit into enums-to-registers cf1d2005 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/bukkit into enums-to-registers f18dce93 Make Statistic abstract bbe3f791 Fix 1.18 merge Handle comment out test cases 0988647e Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/bukkit into enums-to-registers 6e4f2c50 Populated BlockType and ItemType 7a58144d Convert Material enum, midpoint push, it compiles and runs 4771132c Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/bukkit into enums-to-registers e6b179ff Convert Material enum, midpoint push to merge BlockState changes f33b85a0 Change other enums / classes. 8b0d5418 Create seperat OldEnum class, which holds common enum methods. 45544426 Change Enums to classes to easier handle none standart minecraft values CraftBukkit Changes: 8969b32d0 [#931/Enum] Merge remote-tracking branch 'origin/pr/931' into experimental 222257a67 Add missing AbstractTestingBase extension 0480af399 [#931/Enum] Merge remote-tracking branch 'origin/pr/931' into experimental 1afa1ddc2 Create experimental version 00780ea51 Ignore FactoryItemMaterialTest test 676969d01 SPIGOT-7389: Handle setting null items in ChiseledBookshelf Inventory 84f10cc36 Fix merge 9e114e13e Merge branch 'master' into enums-to-registers 941787e24 Add missing Commodore for 1.20 updated 6dac9a12d Updated tests 737426398 Only allow reference holder aaaa5fa88 Merge branch 'master' into enums-to-registers 74957eb99 Merge branch 'master' into enums-to-registers a1ca4e870 Merge branch 'master' into enums-to-registers f293f4a61 Updated to 1.20 b434b3d15 Merge branch 'master' into enums-to-registers e99dcbda7 Some clean up fcead8aed Use correct primitive class e955d9c50 Fix some Commodore errors af5526ebb Allow Material to support older plugins b83afd643 Add rewrite for Google enum set methods 067323765 Add missing method replacement in dynamic invocation 63e17e631 Merge branch 'master' into enums-to-registers 26dfcacf8 Bad copy and past d50c9bd6a Convert MusicInstrument c0c5312db Convert GameEvent 39daffe2c Convert PotionType 9b974f832 Convert Particle f528fca63 Convert PatternType 525c65006 Convert Cat type 6832b8fbb More consistent to / from bukkit / minecraft methods d31e38e16 Make missing Frog variant abstract e4f0e7d8e This shouldn't be committed 6fee81baa Add Commodore for EnumSet 82a668683 Fix hasItemType / getItemType f70162d66 Change how converting from / to BlockType and ItemType work c3f7c7886 Don't convert legacy in register instead, only in required method 2039e05fa Use static constructors for ItemStack fe221578b More Commodore 2b70bd171 More Commodore 70f4a89f5 Fix some Commodore 06544ed4b Fix typo getItemTyp 6269d2e42 getSteerItemType -> getSteerItem a19ac46c0 Better Piglin method names eef5f52c6 BLOCK_TYPE -> BLOCK, ITEM_TYPE -> ITEM bbaff1348 Interface it is c39e1316c Finish Commodore action for Material split dd8552105 Work on Commodore 1d4ef8bf2 Split Material into BlockType and ItemType 6c5a98220 Merge branch 'master' into enums-to-registers 869658a96 Handle Material calls in lambda expression 523ac4ac0 Add reroute for Class#getEnumConstants 0a4463279 Use extra method for getting registry 602d9b404 Updated to Mockito 5.3.1 8ff87b77d Fix merge, updated to 1.19.4 9d739d313 Merge branch 'master' into enums-to-registers eb6f702ff Reduce usage of BuiltInRegistries b6f667cac Some more asm compatibility changes, add config option 87c931d38 Handle enum maps a2c6699db Updated to 1.19.3 f7c27584f Merge branch 'master' into enums-to-registers 2f95b9951 Fix merge 184b05740 Merge branch 'master' into enums-to-registers 12bd8de26 Updated to 1.19 9c57831b7 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/craftbukkit into enums-to-registers 4ed8eb402 Fix merge a9faac8e4 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/craftbukkit into enums-to-registers 0d2988603 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/craftbukkit into enums-to-registers 3f8f9557d Fix merge, updated to 1.18.2 1560490c6 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/craftbukkit into enums-to-registers a0e4eb12c Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/craftbukkit into enums-to-registers 8b59f682d Move getType method to CraftEntity class b849c0147 Add missing patches 4644ba79f Fix / Implement merge changes cf9ee732e Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/craftbukkit into enums-to-registers 0c9125b67 Use Tag where possible cc05153d9 Cache interactable call ab5cc36de Use getHandle 83ebf4114 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/craftbukkit into enums-to-registers bc20aea0c Make Statistic abstract 3faa7e135 Add Tests for Material BlockType and ItemType e10f74365 Fix 1.18 merge Handle comment out test cases f72f70ec4 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/craftbukkit into enums-to-registers dbf4f5b7e Populated BlockType and ItemType 015afc1bc Convert Material enum, midpoint push, it compiles and runs cc0112866 Merge branch 'master' of https://hub.spigotmc.org/stash/scm/~derfrzocker/craftbukkit into enums-to-registers e26742c59 Convert Material enum, midpoint push to merge BlockState changes 796ad9295 Fix bug in legacy naming converting. 199c8278c Change other enums / classes. fd513652a Seperated custom biome value handling. Fix compareTo call. 60c71ce07 Change Enums to classes to easier handle none standart minecraft values Spigot Changes: addcf45f [Enum] Rebuild patches
Diffstat (limited to 'patches/api')
-rw-r--r--patches/api/0001-Convert-project-to-Gradle.patch21
-rw-r--r--patches/api/0002-Build-system-changes.patch6
-rw-r--r--patches/api/0003-Test-changes.patch331
-rw-r--r--patches/api/0005-Adventure.patch161
-rw-r--r--patches/api/0006-Paper-Utils.patch20
-rw-r--r--patches/api/0008-Paper-Plugins.patch80
-rw-r--r--patches/api/0010-Timings-v2.patch32
-rw-r--r--patches/api/0011-Add-command-line-option-to-load-extra-plugin-jars-no.patch8
-rw-r--r--patches/api/0012-Player-affects-spawning-API.patch4
-rw-r--r--patches/api/0013-Add-getTPS-method.patch8
-rw-r--r--patches/api/0014-Version-Command-2.0.patch4
-rw-r--r--patches/api/0015-Entity-Origin-API.patch6
-rw-r--r--patches/api/0017-Add-view-distance-API.patch8
-rw-r--r--patches/api/0020-Expose-server-CommandMap.patch8
-rw-r--r--patches/api/0021-Graduate-bungeecord-chat-API-from-spigot-subclasses.patch12
-rw-r--r--patches/api/0025-Player-Tab-List-and-Title-APIs.patch4
-rw-r--r--patches/api/0027-Complete-resource-pack-API.patch6
-rw-r--r--patches/api/0030-Add-command-to-reload-permissions.yml-and-require-co.patch8
-rw-r--r--patches/api/0043-Allow-Reloading-of-Command-Aliases.patch8
-rw-r--r--patches/api/0046-Add-String-based-Action-Bar-API.patch6
-rw-r--r--patches/api/0054-Add-configuration-option-to-prevent-player-names-fro.patch8
-rw-r--r--patches/api/0055-Fix-upstream-javadocs.patch173
-rw-r--r--patches/api/0059-Basic-PlayerProfile-API.patch8
-rw-r--r--patches/api/0061-Shoulder-Entities-Release-API.patch4
-rw-r--r--patches/api/0065-Add-getI18NDisplayName-API.patch8
-rw-r--r--patches/api/0066-ensureServerConversions-API.patch10
-rw-r--r--patches/api/0074-API-to-get-a-BlockState-without-a-snapshot.patch4
-rw-r--r--patches/api/0077-Display-warning-on-deprecated-recipe-API.patch12
-rw-r--r--patches/api/0080-Ability-to-apply-mending-to-XP-API.patch6
-rw-r--r--patches/api/0083-Add-setPlayerProfile-API-for-Skulls.patch8
-rw-r--r--patches/api/0091-Player.setPlayerProfile-API.patch24
-rw-r--r--patches/api/0092-getPlayerUniqueId-API.patch8
-rw-r--r--patches/api/0094-Add-openSign-method-to-HumanEntity.patch8
-rw-r--r--patches/api/0095-Add-Ban-Methods-to-Player-Objects.patch8
-rw-r--r--patches/api/0100-Expand-World.spawnParticle-API-and-add-Builder.patch35
-rw-r--r--patches/api/0107-ItemStack-getMaxItemUseDuration.patch8
-rw-r--r--patches/api/0115-ItemStack-API-additions-for-quantity-flags-lore.patch6
-rw-r--r--patches/api/0116-LivingEntity-Hand-Raised-Item-Use-API.patch6
-rw-r--r--patches/api/0130-AnvilDamageEvent.patch57
-rw-r--r--patches/api/0131-Add-TNTPrimeEvent.patch4
-rw-r--r--patches/api/0134-Don-t-use-snapshots-for-Timings-Tile-Entity-reports.patch4
-rw-r--r--patches/api/0135-Allow-Blocks-to-be-accessed-via-a-long-key.patch6
-rw-r--r--patches/api/0139-Inventory-removeItemAnySlot.patch6
-rw-r--r--patches/api/0141-Add-source-block-constructor-and-getChangedBlockData.patch4
-rw-r--r--patches/api/0143-Add-ray-tracing-methods-to-LivingEntity.patch4
-rw-r--r--patches/api/0144-Expose-attack-cooldown-methods-for-Player.patch4
-rw-r--r--patches/api/0146-Add-Git-information-to-version-command-on-startup.patch6
-rw-r--r--patches/api/0152-Material-API-additions.patch15
-rw-r--r--patches/api/0153-Add-Material-Tags.patch77
-rw-r--r--patches/api/0160-Make-the-default-permission-message-configurable.patch8
-rw-r--r--patches/api/0163-Change-the-reserved-channel-check-to-be-sensible.patch4
-rw-r--r--patches/api/0165-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch6
-rw-r--r--patches/api/0166-Add-ItemStack-Recipe-API-helper-methods.patch40
-rw-r--r--patches/api/0172-Fix-Spigot-annotation-mistakes.patch148
-rw-r--r--patches/api/0176-Mob-Spawner-API-Enhancements.patch4
-rw-r--r--patches/api/0177-Add-BlockSoundGroup-interface.patch4
-rw-r--r--patches/api/0180-Expose-the-internal-current-tick.patch8
-rw-r--r--patches/api/0181-Improve-Block-breakNaturally-API.patch4
-rw-r--r--patches/api/0186-Add-tick-times-API.patch8
-rw-r--r--patches/api/0187-Expose-MinecraftServer-isRunning.patch8
-rw-r--r--patches/api/0188-Add-Raw-Byte-ItemStack-Serialization.patch8
-rw-r--r--patches/api/0189-Add-Player-Client-Options-API.patch4
-rw-r--r--patches/api/0191-Fix-Potion-toItemStack-swapping-the-extended-and-upg.patch4
-rw-r--r--patches/api/0193-Villager-Restocks-API.patch4
-rw-r--r--patches/api/0194-Expose-game-version.patch8
-rw-r--r--patches/api/0195-Add-Mob-Goal-API.patch8
-rw-r--r--patches/api/0196-Add-villager-reputation-API.patch12
-rw-r--r--patches/api/0197-Spawn-Reason-API.patch6
-rw-r--r--patches/api/0198-Potential-bed-API.patch4
-rw-r--r--patches/api/0199-Inventory-getHolder-method-without-block-snapshot.patch4
-rw-r--r--patches/api/0206-Brand-support.patch4
-rw-r--r--patches/api/0208-Add-moon-phase-API.patch4
-rw-r--r--patches/api/0211-Add-methods-to-get-translation-keys.patch170
-rw-r--r--patches/api/0212-Create-HoverEvent-from-ItemStack-Entity.patch4
-rw-r--r--patches/api/0214-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch4
-rw-r--r--patches/api/0217-Player-elytra-boost-API.patch4
-rw-r--r--patches/api/0218-Add-getOfflinePlayerIfCached-String.patch8
-rw-r--r--patches/api/0219-Add-ignore-discounts-API.patch8
-rw-r--r--patches/api/0223-Add-Destroy-Speed-API.patch4
-rw-r--r--patches/api/0229-Expose-LivingEntity-hurt-direction.patch8
-rw-r--r--patches/api/0233-Additional-Block-Material-API-s.patch4
-rw-r--r--patches/api/0234-Add-API-to-get-Material-from-Boats-and-Minecarts.patch19
-rw-r--r--patches/api/0243-Add-API-to-get-exact-interaction-point-in-PlayerInte.patch4
-rw-r--r--patches/api/0244-Add-sendOpLevel-API.patch4
-rw-r--r--patches/api/0246-Add-StructuresLocateEvent.patch15
-rw-r--r--patches/api/0248-Added-missing-vanilla-tags.patch8
-rw-r--r--patches/api/0257-Add-missing-effects.patch6
-rw-r--r--patches/api/0259-Cache-the-result-of-Material-isBlock.patch8
-rw-r--r--patches/api/0263-Add-Block-isValidTool.patch4
-rw-r--r--patches/api/0264-Expand-world-key-API.patch18
-rw-r--r--patches/api/0265-Item-Rarity-API.patch45
-rw-r--r--patches/api/0267-add-isDeeplySleeping-to-HumanEntity.patch4
-rw-r--r--patches/api/0271-More-World-API.patch4
-rw-r--r--patches/api/0273-Introduce-beacon-activation-deactivation-events.patch12
-rw-r--r--patches/api/0280-Inventory-close.patch4
-rw-r--r--patches/api/0282-Add-basic-Datapack-API.patch14
-rw-r--r--patches/api/0284-ItemStack-repair-check-API.patch6
-rw-r--r--patches/api/0285-More-Enchantment-API.patch12
-rw-r--r--patches/api/0287-ItemStack-editMeta.patch4
-rw-r--r--patches/api/0289-Attributes-API-for-item-defaults.patch33
-rw-r--r--patches/api/0296-Add-more-line-of-sight-methods.patch6
-rw-r--r--patches/api/0299-Missing-Entity-Behavior-API.patch15
-rw-r--r--patches/api/0311-Option-to-prevent-NBT-copy-in-smithing-recipes.patch8
-rw-r--r--patches/api/0316-Get-entity-default-attributes.patch49
-rw-r--r--patches/api/0319-Add-ItemFactory-getSpawnEgg-API.patch4
-rw-r--r--patches/api/0322-Add-isCollidable-methods-to-various-places.patch54
-rw-r--r--patches/api/0325-Add-Raw-Byte-Entity-Serialization.patch6
-rw-r--r--patches/api/0327-Add-player-health-update-API.patch4
-rw-r--r--patches/api/0328-Allow-delegation-to-vanilla-chunk-gen.patch10
-rw-r--r--patches/api/0342-Multi-Block-Change-API.patch4
-rw-r--r--patches/api/0346-More-PotionEffectType-API.patch61
-rw-r--r--patches/api/0347-API-for-creating-command-sender-which-forwards-feedb.patch8
-rw-r--r--patches/api/0349-Add-GameEvent-tags.patch4
-rw-r--r--patches/api/0353-Custom-Potion-Mixes.patch8
-rw-r--r--patches/api/0355-More-Projectile-API.patch6
-rw-r--r--patches/api/0356-Add-getComputedBiome-API.patch10
-rw-r--r--patches/api/0357-Add-enchantWithLevels-API.patch10
-rw-r--r--patches/api/0362-Add-EntityDyeEvent-and-CollarColorable-interface.patch8
-rw-r--r--patches/api/0364-FallingBlock-auto-expire-setting.patch4
-rw-r--r--patches/api/0365-Add-method-isTickingWorlds-to-Bukkit.patch (renamed from patches/api/0366-Add-method-isTickingWorlds-to-Bukkit.patch)12
-rw-r--r--patches/api/0365-Keyed-Cat-Type.patch40
-rw-r--r--patches/api/0366-Add-WardenAngerChangeEvent.patch (renamed from patches/api/0367-Add-WardenAngerChangeEvent.patch)0
-rw-r--r--patches/api/0367-Nameable-Banner-API.patch (renamed from patches/api/0368-Nameable-Banner-API.patch)0
-rw-r--r--patches/api/0368-Add-Player-getFishHook.patch (renamed from patches/api/0369-Add-Player-getFishHook.patch)4
-rw-r--r--patches/api/0369-More-Teleport-API.patch (renamed from patches/api/0370-More-Teleport-API.patch)6
-rw-r--r--patches/api/0370-Add-EntityPortalReadyEvent.patch (renamed from patches/api/0371-Add-EntityPortalReadyEvent.patch)0
-rw-r--r--patches/api/0371-Custom-Chat-Completion-Suggestions-API.patch (renamed from patches/api/0372-Custom-Chat-Completion-Suggestions-API.patch)4
-rw-r--r--patches/api/0372-Collision-API.patch (renamed from patches/api/0373-Collision-API.patch)6
-rw-r--r--patches/api/0373-Block-Ticking-API.patch (renamed from patches/api/0374-Block-Ticking-API.patch)8
-rw-r--r--patches/api/0374-Also-load-resources-from-LibraryLoader.patch (renamed from patches/api/0376-Also-load-resources-from-LibraryLoader.patch)0
-rw-r--r--patches/api/0375-Add-NamespacedKey-biome-methods.patch44
-rw-r--r--patches/api/0375-Added-byte-array-serialization-deserialization-for-P.patch (renamed from patches/api/0377-Added-byte-array-serialization-deserialization-for-P.patch)0
-rw-r--r--patches/api/0376-Add-a-consumer-parameter-to-ProjectileSource-launchP.patch (renamed from patches/api/0378-Add-a-consumer-parameter-to-ProjectileSource-launchP.patch)0
-rw-r--r--patches/api/0377-Expose-codepoint-limit-in-YamlConfigOptions-and-incr.patch (renamed from patches/api/0379-Expose-codepoint-limit-in-YamlConfigOptions-and-incr.patch)0
-rw-r--r--patches/api/0378-Add-getDrops-to-BlockState.patch (renamed from patches/api/0380-Add-getDrops-to-BlockState.patch)4
-rw-r--r--patches/api/0379-Add-PlayerInventorySlotChangeEvent.patch (renamed from patches/api/0381-Add-PlayerInventorySlotChangeEvent.patch)0
-rw-r--r--patches/api/0380-Elder-Guardian-appearance-API.patch (renamed from patches/api/0382-Elder-Guardian-appearance-API.patch)4
-rw-r--r--patches/api/0381-Allow-changing-bed-s-occupied-property.patch (renamed from patches/api/0383-Allow-changing-bed-s-occupied-property.patch)0
-rw-r--r--patches/api/0382-Add-EquipmentSlot-convenience-methods.patch (renamed from patches/api/0384-Add-EquipmentSlot-convenience-methods.patch)0
-rw-r--r--patches/api/0383-Add-LivingEntity-swingHand-EquipmentSlot-convenience.patch (renamed from patches/api/0385-Add-LivingEntity-swingHand-EquipmentSlot-convenience.patch)2
-rw-r--r--patches/api/0384-Add-entity-knockback-API.patch (renamed from patches/api/0386-Add-entity-knockback-API.patch)2
-rw-r--r--patches/api/0385-Added-EntityToggleSitEvent.patch (renamed from patches/api/0387-Added-EntityToggleSitEvent.patch)0
-rw-r--r--patches/api/0386-Add-Moving-Piston-API.patch (renamed from patches/api/0388-Add-Moving-Piston-API.patch)0
-rw-r--r--patches/api/0387-Add-PrePlayerAttackEntityEvent.patch (renamed from patches/api/0389-Add-PrePlayerAttackEntityEvent.patch)0
-rw-r--r--patches/api/0388-Add-Player-Warden-Warning-API.patch (renamed from patches/api/0390-Add-Player-Warden-Warning-API.patch)4
-rw-r--r--patches/api/0389-More-vanilla-friendly-methods-to-update-trades.patch (renamed from patches/api/0391-More-vanilla-friendly-methods-to-update-trades.patch)6
-rw-r--r--patches/api/0390-Add-paper-dumplisteners-command.patch (renamed from patches/api/0392-Add-paper-dumplisteners-command.patch)0
-rw-r--r--patches/api/0391-ItemStack-damage-API.patch (renamed from patches/api/0393-ItemStack-damage-API.patch)6
-rw-r--r--patches/api/0392-Add-Tick-TemporalUnit.patch (renamed from patches/api/0394-Add-Tick-TemporalUnit.patch)0
-rw-r--r--patches/api/0393-Friction-API.patch (renamed from patches/api/0395-Friction-API.patch)2
-rw-r--r--patches/api/0394-Player-Entity-Tracking-Events.patch (renamed from patches/api/0396-Player-Entity-Tracking-Events.patch)0
-rw-r--r--patches/api/0395-fix-Instruments.patch (renamed from patches/api/0398-fix-Instruments.patch)2
-rw-r--r--patches/api/0396-Add-BlockLockCheckEvent.patch (renamed from patches/api/0399-Add-BlockLockCheckEvent.patch)0
-rw-r--r--patches/api/0397-Add-Sneaking-API-for-Entities.patch (renamed from patches/api/0400-Add-Sneaking-API-for-Entities.patch)4
-rw-r--r--patches/api/0397-Add-missing-Fluid-type.patch23
-rw-r--r--patches/api/0398-Improve-PortalEvents.patch (renamed from patches/api/0401-Improve-PortalEvents.patch)0
-rw-r--r--patches/api/0399-Add-exploded-block-state-to-BlockExplodeEvent.patch (renamed from patches/api/0402-Add-exploded-block-state-to-BlockExplodeEvent.patch)0
-rw-r--r--patches/api/0400-Flying-Fall-Damage-API.patch (renamed from patches/api/0403-Flying-Fall-Damage-API.patch)4
-rw-r--r--patches/api/0401-Expose-pre-collision-moving-velocity-to-VehicleBlock.patch (renamed from patches/api/0404-Expose-pre-collision-moving-velocity-to-VehicleBlock.patch)0
-rw-r--r--patches/api/0402-Replace-ItemFlag.HIDE_POTION_EFFECTS.patch (renamed from patches/api/0405-Replace-ItemFlag.HIDE_POTION_EFFECTS.patch)0
-rw-r--r--patches/api/0403-Win-Screen-API.patch (renamed from patches/api/0406-Win-Screen-API.patch)4
-rw-r--r--patches/api/0404-Add-Entity-Body-Yaw-API.patch (renamed from patches/api/0407-Add-Entity-Body-Yaw-API.patch)2
-rw-r--r--patches/api/0405-Fix-HandlerList-for-InventoryBlockStartEvent-subclas.patch (renamed from patches/api/0408-Fix-HandlerList-for-InventoryBlockStartEvent-subclas.patch)0
-rw-r--r--patches/api/0406-Add-EntityFertilizeEggEvent.patch (renamed from patches/api/0409-Add-EntityFertilizeEggEvent.patch)0
-rw-r--r--patches/api/0407-Add-CompostItemEvent-and-EntityCompostItemEvent.patch (renamed from patches/api/0410-Add-CompostItemEvent-and-EntityCompostItemEvent.patch)0
-rw-r--r--patches/api/0408-Add-Shearable-API.patch (renamed from patches/api/0411-Add-Shearable-API.patch)0
-rw-r--r--patches/api/0409-Fix-SpawnEggMeta-get-setSpawnedType.patch (renamed from patches/api/0412-Fix-SpawnEggMeta-get-setSpawnedType.patch)6
-rw-r--r--patches/api/0410-Add-Mob-Experience-reward-API.patch (renamed from patches/api/0413-Add-Mob-Experience-reward-API.patch)0
-rw-r--r--patches/api/0411-Expand-PlayerItemMendEvent.patch (renamed from patches/api/0414-Expand-PlayerItemMendEvent.patch)0
-rw-r--r--patches/api/0412-Add-transient-modifier-API.patch (renamed from patches/api/0415-Add-transient-modifier-API.patch)0
-rw-r--r--patches/api/0413-Add-API-for-waxed-signs.patch (renamed from patches/api/0416-Add-API-for-waxed-signs.patch)0
-rw-r--r--patches/api/0414-Properly-remove-the-experimental-smithing-inventory-.patch (renamed from patches/api/0417-Properly-remove-the-experimental-smithing-inventory-.patch)0
-rw-r--r--patches/api/0415-Add-method-to-remove-all-active-potion-effects.patch (renamed from patches/api/0418-Add-method-to-remove-all-active-potion-effects.patch)2
-rw-r--r--patches/api/0416-Mark-experimental-mc-things-appropriately.patch19
-rw-r--r--patches/api/0417-fixup-Paper-Utils.patch19
-rw-r--r--patches/api/0418-fixup-Add-Material-Tags.patch28
-rw-r--r--patches/api/0419-fixup-AnvilDamageEvent.patch19
177 files changed, 1140 insertions, 1447 deletions
diff --git a/patches/api/0001-Convert-project-to-Gradle.patch b/patches/api/0001-Convert-project-to-Gradle.patch
index fc709129d9..d7bd12e45c 100644
--- a/patches/api/0001-Convert-project-to-Gradle.patch
+++ b/patches/api/0001-Convert-project-to-Gradle.patch
@@ -27,10 +27,10 @@ index 11038da2e071699d6561a331565db0c8d7850d0e..317acfec5894101294a55abff6181943
+/.factorypath
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
-index 0000000000000000000000000000000000000000..73bc33e7a498f8eca2d68c4588b04de4eaf8fc7a
+index 0000000000000000000000000000000000000000..b1634fe921f5cd4e0b76823e33db5bc3ca50a8b5
--- /dev/null
+++ b/build.gradle.kts
-@@ -0,0 +1,85 @@
+@@ -0,0 +1,86 @@
+plugins {
+ `java-library`
+ `maven-publish`
@@ -63,6 +63,7 @@ index 0000000000000000000000000000000000000000..73bc33e7a498f8eca2d68c4588b04de4
+ testImplementation("junit:junit:4.13.2")
+ testImplementation("org.hamcrest:hamcrest-library:1.3")
+ testImplementation("org.ow2.asm:asm-tree:9.5")
++ testImplementation("org.mockito:mockito-core:5.3.1")
+}
+
+configure<PublishingExtension> {
@@ -118,10 +119,10 @@ index 0000000000000000000000000000000000000000..73bc33e7a498f8eca2d68c4588b04de4
+}
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
-index e6d48b5fdc484ed2443ddf1d60079a13ea2c9677..0000000000000000000000000000000000000000
+index f9baf5cd570de24773b5ac2e5126475b5124d863..0000000000000000000000000000000000000000
--- a/pom.xml
+++ /dev/null
-@@ -1,270 +0,0 @@
+@@ -1,276 +0,0 @@
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -129,7 +130,7 @@ index e6d48b5fdc484ed2443ddf1d60079a13ea2c9677..00000000000000000000000000000000
-
- <groupId>org.spigotmc</groupId>
- <artifactId>spigot-api</artifactId>
-- <version>1.20.1-R0.1-SNAPSHOT</version>
+- <version>1.20.1-experimental-SNAPSHOT</version>
- <packaging>jar</packaging>
-
- <name>Spigot-API</name>
@@ -138,8 +139,8 @@ index e6d48b5fdc484ed2443ddf1d60079a13ea2c9677..00000000000000000000000000000000
-
- <properties>
- <skipTests>true</skipTests>
-- <maven.compiler.source>1.8</maven.compiler.source>
-- <maven.compiler.target>1.8</maven.compiler.target>
+- <maven.compiler.source>9</maven.compiler.source>
+- <maven.compiler.target>9</maven.compiler.target>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
@@ -234,6 +235,12 @@ index e6d48b5fdc484ed2443ddf1d60079a13ea2c9677..00000000000000000000000000000000
- <version>9.5</version>
- <scope>test</scope>
- </dependency>
+- <dependency>
+- <groupId>org.mockito</groupId>
+- <artifactId>mockito-core</artifactId>
+- <version>5.3.1</version>
+- <scope>test</scope>
+- </dependency>
- </dependencies>
-
- <build>
diff --git a/patches/api/0002-Build-system-changes.patch b/patches/api/0002-Build-system-changes.patch
index 4204d5f382..a590c3c07d 100644
--- a/patches/api/0002-Build-system-changes.patch
+++ b/patches/api/0002-Build-system-changes.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Build system changes
diff --git a/build.gradle.kts b/build.gradle.kts
-index 73bc33e7a498f8eca2d68c4588b04de4eaf8fc7a..34117c1178e04885ff9be5b73c7c2547e77ed4d5 100644
+index b1634fe921f5cd4e0b76823e33db5bc3ca50a8b5..61e15811e94effd303d55f8fa14c9fbf0ca6438e 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -17,15 +17,27 @@ dependencies {
@@ -37,7 +37,7 @@ index 73bc33e7a498f8eca2d68c4588b04de4eaf8fc7a..34117c1178e04885ff9be5b73c7c2547
testImplementation("org.apache.commons:commons-lang3:3.12.0")
testImplementation("junit:junit:4.13.2")
testImplementation("org.hamcrest:hamcrest-library:1.3")
-@@ -67,7 +79,7 @@ tasks.withType<Javadoc> {
+@@ -68,7 +80,7 @@ tasks.withType<Javadoc> {
options.links(
"https://guava.dev/releases/31.1-jre/api/docs/",
"https://javadoc.io/doc/org.yaml/snakeyaml/2.0/",
@@ -46,7 +46,7 @@ index 73bc33e7a498f8eca2d68c4588b04de4eaf8fc7a..34117c1178e04885ff9be5b73c7c2547
"https://javadoc.io/doc/net.md-5/bungeecord-chat/1.16-R0.4/",
)
options.tags("apiNote:a:API Note:")
-@@ -83,3 +95,14 @@ tasks.withType<Javadoc> {
+@@ -84,3 +96,14 @@ tasks.withType<Javadoc> {
}
}
}
diff --git a/patches/api/0003-Test-changes.patch b/patches/api/0003-Test-changes.patch
index b1de3fe665..d6ab9a41f9 100644
--- a/patches/api/0003-Test-changes.patch
+++ b/patches/api/0003-Test-changes.patch
@@ -12,47 +12,6 @@ Subject: [PATCH] Test changes
Co-authored-by: Riley Park <[email protected]>
Co-authored-by: Jake Potrebic <[email protected]>
-diff --git a/build.gradle.kts b/build.gradle.kts
-index 34117c1178e04885ff9be5b73c7c2547e77ed4d5..c174d9d6534382ae9d002b883bde929d46e32789 100644
---- a/build.gradle.kts
-+++ b/build.gradle.kts
-@@ -37,6 +37,7 @@ dependencies {
- compileOnlyApi(checkerQual)
- testCompileOnly(checkerQual)
- // Paper end
-+ testImplementation("org.mockito:mockito-core:4.9.0") // Paper - add mockito
-
- testImplementation("org.apache.commons:commons-lang3:3.12.0")
- testImplementation("junit:junit:4.13.2")
-diff --git a/src/test/java/io/papermc/paper/testing/EmptyRegistry.java b/src/test/java/io/papermc/paper/testing/EmptyRegistry.java
-new file mode 100644
-index 0000000000000000000000000000000000000000..ba9ddce87a9f385e729a5c2cf7c5eec120e388a7
---- /dev/null
-+++ b/src/test/java/io/papermc/paper/testing/EmptyRegistry.java
-@@ -0,0 +1,23 @@
-+package io.papermc.paper.testing;
-+
-+import java.util.Collections;
-+import java.util.Iterator;
-+import org.bukkit.Keyed;
-+import org.bukkit.NamespacedKey;
-+import org.bukkit.Registry;
-+import org.jetbrains.annotations.NotNull;
-+import org.jetbrains.annotations.Nullable;
-+
-+public record EmptyRegistry() implements Registry<Keyed> {
-+
-+ @NotNull
-+ @Override
-+ public Iterator<Keyed> iterator() {
-+ return Collections.emptyIterator();
-+ }
-+
-+ @Override
-+ public @Nullable Keyed get(@NotNull final NamespacedKey key) {
-+ return null;
-+ }
-+}
diff --git a/src/test/java/io/papermc/paper/testing/EmptyTag.java b/src/test/java/io/papermc/paper/testing/EmptyTag.java
new file mode 100644
index 0000000000000000000000000000000000000000..77154095cfb8b259bdb318e8ff40cb6f559ebc18
@@ -90,60 +49,6 @@ index 0000000000000000000000000000000000000000..77154095cfb8b259bdb318e8ff40cb6f
+ return Collections.emptySet();
+ }
+}
-diff --git a/src/test/java/io/papermc/paper/testing/TestServer.java b/src/test/java/io/papermc/paper/testing/TestServer.java
-new file mode 100644
-index 0000000000000000000000000000000000000000..756acf231b1b076b08046d86992ba7ce7f62a94f
---- /dev/null
-+++ b/src/test/java/io/papermc/paper/testing/TestServer.java
-@@ -0,0 +1,48 @@
-+package io.papermc.paper.testing;
-+
-+import java.util.logging.Logger;
-+import org.bukkit.Bukkit;
-+import org.bukkit.NamespacedKey;
-+import org.bukkit.Server;
-+import org.bukkit.command.SimpleCommandMap;
-+import org.bukkit.plugin.PluginManager;
-+import org.bukkit.plugin.SimplePluginManager;
-+
-+import static org.mockito.ArgumentMatchers.anyString;
-+import static org.mockito.Mockito.any;
-+import static org.mockito.Mockito.mock;
-+import static org.mockito.Mockito.when;
-+
-+public final class TestServer {
-+
-+ @SuppressWarnings("removal")
-+ public static void setup() {
-+ //noinspection ConstantValue
-+ if (Bukkit.getServer() != null) {
-+ return;
-+ }
-+
-+ final Server dummyServer = mock(Server.class);
-+
-+ final Logger logger = Logger.getLogger(TestServer.class.getCanonicalName());
-+ when(dummyServer.getLogger()).thenReturn(logger);
-+ when(dummyServer.getName()).thenReturn(TestServer.class.getSimpleName());
-+ when(dummyServer.getVersion()).thenReturn("Version_" + TestServer.class.getPackage().getImplementationVersion());
-+ when(dummyServer.getBukkitVersion()).thenReturn("BukkitVersion_" + TestServer.class.getPackage().getImplementationVersion());
-+
-+
-+ final Thread currentThread = Thread.currentThread();
-+ when(dummyServer.isPrimaryThread()).thenAnswer(ignored -> Thread.currentThread().equals(currentThread));
-+
-+ when(dummyServer.getTag(anyString(), any(NamespacedKey.class), any())).thenAnswer(ignored -> new EmptyTag());
-+
-+ final PluginManager pluginManager = new SimplePluginManager(dummyServer, new SimpleCommandMap(dummyServer));
-+ when(dummyServer.getPluginManager()).thenReturn(pluginManager);
-+
-+ when(dummyServer.getRegistry(any())).thenAnswer(ignored -> new EmptyRegistry());
-+ when(dummyServer.getScoreboardCriteria(anyString())).thenReturn(null);
-+
-+ Bukkit.setServer(dummyServer);
-+ }
-+
-+}
diff --git a/src/test/java/org/bukkit/AnnotationTest.java b/src/test/java/org/bukkit/AnnotationTest.java
index 4ac3dd977e75cd8464163351d306e037ee32cb48..c26ea217927ba77611e6ae93f8df50a83bceb3dd 100644
--- a/src/test/java/org/bukkit/AnnotationTest.java
@@ -312,231 +217,17 @@ index 2dfada66067d79b84cd490eadbe0178e8cd8c260..06d66512c91c680130132b79e34fbf32
@Override
public Object[] apply(Method input) {
diff --git a/src/test/java/org/bukkit/TestServer.java b/src/test/java/org/bukkit/TestServer.java
-deleted file mode 100644
-index 701a17c10f31cd345238a3c568264178ce372faa..0000000000000000000000000000000000000000
+index 1e407c612c7dc26a2bea4b6ed70e1f0723dc3762..e3480404af8187588787383b18e3002032653d71 100644
--- a/src/test/java/org/bukkit/TestServer.java
-+++ /dev/null
-@@ -1,139 +0,0 @@
--package org.bukkit;
--
--import com.google.common.collect.ImmutableMap;
--import java.lang.reflect.InvocationHandler;
--import java.lang.reflect.Method;
--import java.lang.reflect.Proxy;
--import java.util.Iterator;
--import java.util.Map;
--import java.util.logging.Logger;
--import org.bukkit.command.SimpleCommandMap;
--import org.bukkit.plugin.PluginManager;
--import org.bukkit.plugin.SimplePluginManager;
--import org.jetbrains.annotations.NotNull;
--import org.jetbrains.annotations.Nullable;
--
--public final class TestServer implements InvocationHandler {
-- private static interface MethodHandler {
-- Object handle(TestServer server, Object[] args);
-- }
--
-- private static final Map<Method, MethodHandler> methods;
--
-- static {
-- try {
-- ImmutableMap.Builder<Method, MethodHandler> methodMap = ImmutableMap.builder();
-- methodMap.put(
-- Server.class.getMethod("isPrimaryThread"),
-- new MethodHandler() {
-- @Override
-- public Object handle(TestServer server, Object[] args) {
-- return Thread.currentThread().equals(server.creatingThread);
-- }
-- }
-- );
-- methodMap.put(
-- Server.class.getMethod("getPluginManager"),
-- new MethodHandler() {
-- @Override
-- public Object handle(TestServer server, Object[] args) {
-- return server.pluginManager;
-- }
-- }
-- );
-- methodMap.put(
-- Server.class.getMethod("getLogger"),
-- new MethodHandler() {
-- final Logger logger = Logger.getLogger(TestServer.class.getCanonicalName());
-- @Override
-- public Object handle(TestServer server, Object[] args) {
-- return logger;
-- }
-- }
-- );
-- methodMap.put(
-- Server.class.getMethod("getName"),
-- new MethodHandler() {
-- @Override
-- public Object handle(TestServer server, Object[] args) {
-- return TestServer.class.getSimpleName();
-- }
-- }
-- );
-- methodMap.put(
-- Server.class.getMethod("getVersion"),
-- new MethodHandler() {
-- @Override
-- public Object handle(TestServer server, Object[] args) {
-- return "Version_" + TestServer.class.getPackage().getImplementationVersion();
-- }
-- }
-- );
-- methodMap.put(
-- Server.class.getMethod("getBukkitVersion"),
-- new MethodHandler() {
-- @Override
-- public Object handle(TestServer server, Object[] args) {
-- return "BukkitVersion_" + TestServer.class.getPackage().getImplementationVersion();
-- }
-- }
-- );
-- methodMap.put(
-- Server.class.getMethod("getRegistry", Class.class),
-- new MethodHandler() {
-- @Override
-- public Object handle(TestServer server, Object[] args) {
-- return new Registry() {
-- @NotNull
-- @Override
-- public Iterator iterator() {
-- return null;
-- }
--
-- @Nullable
-- @Override
-- public Keyed get(@NotNull NamespacedKey key) {
-- return null;
-- }
-- };
-- }
-- }
-- );
-- methodMap.put(
-- Server.class.getMethod("getScoreboardCriteria", String.class),
-- new MethodHandler() {
-- @Override
-- public Object handle(TestServer server, Object[] args) {
-- // Does not need to return anything. Exists solely to test CriteriaTest which has static init fields
-- return null;
-- }
-- }
-- );
-- methods = methodMap.build();
--
-- TestServer server = new TestServer();
-- Server instance = Proxy.getProxyClass(Server.class.getClassLoader(), Server.class).asSubclass(Server.class).getConstructor(InvocationHandler.class).newInstance(server);
-- Bukkit.setServer(instance);
-- server.pluginManager = new SimplePluginManager(instance, new SimpleCommandMap(instance));
-- } catch (Throwable t) {
-- throw new Error(t);
-- }
-- }
--
-- private Thread creatingThread = Thread.currentThread();
-- private PluginManager pluginManager;
-- private TestServer() {};
--
-- public static Server getInstance() {
-- return Bukkit.getServer();
-- }
--
-- @Override
-- public Object invoke(Object proxy, Method method, Object[] args) {
-- MethodHandler handler = methods.get(method);
-- if (handler != null) {
-- return handler.handle(this, args);
-- }
-- throw new UnsupportedOperationException(String.valueOf(method));
-- }
--}
-diff --git a/src/test/java/org/bukkit/TestWorld.java b/src/test/java/org/bukkit/TestWorld.java
-index ab34f1199921d415fa2ca6e281a8125c9e6d7173..f64d024f5bbf9482aaddb56597b23b04c66f21bf 100644
---- a/src/test/java/org/bukkit/TestWorld.java
-+++ b/src/test/java/org/bukkit/TestWorld.java
-@@ -18,7 +18,7 @@ public final class TestWorld implements InvocationHandler {
-
- static {
- try {
-- TestServer.getInstance();
-+ io.papermc.paper.testing.TestServer.setup(); // Paper
++++ b/src/test/java/org/bukkit/TestServer.java
+@@ -59,6 +59,10 @@ public final class TestServer {
- ImmutableMap.Builder<Method, MethodHandler> methodMap = ImmutableMap.builder();
- methodMap.put(
-diff --git a/src/test/java/org/bukkit/event/SyntheticEventTest.java b/src/test/java/org/bukkit/event/SyntheticEventTest.java
-index d402cb59f508205ebe9ee450594826b04cecb90b..09886568ae6167141b463b6262565fa212af3385 100644
---- a/src/test/java/org/bukkit/event/SyntheticEventTest.java
-+++ b/src/test/java/org/bukkit/event/SyntheticEventTest.java
-@@ -1,6 +1,5 @@
- package org.bukkit.event;
+ Mockito.when(instance.getUnsafe()).then(mock -> unsafeValues);
--import org.bukkit.TestServer;
- import org.bukkit.plugin.PluginLoader;
- import org.bukkit.plugin.SimplePluginManager;
- import org.bukkit.plugin.TestPlugin;
-@@ -12,14 +11,15 @@ public class SyntheticEventTest {
- @SuppressWarnings("deprecation")
- @Test
- public void test() {
-- final JavaPluginLoader loader = new JavaPluginLoader(TestServer.getInstance());
-+ io.papermc.paper.testing.TestServer.setup(); // Paper
-+ final JavaPluginLoader loader = new JavaPluginLoader(org.bukkit.Bukkit.getServer()); // Paper
- TestPlugin plugin = new TestPlugin(getClass().getName()) {
- @Override
- public PluginLoader getPluginLoader() {
- return loader;
- }
- };
-- SimplePluginManager pluginManager = new SimplePluginManager(TestServer.getInstance(), null);
-+ SimplePluginManager pluginManager = new SimplePluginManager(org.bukkit.Bukkit.getServer(), null); // Paper
-
- TestEvent event = new TestEvent(false);
- Impl impl = new Impl();
-diff --git a/src/test/java/org/bukkit/plugin/PluginManagerTest.java b/src/test/java/org/bukkit/plugin/PluginManagerTest.java
-index f188cd4f3b07027c30d41f1162db77a506b7b6bb..c46ed2acb82db814d660459b705dd49e6d44240f 100644
---- a/src/test/java/org/bukkit/plugin/PluginManagerTest.java
-+++ b/src/test/java/org/bukkit/plugin/PluginManagerTest.java
-@@ -2,7 +2,6 @@ package org.bukkit.plugin;
-
- import static org.hamcrest.Matchers.*;
- import static org.junit.Assert.*;
--import org.bukkit.TestServer;
- import org.bukkit.event.Event;
- import org.bukkit.event.TestEvent;
- import org.bukkit.permissions.Permission;
-@@ -14,7 +13,7 @@ public class PluginManagerTest {
- volatile Object value = null;
- }
-
-- private static final PluginManager pm = TestServer.getInstance().getPluginManager();
-+ private static final PluginManager pm = org.bukkit.Bukkit.getServer().getPluginManager(); // Paper
-
- private final MutableObject store = new MutableObject();
-
-diff --git a/src/test/java/org/bukkit/scoreboard/CriteriaTest.java b/src/test/java/org/bukkit/scoreboard/CriteriaTest.java
-index eb94b6f4d58cd9f66b07791c57af7e359992e28c..a93f28e2f987a36e2c7e4f7d31506b750bdb222b 100644
---- a/src/test/java/org/bukkit/scoreboard/CriteriaTest.java
-+++ b/src/test/java/org/bukkit/scoreboard/CriteriaTest.java
-@@ -2,7 +2,6 @@ package org.bukkit.scoreboard;
-
- import org.bukkit.Material;
- import org.bukkit.Statistic;
--import org.bukkit.TestServer;
- import org.bukkit.entity.EntityType;
- import org.junit.Assert;
- import org.junit.Test;
-@@ -11,7 +10,7 @@ public class CriteriaTest {
-
- @Test
- public void testStatistic() {
-- TestServer.getInstance();
-+ io.papermc.paper.testing.TestServer.setup(); // Paper
-
- Assert.assertThrows(IllegalArgumentException.class, () -> Criteria.statistic(Statistic.AVIATE_ONE_CM, Material.STONE)); // Generic statistic with block
- Assert.assertThrows(IllegalArgumentException.class, () -> Criteria.statistic(Statistic.AVIATE_ONE_CM, EntityType.CREEPER)); // Generic statistic with entity type
++ // Paper start - test changes
++ Mockito.when(instance.getTag(Mockito.anyString(), Mockito.any(NamespacedKey.class), Mockito.any())).thenAnswer(ignored -> new io.papermc.paper.testing.EmptyTag());
++ // Paper end
++
+ Bukkit.setServer(instance);
+ server.pluginManager = new SimplePluginManager(instance, new SimpleCommandMap(instance));
+ } catch (Throwable t) {
diff --git a/patches/api/0005-Adventure.patch b/patches/api/0005-Adventure.patch
index e00d83832d..cf7819e8dd 100644
--- a/patches/api/0005-Adventure.patch
+++ b/patches/api/0005-Adventure.patch
@@ -7,7 +7,7 @@ Co-authored-by: zml <[email protected]>
Co-authored-by: Jake Potrebic <[email protected]>
diff --git a/build.gradle.kts b/build.gradle.kts
-index 3e571743e76b26167e329dbd0a4c04ffd6427572..7671b795188adfea56daea2d957e173c8d07c086 100644
+index 3410360cb952bd5bdb352f0ff890228c3a2b2a92..6fef295a8a3425f6b4df9d3a7cfe007e4ab9320f 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -8,13 +8,26 @@ java {
@@ -754,10 +754,10 @@ index 0000000000000000000000000000000000000000..6e94562d79206d88b74b53814f9423f1
+ }
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index ff86f4f5d7f460e8986c4a4fa483f5b5a1d3a1b6..cd9566aeace9e2e1e01fb014b0c50ba93af305d7 100644
+index ba518f05a67ce8fe867b7c62ec3bc780b0032d08..c0ba2c8d47bd6f149410b57e45fc87a3b3ad4aab 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -388,7 +388,9 @@ public final class Bukkit {
+@@ -389,7 +389,9 @@ public final class Bukkit {
*
* @param message the message
* @return the number of players
@@ -767,7 +767,7 @@ index ff86f4f5d7f460e8986c4a4fa483f5b5a1d3a1b6..cd9566aeace9e2e1e01fb014b0c50ba9
public static int broadcastMessage(@NotNull String message) {
return server.broadcastMessage(message);
}
-@@ -1104,6 +1106,19 @@ public final class Bukkit {
+@@ -1105,6 +1107,19 @@ public final class Bukkit {
server.shutdown();
}
@@ -787,7 +787,7 @@ index ff86f4f5d7f460e8986c4a4fa483f5b5a1d3a1b6..cd9566aeace9e2e1e01fb014b0c50ba9
/**
* Broadcasts the specified message to every user with the given
* permission name.
-@@ -1113,6 +1128,21 @@ public final class Bukkit {
+@@ -1114,6 +1129,21 @@ public final class Bukkit {
* permissibles} must have to receive the broadcast
* @return number of message recipients
*/
@@ -809,7 +809,7 @@ index ff86f4f5d7f460e8986c4a4fa483f5b5a1d3a1b6..cd9566aeace9e2e1e01fb014b0c50ba9
public static int broadcast(@NotNull String message, @NotNull String permission) {
return server.broadcast(message, permission);
}
-@@ -1351,6 +1381,7 @@ public final class Bukkit {
+@@ -1352,6 +1382,7 @@ public final class Bukkit {
return server.createInventory(owner, type);
}
@@ -817,7 +817,7 @@ index ff86f4f5d7f460e8986c4a4fa483f5b5a1d3a1b6..cd9566aeace9e2e1e01fb014b0c50ba9
/**
* Creates an empty inventory with the specified type and title. If the type
* is {@link InventoryType#CHEST}, the new inventory has a size of 27;
-@@ -1376,6 +1407,38 @@ public final class Bukkit {
+@@ -1377,6 +1408,38 @@ public final class Bukkit {
* @see InventoryType#isCreatable()
*/
@NotNull
@@ -856,7 +856,7 @@ index ff86f4f5d7f460e8986c4a4fa483f5b5a1d3a1b6..cd9566aeace9e2e1e01fb014b0c50ba9
public static Inventory createInventory(@Nullable InventoryHolder owner, @NotNull InventoryType type, @NotNull String title) {
return server.createInventory(owner, type, title);
}
-@@ -1394,6 +1457,7 @@ public final class Bukkit {
+@@ -1395,6 +1458,7 @@ public final class Bukkit {
return server.createInventory(owner, size);
}
@@ -864,7 +864,7 @@ index ff86f4f5d7f460e8986c4a4fa483f5b5a1d3a1b6..cd9566aeace9e2e1e01fb014b0c50ba9
/**
* Creates an empty inventory of type {@link InventoryType#CHEST} with the
* specified size and title.
-@@ -1406,10 +1470,30 @@ public final class Bukkit {
+@@ -1407,10 +1471,30 @@ public final class Bukkit {
* @throws IllegalArgumentException if the size is not a multiple of 9
*/
@NotNull
@@ -895,7 +895,7 @@ index ff86f4f5d7f460e8986c4a4fa483f5b5a1d3a1b6..cd9566aeace9e2e1e01fb014b0c50ba9
/**
* Creates an empty merchant.
*
-@@ -1417,7 +1501,20 @@ public final class Bukkit {
+@@ -1418,7 +1502,20 @@ public final class Bukkit {
* when the merchant inventory is viewed
* @return a new merchant
*/
@@ -916,7 +916,7 @@ index ff86f4f5d7f460e8986c4a4fa483f5b5a1d3a1b6..cd9566aeace9e2e1e01fb014b0c50ba9
public static Merchant createMerchant(@Nullable String title) {
return server.createMerchant(title);
}
-@@ -1534,12 +1631,43 @@ public final class Bukkit {
+@@ -1535,12 +1632,43 @@ public final class Bukkit {
return server.isPrimaryThread();
}
@@ -960,7 +960,7 @@ index ff86f4f5d7f460e8986c4a4fa483f5b5a1d3a1b6..cd9566aeace9e2e1e01fb014b0c50ba9
public static String getMotd() {
return server.getMotd();
}
-@@ -1548,7 +1676,9 @@ public final class Bukkit {
+@@ -1549,7 +1677,9 @@ public final class Bukkit {
* Set the message that is displayed on the server list.
*
* @param motd The message to be displayed
@@ -970,7 +970,7 @@ index ff86f4f5d7f460e8986c4a4fa483f5b5a1d3a1b6..cd9566aeace9e2e1e01fb014b0c50ba9
public static void setMotd(@NotNull String motd) {
server.setMotd(motd);
}
-@@ -1557,8 +1687,10 @@ public final class Bukkit {
+@@ -1558,8 +1688,10 @@ public final class Bukkit {
* Gets the default message that is displayed when the server is stopped.
*
* @return the shutdown message
@@ -1152,10 +1152,10 @@ index c559f38fdb92cfee9f2e0ffb7088d1cf74a7f73d..a42f1d53340e4073038d46b7fabf5d44
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844cbafe2d9 100644
+index 1cf603286b30b4773dd10a8b4508b6e03d998958..437d59ddf6a6859afc052257ba3f574929071522 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -60,13 +60,13 @@ import org.jetbrains.annotations.Nullable;
+@@ -61,13 +61,13 @@ import org.jetbrains.annotations.Nullable;
/**
* Represents a server implementation.
*/
@@ -1171,7 +1171,7 @@ index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844
*/
public static final String BROADCAST_CHANNEL_ADMINISTRATIVE = "bukkit.broadcast.admin";
-@@ -74,7 +74,7 @@ public interface Server extends PluginMessageRecipient {
+@@ -75,7 +75,7 @@ public interface Server extends PluginMessageRecipient {
* Used for all announcement messages, such as informing users that a
* player has joined.
* <p>
@@ -1180,7 +1180,7 @@ index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844
*/
public static final String BROADCAST_CHANNEL_USERS = "bukkit.broadcast.user";
-@@ -327,7 +327,9 @@ public interface Server extends PluginMessageRecipient {
+@@ -328,7 +328,9 @@ public interface Server extends PluginMessageRecipient {
*
* @param message the message
* @return the number of players
@@ -1190,7 +1190,7 @@ index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844
public int broadcastMessage(@NotNull String message);
/**
-@@ -945,8 +947,33 @@ public interface Server extends PluginMessageRecipient {
+@@ -946,8 +948,33 @@ public interface Server extends PluginMessageRecipient {
* @param permission the required permission {@link Permissible
* permissibles} must have to receive the broadcast
* @return number of message recipients
@@ -1224,7 +1224,7 @@ index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844
/**
* Gets the player by the given name, regardless if they are offline or
-@@ -1144,6 +1171,35 @@ public interface Server extends PluginMessageRecipient {
+@@ -1145,6 +1172,35 @@ public interface Server extends PluginMessageRecipient {
@NotNull
Inventory createInventory(@Nullable InventoryHolder owner, @NotNull InventoryType type);
@@ -1260,7 +1260,7 @@ index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844
/**
* Creates an empty inventory with the specified type and title. If the type
* is {@link InventoryType#CHEST}, the new inventory has a size of 27;
-@@ -1165,9 +1221,11 @@ public interface Server extends PluginMessageRecipient {
+@@ -1166,9 +1222,11 @@ public interface Server extends PluginMessageRecipient {
* @return The new inventory.
* @throws IllegalArgumentException if the {@link InventoryType} cannot be
* viewed.
@@ -1272,7 +1272,7 @@ index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844
@NotNull
Inventory createInventory(@Nullable InventoryHolder owner, @NotNull InventoryType type, @NotNull String title);
-@@ -1183,6 +1241,22 @@ public interface Server extends PluginMessageRecipient {
+@@ -1184,6 +1242,22 @@ public interface Server extends PluginMessageRecipient {
@NotNull
Inventory createInventory(@Nullable InventoryHolder owner, int size) throws IllegalArgumentException;
@@ -1295,7 +1295,7 @@ index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844
/**
* Creates an empty inventory of type {@link InventoryType#CHEST} with the
* specified size and title.
-@@ -1193,18 +1267,32 @@ public interface Server extends PluginMessageRecipient {
+@@ -1194,18 +1268,32 @@ public interface Server extends PluginMessageRecipient {
* viewed
* @return a new inventory
* @throws IllegalArgumentException if the size is not a multiple of 9
@@ -1328,7 +1328,7 @@ index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844
Merchant createMerchant(@Nullable String title);
/**
-@@ -1300,27 +1388,56 @@ public interface Server extends PluginMessageRecipient {
+@@ -1301,27 +1389,56 @@ public interface Server extends PluginMessageRecipient {
*/
boolean isPrimaryThread();
@@ -1385,7 +1385,7 @@ index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844
String getShutdownMessage();
/**
-@@ -1702,7 +1819,9 @@ public interface Server extends PluginMessageRecipient {
+@@ -1706,7 +1823,9 @@ public interface Server extends PluginMessageRecipient {
* Sends the component to the player
*
* @param component the components to send
@@ -1395,7 +1395,7 @@ index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844
public void broadcast(@NotNull net.md_5.bungee.api.chat.BaseComponent component) {
throw new UnsupportedOperationException("Not supported yet.");
}
-@@ -1711,7 +1830,9 @@ public interface Server extends PluginMessageRecipient {
+@@ -1715,7 +1834,9 @@ public interface Server extends PluginMessageRecipient {
* Sends an array of components as a single message to the player
*
* @param components the components to send
@@ -1406,28 +1406,26 @@ index d3684494b81d06b82eab72c6cfbd76d36dfc0e97..e359bc68007fbe62270ee62be762f844
throw new UnsupportedOperationException("Not supported yet.");
}
diff --git a/src/main/java/org/bukkit/Sound.java b/src/main/java/org/bukkit/Sound.java
-index 4cbc963f268753316327e38b6e1e42cffb486b54..6e8d2b35d8f33827396dbcfa817cd9c2f8ad83a6 100644
+index 3f3c0ff5e8df623147f5b7ba74adc0027a325380..080378ac39ecb896c6b82bc3c27dd41e384f1e0d 100644
--- a/src/main/java/org/bukkit/Sound.java
+++ b/src/main/java/org/bukkit/Sound.java
-@@ -10,7 +10,7 @@ import org.jetbrains.annotations.NotNull;
- * guarantee values will not be removed from this Enum. As such, you should not
+@@ -13,7 +13,7 @@ import org.jetbrains.annotations.NotNull;
+ * guarantee values will not be removed from this class. As such, you should not
* depend on the ordinal values of this class.
*/
--public enum Sound implements Keyed {
-+public enum Sound implements Keyed, net.kyori.adventure.sound.Sound.Type { // Paper - implement Sound.Type
-
- AMBIENT_BASALT_DELTAS_ADDITIONS("ambient.basalt_deltas.additions"),
- AMBIENT_BASALT_DELTAS_LOOP("ambient.basalt_deltas.loop"),
-@@ -1498,4 +1498,11 @@ public enum Sound implements Keyed {
- public NamespacedKey getKey() {
- return key;
+-public abstract class Sound extends OldEnum<Sound> implements Keyed {
++public abstract class Sound extends OldEnum<Sound> implements Keyed, net.kyori.adventure.sound.Sound.Type { // Paper - implement Sound.Type
+
+ public static final Sound ENTITY_ALLAY_AMBIENT_WITH_ITEM = getSound("entity.allay.ambient_with_item");
+ public static final Sound ENTITY_ALLAY_AMBIENT_WITHOUT_ITEM = getSound("entity.allay.ambient_without_item");
+@@ -1532,4 +1532,9 @@ public abstract class Sound extends OldEnum<Sound> implements Keyed {
+ public static Sound[] values() {
+ return Lists.newArrayList(Registry.SOUNDS).toArray(new Sound[0]);
}
+
+ // Paper start
+ @Override
-+ public net.kyori.adventure.key.@NotNull Key key() {
-+ return this.key;
-+ }
++ public abstract net.kyori.adventure.key.@NotNull Key key();
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/SoundCategory.java b/src/main/java/org/bukkit/SoundCategory.java
@@ -1467,10 +1465,10 @@ index ac5e263d737973af077e3406a84a84baca4370db..2d91924b7f5ef16a91d40cdc1bfc3d68
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index 650adcecdca839518e0b57bc47935d010ca0f64f..fd0ae07b8a19f6b628601a487329a929f3a26c91 100644
+index 59cc52159e2d135e8f2ad93364a72a5d5c61db6f..2d334dbdd9e2c9a020899097e0620152758dc078 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -25,6 +25,15 @@ import org.jetbrains.annotations.Nullable;
+@@ -28,6 +28,15 @@ import org.jetbrains.annotations.Nullable;
*/
@Deprecated
public interface UnsafeValues {
@@ -1499,7 +1497,7 @@ index efb97712cc9dc7c1e12a59f5b94e4f2ad7c6b7d8..3024468af4c073324e536c1cb26beffb
return warning == null || warning.value();
}
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
-index c4d2a13d62059ca1f148a9af909f424b745bc8df..5357291ff0f2f20bd87ab9f6e57f6a4f6ff65226 100644
+index fd957c5e57bf77f6e66d7bfcf34f79e14ebb37bc..d2e95c6ecc11b19ebb52c291884376c39d28467e 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -44,7 +44,7 @@ import org.jetbrains.annotations.Nullable;
@@ -2007,10 +2005,10 @@ index b7d8dd30360a38dbdc7bbce40c8e6ced7261f833..0817f2395c2b18828565435568ce651f
public void sendRawMessage(@Nullable UUID sender, @NotNull String message);
}
diff --git a/src/main/java/org/bukkit/enchantments/Enchantment.java b/src/main/java/org/bukkit/enchantments/Enchantment.java
-index e2800dc97af5bbb02c555069285a0fa155a9799d..2dc749936df6168073a5bb9f9051d55f8589ac62 100644
+index ed59e306b26bde6bdccf8a5180474b7bbaf1f111..340a06329e6603fb20d02eda294972fc18508543 100644
--- a/src/main/java/org/bukkit/enchantments/Enchantment.java
+++ b/src/main/java/org/bukkit/enchantments/Enchantment.java
-@@ -299,6 +299,19 @@ public abstract class Enchantment implements Keyed {
+@@ -293,6 +293,19 @@ public abstract class Enchantment implements Keyed {
* @return True if the enchantment may be applied, otherwise False
*/
public abstract boolean canEnchantItem(@NotNull ItemStack item);
@@ -2028,16 +2026,17 @@ index e2800dc97af5bbb02c555069285a0fa155a9799d..2dc749936df6168073a5bb9f9051d55f
+ public abstract net.kyori.adventure.text.@NotNull Component displayName(int level);
+ // Paper end
- @Override
- public boolean equals(Object obj) {
+ /**
+ * Gets the Enchantment at the specified key
diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
-index 9566e4306ada5e82dede0f002aa06da12c44996b..4d5f0837bd0e02a30c943d8969fb6b13452322e0 100644
+index 7fee01b0ad709c672d91bce34ca7f328cf5a15a0..3f432a055d9fc70e6b16bf87c209be50232f2e93 100644
--- a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
+++ b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
-@@ -63,4 +63,11 @@ public class EnchantmentWrapper extends Enchantment {
- public boolean conflictsWith(@NotNull Enchantment other) {
- return getEnchantment().conflictsWith(other);
+@@ -70,4 +70,12 @@ public class EnchantmentWrapper extends Enchantment {
+ public NamespacedKey getKey() {
+ return getEnchantment().getKey();
}
++
+ // Paper start
+ @NotNull
+ @Override
@@ -2047,7 +2046,7 @@ index 9566e4306ada5e82dede0f002aa06da12c44996b..4d5f0837bd0e02a30c943d8969fb6b13
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index f3afe67f0832cb828d25be3654518ff73a80b0e1..598abaa82c634178043a29f6caa6ac5221659d06 100644
+index 2417f0d5077b51a7649503d57c48b0614f532904..9cebad10eb06f42cd0428d80940fa8e223f0deab 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -27,7 +27,7 @@ import org.jetbrains.annotations.Nullable;
@@ -2081,7 +2080,7 @@ index f3afe67f0832cb828d25be3654518ff73a80b0e1..598abaa82c634178043a29f6caa6ac52
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcadaddba9d43 100644
+index a18e0377b68100d37ea171f80fe7f7e18e0a4593..9d8ddb2656d22c287ee1338fe4ab79fac0e8488a 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -43,7 +43,41 @@ import org.jetbrains.annotations.Nullable;
@@ -2272,7 +2271,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
/**
* Says a message (or runs a command).
*
-@@ -633,6 +732,90 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -621,6 +720,90 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
public void sendEquipmentChange(@NotNull LivingEntity entity, @NotNull Map<EquipmentSlot, ItemStack> items);
@@ -2363,7 +2362,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
/**
* Send a sign change. This fakes a sign change packet for a user at
* a certain location. This will not actually change the world in any way.
-@@ -650,7 +833,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -638,7 +821,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param lines the new text on the sign or null to clear it
* @throws IllegalArgumentException if location is null
* @throws IllegalArgumentException if lines is non-null and has a length less than 4
@@ -2373,7 +2372,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
public void sendSignChange(@NotNull Location loc, @Nullable String[] lines) throws IllegalArgumentException;
/**
-@@ -672,7 +857,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -660,7 +845,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @throws IllegalArgumentException if location is null
* @throws IllegalArgumentException if dyeColor is null
* @throws IllegalArgumentException if lines is non-null and has a length less than 4
@@ -2383,7 +2382,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
public void sendSignChange(@NotNull Location loc, @Nullable String[] lines, @NotNull DyeColor dyeColor) throws IllegalArgumentException;
/**
-@@ -695,7 +882,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -683,7 +870,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @throws IllegalArgumentException if location is null
* @throws IllegalArgumentException if dyeColor is null
* @throws IllegalArgumentException if lines is non-null and has a length less than 4
@@ -2393,7 +2392,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
public void sendSignChange(@NotNull Location loc, @Nullable String[] lines, @NotNull DyeColor dyeColor, boolean hasGlowingText) throws IllegalArgumentException;
/**
-@@ -1211,6 +1400,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1199,6 +1388,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* pack correctly.
* </ul>
*
@@ -2401,7 +2400,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
* @param url The URL from which the client will download the resource
* pack. The string must contain only US-ASCII characters and should
* be encoded as per RFC 1738.
-@@ -1267,8 +1457,57 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1255,8 +1445,57 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @throws IllegalArgumentException Thrown if the hash is not 20 bytes
* long.
*/
@@ -2459,7 +2458,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
/**
* Request that the player's client download and switch resource packs.
* <p>
-@@ -1298,6 +1537,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1286,6 +1525,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* pack correctly.
* </ul>
*
@@ -2467,7 +2466,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
* @param url The URL from which the client will download the resource
* pack. The string must contain only US-ASCII characters and should
* be encoded as per RFC 1738.
-@@ -1358,8 +1598,57 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1346,8 +1586,57 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @throws IllegalArgumentException Thrown if the hash is not 20 bytes
* long.
*/
@@ -2525,7 +2524,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
/**
* Gets the Scoreboard displayed to this player
*
-@@ -1475,7 +1764,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1463,7 +1752,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*
* @param title Title text
* @param subtitle Subtitle text
@@ -2534,7 +2533,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
*/
@Deprecated
public void sendTitle(@Nullable String title, @Nullable String subtitle);
-@@ -1494,7 +1783,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1482,7 +1771,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param fadeIn time in ticks for titles to fade in. Defaults to 10.
* @param stay time in ticks for titles to stay. Defaults to 70.
* @param fadeOut time in ticks for titles to fade out. Defaults to 20.
@@ -2544,7 +2543,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
public void sendTitle(@Nullable String title, @Nullable String subtitle, int fadeIn, int stay, int fadeOut);
/**
-@@ -1721,6 +2012,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1709,6 +2000,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
public int getClientViewDistance();
@@ -2559,7 +2558,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
/**
* Gets the player's estimated ping in milliseconds.
*
-@@ -1746,8 +2045,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1734,8 +2033,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* they wish.
*
* @return the player's locale
@@ -2570,7 +2569,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
public String getLocale();
/**
-@@ -1799,6 +2100,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1787,6 +2088,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
public boolean isAllowingServerListings();
@@ -2585,7 +2584,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
// Spigot start
public class Spigot extends Entity.Spigot {
-@@ -1830,11 +2139,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1818,11 +2127,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
throw new UnsupportedOperationException("Not supported yet.");
}
@@ -2599,7 +2598,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
@Override
public void sendMessage(@NotNull net.md_5.bungee.api.chat.BaseComponent... components) {
throw new UnsupportedOperationException("Not supported yet.");
-@@ -1845,7 +2156,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1833,7 +2144,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*
* @param position the screen position
* @param component the components to send
@@ -2609,7 +2608,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
public void sendMessage(@NotNull net.md_5.bungee.api.ChatMessageType position, @NotNull net.md_5.bungee.api.chat.BaseComponent component) {
throw new UnsupportedOperationException("Not supported yet.");
}
-@@ -1855,7 +2168,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1843,7 +2156,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*
* @param position the screen position
* @param components the components to send
@@ -2619,7 +2618,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
public void sendMessage(@NotNull net.md_5.bungee.api.ChatMessageType position, @NotNull net.md_5.bungee.api.chat.BaseComponent... components) {
throw new UnsupportedOperationException("Not supported yet.");
}
-@@ -1866,7 +2181,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1854,7 +2169,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param position the screen position
* @param sender the sender of the message
* @param component the components to send
@@ -2629,7 +2628,7 @@ index 6860eb5e85d115d1c00ace8c646ccc080bff29ce..84e63caeabe3e44381a464bde47bcada
public void sendMessage(@NotNull net.md_5.bungee.api.ChatMessageType position, @Nullable java.util.UUID sender, @NotNull net.md_5.bungee.api.chat.BaseComponent component) {
throw new UnsupportedOperationException("Not supported yet.");
}
-@@ -1877,7 +2194,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1865,7 +2182,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param position the screen position
* @param sender the sender of the message
* @param components the components to send
@@ -3916,13 +3915,13 @@ index e12996492c1558fed9fab30de9f8018e0ed7fac3..002acfbdce1db10f7ba1b6a013e678f5
/**
diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
-index f89d71b77d1200314df6ca23614d5ca6fb15ceb3..af4a7ce37eb10bab06eadb6583c7894b3ec55ae6 100644
+index 830cf7f0e069c4c0b29252c0ac7e8cb08f2d1922..d0530328536840ce126b39942fac35a476ea2ac4 100644
--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
+++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
-@@ -159,4 +159,24 @@ public interface ItemFactory {
+@@ -158,4 +158,24 @@ public interface ItemFactory {
@Deprecated
@NotNull
- Material updateMaterial(@NotNull final ItemMeta meta, @NotNull final Material material) throws IllegalArgumentException;
+ ItemType updateItemType(@NotNull final ItemMeta meta, @NotNull final ItemType itemType) throws IllegalArgumentException;
+
+ // Paper start
+ /**
@@ -3945,7 +3944,7 @@ index f89d71b77d1200314df6ca23614d5ca6fb15ceb3..af4a7ce37eb10bab06eadb6583c7894b
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index d80b0a52968920b990a75cff85e436a16d782500..9d327f0832c40d4a8d212346284274f6cf78834f 100644
+index c9cdedc546804879bb93d957503b56347868524a..7e6c2bcf42d271184a75c91ecded5824535b3455 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -23,7 +23,7 @@ import org.jetbrains.annotations.Nullable;
@@ -3954,10 +3953,10 @@ index d80b0a52968920b990a75cff85e436a16d782500..9d327f0832c40d4a8d212346284274f6
*/
-public class ItemStack implements Cloneable, ConfigurationSerializable, Translatable {
+public class ItemStack implements Cloneable, ConfigurationSerializable, Translatable, net.kyori.adventure.text.event.HoverEventSource<net.kyori.adventure.text.event.HoverEvent.ShowItem> { // Paper
- private Material type = Material.AIR;
- private int amount = 0;
- private MaterialData data = null;
-@@ -602,4 +602,21 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+
+ /**
+ * Creates a new ItemStack with an amount of 1.
+@@ -652,4 +652,21 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
public String getTranslationKey() {
return Bukkit.getUnsafe().getTranslationKey(this);
}
@@ -3980,12 +3979,12 @@ index d80b0a52968920b990a75cff85e436a16d782500..9d327f0832c40d4a8d212346284274f6
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/inventory/meta/BookMeta.java b/src/main/java/org/bukkit/inventory/meta/BookMeta.java
-index 94852d50e88d0594b84b581cd627174043629995..be7c2cfc757e4dd15927be850739d401958fb227 100644
+index 315fd06a0706569cf339f6f98ef623787acb8643..c1978f0501e41adb1ccc1f20a1444d50e9ecc35f 100644
--- a/src/main/java/org/bukkit/inventory/meta/BookMeta.java
+++ b/src/main/java/org/bukkit/inventory/meta/BookMeta.java
@@ -10,7 +10,7 @@ import org.jetbrains.annotations.Nullable;
- * Represents a book ({@link Material#WRITABLE_BOOK} or {@link
- * Material#WRITTEN_BOOK}) that can have a title, an author, and pages.
+ * Represents a book ({@link ItemType#WRITABLE_BOOK} or {@link
+ * ItemType#WRITTEN_BOOK}) that can have a title, an author, and pages.
*/
-public interface BookMeta extends ItemMeta {
+public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { // Paper
diff --git a/patches/api/0006-Paper-Utils.patch b/patches/api/0006-Paper-Utils.patch
index a647b698ad..224b26f6c8 100644
--- a/patches/api/0006-Paper-Utils.patch
+++ b/patches/api/0006-Paper-Utils.patch
@@ -26,3 +26,23 @@ index 0000000000000000000000000000000000000000..9db0056ab94145819628b3ad8d8d2613
+ }
+
+}
+diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
+index 2d334dbdd9e2c9a020899097e0620152758dc078..cd00a831cd4c6030082aa8107d25c78d8ee67d8f 100644
+--- a/src/main/java/org/bukkit/UnsafeValues.java
++++ b/src/main/java/org/bukkit/UnsafeValues.java
+@@ -5,6 +5,7 @@ import org.bukkit.advancement.Advancement;
+ import org.bukkit.attribute.Attribute;
+ import org.bukkit.attribute.AttributeModifier;
+ import org.bukkit.block.Biome;
++import org.bukkit.block.BlockType;
+ import org.bukkit.block.data.BlockData;
+ import org.bukkit.entity.Entity;
+ import org.bukkit.entity.EntityType;
+@@ -47,6 +48,7 @@ public interface UnsafeValues {
+ Material fromLegacy(MaterialData material, boolean itemPriority);
+
+ Material toMaterial(ItemType itemType);
++ Material toMaterial(BlockType<?> blockType); // Paper
+
+ BlockData fromLegacy(Material material, byte data);
+
diff --git a/patches/api/0008-Paper-Plugins.patch b/patches/api/0008-Paper-Plugins.patch
index 48a2b45dc9..62f7dc535f 100644
--- a/patches/api/0008-Paper-Plugins.patch
+++ b/patches/api/0008-Paper-Plugins.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Paper Plugins
diff --git a/build.gradle.kts b/build.gradle.kts
-index a626bbad85f8d1b348d4e67f328f4b0141b267c1..b0ca0ddffce2524e82d891c7a4d69d3ef9f2c097 100644
+index 04433b1f41c5abf04743ed6dd96bf83267a39828..8b4f7f0166a1323266c603ca4c860980617f5eda 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -47,7 +47,7 @@ dependencies {
@@ -1338,13 +1338,13 @@ index 0000000000000000000000000000000000000000..6bf3d212a6156ad9ab0e82d1ca0a04f8
+
+}
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index fd0ae07b8a19f6b628601a487329a929f3a26c91..2042e3fb0ea347148814d9838cd7bb475bd23984 100644
+index cd00a831cd4c6030082aa8107d25c78d8ee67d8f..628fae98b17cd7dd1a5358562225cefefeb5051b 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -101,4 +101,14 @@ public interface UnsafeValues {
+@@ -110,4 +110,13 @@ public interface UnsafeValues {
+ EntityType<Entity> getUnkownEntityType();
- @Nullable
- FeatureFlag getFeatureFlag(@NotNull NamespacedKey key);
+ Biome getCustomBiome();
+
+ // Paper start
+ @Deprecated(forRemoval = true)
@@ -1354,7 +1354,6 @@ index fd0ae07b8a19f6b628601a487329a929f3a26c91..2042e3fb0ea347148814d9838cd7bb47
+ static boolean isLegacyPlugin(org.bukkit.plugin.Plugin plugin) {
+ return !Bukkit.getUnsafe().isSupportedApiVersion(plugin.getDescription().getAPIVersion());
+ }
-+ // Paper end
}
diff --git a/src/main/java/org/bukkit/command/PluginCommand.java b/src/main/java/org/bukkit/command/PluginCommand.java
index 1dbbc244309043b18c1d71707c4fb066c0d0e02d..551c5af6a7bfa2268cbc63be8e70d129bccaa912 100644
@@ -2268,28 +2267,56 @@ index 2f74ec96ece706de23156ebabfe493211bc05391..302319acbc257a075adfb78d9f5c49fd
+
+ // Paper end
}
-diff --git a/src/test/java/io/papermc/paper/testing/TestServer.java b/src/test/java/io/papermc/paper/testing/TestServer.java
-index 756acf231b1b076b08046d86992ba7ce7f62a94f..52d27d977b9df0bdf02b33ed0aaa3b4db0a04cb4 100644
---- a/src/test/java/io/papermc/paper/testing/TestServer.java
-+++ b/src/test/java/io/papermc/paper/testing/TestServer.java
-@@ -36,9 +36,6 @@ public final class TestServer {
-
- when(dummyServer.getTag(anyString(), any(NamespacedKey.class), any())).thenAnswer(ignored -> new EmptyTag());
+diff --git a/src/test/java/org/bukkit/TestServer.java b/src/test/java/org/bukkit/TestServer.java
+index e3480404af8187588787383b18e3002032653d71..ec00f2ac0fe2be6c3b4c25b027bc4ff36008e5e1 100644
+--- a/src/test/java/org/bukkit/TestServer.java
++++ b/src/test/java/org/bukkit/TestServer.java
+@@ -4,9 +4,7 @@ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.logging.Logger;
+-import org.bukkit.command.SimpleCommandMap;
+-import org.bukkit.plugin.PluginManager;
+-import org.bukkit.plugin.SimplePluginManager;
++// Paper - Paper Plugins
+ import org.mockito.Mockito;
+ import org.mockito.invocation.InvocationOnMock;
+ import org.mockito.stubbing.Answer;
+@@ -20,7 +18,7 @@ public final class TestServer {
+
+ Mockito.when(instance.isPrimaryThread()).then(mock -> Thread.currentThread().equals(server.creatingThread));
+
+- Mockito.when(instance.getPluginManager()).then(mock -> server.pluginManager);
++ // Paper - Paper Plugins
+
+ Mockito.when(instance.getLogger()).then(new Answer<Logger>() {
+ final Logger logger = Logger.getLogger(TestServer.class.getCanonicalName());
+@@ -64,14 +62,14 @@ public final class TestServer {
+ // Paper end
+
+ Bukkit.setServer(instance);
+- server.pluginManager = new SimplePluginManager(instance, new SimpleCommandMap(instance));
++ // Paper - Paper Plugins
+ } catch (Throwable t) {
+ throw new Error(t);
+ }
+ }
-- final PluginManager pluginManager = new SimplePluginManager(dummyServer, new SimpleCommandMap(dummyServer));
-- when(dummyServer.getPluginManager()).thenReturn(pluginManager);
--
- when(dummyServer.getRegistry(any())).thenAnswer(ignored -> new EmptyRegistry());
- when(dummyServer.getScoreboardCriteria(anyString())).thenReturn(null);
+ private Thread creatingThread = Thread.currentThread();
+- private PluginManager pluginManager;
++ // Paper - Paper Plugins
+ private TestServer() {}
+ public static void setup() {}
diff --git a/src/test/java/org/bukkit/event/SyntheticEventTest.java b/src/test/java/org/bukkit/event/SyntheticEventTest.java
deleted file mode 100644
-index 09886568ae6167141b463b6262565fa212af3385..0000000000000000000000000000000000000000
+index d402cb59f508205ebe9ee450594826b04cecb90b..0000000000000000000000000000000000000000
--- a/src/test/java/org/bukkit/event/SyntheticEventTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.bukkit.event;
-
+-import org.bukkit.TestServer;
-import org.bukkit.plugin.PluginLoader;
-import org.bukkit.plugin.SimplePluginManager;
-import org.bukkit.plugin.TestPlugin;
@@ -2301,15 +2328,14 @@ index 09886568ae6167141b463b6262565fa212af3385..00000000000000000000000000000000
- @SuppressWarnings("deprecation")
- @Test
- public void test() {
-- io.papermc.paper.testing.TestServer.setup(); // Paper
-- final JavaPluginLoader loader = new JavaPluginLoader(org.bukkit.Bukkit.getServer()); // Paper
+- final JavaPluginLoader loader = new JavaPluginLoader(TestServer.getInstance());
- TestPlugin plugin = new TestPlugin(getClass().getName()) {
- @Override
- public PluginLoader getPluginLoader() {
- return loader;
- }
- };
-- SimplePluginManager pluginManager = new SimplePluginManager(org.bukkit.Bukkit.getServer(), null); // Paper
+- SimplePluginManager pluginManager = new SimplePluginManager(TestServer.getInstance(), null);
-
- TestEvent event = new TestEvent(false);
- Impl impl = new Impl();
@@ -2338,26 +2364,28 @@ index 09886568ae6167141b463b6262565fa212af3385..00000000000000000000000000000000
-}
diff --git a/src/test/java/org/bukkit/plugin/PluginManagerTest.java b/src/test/java/org/bukkit/plugin/PluginManagerTest.java
deleted file mode 100644
-index c46ed2acb82db814d660459b705dd49e6d44240f..0000000000000000000000000000000000000000
+index 7c7cdfb509997de9f58d1b2c758e308a10ec0f92..0000000000000000000000000000000000000000
--- a/src/test/java/org/bukkit/plugin/PluginManagerTest.java
+++ /dev/null
-@@ -1,183 +0,0 @@
+@@ -1,185 +0,0 @@
-package org.bukkit.plugin;
-
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
+-import org.bukkit.TestServer;
-import org.bukkit.event.Event;
-import org.bukkit.event.TestEvent;
-import org.bukkit.permissions.Permission;
+-import org.bukkit.support.AbstractTestingBase;
-import org.junit.After;
-import org.junit.Test;
-
--public class PluginManagerTest {
+-public class PluginManagerTest extends AbstractTestingBase {
- private class MutableObject {
- volatile Object value = null;
- }
-
-- private static final PluginManager pm = org.bukkit.Bukkit.getServer().getPluginManager(); // Paper
+- private static final PluginManager pm = TestServer.getInstance().getPluginManager();
-
- private final MutableObject store = new MutableObject();
-
diff --git a/patches/api/0010-Timings-v2.patch b/patches/api/0010-Timings-v2.patch
index 43601634ff..7610edffa6 100644
--- a/patches/api/0010-Timings-v2.patch
+++ b/patches/api/0010-Timings-v2.patch
@@ -717,10 +717,10 @@ index 0000000000000000000000000000000000000000..199789d56d22fcb1b77ebd56805cc28a
+}
diff --git a/src/main/java/co/aikar/timings/TimingHistory.java b/src/main/java/co/aikar/timings/TimingHistory.java
new file mode 100644
-index 0000000000000000000000000000000000000000..eb9d58f8852e732a1284beeaf542989301d21b1c
+index 0000000000000000000000000000000000000000..b9544c6f2adb0a8b32abd8ab3f1bdc5e00ee7679
--- /dev/null
+++ b/src/main/java/co/aikar/timings/TimingHistory.java
-@@ -0,0 +1,355 @@
+@@ -0,0 +1,356 @@
+/*
+ * This file is licensed under the MIT License (MIT).
+ *
@@ -749,6 +749,7 @@ index 0000000000000000000000000000000000000000..eb9d58f8852e732a1284beeaf5429893
+import co.aikar.timings.TimingHistory.RegionData.RegionId;
+import com.google.common.base.Function;
+import com.google.common.collect.Sets;
++import java.util.HashMap;
+import org.bukkit.Bukkit;
+import org.bukkit.Chunk;
+import org.bukkit.Material;
@@ -930,11 +931,11 @@ index 0000000000000000000000000000000000000000..eb9d58f8852e732a1284beeaf5429893
+
+ @SuppressWarnings("unchecked")
+ final Map<EntityType, Counter> entityCounts = MRUMapCache.of(LoadingMap.of(
-+ new EnumMap<EntityType, Counter>(EntityType.class), k -> new Counter()
++ new HashMap<>(), k -> new Counter()
+ ));
+ @SuppressWarnings("unchecked")
+ final Map<Material, Counter> tileEntityCounts = MRUMapCache.of(LoadingMap.of(
-+ new EnumMap<Material, Counter>(Material.class), k -> new Counter()
++ new HashMap<>(), k -> new Counter()
+ ));
+
+ static class RegionId {
@@ -2854,10 +2855,10 @@ index 0000000000000000000000000000000000000000..3e61a926620a67daec3af54b72a1b911
+ }
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index cd9566aeace9e2e1e01fb014b0c50ba93af305d7..1f4df6984a8b8bd3e72a5eb7fb1c66b6bfddfbf5 100644
+index c0ba2c8d47bd6f149410b57e45fc87a3b3ad4aab..51b5ac9d535d1ecac7719deed2e422db442a1171 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -832,7 +832,6 @@ public final class Bukkit {
+@@ -833,7 +833,6 @@ public final class Bukkit {
*/
public static void reload() {
server.reload();
@@ -2866,10 +2867,10 @@ index cd9566aeace9e2e1e01fb014b0c50ba93af305d7..1f4df6984a8b8bd3e72a5eb7fb1c66b6
/**
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index e359bc68007fbe62270ee62be762f844cbafe2d9..e773b40ff5fa9890c72e45e5c75a155bd7d02954 100644
+index 437d59ddf6a6859afc052257ba3f574929071522..c8a8305e41a55e98c99ed9df07f5763071a4485f 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1815,6 +1815,26 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1819,6 +1819,26 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
throw new UnsupportedOperationException("Not supported yet.");
}
@@ -2897,10 +2898,10 @@ index e359bc68007fbe62270ee62be762f844cbafe2d9..e773b40ff5fa9890c72e45e5c75a155b
* Sends the component to the player
*
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index 2042e3fb0ea347148814d9838cd7bb475bd23984..f68ef89f37057cf677a767026ab395f7a839a2f9 100644
+index 628fae98b17cd7dd1a5358562225cefefeb5051b..c84dc62c7383deeb00106c2e672af2018c4acadc 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -35,6 +35,7 @@ public interface UnsafeValues {
+@@ -39,6 +39,7 @@ public interface UnsafeValues {
net.kyori.adventure.text.Component resolveWithContext(net.kyori.adventure.text.Component component, org.bukkit.command.CommandSender context, org.bukkit.entity.Entity scoreboardSubject, boolean bypassPermissions) throws java.io.IOException;
// Paper end
@@ -2908,12 +2909,13 @@ index 2042e3fb0ea347148814d9838cd7bb475bd23984..f68ef89f37057cf677a767026ab395f7
Material toLegacy(Material material);
Material fromLegacy(Material material);
-@@ -111,4 +112,12 @@ public interface UnsafeValues {
+@@ -119,4 +120,13 @@ public interface UnsafeValues {
+ static boolean isLegacyPlugin(org.bukkit.plugin.Plugin plugin) {
return !Bukkit.getUnsafe().isSupportedApiVersion(plugin.getDescription().getAPIVersion());
}
- // Paper end
++ // Paper end
+
-+ // Paper start
++ // Paper start - Timings
+ /**
+ * Server name to report to timings v2
+ * @return name
@@ -3455,10 +3457,10 @@ index 516d7fc7812aac343782861d0d567f54aa578c2a..00000000000000000000000000000000
- // Spigot end
-}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 84e63caeabe3e44381a464bde47bcadaddba9d43..7303c09e078dad0855c96280174b2760eacc20cd 100644
+index 9d8ddb2656d22c287ee1338fe4ab79fac0e8488a..6de23a9dbaf012dd8a95bab55835bb406b59a012 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2199,7 +2199,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2187,7 +2187,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@Deprecated // Paper
public void sendMessage(@NotNull net.md_5.bungee.api.ChatMessageType position, @Nullable java.util.UUID sender, @NotNull net.md_5.bungee.api.chat.BaseComponent... components) {
throw new UnsupportedOperationException("Not supported yet.");
diff --git a/patches/api/0011-Add-command-line-option-to-load-extra-plugin-jars-no.patch b/patches/api/0011-Add-command-line-option-to-load-extra-plugin-jars-no.patch
index bd1f1a2e40..dd9af2b9bf 100644
--- a/patches/api/0011-Add-command-line-option-to-load-extra-plugin-jars-no.patch
+++ b/patches/api/0011-Add-command-line-option-to-load-extra-plugin-jars-no.patch
@@ -7,10 +7,10 @@ Subject: [PATCH] Add command line option to load extra plugin jars not in the
ex: java -jar paperclip.jar nogui -add-plugin=/path/to/plugin.jar -add-plugin=/path/to/another/plugin_jar.jar
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 1f4df6984a8b8bd3e72a5eb7fb1c66b6bfddfbf5..d77a7acb3ea82a331cb773bfda3e66d26a2bbd68 100644
+index 51b5ac9d535d1ecac7719deed2e422db442a1171..6cae51327c3acf6aa0284be3c94d7fdf3cab3486 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -77,6 +77,20 @@ public final class Bukkit {
+@@ -78,6 +78,20 @@ public final class Bukkit {
return server;
}
@@ -32,10 +32,10 @@ index 1f4df6984a8b8bd3e72a5eb7fb1c66b6bfddfbf5..d77a7acb3ea82a331cb773bfda3e66d2
* Attempts to set the {@link Server} singleton.
* <p>
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index e773b40ff5fa9890c72e45e5c75a155bd7d02954..76d28815a51d73fc79ef8bb5abe8fc7758e6fd23 100644
+index c8a8305e41a55e98c99ed9df07f5763071a4485f..3d54c3c09203558e2c5348a9100af6809651f3e8 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -62,6 +62,18 @@ import org.jetbrains.annotations.Nullable;
+@@ -63,6 +63,18 @@ import org.jetbrains.annotations.Nullable;
*/
public interface Server extends PluginMessageRecipient, net.kyori.adventure.audience.ForwardingAudience { // Paper
diff --git a/patches/api/0012-Player-affects-spawning-API.patch b/patches/api/0012-Player-affects-spawning-API.patch
index 9b4bb245fc..f506383835 100644
--- a/patches/api/0012-Player-affects-spawning-API.patch
+++ b/patches/api/0012-Player-affects-spawning-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Player affects spawning API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 7303c09e078dad0855c96280174b2760eacc20cd..c1affe53a8dc1d1219118610f1f0908c68bb7e51 100644
+index 6de23a9dbaf012dd8a95bab55835bb406b59a012..592aae628d0b87b4277f1697b5aabde622d03710 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2051,6 +2051,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2039,6 +2039,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@Deprecated // Paper
public String getLocale();
diff --git a/patches/api/0013-Add-getTPS-method.patch b/patches/api/0013-Add-getTPS-method.patch
index f5bdf29597..44085eba7a 100644
--- a/patches/api/0013-Add-getTPS-method.patch
+++ b/patches/api/0013-Add-getTPS-method.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add getTPS method
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index d77a7acb3ea82a331cb773bfda3e66d26a2bbd68..b2effed0281997a64dd0fdc965bce2a54af0cf4d 100644
+index 6cae51327c3acf6aa0284be3c94d7fdf3cab3486..3ea91c82670ae329a11b3d035378be047d91e3e8 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -1940,6 +1940,17 @@ public final class Bukkit {
+@@ -1941,6 +1941,17 @@ public final class Bukkit {
return server.getEntity(uuid);
}
@@ -27,10 +27,10 @@ index d77a7acb3ea82a331cb773bfda3e66d26a2bbd68..b2effed0281997a64dd0fdc965bce2a5
* Get the advancement specified by this key.
*
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 76d28815a51d73fc79ef8bb5abe8fc7758e6fd23..04f5191398dcfac02eb6553d549e77207c06e550 100644
+index 3d54c3c09203558e2c5348a9100af6809651f3e8..0eeefd5eb693af9e16182d6e39e7b4a1d8568bfa 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1652,6 +1652,16 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1653,6 +1653,16 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@Nullable
Entity getEntity(@NotNull UUID uuid);
diff --git a/patches/api/0014-Version-Command-2.0.patch b/patches/api/0014-Version-Command-2.0.patch
index d0f58fe0ab..fe662bd219 100644
--- a/patches/api/0014-Version-Command-2.0.patch
+++ b/patches/api/0014-Version-Command-2.0.patch
@@ -56,10 +56,10 @@ index 0000000000000000000000000000000000000000..a736d7bcdc5861a01b66ba36158db1c7
+ }
+}
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index f68ef89f37057cf677a767026ab395f7a839a2f9..a6aa33b9574d0278e10927007a62290e1d102e73 100644
+index c84dc62c7383deeb00106c2e672af2018c4acadc..4c2ae9cb674260deba91d734bf7bf24fd7038485 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -119,5 +119,12 @@ public interface UnsafeValues {
+@@ -128,5 +128,12 @@ public interface UnsafeValues {
* @return name
*/
String getTimingsServerName();
diff --git a/patches/api/0015-Entity-Origin-API.patch b/patches/api/0015-Entity-Origin-API.patch
index 908dae809d..78d2bb36d3 100644
--- a/patches/api/0015-Entity-Origin-API.patch
+++ b/patches/api/0015-Entity-Origin-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Entity Origin API
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index 598abaa82c634178043a29f6caa6ac5221659d06..70a32f89c16439c575d8928332cfed64d1d6ab7e 100644
+index 9cebad10eb06f42cd0428d80940fa8e223f0deab..083201330c781a0cb36051eef4ab95d4f1937a9d 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -725,5 +725,15 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
@@ -25,10 +25,10 @@ index 598abaa82c634178043a29f6caa6ac5221659d06..70a32f89c16439c575d8928332cfed64
// Paper end
}
diff --git a/src/main/java/org/bukkit/entity/FallingBlock.java b/src/main/java/org/bukkit/entity/FallingBlock.java
-index 9a57341691ebfbb6ec5a426a13f2fa5d61009b48..bd87d1548faa2fb095adce9f156f24163995dbe7 100644
+index 60763c9b5b6528f5c8c83f53bb6cb8b1097a67b0..320a0e1f6b93ca9e85eac7d9a3f5821fa242c257 100644
--- a/src/main/java/org/bukkit/entity/FallingBlock.java
+++ b/src/main/java/org/bukkit/entity/FallingBlock.java
-@@ -92,4 +92,15 @@ public interface FallingBlock extends Entity {
+@@ -81,4 +81,15 @@ public interface FallingBlock extends Entity {
* @param damage the max damage to set. Must be >= 0
*/
void setMaxDamage(int damage);
diff --git a/patches/api/0017-Add-view-distance-API.patch b/patches/api/0017-Add-view-distance-API.patch
index b019320419..9d0196e2bf 100644
--- a/patches/api/0017-Add-view-distance-API.patch
+++ b/patches/api/0017-Add-view-distance-API.patch
@@ -8,10 +8,10 @@ Add per player no-tick, tick, and send view distances.
Also add send/no-tick view distance to World.
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
-index 5357291ff0f2f20bd87ab9f6e57f6a4f6ff65226..887aa6217583d224d66f6d238ac269c23725d459 100644
+index d2e95c6ecc11b19ebb52c291884376c39d28467e..efe7ddee0c1321d3ab5c99d8e606ab04886c5d2c 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
-@@ -2662,6 +2662,62 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+@@ -2642,6 +2642,62 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
int getSimulationDistance();
// Spigot end
@@ -75,10 +75,10 @@ index 5357291ff0f2f20bd87ab9f6e57f6a4f6ff65226..887aa6217583d224d66f6d238ac269c2
public class Spigot {
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index c1affe53a8dc1d1219118610f1f0908c68bb7e51..05f0fca8f94da035512bb44aa6f0f99609b8afc6 100644
+index 592aae628d0b87b4277f1697b5aabde622d03710..eee3f8fb587b54d90e892b8c5d0b2eb290059bd4 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2065,6 +2065,78 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2053,6 +2053,78 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param affects Whether the player can affect mob spawning
*/
public void setAffectsSpawning(boolean affects);
diff --git a/patches/api/0020-Expose-server-CommandMap.patch b/patches/api/0020-Expose-server-CommandMap.patch
index f64662cba3..b0e6cac082 100644
--- a/patches/api/0020-Expose-server-CommandMap.patch
+++ b/patches/api/0020-Expose-server-CommandMap.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Expose server CommandMap
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index b2effed0281997a64dd0fdc965bce2a54af0cf4d..f3a976ea2d7433623202c1d7cbf777608b0ba457 100644
+index 3ea91c82670ae329a11b3d035378be047d91e3e8..6255c0b355dc978b50578629dc612011644a2501 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -2141,6 +2141,19 @@ public final class Bukkit {
+@@ -2145,6 +2145,19 @@ public final class Bukkit {
return server.getUnsafe();
}
@@ -29,10 +29,10 @@ index b2effed0281997a64dd0fdc965bce2a54af0cf4d..f3a976ea2d7433623202c1d7cbf77760
public static Server.Spigot spigot() {
return server.spigot();
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 04f5191398dcfac02eb6553d549e77207c06e550..c0c67866014940a1331cd714d5c6eb50256ae143 100644
+index 0eeefd5eb693af9e16182d6e39e7b4a1d8568bfa..b711cc420d4ab150275b06162e3e9540252b5b06 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1662,6 +1662,15 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1663,6 +1663,15 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
public double[] getTPS();
// Paper end
diff --git a/patches/api/0021-Graduate-bungeecord-chat-API-from-spigot-subclasses.patch b/patches/api/0021-Graduate-bungeecord-chat-API-from-spigot-subclasses.patch
index 44569c683c..5ae873a631 100644
--- a/patches/api/0021-Graduate-bungeecord-chat-API-from-spigot-subclasses.patch
+++ b/patches/api/0021-Graduate-bungeecord-chat-API-from-spigot-subclasses.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Graduate bungeecord chat API from spigot subclasses
Change Javadoc to be accurate
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index f3a976ea2d7433623202c1d7cbf777608b0ba457..77b267c50523433eee0fa35c6c5b8a9e121c0862 100644
+index 6255c0b355dc978b50578629dc612011644a2501..ba65e37ce5b8b6c5e449c6bbe8fa7d6a83082f15 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -409,6 +409,30 @@ public final class Bukkit {
+@@ -410,6 +410,30 @@ public final class Bukkit {
return server.broadcastMessage(message);
}
@@ -41,10 +41,10 @@ index f3a976ea2d7433623202c1d7cbf777608b0ba457..77b267c50523433eee0fa35c6c5b8a9e
* Gets the name of the update folder. The update folder is used to safely
* update plugins at the right moment on a plugin load.
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index c0c67866014940a1331cd714d5c6eb50256ae143..0e63d438a74b96075d7d8fb51ddbd21be3447377 100644
+index b711cc420d4ab150275b06162e3e9540252b5b06..eac6eb66b00403ed0541201e54347a0286b4387b 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -344,6 +344,30 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -345,6 +345,30 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@Deprecated // Paper
public int broadcastMessage(@NotNull String message);
@@ -76,10 +76,10 @@ index c0c67866014940a1331cd714d5c6eb50256ae143..0e63d438a74b96075d7d8fb51ddbd21b
* Gets the name of the update folder. The update folder is used to safely
* update plugins at the right moment on a plugin load.
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 05f0fca8f94da035512bb44aa6f0f99609b8afc6..f5d419920aa5b83b6c9f680cba6c87646c2be026 100644
+index eee3f8fb587b54d90e892b8c5d0b2eb290059bd4..fe49a1871e1143bfd6579a5df02d6974e0eb7382 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -915,6 +915,42 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -903,6 +903,42 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
public void sendMap(@NotNull MapView map);
diff --git a/patches/api/0025-Player-Tab-List-and-Title-APIs.patch b/patches/api/0025-Player-Tab-List-and-Title-APIs.patch
index 63400d9a6b..fe3743c137 100644
--- a/patches/api/0025-Player-Tab-List-and-Title-APIs.patch
+++ b/patches/api/0025-Player-Tab-List-and-Title-APIs.patch
@@ -432,10 +432,10 @@ index 0000000000000000000000000000000000000000..9e90c3df567a65b48a0b9341f784eb90
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index f5d419920aa5b83b6c9f680cba6c87646c2be026..28ca7231bfd8b5381b54ea323dfa2c3a972c9700 100644
+index fe49a1871e1143bfd6579a5df02d6974e0eb7382..14f101acef4063c15d9c8c1e24eee33a4f4debb6 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -949,6 +949,131 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -937,6 +937,131 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
public default void sendMessage(net.md_5.bungee.api.ChatMessageType position, net.md_5.bungee.api.chat.BaseComponent... components) {
spigot().sendMessage(position, components);
}
diff --git a/patches/api/0027-Complete-resource-pack-API.patch b/patches/api/0027-Complete-resource-pack-API.patch
index ea6054e17d..5a8fadbd8c 100644
--- a/patches/api/0027-Complete-resource-pack-API.patch
+++ b/patches/api/0027-Complete-resource-pack-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Complete resource pack API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 28ca7231bfd8b5381b54ea323dfa2c3a972c9700..d980cc3ed54db4bdf22c73d75d99871f1b16ecb0 100644
+index 14f101acef4063c15d9c8c1e24eee33a4f4debb6..3a1e584d584041f36b861e4507f7a58933f9b32d 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -1529,7 +1529,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1517,7 +1517,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @throws IllegalArgumentException Thrown if the URL is null.
* @throws IllegalArgumentException Thrown if the URL is too long. The
* length restriction is an implementation specific arbitrary value.
@@ -18,7 +18,7 @@ index 28ca7231bfd8b5381b54ea323dfa2c3a972c9700..d980cc3ed54db4bdf22c73d75d99871f
public void setResourcePack(@NotNull String url);
/**
-@@ -2355,6 +2357,124 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2343,6 +2345,124 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
default net.kyori.adventure.text.event.HoverEvent<net.kyori.adventure.text.event.HoverEvent.ShowEntity> asHoverEvent(final @NotNull java.util.function.UnaryOperator<net.kyori.adventure.text.event.HoverEvent.ShowEntity> op) {
return net.kyori.adventure.text.event.HoverEvent.showEntity(op.apply(net.kyori.adventure.text.event.HoverEvent.ShowEntity.of(this.getType().getKey(), this.getUniqueId(), this.displayName())));
}
diff --git a/patches/api/0030-Add-command-to-reload-permissions.yml-and-require-co.patch b/patches/api/0030-Add-command-to-reload-permissions.yml-and-require-co.patch
index 94d7e38e7d..4618d1e7ea 100644
--- a/patches/api/0030-Add-command-to-reload-permissions.yml-and-require-co.patch
+++ b/patches/api/0030-Add-command-to-reload-permissions.yml-and-require-co.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Add command to reload permissions.yml and require confirm to
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 77b267c50523433eee0fa35c6c5b8a9e121c0862..0b9b28b7a07a8176142b18cfa767c81f5035d52d 100644
+index ba65e37ce5b8b6c5e449c6bbe8fa7d6a83082f15..5c7a7d1cb0fc760f4209061aa653fdedb729dd36 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -2176,6 +2176,13 @@ public final class Bukkit {
+@@ -2180,6 +2180,13 @@ public final class Bukkit {
public static org.bukkit.command.CommandMap getCommandMap() {
return server.getCommandMap();
}
@@ -24,10 +24,10 @@ index 77b267c50523433eee0fa35c6c5b8a9e121c0862..0b9b28b7a07a8176142b18cfa767c81f
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 0e63d438a74b96075d7d8fb51ddbd21be3447377..e76c11688760a24f8395f562108b4c5fd7139b42 100644
+index eac6eb66b00403ed0541201e54347a0286b4387b..27ff3b0b594bca7c5ae45937e1044e1b2f30c60b 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1923,4 +1923,6 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1927,4 +1927,6 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@NotNull
Spigot spigot();
// Spigot end
diff --git a/patches/api/0043-Allow-Reloading-of-Command-Aliases.patch b/patches/api/0043-Allow-Reloading-of-Command-Aliases.patch
index 7e19f95ecf..0128232327 100644
--- a/patches/api/0043-Allow-Reloading-of-Command-Aliases.patch
+++ b/patches/api/0043-Allow-Reloading-of-Command-Aliases.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Allow Reloading of Command Aliases
Reload the aliases stored in commands.yml
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 0b9b28b7a07a8176142b18cfa767c81f5035d52d..22d9538abe61ccb3e5d3ae407d54446fa172fa39 100644
+index 5c7a7d1cb0fc760f4209061aa653fdedb729dd36..763ba521c4b2cdfd0fda062281207dc790db76e1 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -2183,6 +2183,15 @@ public final class Bukkit {
+@@ -2187,6 +2187,15 @@ public final class Bukkit {
public static void reloadPermissions() {
server.reloadPermissions();
}
@@ -26,10 +26,10 @@ index 0b9b28b7a07a8176142b18cfa767c81f5035d52d..22d9538abe61ccb3e5d3ae407d54446f
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index e76c11688760a24f8395f562108b4c5fd7139b42..26516ae5519675dac359b578d0f06ea2c0745ab3 100644
+index 27ff3b0b594bca7c5ae45937e1044e1b2f30c60b..459ca6d2a797c4007fda3129badd44f35335615d 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1925,4 +1925,6 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1929,4 +1929,6 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
// Spigot end
void reloadPermissions(); // Paper
diff --git a/patches/api/0046-Add-String-based-Action-Bar-API.patch b/patches/api/0046-Add-String-based-Action-Bar-API.patch
index b773fde223..1775f067b9 100644
--- a/patches/api/0046-Add-String-based-Action-Bar-API.patch
+++ b/patches/api/0046-Add-String-based-Action-Bar-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add String based Action Bar API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index d980cc3ed54db4bdf22c73d75d99871f1b16ecb0..5b9480a3d06155c391f1347cb56fde9612d75ed8 100644
+index 3a1e584d584041f36b861e4507f7a58933f9b32d..5d47d3089f244b146aab63d54f5aefba51e481a9 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -916,6 +916,39 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -904,6 +904,39 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
public void sendMap(@NotNull MapView map);
// Paper start
@@ -48,7 +48,7 @@ index d980cc3ed54db4bdf22c73d75d99871f1b16ecb0..5b9480a3d06155c391f1347cb56fde96
/**
* Sends the component to the player
*
-@@ -943,9 +976,11 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -931,9 +964,11 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
/**
* Sends an array of components as a single message to the specified screen position of this player
*
diff --git a/patches/api/0054-Add-configuration-option-to-prevent-player-names-fro.patch b/patches/api/0054-Add-configuration-option-to-prevent-player-names-fro.patch
index 2013c6f360..73b0b0489a 100644
--- a/patches/api/0054-Add-configuration-option-to-prevent-player-names-fro.patch
+++ b/patches/api/0054-Add-configuration-option-to-prevent-player-names-fro.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Add configuration option to prevent player names from being
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 22d9538abe61ccb3e5d3ae407d54446fa172fa39..68a79316cec0c4ab83c6f986e3a9561440994319 100644
+index 763ba521c4b2cdfd0fda062281207dc790db76e1..0e83259a03292daf5c069d570a324ae0323351ef 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -2192,6 +2192,16 @@ public final class Bukkit {
+@@ -2196,6 +2196,16 @@ public final class Bukkit {
public static boolean reloadCommandAliases() {
return server.reloadCommandAliases();
}
@@ -27,10 +27,10 @@ index 22d9538abe61ccb3e5d3ae407d54446fa172fa39..68a79316cec0c4ab83c6f986e3a95614
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 26516ae5519675dac359b578d0f06ea2c0745ab3..0cf214c45078d83d678f12f6cb350e50fc5f1e94 100644
+index 459ca6d2a797c4007fda3129badd44f35335615d..f8592dbe75680133e5db1e166fac48957c57cac9 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1927,4 +1927,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1931,4 +1931,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
void reloadPermissions(); // Paper
boolean reloadCommandAliases(); // Paper
diff --git a/patches/api/0055-Fix-upstream-javadocs.patch b/patches/api/0055-Fix-upstream-javadocs.patch
index 7bdb3f4135..91e65c81dd 100644
--- a/patches/api/0055-Fix-upstream-javadocs.patch
+++ b/patches/api/0055-Fix-upstream-javadocs.patch
@@ -53,10 +53,10 @@ index 96ef22fe879c7be4f67bbb4d60c45ad11764dd5b..5dc9f9ede98d93925c99ee382e93f15f
* @param target the target to remove from this list
*/
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 68a79316cec0c4ab83c6f986e3a9561440994319..316fc8348445b99af7ffc7c4ad24948a1115dfe6 100644
+index 0e83259a03292daf5c069d570a324ae0323351ef..1704d04097c9d364e5f9049a6a0f60945db482dd 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -1299,10 +1299,7 @@ public final class Bukkit {
+@@ -1300,10 +1300,7 @@ public final class Bukkit {
}
/**
@@ -68,7 +68,7 @@ index 68a79316cec0c4ab83c6f986e3a9561440994319..316fc8348445b99af7ffc7c4ad24948a
*
* @param type the type of list to fetch, cannot be null
* @return a ban list of the specified type
-@@ -1364,6 +1361,8 @@ public final class Bukkit {
+@@ -1365,6 +1362,8 @@ public final class Bukkit {
/**
* Gets every player that has ever played on this server.
@@ -78,10 +78,10 @@ index 68a79316cec0c4ab83c6f986e3a9561440994319..316fc8348445b99af7ffc7c4ad24948a
* @return an array containing all previous players
*/
diff --git a/src/main/java/org/bukkit/ChunkSnapshot.java b/src/main/java/org/bukkit/ChunkSnapshot.java
-index 0cf808356a1a5c6fc4bcf97a694ed9beb80a776a..dc765dea47a9a1c1520fb16ddb24f81413ed0dd1 100644
+index 803d4de580acc616424922fee4715a689b778886..94ab204a0739163613a5c651329606924c75d85b 100644
--- a/src/main/java/org/bukkit/ChunkSnapshot.java
+++ b/src/main/java/org/bukkit/ChunkSnapshot.java
-@@ -136,7 +136,7 @@ public interface ChunkSnapshot {
+@@ -137,7 +137,7 @@ public interface ChunkSnapshot {
* Get raw biome temperature at given coordinates
*
* @param x X-coordinate (0-15)
@@ -91,10 +91,10 @@ index 0cf808356a1a5c6fc4bcf97a694ed9beb80a776a..dc765dea47a9a1c1520fb16ddb24f814
* @return temperature at given coordinate
*/
diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java
-index 43f5aab2fe70af5f570de1f21eca83905f1e2f57..05c29cbd2ae1ca0434a90f8389479bd608ca2ac1 100644
+index a73c954aad2957c630b64e7b750f33f73809f9b1..8264599a873ed23ec6552d1550a414ec3712487b 100644
--- a/src/main/java/org/bukkit/RegionAccessor.java
+++ b/src/main/java/org/bukkit/RegionAccessor.java
-@@ -158,7 +158,7 @@ public interface RegionAccessor {
+@@ -159,7 +159,7 @@ public interface RegionAccessor {
* Creates a tree at the given {@link Location}
*
* @param location Location to spawn the tree
@@ -103,7 +103,7 @@ index 43f5aab2fe70af5f570de1f21eca83905f1e2f57..05c29cbd2ae1ca0434a90f8389479bd6
* @param type Type of the tree to create
* @return true if the tree was created successfully, otherwise false
*/
-@@ -170,14 +170,14 @@ public interface RegionAccessor {
+@@ -171,14 +171,14 @@ public interface RegionAccessor {
* The provided consumer gets called for every block which gets changed
* as a result of the tree generation. When the consumer gets called no
* modifications to the world are done yet. Which means, that calling
@@ -120,7 +120,7 @@ index 43f5aab2fe70af5f570de1f21eca83905f1e2f57..05c29cbd2ae1ca0434a90f8389479bd6
* @param type Type of the tree to create
* @param stateConsumer The consumer which should get called for every block which gets changed
* @return true if the tree was created successfully, otherwise false
-@@ -197,7 +197,7 @@ public interface RegionAccessor {
+@@ -198,7 +198,7 @@ public interface RegionAccessor {
* If it returns {@code false} the block won't get set in the world.
*
* @param location Location to spawn the tree
@@ -130,10 +130,10 @@ index 43f5aab2fe70af5f570de1f21eca83905f1e2f57..05c29cbd2ae1ca0434a90f8389479bd6
* @param statePredicate The predicate which should get used to test if a block should be set or not.
* @return true if the tree was created successfully, otherwise false
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 0cf214c45078d83d678f12f6cb350e50fc5f1e94..d7b081ac72d7d2aa3b675c6cbb8fb66f73facc99 100644
+index f8592dbe75680133e5db1e166fac48957c57cac9..dca2cbe8c93469c8c1c404bc34748a9dcf6d3368 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -542,13 +542,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -543,13 +543,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* </ul>
* <p>
* <b>Note:</b> If set to 0, {@link SpawnCategory} mobs spawning will be disabled.
@@ -148,7 +148,7 @@ index 0cf214c45078d83d678f12f6cb350e50fc5f1e94..d7b081ac72d7d2aa3b675c6cbb8fb66f
*/
public int getTicksPerSpawns(@NotNull SpawnCategory spawnCategory);
-@@ -1108,10 +1105,7 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1109,10 +1106,7 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
public Set<OfflinePlayer> getBannedPlayers();
/**
@@ -160,7 +160,7 @@ index 0cf214c45078d83d678f12f6cb350e50fc5f1e94..d7b081ac72d7d2aa3b675c6cbb8fb66f
*
* @param type the type of list to fetch, cannot be null
* @return a ban list of the specified type
-@@ -1161,6 +1155,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1162,6 +1156,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
/**
* Gets every player that has ever played on this server.
@@ -170,10 +170,10 @@ index 0cf214c45078d83d678f12f6cb350e50fc5f1e94..d7b081ac72d7d2aa3b675c6cbb8fb66f
* @return an array containing all previous players
*/
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
-index 4ef6bbfa753da439ac57bd8d70dd114d73665c8d..7f23527168a33b92d823f76765edfe00abe0e4f6 100644
+index 80189c7c70d7043016a24c0ac87655636408856e..a53a990477fd84f7f7dcb50058819eead8e8b5b5 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
-@@ -2576,7 +2576,7 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+@@ -2556,7 +2556,7 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
/**
* Find the closest nearby structure of a given {@link StructureType}.
* Finding unexplored structures can, and will, block if the world is
@@ -182,7 +182,7 @@ index 4ef6bbfa753da439ac57bd8d70dd114d73665c8d..7f23527168a33b92d823f76765edfe00
* temporarily freezing while locating an unexplored structure.
* <p>
* The {@code radius} is not a rigid square radius. Each structure may alter
-@@ -2610,7 +2610,7 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+@@ -2590,7 +2590,7 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
/**
* Find the closest nearby structure of a given {@link StructureType}.
* Finding unexplored structures can, and will, block if the world is
@@ -191,7 +191,7 @@ index 4ef6bbfa753da439ac57bd8d70dd114d73665c8d..7f23527168a33b92d823f76765edfe00
* temporarily freezing while locating an unexplored structure.
* <p>
* The {@code radius} is not a rigid square radius. Each structure may alter
-@@ -2643,7 +2643,7 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+@@ -2623,7 +2623,7 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
/**
* Find the closest nearby structure of a given {@link Structure}. Finding
* unexplored structures can, and will, block if the world is looking in
@@ -201,14 +201,14 @@ index 4ef6bbfa753da439ac57bd8d70dd114d73665c8d..7f23527168a33b92d823f76765edfe00
* <p>
* The {@code radius} is not a rigid square radius. Each structure may alter
diff --git a/src/main/java/org/bukkit/block/Bed.java b/src/main/java/org/bukkit/block/Bed.java
-index f9bd74f9ce6bd6650726e5a993f9b6e292cdc74d..f4c37ce1fe7aac3dde8485ee51fc8888ed56e79e 100644
+index 92532e335f07b14d1dad0de90c10f764d5fd9d8b..f4c37ce1fe7aac3dde8485ee51fc8888ed56e79e 100644
--- a/src/main/java/org/bukkit/block/Bed.java
+++ b/src/main/java/org/bukkit/block/Bed.java
@@ -4,7 +4,22 @@ import org.bukkit.material.Colorable;
/**
* Represents a captured state of a bed.
-- * @deprecated does not provide useful information beyond the material itself
+- * @deprecated does not provide useful information beyond the block type itself
*/
-@Deprecated
-public interface Bed extends TileState, Colorable { }
@@ -231,10 +231,10 @@ index f9bd74f9ce6bd6650726e5a993f9b6e292cdc74d..f4c37ce1fe7aac3dde8485ee51fc8888
+// Paper end
+}
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index f8e12868f2e629cdf4784f0157fdb2f8e7b01f99..870ad6cd930653e6248abcc0fce94ffafbe9ebde 100644
+index 1197cb8a6be92296c494010d87e046dfe912a161..d834e8d8d532ce5b46201ff5c02d54a6c047f615 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -357,7 +357,7 @@ public interface Block extends Metadatable, Translatable {
+@@ -356,7 +356,7 @@ public interface Block extends Metadatable, Translatable {
* Gets the temperature of this block.
* <p>
* If the raw biome temperature without adjusting for height effects is
@@ -244,18 +244,27 @@ index f8e12868f2e629cdf4784f0157fdb2f8e7b01f99..870ad6cd930653e6248abcc0fce94ffa
* @return Temperature of this block
*/
diff --git a/src/main/java/org/bukkit/block/data/BlockData.java b/src/main/java/org/bukkit/block/data/BlockData.java
-index 2e2232956f626669005cfdfd6550aa8ee29fc1ab..869fa47a13fbcb128228963bf53cc72da4499a01 100644
+index dd286dd68682658af096790c048b88ee0c401214..7f4a858ab98f8d0c3c2f890ca88bc13b6ba967fa 100644
--- a/src/main/java/org/bukkit/block/data/BlockData.java
+++ b/src/main/java/org/bukkit/block/data/BlockData.java
-@@ -215,7 +215,7 @@ public interface BlockData extends Cloneable {
- * {@link Material#REDSTONE_WIRE} -> {@link Material#REDSTONE}
- * {@link Material#CARROTS} -> {@link Material#CARROT}
+@@ -208,15 +208,13 @@ public interface BlockData extends Cloneable {
+ /**
+ * Gets the ItemType that a player would use to place this block.
+ * <p>
+- * For most blocks this is the same as {@link BlockType#asItemType()} but some blocks
+- * have different item types used to place them.
+- *
++ * This is identical to {@link BlockType#getItemType()}.
+ * For example:
+ * <pre>
+ * {@link ItemType#REDSTONE_WIRE} -> {@link BlockType#REDSTONE}
+ * {@link ItemType#CARROTS} -> {@link BlockType#CARROT}
* </pre>
-- * @return placement material
-+ * @return placement material or {@link Material#AIR} if it doesn't have one
+- * @return placement item type
++ * @return placement item type or {@link ItemType#AIR} if it doesn't have one
*/
@NotNull
- Material getPlacementMaterial();
+ ItemType getPlacementType();
diff --git a/src/main/java/org/bukkit/block/data/FaceAttachable.java b/src/main/java/org/bukkit/block/data/FaceAttachable.java
index 9599e1237b9717ddbf84c3738bf6c1293e8b3c54..950266b4bb0a2fabeb9539c5676ed58f0b0fe620 100644
--- a/src/main/java/org/bukkit/block/data/FaceAttachable.java
@@ -331,10 +340,10 @@ index 91fc11dda99de506be83d40df8929bf7cd8e8d85..7dc631ebd009f5f5c3ac1699c3f3515c
// Paper end
}
diff --git a/src/main/java/org/bukkit/entity/Arrow.java b/src/main/java/org/bukkit/entity/Arrow.java
-index 8814519df13c5e9475774f4bce4c8c6a462c2978..be9a35790fc664721ac94f3708613eb77631a0c5 100644
+index 8eb0cf31b1ce6d714a14cf65bbb117ff163ae2f3..8e57082e8b19a2fd9625816c2ea4a90d41f78ca5 100644
--- a/src/main/java/org/bukkit/entity/Arrow.java
+++ b/src/main/java/org/bukkit/entity/Arrow.java
-@@ -73,7 +73,7 @@ public interface Arrow extends AbstractArrow {
+@@ -93,7 +93,7 @@ public interface Arrow extends AbstractArrow {
* Removes a custom potion effect from this arrow.
*
* @param type the potion effect type to remove
@@ -356,8 +365,32 @@ index 0449664d7cd0c52ac34d2101110f1ab42070257c..57f8e7bf4c7b4c4a4e793cfd5d7db743
* the portal, it will fly to it before mounting.
*/
LAND_ON_PORTAL,
+diff --git a/src/main/java/org/bukkit/entity/EntityCategory.java b/src/main/java/org/bukkit/entity/EntityCategory.java
+index fd960f20c79f721575c9bd4074a5ca9ab6b796b1..3e2ae87c806ce439d6c8848deecda48a28dbed96 100644
+--- a/src/main/java/org/bukkit/entity/EntityCategory.java
++++ b/src/main/java/org/bukkit/entity/EntityCategory.java
+@@ -23,7 +23,7 @@ public enum EntityCategory {
+ * <li>Are subject to burning in daylight (though not all).
+ * <li>Sink in water (except {@link Drowned}, {@link Phantom Phantoms}
+ * and {@link Wither Withers}).
+- * <li>Take additional damage from {@link Enchantment#DAMAGE_UNDEAD}.
++ * <li>Take additional damage from {@link Enchantment#SMITE}.
+ * <li>Are ignored by {@link Wither Withers}.
+ * </ul>
+ */
+@@ -31,8 +31,8 @@ public enum EntityCategory {
+ /**
+ * Entities of the arthropod family. These creatures:
+ * <ul>
+- * <li>Take additional damage and receive {@link PotionEffectType#SLOW}
+- * from {@link Enchantment#DAMAGE_ARTHROPODS}.
++ * <li>Take additional damage and receive {@link PotionEffectType#SLOWNESS}
++ * from {@link Enchantment#BANE_OF_ARTHROPODS}.
+ * <li>Are immune to {@link PotionEffectType#POISON} if they are spiders.
+ * </ul>
+ */
diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java
-index 09936f3a2376a46721bbc8365c989581c2a789ef..3845a726adbd0e75d7bf2aeeb6da8cb571d51a8f 100644
+index f2faa8b9a7da1c9af26f494ae82ae5372dcc4805..411dbbd8046a3157747713fea9ae19eca113e9b7 100644
--- a/src/main/java/org/bukkit/entity/HumanEntity.java
+++ b/src/main/java/org/bukkit/entity/HumanEntity.java
@@ -22,6 +22,11 @@ import org.jetbrains.annotations.Nullable;
@@ -414,7 +447,7 @@ index ae9eaaa8e38e1d9dfc459926c7fc51ddb89de84a..b2ec535bb1b0ce0c114ddd7638b90218
@Override
public int getConversionTime();
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 5b9480a3d06155c391f1347cb56fde9612d75ed8..26236250f4418def6f65c811800063588b43fa84 100644
+index 5d47d3089f244b146aab63d54f5aefba51e481a9..383d12b1ffc76bc8f9100a71027ac9e25e4a3742 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -327,15 +327,15 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@@ -446,7 +479,7 @@ index 5b9480a3d06155c391f1347cb56fde9612d75ed8..26236250f4418def6f65c81180006358
* @param loc the location to play the effect at
* @param effect the {@link Effect}
* @param data a data bit needed for some effects
-@@ -933,7 +933,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -921,7 +921,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*
* Use supplied alternative character to the section symbol to represent legacy color codes.
*
@@ -455,7 +488,7 @@ index 5b9480a3d06155c391f1347cb56fde9612d75ed8..26236250f4418def6f65c81180006358
* @param message The message to send
* @deprecated use {@link #sendActionBar(net.kyori.adventure.text.Component)}
*/
-@@ -1399,7 +1399,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1387,7 +1387,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
/**
* Allows this player to see a player that was previously hidden. If
@@ -464,7 +497,7 @@ index 5b9480a3d06155c391f1347cb56fde9612d75ed8..26236250f4418def6f65c81180006358
* remain hidden until the other plugin calls this method too.
*
* @param plugin Plugin that wants to show the player
-@@ -1428,7 +1428,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1416,7 +1416,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
/**
* Allows this player to see an entity that was previously hidden. If
@@ -518,18 +551,18 @@ index af5110b4160979c39cc1e5de6fa3bd7957b21403..15a0a733b0e5804655b5957cbf208312
* @param location the location to remove
* @see #getExploredLocations()
diff --git a/src/main/java/org/bukkit/entity/Villager.java b/src/main/java/org/bukkit/entity/Villager.java
-index 6bf3af3ed81b66f61e53105d3591165ea74dba0e..a91400cd8bb4c72d1f3200a17f6de025540fe09d 100644
+index fb4c6f92c7c16ff8cdc0a054a270b41d78dfcdde..a6e57f8ad3f09d05ca61c824d128221528f7a96d 100644
--- a/src/main/java/org/bukkit/entity/Villager.java
+++ b/src/main/java/org/bukkit/entity/Villager.java
-@@ -202,7 +202,7 @@ public interface Villager extends AbstractVillager {
+@@ -225,7 +225,7 @@ public interface Villager extends AbstractVillager {
*/
- NITWIT,
+ public static final Profession NITWIT = getProfession("nitwit");
/**
- * Sheperd profession. Wears a brown robe. Shepherds primarily trade for
+ * Shepherd profession. Wears a brown robe. Shepherds primarily trade for
* wool items, and shears.
*/
- SHEPHERD,
+ public static final Profession SHEPHERD = getProfession("shepherd");
diff --git a/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java b/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java
index 44f7f6939a27b9a0a796d91eac4b7c97ec90a643..641c71ab66bd2499b35cf3c1d533fd105d096e10 100644
--- a/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java
@@ -546,7 +579,7 @@ index 44f7f6939a27b9a0a796d91eac4b7c97ec90a643..641c71ab66bd2499b35cf3c1d533fd10
public class BlockExplodeEvent extends BlockEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
diff --git a/src/main/java/org/bukkit/event/block/BlockPlaceEvent.java b/src/main/java/org/bukkit/event/block/BlockPlaceEvent.java
-index be0a2d1f234d8265d98e54e518a994957b1f3ab7..4e3c406ba883aae553e8d69b6b719b872cd6096c 100644
+index ff20d0768aed1732dcef8989c62e19c01e8ec70a..a4525c1ac5e6aa0130358739db35fbb732476e33 100644
--- a/src/main/java/org/bukkit/event/block/BlockPlaceEvent.java
+++ b/src/main/java/org/bukkit/event/block/BlockPlaceEvent.java
@@ -114,7 +114,7 @@ public class BlockPlaceEvent extends BlockEvent implements Cancellable {
@@ -774,7 +807,7 @@ index 4c2102a11c3d682d98f0db4ccafa35231e66bcdd..ca238af544764273b9cd4cf3587e8632
public class PlayerResourcePackStatusEvent extends PlayerEvent {
diff --git a/src/main/java/org/bukkit/generator/ChunkGenerator.java b/src/main/java/org/bukkit/generator/ChunkGenerator.java
-index 0cc6e29a5af28e95f87f415d6b2424d4622a6f34..c0b749a5bbf4980d01fed74768bb61909b579cb9 100644
+index 08d656ee57b080e07b7b7d97c9551fb0a0e3e94b..82d8fe3be9ff6914b44872462c3827123459735d 100644
--- a/src/main/java/org/bukkit/generator/ChunkGenerator.java
+++ b/src/main/java/org/bukkit/generator/ChunkGenerator.java
@@ -627,7 +627,7 @@ public abstract class ChunkGenerator {
@@ -1045,45 +1078,41 @@ index 62fbd7f6d8195bebcab7f704a0a485a1bbeca26c..5461f7fa75f5a065bb333b4a113640b5
* @return the currently held item
* @see #getItemInMainHand()
diff --git a/src/main/java/org/bukkit/inventory/ShapedRecipe.java b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
-index 8971ec20d36c4d1a8fb07ec4603221791a2b52b4..4c7f30877c608e327908a61e4bd68789191e2f3c 100644
+index a9dbb11148e5bdf3e6c251bc98b6a8295aceba2f..e92de5ca8bd48723a493495db3ca2e2f5b55fab5 100644
--- a/src/main/java/org/bukkit/inventory/ShapedRecipe.java
+++ b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
-@@ -30,8 +30,6 @@ public class ShapedRecipe implements Recipe, Keyed {
+@@ -29,7 +29,6 @@ public class ShapedRecipe implements Recipe, Keyed {
* @param result The item you want the recipe to create.
* @see ShapedRecipe#shape(String...)
- * @see ShapedRecipe#setIngredient(char, Material)
-- * @see ShapedRecipe#setIngredient(char, Material, int)
+ * @see ShapedRecipe#setIngredient(char, ItemType)
- * @see ShapedRecipe#setIngredient(char, MaterialData)
* @see ShapedRecipe#setIngredient(char, RecipeChoice)
* @deprecated Recipes must have keys. Use {@link #ShapedRecipe(NamespacedKey, ItemStack)}
* instead.
-@@ -52,8 +50,6 @@ public class ShapedRecipe implements Recipe, Keyed {
+@@ -50,7 +49,6 @@ public class ShapedRecipe implements Recipe, Keyed {
* @param result The item you want the recipe to create.
* @see ShapedRecipe#shape(String...)
- * @see ShapedRecipe#setIngredient(char, Material)
-- * @see ShapedRecipe#setIngredient(char, Material, int)
+ * @see ShapedRecipe#setIngredient(char, ItemType)
- * @see ShapedRecipe#setIngredient(char, MaterialData)
* @see ShapedRecipe#setIngredient(char, RecipeChoice)
*/
public ShapedRecipe(@NotNull NamespacedKey key, @NotNull ItemStack result) {
diff --git a/src/main/java/org/bukkit/inventory/ShapelessRecipe.java b/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
-index df4c52f1f0be2409c7506b09167bd58b5602fa7a..74449a635aca84adcc1652e1e85f2d27dcaf6842 100644
+index 94393a1f0d19a58a1029f9c31193b3d9279c5ef0..69a25d05efcc96f8b3d3b5455e571259e5af2dab 100644
--- a/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
+++ b/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
-@@ -38,11 +38,8 @@ public class ShapelessRecipe implements Recipe, Keyed {
+@@ -37,9 +37,8 @@ public class ShapelessRecipe implements Recipe, Keyed {
* @param key the unique recipe key
* @param result The item you want the recipe to create.
- * @see ShapelessRecipe#addIngredient(Material)
+ * @see ShapelessRecipe#addIngredient(ItemType)
- * @see ShapelessRecipe#addIngredient(MaterialData)
-- * @see ShapelessRecipe#addIngredient(Material,int)
- * @see ShapelessRecipe#addIngredient(int,Material)
+ * @see ShapelessRecipe#addIngredient(int,ItemType)
- * @see ShapelessRecipe#addIngredient(int,MaterialData)
-- * @see ShapelessRecipe#addIngredient(int,Material,int)
+ * @see ShapelessRecipe#addIngredient(RecipeChoice)
*/
public ShapelessRecipe(@NotNull NamespacedKey key, @NotNull ItemStack result) {
- Preconditions.checkArgument(result.getType() != Material.AIR, "Recipe must have non-AIR result.");
-@@ -184,7 +181,7 @@ public class ShapelessRecipe implements Recipe, Keyed {
+ Preconditions.checkArgument(result.getType() != ItemType.AIR, "Recipe must have non-AIR result.");
+@@ -147,7 +146,7 @@ public class ShapelessRecipe implements Recipe, Keyed {
/**
* Removes multiple instances of an ingredient from the list. If there are
@@ -1107,10 +1136,10 @@ index af04071d37e70b8cc9837d57477c8493be8afb9f..582671a0a94d47302c0fdc572d486282
this.key = key;
this.result = result;
diff --git a/src/main/java/org/bukkit/inventory/StonecuttingRecipe.java b/src/main/java/org/bukkit/inventory/StonecuttingRecipe.java
-index 07c3dff4d6190ef388d9c1e1c36f67f00a3e8e66..597a18a767b68b47e81454b7d44613c7178c1366 100644
+index 8df05b404eb1bcbe1bf358b8cb34c46f25ceeba1..0de3c34c67b8c37a3c7ba8bcec4404ed4ef5019e 100644
--- a/src/main/java/org/bukkit/inventory/StonecuttingRecipe.java
+++ b/src/main/java/org/bukkit/inventory/StonecuttingRecipe.java
-@@ -28,7 +28,7 @@ public class StonecuttingRecipe implements Recipe, Keyed {
+@@ -33,7 +33,7 @@ public class StonecuttingRecipe implements Recipe, Keyed {
}
/**
@@ -1119,16 +1148,16 @@ index 07c3dff4d6190ef388d9c1e1c36f67f00a3e8e66..597a18a767b68b47e81454b7d44613c7
*
* @param key The unique recipe key
* @param result The item you want the recipe to create.
-@@ -42,7 +42,7 @@ public class StonecuttingRecipe implements Recipe, Keyed {
+@@ -47,7 +47,7 @@ public class StonecuttingRecipe implements Recipe, Keyed {
}
/**
- * Sets the input of this cooking recipe.
+ * Sets the input of this Stonecutting recipe.
*
- * @param input The input material.
+ * @param input The input item type.
* @return The changed recipe, so you can chain calls.
-@@ -64,7 +64,7 @@ public class StonecuttingRecipe implements Recipe, Keyed {
+@@ -69,7 +69,7 @@ public class StonecuttingRecipe implements Recipe, Keyed {
}
/**
@@ -1150,6 +1179,28 @@ index 049c70c935fd7a781280d223f74bbbf87223f505..f78714c2a6d9da162c9802552984cbfa
* {@link EquipmentSlot} will be returned. This is because
* AttributeModifiers without a slot are active in any slot.<br>
* If there are no attributes set for the given slot, an empty map
+diff --git a/src/main/java/org/bukkit/loot/LootContext.java b/src/main/java/org/bukkit/loot/LootContext.java
+index 71b7aa9d675e1714e286e6fd4015ead036d912e0..b35dba42069f771db8727bf98f9d17aff9d6094e 100644
+--- a/src/main/java/org/bukkit/loot/LootContext.java
++++ b/src/main/java/org/bukkit/loot/LootContext.java
+@@ -54,7 +54,7 @@ public final class LootContext {
+
+ /**
+ * Represents the
+- * {@link org.bukkit.enchantments.Enchantment#LOOT_BONUS_MOBS} the
++ * {@link org.bukkit.enchantments.Enchantment#LOOTING} the
+ * {@link #getKiller()} entity has on their equipped item.
+ *
+ * This value is only set via
+@@ -124,7 +124,7 @@ public final class LootContext {
+ }
+
+ /**
+- * Set the {@link org.bukkit.enchantments.Enchantment#LOOT_BONUS_MOBS}
++ * Set the {@link org.bukkit.enchantments.Enchantment#LOOTING}
+ * level equivalent to use when generating loot. Values less than or
+ * equal to 0 will force the {@link LootTable} to only return a single
+ * {@link org.bukkit.inventory.ItemStack} per pool.
diff --git a/src/main/java/org/bukkit/scoreboard/Objective.java b/src/main/java/org/bukkit/scoreboard/Objective.java
index 86a0a6f9e8487d6dfaf60876ace3dcc9b4722826..571b43c2809d2b248feebc7decba6017a67c8aee 100644
--- a/src/main/java/org/bukkit/scoreboard/Objective.java
diff --git a/patches/api/0059-Basic-PlayerProfile-API.patch b/patches/api/0059-Basic-PlayerProfile-API.patch
index 13200b1ca2..7051fee915 100644
--- a/patches/api/0059-Basic-PlayerProfile-API.patch
+++ b/patches/api/0059-Basic-PlayerProfile-API.patch
@@ -321,10 +321,10 @@ index 0000000000000000000000000000000000000000..7b3b6ef533d32169fbeca389bd61cfc6
+ }
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 316fc8348445b99af7ffc7c4ad24948a1115dfe6..10eeb288ef41dfc6bd70fc8f6ec218dabc60b2a4 100644
+index 1704d04097c9d364e5f9049a6a0f60945db482dd..9935ca77536c8fa30881376e20cd3193f22879fb 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -2201,6 +2201,83 @@ public final class Bukkit {
+@@ -2205,6 +2205,83 @@ public final class Bukkit {
public static boolean suggestPlayerNamesWhenNullTabCompletions() {
return server.suggestPlayerNamesWhenNullTabCompletions();
}
@@ -409,10 +409,10 @@ index 316fc8348445b99af7ffc7c4ad24948a1115dfe6..10eeb288ef41dfc6bd70fc8f6ec218da
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index d7b081ac72d7d2aa3b675c6cbb8fb66f73facc99..1487b5de4fba5304b7e2105c6f88872923aa7974 100644
+index dca2cbe8c93469c8c1c404bc34748a9dcf6d3368..136ae88a23ac02f79960d4ee99041486b41806f5 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1932,5 +1932,74 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1936,5 +1936,74 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* @return true if player names should be suggested
*/
boolean suggestPlayerNamesWhenNullTabCompletions();
diff --git a/patches/api/0061-Shoulder-Entities-Release-API.patch b/patches/api/0061-Shoulder-Entities-Release-API.patch
index 5dbabdff87..b5d73e2f3b 100644
--- a/patches/api/0061-Shoulder-Entities-Release-API.patch
+++ b/patches/api/0061-Shoulder-Entities-Release-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Shoulder Entities Release API
diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java
-index 3845a726adbd0e75d7bf2aeeb6da8cb571d51a8f..abdca9fe5acc90f167219eb769ece66c35682bb1 100644
+index 411dbbd8046a3157747713fea9ae19eca113e9b7..7f12a18a77838266c0394da078a958c6bfb0e776 100644
--- a/src/main/java/org/bukkit/entity/HumanEntity.java
+++ b/src/main/java/org/bukkit/entity/HumanEntity.java
-@@ -339,6 +339,26 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
+@@ -336,6 +336,26 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
*/
public int getExpToLevel();
diff --git a/patches/api/0065-Add-getI18NDisplayName-API.patch b/patches/api/0065-Add-getI18NDisplayName-API.patch
index b21d6e25c4..8444f9e62d 100644
--- a/patches/api/0065-Add-getI18NDisplayName-API.patch
+++ b/patches/api/0065-Add-getI18NDisplayName-API.patch
@@ -8,10 +8,10 @@ Currently the server only supports the English language. To override this,
You must replace the language file embedded in the server jar.
diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
-index af4a7ce37eb10bab06eadb6583c7894b3ec55ae6..159e5a908b35b84b7fabc36581e093d9aa4c4b67 100644
+index d0530328536840ce126b39942fac35a476ea2ac4..193e36ca6ea3b6528e53ebd07bbd8775b12993af 100644
--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
+++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
-@@ -178,5 +178,19 @@ public interface ItemFactory {
+@@ -177,5 +177,19 @@ public interface ItemFactory {
*/
@NotNull
net.kyori.adventure.text.Component displayName(@NotNull ItemStack itemStack);
@@ -32,10 +32,10 @@ index af4a7ce37eb10bab06eadb6583c7894b3ec55ae6..159e5a908b35b84b7fabc36581e093d9
// Paper end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index 9d327f0832c40d4a8d212346284274f6cf78834f..09a36df6edce2a283df80c67d5ef62da7ff73555 100644
+index 7e6c2bcf42d271184a75c91ecded5824535b3455..b8dfe0d1cebb944dfffc97ac74fdecda2f4884a2 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -618,5 +618,20 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -668,5 +668,20 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
public net.kyori.adventure.text.@NotNull Component displayName() {
return Bukkit.getServer().getItemFactory().displayName(this);
}
diff --git a/patches/api/0066-ensureServerConversions-API.patch b/patches/api/0066-ensureServerConversions-API.patch
index 2b0cf31e73..45f35f9991 100644
--- a/patches/api/0066-ensureServerConversions-API.patch
+++ b/patches/api/0066-ensureServerConversions-API.patch
@@ -7,10 +7,10 @@ This will take a Bukkit ItemStack and run it through any conversions a server pr
to ensure it meets latest minecraft expectations.
diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
-index 159e5a908b35b84b7fabc36581e093d9aa4c4b67..349da0065ddf000cacdc259fab0f2c759332e9ad 100644
+index 193e36ca6ea3b6528e53ebd07bbd8775b12993af..c8e1377f804c50d41ad29c6c67dea58526d28125 100644
--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
+++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
-@@ -192,5 +192,17 @@ public interface ItemFactory {
+@@ -191,5 +191,17 @@ public interface ItemFactory {
@Nullable
@Deprecated
String getI18NDisplayName(@Nullable ItemStack item);
@@ -29,10 +29,10 @@ index 159e5a908b35b84b7fabc36581e093d9aa4c4b67..349da0065ddf000cacdc259fab0f2c75
// Paper end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index 09a36df6edce2a283df80c67d5ef62da7ff73555..a8faa4c1881bae4d47d901388a78b991d138b518 100644
+index b8dfe0d1cebb944dfffc97ac74fdecda2f4884a2..923f160407a2d4be71ef42a387cb803712404c43 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -537,7 +537,7 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -587,7 +587,7 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
}
}
@@ -41,7 +41,7 @@ index 09a36df6edce2a283df80c67d5ef62da7ff73555..a8faa4c1881bae4d47d901388a78b991
}
/**
-@@ -619,6 +619,19 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -669,6 +669,19 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
return Bukkit.getServer().getItemFactory().displayName(this);
}
diff --git a/patches/api/0074-API-to-get-a-BlockState-without-a-snapshot.patch b/patches/api/0074-API-to-get-a-BlockState-without-a-snapshot.patch
index 323b157741..bce44118fe 100644
--- a/patches/api/0074-API-to-get-a-BlockState-without-a-snapshot.patch
+++ b/patches/api/0074-API-to-get-a-BlockState-without-a-snapshot.patch
@@ -9,10 +9,10 @@ on the real tile entity.
This is useful for where performance is needed
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 870ad6cd930653e6248abcc0fce94ffafbe9ebde..9f4d383ea3d6b26d16b8b77ca4c29d2d839ad6dd 100644
+index d834e8d8d532ce5b46201ff5c02d54a6c047f615..b33c1a227669d01950ceb4162a2910ae05a85a0e 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -272,6 +272,16 @@ public interface Block extends Metadatable, Translatable {
+@@ -271,6 +271,16 @@ public interface Block extends Metadatable, Translatable {
@NotNull
BlockState getState();
diff --git a/patches/api/0077-Display-warning-on-deprecated-recipe-API.patch b/patches/api/0077-Display-warning-on-deprecated-recipe-API.patch
index bc3fa9520d..b018b269c1 100644
--- a/patches/api/0077-Display-warning-on-deprecated-recipe-API.patch
+++ b/patches/api/0077-Display-warning-on-deprecated-recipe-API.patch
@@ -10,24 +10,24 @@ on the players login.
Plugin authors need to define a key to keep it consistent between server restarts.
diff --git a/src/main/java/org/bukkit/inventory/ShapedRecipe.java b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
-index 4c7f30877c608e327908a61e4bd68789191e2f3c..be68263386a8faea7744f4de75d484e9358c87df 100644
+index e92de5ca8bd48723a493495db3ca2e2f5b55fab5..06b7f273ae66b2c936523c95fd4f802bd39ae324 100644
--- a/src/main/java/org/bukkit/inventory/ShapedRecipe.java
+++ b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
-@@ -38,6 +38,7 @@ public class ShapedRecipe implements Recipe, Keyed {
+@@ -37,6 +37,7 @@ public class ShapedRecipe implements Recipe, Keyed {
public ShapedRecipe(@NotNull ItemStack result) {
- Preconditions.checkArgument(result.getType() != Material.AIR, "Recipe must have non-AIR result.");
+ Preconditions.checkArgument(result.getType() != ItemType.AIR, "Recipe must have non-AIR result.");
this.key = NamespacedKey.randomKey();
+ new Throwable("Warning: A plugin is creating a recipe using a Deprecated method. This will cause you to receive warnings stating 'Tried to load unrecognized recipe: bukkit:<ID>'. Please ask the author to give their recipe a static key using NamespacedKey.").printStackTrace();
this.output = new ItemStack(result);
}
diff --git a/src/main/java/org/bukkit/inventory/ShapelessRecipe.java b/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
-index 74449a635aca84adcc1652e1e85f2d27dcaf6842..05ef88225415cd30de36f4517b6fb40d826ce996 100644
+index 69a25d05efcc96f8b3d3b5455e571259e5af2dab..ebc2c713d8a4ceec86b7dd270c5ca18c78103bcc 100644
--- a/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
+++ b/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
-@@ -27,6 +27,7 @@ public class ShapelessRecipe implements Recipe, Keyed {
+@@ -26,6 +26,7 @@ public class ShapelessRecipe implements Recipe, Keyed {
public ShapelessRecipe(@NotNull ItemStack result) {
- Preconditions.checkArgument(result.getType() != Material.AIR, "Recipe must have non-AIR result.");
+ Preconditions.checkArgument(result.getType() != ItemType.AIR, "Recipe must have non-AIR result.");
this.key = NamespacedKey.randomKey();
+ new Throwable("Warning: A plugin is creating a recipe using a Deprecated method. This will cause you to receive warnings stating 'Tried to load unrecognized recipe: bukkit:<ID>'. Please ask the author to give their recipe a static key using NamespacedKey.").printStackTrace();
this.output = new ItemStack(result);
diff --git a/patches/api/0080-Ability-to-apply-mending-to-XP-API.patch b/patches/api/0080-Ability-to-apply-mending-to-XP-API.patch
index f226c832e7..76ffe46c0c 100644
--- a/patches/api/0080-Ability-to-apply-mending-to-XP-API.patch
+++ b/patches/api/0080-Ability-to-apply-mending-to-XP-API.patch
@@ -10,10 +10,10 @@ of giving the player experience points.
Both an API To standalone mend, and apply mending logic to .giveExp has been added.
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index bd6881d18d18d03f7e9b7821fa6cc433a79dc17e..b4efaec20a64e6f1955819b0d784d9f671d928e0 100644
+index 0700a76cdccab9a6dbbcbfd50aa6a5f192f15e75..2400d82ea71f22ddb6c671bf74c6480c35910598 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -1242,6 +1242,15 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1230,6 +1230,15 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
public void resetPlayerWeather();
@@ -29,7 +29,7 @@ index bd6881d18d18d03f7e9b7821fa6cc433a79dc17e..b4efaec20a64e6f1955819b0d784d9f6
/**
* Gets the player's cooldown between picking up experience orbs.
*
-@@ -1267,8 +1276,20 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1255,8 +1264,20 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* Gives the player the amount of experience specified.
*
* @param amount Exp amount to give
diff --git a/patches/api/0083-Add-setPlayerProfile-API-for-Skulls.patch b/patches/api/0083-Add-setPlayerProfile-API-for-Skulls.patch
index 62d576949f..96b1e25591 100644
--- a/patches/api/0083-Add-setPlayerProfile-API-for-Skulls.patch
+++ b/patches/api/0083-Add-setPlayerProfile-API-for-Skulls.patch
@@ -7,10 +7,10 @@ This allows you to create already filled textures on Skulls to avoid texture loo
which commonly cause rate limit issues with Mojang API
diff --git a/src/main/java/org/bukkit/block/Skull.java b/src/main/java/org/bukkit/block/Skull.java
-index b39128bb0ca2d4fe7a254193236c60fb5bfaa7da..5135b8e6028e6926e2711e2dd6ce68b76f468fd7 100644
+index c7580fa8e62c6ee35abb0cec2586a39bbae4e8a7..0070b8e4a86f85ee31e071513808c36dbad04845 100644
--- a/src/main/java/org/bukkit/block/Skull.java
+++ b/src/main/java/org/bukkit/block/Skull.java
-@@ -63,6 +63,20 @@ public interface Skull extends TileState {
+@@ -62,6 +62,20 @@ public interface Skull extends TileState {
*/
public void setOwningPlayer(@NotNull OfflinePlayer player);
@@ -31,7 +31,7 @@ index b39128bb0ca2d4fe7a254193236c60fb5bfaa7da..5135b8e6028e6926e2711e2dd6ce68b7
/**
* Gets the profile of the player who owns the skull. This player profile
* may appear as the texture depending on skull type.
-@@ -70,6 +84,7 @@ public interface Skull extends TileState {
+@@ -69,6 +83,7 @@ public interface Skull extends TileState {
* @return the profile of the owning player
*/
@Nullable
@@ -39,7 +39,7 @@ index b39128bb0ca2d4fe7a254193236c60fb5bfaa7da..5135b8e6028e6926e2711e2dd6ce68b7
PlayerProfile getOwnerProfile();
/**
-@@ -84,6 +99,7 @@ public interface Skull extends TileState {
+@@ -83,6 +98,7 @@ public interface Skull extends TileState {
* @throws IllegalArgumentException if the profile does not contain the
* necessary information
*/
diff --git a/patches/api/0091-Player.setPlayerProfile-API.patch b/patches/api/0091-Player.setPlayerProfile-API.patch
index ea78af9a06..dba5f9ac38 100644
--- a/patches/api/0091-Player.setPlayerProfile-API.patch
+++ b/patches/api/0091-Player.setPlayerProfile-API.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Player.setPlayerProfile API
This can be useful for changing name or skins after a player has logged in.
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 10eeb288ef41dfc6bd70fc8f6ec218dabc60b2a4..ace8904541fb4571cb03f14e6e3baa02ae460d1e 100644
+index 9935ca77536c8fa30881376e20cd3193f22879fb..c1cf9328f32d6b4ecbba667a8dda3a60b37aca82 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -1229,8 +1229,10 @@ public final class Bukkit {
+@@ -1230,8 +1230,10 @@ public final class Bukkit {
* @return the new PlayerProfile
* @throws IllegalArgumentException if both the unique id is
* <code>null</code> and the name is <code>null</code> or blank
@@ -20,7 +20,7 @@ index 10eeb288ef41dfc6bd70fc8f6ec218dabc60b2a4..ace8904541fb4571cb03f14e6e3baa02
public static PlayerProfile createPlayerProfile(@Nullable UUID uniqueId, @Nullable String name) {
return server.createPlayerProfile(uniqueId, name);
}
-@@ -1241,8 +1243,10 @@ public final class Bukkit {
+@@ -1242,8 +1244,10 @@ public final class Bukkit {
* @param uniqueId the unique id
* @return the new PlayerProfile
* @throws IllegalArgumentException if the unique id is <code>null</code>
@@ -31,7 +31,7 @@ index 10eeb288ef41dfc6bd70fc8f6ec218dabc60b2a4..ace8904541fb4571cb03f14e6e3baa02
public static PlayerProfile createPlayerProfile(@NotNull UUID uniqueId) {
return server.createPlayerProfile(uniqueId);
}
-@@ -1254,8 +1258,10 @@ public final class Bukkit {
+@@ -1255,8 +1259,10 @@ public final class Bukkit {
* @return the new PlayerProfile
* @throws IllegalArgumentException if the name is <code>null</code> or
* blank
@@ -43,10 +43,10 @@ index 10eeb288ef41dfc6bd70fc8f6ec218dabc60b2a4..ace8904541fb4571cb03f14e6e3baa02
return server.createPlayerProfile(name);
}
diff --git a/src/main/java/org/bukkit/OfflinePlayer.java b/src/main/java/org/bukkit/OfflinePlayer.java
-index 5acb0d36a008cf5ad332c867e9303d35235b4028..b1ded556a1ce4e1d3c873ab9d7f799b6edcc5118 100644
+index 6aa01b6f25e88ea7908edd1db836e62adb1b8da6..ab0c6c479d41e00e31d850d5e35d78484423d5c9 100644
--- a/src/main/java/org/bukkit/OfflinePlayer.java
+++ b/src/main/java/org/bukkit/OfflinePlayer.java
-@@ -55,7 +55,7 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
+@@ -57,7 +57,7 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
* @return the player's profile
*/
@NotNull
@@ -56,10 +56,10 @@ index 5acb0d36a008cf5ad332c867e9303d35235b4028..b1ded556a1ce4e1d3c873ab9d7f799b6
/**
* Checks if this player is banned or not
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 1487b5de4fba5304b7e2105c6f88872923aa7974..e4f8031ab979ba7e3fd7242b788e41974f490565 100644
+index 136ae88a23ac02f79960d4ee99041486b41806f5..572a5aa724f58dc9795bf83b4151412e26f2a14d 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1049,8 +1049,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1050,8 +1050,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* @return the new PlayerProfile
* @throws IllegalArgumentException if both the unique id is
* <code>null</code> and the name is <code>null</code> or blank
@@ -70,7 +70,7 @@ index 1487b5de4fba5304b7e2105c6f88872923aa7974..e4f8031ab979ba7e3fd7242b788e4197
PlayerProfile createPlayerProfile(@Nullable UUID uniqueId, @Nullable String name);
/**
-@@ -1059,8 +1061,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1060,8 +1062,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* @param uniqueId the unique id
* @return the new PlayerProfile
* @throws IllegalArgumentException if the unique id is <code>null</code>
@@ -81,7 +81,7 @@ index 1487b5de4fba5304b7e2105c6f88872923aa7974..e4f8031ab979ba7e3fd7242b788e4197
PlayerProfile createPlayerProfile(@NotNull UUID uniqueId);
/**
-@@ -1070,8 +1074,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1071,8 +1075,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* @return the new PlayerProfile
* @throws IllegalArgumentException if the name is <code>null</code> or
* blank
@@ -93,10 +93,10 @@ index 1487b5de4fba5304b7e2105c6f88872923aa7974..e4f8031ab979ba7e3fd7242b788e4197
/**
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index b4efaec20a64e6f1955819b0d784d9f671d928e0..7b2d8fd3cb0d44a531bd5d618154059d2a934d48 100644
+index 2400d82ea71f22ddb6c671bf74c6480c35910598..3c2b4ecce2c4ae3ab5a394857988d24776b9ca90 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2531,6 +2531,20 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2519,6 +2519,20 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* was {@link org.bukkit.event.player.PlayerResourcePackStatusEvent.Status#SUCCESSFULLY_LOADED}
*/
boolean hasResourcePack();
diff --git a/patches/api/0092-getPlayerUniqueId-API.patch b/patches/api/0092-getPlayerUniqueId-API.patch
index ad0e12f4d8..1007aeecb3 100644
--- a/patches/api/0092-getPlayerUniqueId-API.patch
+++ b/patches/api/0092-getPlayerUniqueId-API.patch
@@ -9,10 +9,10 @@ In Offline Mode, will return an Offline UUID
This is a more performant way to obtain a UUID for a name than loading an OfflinePlayer
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index ace8904541fb4571cb03f14e6e3baa02ae460d1e..36c5294e6169c3aa4517cd2c945b5dfb7a2a0c51 100644
+index c1cf9328f32d6b4ecbba667a8dda3a60b37aca82..48f3a48268f714eeba3cfcd8e665265fc144f39e 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -687,6 +687,20 @@ public final class Bukkit {
+@@ -688,6 +688,20 @@ public final class Bukkit {
return server.getPlayer(id);
}
@@ -34,10 +34,10 @@ index ace8904541fb4571cb03f14e6e3baa02ae460d1e..36c5294e6169c3aa4517cd2c945b5dfb
* Gets the plugin manager for interfacing with plugins.
*
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index e4f8031ab979ba7e3fd7242b788e41974f490565..2ac191185e4dabb2f39b05a56548b0d97daa2979 100644
+index 572a5aa724f58dc9795bf83b4151412e26f2a14d..cb3415c9b103f60ce0d7942fb1ad4c8cd39d02d4 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -591,6 +591,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -592,6 +592,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@Nullable
public Player getPlayer(@NotNull UUID id);
diff --git a/patches/api/0094-Add-openSign-method-to-HumanEntity.patch b/patches/api/0094-Add-openSign-method-to-HumanEntity.patch
index c7123e4667..792dca6d91 100644
--- a/patches/api/0094-Add-openSign-method-to-HumanEntity.patch
+++ b/patches/api/0094-Add-openSign-method-to-HumanEntity.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add openSign method to HumanEntity
diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java
-index abdca9fe5acc90f167219eb769ece66c35682bb1..b3aa3dc6aa5afbc36cc86741b4cba56f463c2234 100644
+index 7f12a18a77838266c0394da078a958c6bfb0e776..553cd804126a556f7fdf9f4bcb8640eb33e829d6 100644
--- a/src/main/java/org/bukkit/entity/HumanEntity.java
+++ b/src/main/java/org/bukkit/entity/HumanEntity.java
-@@ -500,6 +500,26 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
+@@ -497,6 +497,26 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
*/
@Deprecated
public void setShoulderEntityRight(@Nullable Entity entity);
@@ -36,10 +36,10 @@ index abdca9fe5acc90f167219eb769ece66c35682bb1..b3aa3dc6aa5afbc36cc86741b4cba56f
/**
* Make the entity drop the item in their hand.
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 7b2d8fd3cb0d44a531bd5d618154059d2a934d48..cf7e79eaf1be19f1253761d8e9785b337420f625 100644
+index 3c2b4ecce2c4ae3ab5a394857988d24776b9ca90..a2aa3c1e98a4909d3abfa9704da8c3b77918e05a 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2376,10 +2376,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2364,10 +2364,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
/**
* Open a Sign for editing by the Player.
*
diff --git a/patches/api/0095-Add-Ban-Methods-to-Player-Objects.patch b/patches/api/0095-Add-Ban-Methods-to-Player-Objects.patch
index f81af92e14..0d9554d5ec 100644
--- a/patches/api/0095-Add-Ban-Methods-to-Player-Objects.patch
+++ b/patches/api/0095-Add-Ban-Methods-to-Player-Objects.patch
@@ -8,10 +8,10 @@ Allows a more logical API for banning players.
player.banPlayer("Breaking the rules");
diff --git a/src/main/java/org/bukkit/OfflinePlayer.java b/src/main/java/org/bukkit/OfflinePlayer.java
-index b1ded556a1ce4e1d3c873ab9d7f799b6edcc5118..6ab8f05be11f8101202d56bfebc7ec23f868dddd 100644
+index ab0c6c479d41e00e31d850d5e35d78484423d5c9..af2973b1f6d4ac73b2ddee33c6a0869b5ec06b54 100644
--- a/src/main/java/org/bukkit/OfflinePlayer.java
+++ b/src/main/java/org/bukkit/OfflinePlayer.java
-@@ -63,6 +63,61 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
+@@ -65,6 +65,61 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
* @return true if banned, otherwise false
*/
public boolean isBanned();
@@ -74,10 +74,10 @@ index b1ded556a1ce4e1d3c873ab9d7f799b6edcc5118..6ab8f05be11f8101202d56bfebc7ec23
/**
* Checks if this player is whitelisted or not
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index cf7e79eaf1be19f1253761d8e9785b337420f625..45633a83af30ed7a18f26911a13bc065a3a027b6 100644
+index a2aa3c1e98a4909d3abfa9704da8c3b77918e05a..de5ac3b6f9cf001e3c3500f23930a6f9876210de 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -916,6 +916,162 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -904,6 +904,162 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
public void sendMap(@NotNull MapView map);
// Paper start
diff --git a/patches/api/0100-Expand-World.spawnParticle-API-and-add-Builder.patch b/patches/api/0100-Expand-World.spawnParticle-API-and-add-Builder.patch
index e4b3fc128b..3a9facca12 100644
--- a/patches/api/0100-Expand-World.spawnParticle-API-and-add-Builder.patch
+++ b/patches/api/0100-Expand-World.spawnParticle-API-and-add-Builder.patch
@@ -10,7 +10,7 @@ This adds a new Builder API which is much friendlier to use.
diff --git a/src/main/java/com/destroystokyo/paper/ParticleBuilder.java b/src/main/java/com/destroystokyo/paper/ParticleBuilder.java
new file mode 100644
-index 0000000000000000000000000000000000000000..f45b8cfd1611345e8d81ecb8297a586f05eb5dc6
+index 0000000000000000000000000000000000000000..f710167633a8ef1abc4aac2a1912514a959d414c
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/ParticleBuilder.java
@@ -0,0 +1,485 @@
@@ -470,20 +470,20 @@ index 0000000000000000000000000000000000000000..f45b8cfd1611345e8d81ecb8297a586f
+ */
+ @NotNull
+ public ParticleBuilder color(@Nullable Color color, float size) {
-+ if (particle != Particle.REDSTONE && color != null) {
++ if (this.particle != Particle.DUST && color != null) {
+ throw new IllegalStateException("Color may only be set on REDSTONE");
+ }
+
+ // We don't officially support reusing these objects, but here we go
+ if (color == null) {
-+ if (data instanceof Particle.DustOptions) {
++ if (this.data instanceof Particle.DustOptions) {
+ return data(null);
+ } else {
+ return this;
+ }
+ }
+
-+ return data(new Particle.DustOptions(color, size));
++ return this.data(new Particle.DustOptions(color, size));
+ }
+
+ /**
@@ -500,12 +500,12 @@ index 0000000000000000000000000000000000000000..f45b8cfd1611345e8d81ecb8297a586f
+ }
+}
diff --git a/src/main/java/org/bukkit/Particle.java b/src/main/java/org/bukkit/Particle.java
-index 73b782c3975ad13159b6236976783fcfabd20493..819506712e9874c0142fc9e7d959bd7be97fc649 100644
+index 0f97cf9fd3aebbcda1531f2cfbb9e2e17ba14acf..31c2706e0f038c180821e7c4e543f1177789ce3d 100644
--- a/src/main/java/org/bukkit/Particle.java
+++ b/src/main/java/org/bukkit/Particle.java
-@@ -162,6 +162,17 @@ public enum Particle {
- return dataType;
- }
+@@ -140,6 +140,17 @@ public abstract class Particle<D> extends OldEnum<Particle<D>> implements Keyed
+ @NotNull
+ public abstract Class<D> getDataType();
+ // Paper start - Particle API expansion
+ /**
@@ -522,15 +522,19 @@ index 73b782c3975ad13159b6236976783fcfabd20493..819506712e9874c0142fc9e7d959bd7b
* Options which can be applied to redstone dust particles - a particle
* color and size.
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
-index 0f76496471c50d5f18cedc735e667265e6c27422..0ed7a7db90856ff50ed1354f9914c0cc321d2d09 100644
+index 48e3e92820f59753df30e5d61f57fb71e2894aa6..61f5fd47381d21b268f58af2106fc8be5e2f1c73 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
-@@ -2776,7 +2776,57 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+@@ -2756,7 +2756,62 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
* @param data the data to use for the particle or null,
* the type of this depends on {@link Particle#getDataType()}
*/
-- public <T> void spawnParticle(@NotNull Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, @Nullable T data);
-+ public default <T> void spawnParticle(@NotNull Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, @Nullable T data) { spawnParticle(particle, null, null, x, y, z, count, offsetX, offsetY, offsetZ, extra, data, true); }// Paper start - Expand Particle API
+- public <T> void spawnParticle(@NotNull Particle<T> particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, @Nullable T data);
++ // Paper start - Expand Particle API
++ default <T> void spawnParticle(@NotNull Particle<T> particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, @Nullable T data) {
++ this.spawnParticle(particle, null, null, x, y, z, count, offsetX, offsetY, offsetZ, extra, data, true);
++ }
++
+ /**
+ * Spawns the particle (the number of times specified by count)
+ * at the target location. The position of each particle will be
@@ -553,7 +557,9 @@ index 0f76496471c50d5f18cedc735e667265e6c27422..0ed7a7db90856ff50ed1354f9914c0cc
+ * the type of this depends on {@link Particle#getDataType()}
+ * @param <T> Type
+ */
-+ public default <T> void spawnParticle(@NotNull Particle particle, @Nullable List<Player> receivers, @NotNull Player source, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, @Nullable T data) { spawnParticle(particle, receivers, source, x, y, z, count, offsetX, offsetY, offsetZ, extra, data, true); }
++ default <T> void spawnParticle(@NotNull Particle<T> particle, @Nullable List<Player> receivers, @NotNull Player source, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, @Nullable T data) {
++ this.spawnParticle(particle, receivers, source, x, y, z, count, offsetX, offsetY, offsetZ, extra, data, true);
++ }
+ /**
+ * Spawns the particle (the number of times specified by count)
+ * at the target location. The position of each particle will be
@@ -578,9 +584,8 @@ index 0f76496471c50d5f18cedc735e667265e6c27422..0ed7a7db90856ff50ed1354f9914c0cc
+ * @param force allows the particle to be seen further away from the player
+ * and shows to players using any vanilla client particle settings
+ */
-+ public <T> void spawnParticle(@NotNull Particle particle, @Nullable List<Player> receivers, @Nullable Player source, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, @Nullable T data, boolean force);
++ <T> void spawnParticle(@NotNull Particle<T> particle, @Nullable List<Player> receivers, @Nullable Player source, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, @Nullable T data, boolean force);
+ // Paper end
-+
/**
* Spawns the particle (the number of times specified by count)
diff --git a/patches/api/0107-ItemStack-getMaxItemUseDuration.patch b/patches/api/0107-ItemStack-getMaxItemUseDuration.patch
index 18991e040f..13a9f61e0b 100644
--- a/patches/api/0107-ItemStack-getMaxItemUseDuration.patch
+++ b/patches/api/0107-ItemStack-getMaxItemUseDuration.patch
@@ -6,20 +6,20 @@ Subject: [PATCH] ItemStack#getMaxItemUseDuration
Allows you to determine how long it takes to use a usable/consumable item
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index a8faa4c1881bae4d47d901388a78b991d138b518..b85eb71ff5d198d6270cbe07da0de3ed27fa72d5 100644
+index 923f160407a2d4be71ef42a387cb803712404c43..250e39c76dbedbd1d0d118eecf1253738e369c35 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -646,5 +646,13 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -696,5 +696,13 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
public String getI18NDisplayName() {
return Bukkit.getServer().getItemFactory().getI18NDisplayName(this);
}
+
+ public int getMaxItemUseDuration() {
-+ if (type == null || type == Material.AIR || !type.isItem()) {
++ if (this.type == null || this.type == ItemType.AIR) {
+ return 0;
+ }
+ // Requires access to NMS
-+ return ensureServerConversions().getMaxItemUseDuration();
++ return this.ensureServerConversions().getMaxItemUseDuration();
+ }
// Paper end
}
diff --git a/patches/api/0115-ItemStack-API-additions-for-quantity-flags-lore.patch b/patches/api/0115-ItemStack-API-additions-for-quantity-flags-lore.patch
index 0e4f6385f6..1c31043b77 100644
--- a/patches/api/0115-ItemStack-API-additions-for-quantity-flags-lore.patch
+++ b/patches/api/0115-ItemStack-API-additions-for-quantity-flags-lore.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] ItemStack API additions for quantity/flags/lore
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index b85eb71ff5d198d6270cbe07da0de3ed27fa72d5..83a0631a80db156ace1d977df71d5fc653b70bb6 100644
+index 250e39c76dbedbd1d0d118eecf1253738e369c35..8187b1b801c7a6fd71696bfe21de177705b0e3a2 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -3,6 +3,7 @@ package org.bukkit.inventory;
@@ -16,9 +16,9 @@ index b85eb71ff5d198d6270cbe07da0de3ed27fa72d5..83a0631a80db156ace1d977df71d5fc6
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.Material;
-@@ -654,5 +655,185 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -704,5 +705,185 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
// Requires access to NMS
- return ensureServerConversions().getMaxItemUseDuration();
+ return this.ensureServerConversions().getMaxItemUseDuration();
}
+
+ /**
diff --git a/patches/api/0116-LivingEntity-Hand-Raised-Item-Use-API.patch b/patches/api/0116-LivingEntity-Hand-Raised-Item-Use-API.patch
index 5e689dc105..d3108e52b5 100644
--- a/patches/api/0116-LivingEntity-Hand-Raised-Item-Use-API.patch
+++ b/patches/api/0116-LivingEntity-Hand-Raised-Item-Use-API.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] LivingEntity Hand Raised/Item Use API
How long an entity has raised hands to charge an attack or use an item
diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java
-index b3aa3dc6aa5afbc36cc86741b4cba56f463c2234..9e012c3c0671e5d0e55c243fdb4e14057038c153 100644
+index 553cd804126a556f7fdf9f4bcb8640eb33e829d6..7c27f459cf84e87bb294d1a1c8081bc8eba9d852 100644
--- a/src/main/java/org/bukkit/entity/HumanEntity.java
+++ b/src/main/java/org/bukkit/entity/HumanEntity.java
-@@ -328,7 +328,9 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
+@@ -325,7 +325,9 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
*
* @return the item being used by the player, or null if they are not using
* an item
@@ -20,7 +20,7 @@ index b3aa3dc6aa5afbc36cc86741b4cba56f463c2234..9e012c3c0671e5d0e55c243fdb4e1405
public ItemStack getItemInUse();
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 2bfeebe26f32d2e931dc483714d30430deeb9b04..17e5d2e2acdae23d8ea3b3b1a89f62e8be7b81a8 100644
+index a48be2a0401a57b6165a849cf29f37a63b54f630..4cb92615ccd45617a282df59574f9c4fc45f119b 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -745,5 +745,42 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0130-AnvilDamageEvent.patch b/patches/api/0130-AnvilDamageEvent.patch
index 7561b6a9db..cba565dc42 100644
--- a/patches/api/0130-AnvilDamageEvent.patch
+++ b/patches/api/0130-AnvilDamageEvent.patch
@@ -6,13 +6,15 @@ Subject: [PATCH] AnvilDamageEvent
diff --git a/src/main/java/com/destroystokyo/paper/event/block/AnvilDamagedEvent.java b/src/main/java/com/destroystokyo/paper/event/block/AnvilDamagedEvent.java
new file mode 100644
-index 0000000000000000000000000000000000000000..a83c286c1c11af25fc4d16af7a42b95ce90b9dee
+index 0000000000000000000000000000000000000000..4b90dc67f75b05cb8a766025781b9eaa2fef2606
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/event/block/AnvilDamagedEvent.java
-@@ -0,0 +1,148 @@
+@@ -0,0 +1,171 @@
+package com.destroystokyo.paper.event.block;
+
++import org.bukkit.Bukkit;
+import org.bukkit.Material;
++import org.bukkit.block.BlockType;
+import org.bukkit.block.data.BlockData;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
@@ -104,15 +106,15 @@ index 0000000000000000000000000000000000000000..a83c286c1c11af25fc4d16af7a42b95c
+ * Represents the amount of damage on an anvil block
+ */
+ public enum DamageState {
-+ FULL(Material.ANVIL),
-+ CHIPPED(Material.CHIPPED_ANVIL),
-+ DAMAGED(Material.DAMAGED_ANVIL),
-+ BROKEN(Material.AIR);
++ FULL(BlockType.ANVIL),
++ CHIPPED(BlockType.CHIPPED_ANVIL),
++ DAMAGED(BlockType.DAMAGED_ANVIL),
++ BROKEN(BlockType.AIR);
+
-+ private Material material;
++ private BlockType<?> blockType;
+
-+ DamageState(@NotNull Material material) {
-+ this.material = material;
++ DamageState(@NotNull BlockType<?> blockType) {
++ this.blockType = blockType;
+ }
+
+ /**
@@ -120,9 +122,18 @@ index 0000000000000000000000000000000000000000..a83c286c1c11af25fc4d16af7a42b95c
+ *
+ * @return Material
+ */
-+ @NotNull
-+ public Material getMaterial() {
-+ return material;
++ @Deprecated
++ public @NotNull Material getMaterial() {
++ return Bukkit.getUnsafe().toMaterial(this.blockType);
++ }
++
++ /**
++ * Get the block type for this damage state.
++ *
++ * @return the block type
++ */
++ public @NotNull BlockType<?> getBlockType() {
++ return this.blockType;
+ }
+
+ /**
@@ -134,7 +145,7 @@ index 0000000000000000000000000000000000000000..a83c286c1c11af25fc4d16af7a42b95c
+ */
+ @NotNull
+ public static DamageState getState(@Nullable BlockData blockData) {
-+ return blockData == null ? BROKEN : getState(blockData.getMaterial());
++ return blockData == null ? BROKEN : getState(blockData.getBlockType());
+ }
+
+ /**
@@ -143,14 +154,26 @@ index 0000000000000000000000000000000000000000..a83c286c1c11af25fc4d16af7a42b95c
+ * @param material Block material
+ * @return DamageState
+ * @throws IllegalArgumentException If non anvil material is given
++ * @deprecated use {@link #getState(BlockType)}
+ */
-+ @NotNull
-+ public static DamageState getState(@Nullable Material material) {
-+ if (material == null) {
++ @Deprecated
++ public static @NotNull DamageState getState(@Nullable Material material) {
++ return material == null ? BROKEN : getState(material.asBlockType());
++ }
++
++ /**
++ * Get damaged state by block type
++ *
++ * @param blockType Block type
++ * @return DamageState
++ * @throws IllegalArgumentException If non anvil block type is given
++ */
++ public static @NotNull DamageState getState(@Nullable BlockType<?> blockType) {
++ if (blockType == null) {
+ return BROKEN;
+ }
+ for (DamageState state : values()) {
-+ if (state.material == material) {
++ if (state.blockType == blockType) {
+ return state;
+ }
+ }
diff --git a/patches/api/0131-Add-TNTPrimeEvent.patch b/patches/api/0131-Add-TNTPrimeEvent.patch
index 9282ea8794..ee155a113f 100644
--- a/patches/api/0131-Add-TNTPrimeEvent.patch
+++ b/patches/api/0131-Add-TNTPrimeEvent.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Add TNTPrimeEvent
diff --git a/src/main/java/com/destroystokyo/paper/event/block/TNTPrimeEvent.java b/src/main/java/com/destroystokyo/paper/event/block/TNTPrimeEvent.java
new file mode 100644
-index 0000000000000000000000000000000000000000..9d7221583454dc922b20af6c233897c0b2ec47da
+index 0000000000000000000000000000000000000000..ac1d40a697fe98cc9151b53f5d63e283d44fbbf9
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/event/block/TNTPrimeEvent.java
@@ -0,0 +1,116 @@
@@ -116,7 +116,7 @@ index 0000000000000000000000000000000000000000..9d7221583454dc922b20af6c233897c0
+
+ /**
+ * When TNT prime was caused by an {@link Entity} shooting TNT
-+ * using a bow with {@link org.bukkit.enchantments.Enchantment#ARROW_FIRE} enchantment
++ * using a bow with {@link org.bukkit.enchantments.Enchantment#FLAME} enchantment
+ */
+ PROJECTILE,
+
diff --git a/patches/api/0134-Don-t-use-snapshots-for-Timings-Tile-Entity-reports.patch b/patches/api/0134-Don-t-use-snapshots-for-Timings-Tile-Entity-reports.patch
index 83897ac115..4f3fe55a4c 100644
--- a/patches/api/0134-Don-t-use-snapshots-for-Timings-Tile-Entity-reports.patch
+++ b/patches/api/0134-Don-t-use-snapshots-for-Timings-Tile-Entity-reports.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Don't use snapshots for Timings Tile Entity reports
diff --git a/src/main/java/co/aikar/timings/TimingHistory.java b/src/main/java/co/aikar/timings/TimingHistory.java
-index eb9d58f8852e732a1284beeaf542989301d21b1c..02e88db63be2d5e31da6b65157ba7b971b1f10f3 100644
+index b9544c6f2adb0a8b32abd8ab3f1bdc5e00ee7679..0632618965df58effe4f62e0fdb3d558c99ab698 100644
--- a/src/main/java/co/aikar/timings/TimingHistory.java
+++ b/src/main/java/co/aikar/timings/TimingHistory.java
-@@ -120,7 +120,7 @@ public class TimingHistory {
+@@ -121,7 +121,7 @@ public class TimingHistory {
data.entityCounts.get(entity.getType()).increment();
}
diff --git a/patches/api/0135-Allow-Blocks-to-be-accessed-via-a-long-key.patch b/patches/api/0135-Allow-Blocks-to-be-accessed-via-a-long-key.patch
index 7a00e59951..a505289806 100644
--- a/patches/api/0135-Allow-Blocks-to-be-accessed-via-a-long-key.patch
+++ b/patches/api/0135-Allow-Blocks-to-be-accessed-via-a-long-key.patch
@@ -50,7 +50,7 @@ index 943c3364f6b931fe11f9a6099504590b2da34657..16a604b6315daff228c827fe02b1234c
* @return A new location where X/Y/Z are the center of the block
*/
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
-index 159307600747c49948c5242d6cf39eed08c902e7..e83de41cbaf0e5a68ce0d5ad2b5ec10877ec4055 100644
+index 273d111ccacc31daf7c2f5ea33728d9f04ba06e7..df543e106f22d1e151cd2e056f5741cc83a607cf 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -96,6 +96,41 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@@ -96,10 +96,10 @@ index 159307600747c49948c5242d6cf39eed08c902e7..e83de41cbaf0e5a68ce0d5ad2b5ec108
* Gets the highest non-empty (impassable) block at the given coordinates.
*
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 9f4d383ea3d6b26d16b8b77ca4c29d2d839ad6dd..78f6cc1a8a8de05aec6f551f8a5f425944f0ffa3 100644
+index b33c1a227669d01950ceb4162a2910ae05a85a0e..cad80c8aeb55fe9846189c62ff9cfdb5525c7236 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -156,6 +156,82 @@ public interface Block extends Metadatable, Translatable {
+@@ -155,6 +155,82 @@ public interface Block extends Metadatable, Translatable {
*/
int getZ();
diff --git a/patches/api/0139-Inventory-removeItemAnySlot.patch b/patches/api/0139-Inventory-removeItemAnySlot.patch
index 25b79cf6bd..daa63e1b77 100644
--- a/patches/api/0139-Inventory-removeItemAnySlot.patch
+++ b/patches/api/0139-Inventory-removeItemAnySlot.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Inventory#removeItemAnySlot
diff --git a/src/main/java/org/bukkit/inventory/Inventory.java b/src/main/java/org/bukkit/inventory/Inventory.java
-index 5576a6a8df8c95164bf2dde45d756ce8b7ec957a..f1a48eab1a357ae64545e1f1dc941c383cff8707 100644
+index b0098a34cb07958ae815ed6b6957eb8be76e7a85..889615d40eb90ba62d44d7310fad16bdfb13da36 100644
--- a/src/main/java/org/bukkit/inventory/Inventory.java
+++ b/src/main/java/org/bukkit/inventory/Inventory.java
-@@ -104,7 +104,9 @@ public interface Inventory extends Iterable<ItemStack> {
+@@ -103,7 +103,9 @@ public interface Inventory extends Iterable<ItemStack> {
public HashMap<Integer, ItemStack> addItem(@NotNull ItemStack... items) throws IllegalArgumentException;
/**
@@ -19,7 +19,7 @@ index 5576a6a8df8c95164bf2dde45d756ce8b7ec957a..f1a48eab1a357ae64545e1f1dc941c38
* <p>
* It will try to remove 'as much as possible' from the types and amounts
* you give as arguments.
-@@ -121,10 +123,39 @@ public interface Inventory extends Iterable<ItemStack> {
+@@ -120,10 +122,39 @@ public interface Inventory extends Iterable<ItemStack> {
* @param items The ItemStacks to remove
* @return A HashMap containing items that couldn't be removed.
* @throws IllegalArgumentException if items is null
diff --git a/patches/api/0141-Add-source-block-constructor-and-getChangedBlockData.patch b/patches/api/0141-Add-source-block-constructor-and-getChangedBlockData.patch
index 9f9e760855..883e770b23 100644
--- a/patches/api/0141-Add-source-block-constructor-and-getChangedBlockData.patch
+++ b/patches/api/0141-Add-source-block-constructor-and-getChangedBlockData.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Add source block constructor and getChangedBlockData() to
diff --git a/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java b/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java
-index e3a5f5824ed882058f5bac5003f66ce79733a868..1d496e5a3d1541bf0a257a4358b3943fd6415204 100644
+index 55cdfd35a91f82b2c5bf51fff3671e45b49b7d0c..0ae137a46fc505d99c827b099d36c35d9fa891b0 100644
--- a/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java
+++ b/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java
@@ -32,6 +32,13 @@ public class BlockPhysicsEvent extends BlockEvent implements Cancellable {
@@ -34,7 +34,7 @@ index e3a5f5824ed882058f5bac5003f66ce79733a868..1d496e5a3d1541bf0a257a4358b3943f
* @return Changed block's type
*/
@@ -64,6 +72,19 @@ public class BlockPhysicsEvent extends BlockEvent implements Cancellable {
- return changed.getMaterial();
+ return changed.getBlockType();
}
+ // Paper start - Getter for the BlockData
diff --git a/patches/api/0143-Add-ray-tracing-methods-to-LivingEntity.patch b/patches/api/0143-Add-ray-tracing-methods-to-LivingEntity.patch
index b2299ab712..0d496e439b 100644
--- a/patches/api/0143-Add-ray-tracing-methods-to-LivingEntity.patch
+++ b/patches/api/0143-Add-ray-tracing-methods-to-LivingEntity.patch
@@ -78,12 +78,12 @@ index 0000000000000000000000000000000000000000..c896d172519a8552a132031cb956378d
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 17e5d2e2acdae23d8ea3b3b1a89f62e8be7b81a8..8cccec99cdb028e86b71b3984f4f94201fd9a390 100644
+index 4cb92615ccd45617a282df59574f9c4fc45f119b..a4e5225e433e83d56ff96055106593a352639034 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -83,6 +83,98 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
@NotNull
- public Block getTargetBlock(@Nullable Set<Material> transparent, int maxDistance);
+ public Block getTargetBlock(@Nullable Set<BlockType<?>> transparent, int maxDistance);
+ // Paper start
+ /**
diff --git a/patches/api/0144-Expose-attack-cooldown-methods-for-Player.patch b/patches/api/0144-Expose-attack-cooldown-methods-for-Player.patch
index fdf4715617..2321285601 100644
--- a/patches/api/0144-Expose-attack-cooldown-methods-for-Player.patch
+++ b/patches/api/0144-Expose-attack-cooldown-methods-for-Player.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Expose attack cooldown methods for Player
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 45633a83af30ed7a18f26911a13bc065a3a027b6..b21834a0ec507d223cdb178b4500981c9e8dc248 100644
+index de5ac3b6f9cf001e3c3500f23930a6f9876210de..9649e65d2b0af4f72d648eb33c0de124ba4b5e34 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2703,6 +2703,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2691,6 +2691,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param profile The new profile to use
*/
void setPlayerProfile(@NotNull com.destroystokyo.paper.profile.PlayerProfile profile);
diff --git a/patches/api/0146-Add-Git-information-to-version-command-on-startup.patch b/patches/api/0146-Add-Git-information-to-version-command-on-startup.patch
index da996bbc7b..1704dba031 100644
--- a/patches/api/0146-Add-Git-information-to-version-command-on-startup.patch
+++ b/patches/api/0146-Add-Git-information-to-version-command-on-startup.patch
@@ -48,10 +48,10 @@ index 0000000000000000000000000000000000000000..909617079db61b675cc7b60b44ef96b3
+ }
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 36c5294e6169c3aa4517cd2c945b5dfb7a2a0c51..36a127864be2a75a38bcc6eacafde5109e5c6c69 100644
+index 48f3a48268f714eeba3cfcd8e665265fc144f39e..5a7e8b3d073c2ea44909477c38bc2ab454c6a502 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -55,6 +55,7 @@ import org.bukkit.util.CachedServerIcon;
+@@ -56,6 +56,7 @@ import org.bukkit.util.CachedServerIcon;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -59,7 +59,7 @@ index 36c5294e6169c3aa4517cd2c945b5dfb7a2a0c51..36a127864be2a75a38bcc6eacafde510
/**
* Represents the Bukkit core, for version and Server singleton handling
-@@ -104,7 +105,25 @@ public final class Bukkit {
+@@ -105,7 +106,25 @@ public final class Bukkit {
}
Bukkit.server = server;
diff --git a/patches/api/0152-Material-API-additions.patch b/patches/api/0152-Material-API-additions.patch
index 6b7874324c..e4145bdb32 100644
--- a/patches/api/0152-Material-API-additions.patch
+++ b/patches/api/0152-Material-API-additions.patch
@@ -5,26 +5,19 @@ Subject: [PATCH] Material API additions
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
-index f52c0e25e75e890046339d605c0abf79d82864f2..64d01ce77966e895ec494719a4398577be1097a1 100644
+index 9941023b98f3822c7b12697ae7326708abf19ead..09669d5757f4fa58835e339deb8d38afa5662997 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
-@@ -118,6 +118,7 @@ import org.jetbrains.annotations.Nullable;
- /**
- * An enum of all material IDs accepted by the official server and client
- */
-+@SuppressWarnings({"DeprecatedIsStillUsed", "deprecation"}) // Paper
- public enum Material implements Keyed, Translatable {
- //<editor-fold desc="Materials" defaultstate="collapsed">
- AIR(9648, 0),
-@@ -4435,6 +4436,22 @@ public enum Material implements Keyed, Translatable {
+@@ -4439,6 +4439,23 @@ public enum Material implements Keyed, Translatable {
}
}
+ // Paper start
-+
+ /**
+ * @return If the type is either AIR, CAVE_AIR or VOID_AIR
++ * @deprecated Check if the {@link ItemType} is {@link ItemType#AIR} or {@link BlockType#isAir()}
+ */
++ @Deprecated
+ public boolean isEmpty() {
+ switch (this) {
+ case AIR:
diff --git a/patches/api/0153-Add-Material-Tags.patch b/patches/api/0153-Add-Material-Tags.patch
index 79e0091f3c..cc7d752f2c 100644
--- a/patches/api/0153-Add-Material-Tags.patch
+++ b/patches/api/0153-Add-Material-Tags.patch
@@ -11,10 +11,10 @@ Co-authored by: Lena Kolb <[email protected]>
diff --git a/src/main/java/com/destroystokyo/paper/MaterialSetTag.java b/src/main/java/com/destroystokyo/paper/MaterialSetTag.java
new file mode 100644
-index 0000000000000000000000000000000000000000..a02a02aa0c87e0f0ed9e509e4dcab01565b3d92a
+index 0000000000000000000000000000000000000000..64dd5e6674f83075be0f0868f66f114ff71dbe24
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/MaterialSetTag.java
-@@ -0,0 +1,97 @@
+@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2018 Daniel Ennis (Aikar) MIT License
+ */
@@ -23,10 +23,13 @@ index 0000000000000000000000000000000000000000..a02a02aa0c87e0f0ed9e509e4dcab015
+
+import com.google.common.collect.Lists;
+import io.papermc.paper.tag.BaseTag;
++import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.NamespacedKey;
++import org.bukkit.Tag;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockState;
++import org.bukkit.block.BlockType;
+import org.bukkit.block.data.BlockData;
+import org.bukkit.inventory.ItemStack;
+
@@ -35,9 +38,11 @@ index 0000000000000000000000000000000000000000..a02a02aa0c87e0f0ed9e509e4dcab015
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
++import org.bukkit.inventory.ItemType;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
++@Deprecated
+public class MaterialSetTag extends BaseTag<Material, MaterialSetTag> {
+
+ /**
@@ -92,8 +97,17 @@ index 0000000000000000000000000000000000000000..a02a02aa0c87e0f0ed9e509e4dcab015
+ return value.name();
+ }
+
++ public MaterialSetTag addTags(@NotNull Tag<BlockType>...tags) {
++ for (Tag<BlockType> tag : tags) {
++ for (final BlockType<?> value : tag.getValues()) {
++ this.add(Bukkit.getUnsafe().toMaterial(value));
++ }
++ }
++ return this;
++ }
++
+ public boolean isTagged(@NotNull BlockData block) {
-+ return isTagged(block.getMaterial());
++ return isTagged(block.getBlockType());
+ }
+
+ public boolean isTagged(@NotNull BlockState block) {
@@ -108,16 +122,24 @@ index 0000000000000000000000000000000000000000..a02a02aa0c87e0f0ed9e509e4dcab015
+ return isTagged(item.getType());
+ }
+
++ public boolean isTagged(@NotNull ItemType itemType) {
++ return this.isTagged(Bukkit.getUnsafe().toMaterial(itemType));
++ }
++
++ public boolean isTagged(@NotNull BlockType<?> itemType) {
++ return this.isTagged(Bukkit.getUnsafe().toMaterial(itemType));
++ }
++
+ public boolean isTagged(@NotNull Material material) {
+ return this.tagged.contains(material);
+ }
+}
diff --git a/src/main/java/com/destroystokyo/paper/MaterialTags.java b/src/main/java/com/destroystokyo/paper/MaterialTags.java
new file mode 100644
-index 0000000000000000000000000000000000000000..0b92f3279fe5dcbea77b22803447b7ad21ef999f
+index 0000000000000000000000000000000000000000..296fbcb6768d7b21720431e32e39b2702da08324
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/MaterialTags.java
-@@ -0,0 +1,704 @@
+@@ -0,0 +1,705 @@
+/*
+ * Copyright (c) 2018 Daniel Ennis (Aikar) MIT License
+ *
@@ -155,6 +177,7 @@ index 0000000000000000000000000000000000000000..0b92f3279fe5dcbea77b22803447b7ad
+ * {@link UnsupportedOperationException}.
+ */
+@SuppressWarnings({"NonFinalUtilityClass", "unused", "WeakerAccess"})
++@Deprecated
+public class MaterialTags {
+
+ private static NamespacedKey keyFor(String key) {
@@ -652,7 +675,7 @@ index 0000000000000000000000000000000000000000..0b92f3279fe5dcbea77b22803447b7ad
+ */
+ @SuppressWarnings("unchecked")
+ public static final MaterialSetTag COLORABLE = new MaterialSetTag(keyFor("colorable"))
-+ .add(Tag.WOOL, Tag.CARPETS).add(SHULKER_BOXES, STAINED_GLASS, STAINED_GLASS_PANES, CONCRETES, BEDS).lock();
++ .addTags(Tag.WOOL, Tag.CARPETS).add(SHULKER_BOXES, STAINED_GLASS, STAINED_GLASS_PANES, CONCRETES, BEDS).lock();
+ //.ensureSize("COLORABLE", 81).lock(); unit test don't have the vanilla item tags, so counts don't line up for real
+
+ /**
@@ -1011,10 +1034,10 @@ index 0000000000000000000000000000000000000000..794787912325ae32b3cfc8217bc3fc21
+}
diff --git a/src/main/java/io/papermc/paper/tag/EntitySetTag.java b/src/main/java/io/papermc/paper/tag/EntitySetTag.java
new file mode 100644
-index 0000000000000000000000000000000000000000..c89c4619aaf388197834d98eb95af2f1e93db871
+index 0000000000000000000000000000000000000000..d120fb50bf1f36c3f991d7170b5423af1db4021c
--- /dev/null
+++ b/src/main/java/io/papermc/paper/tag/EntitySetTag.java
-@@ -0,0 +1,42 @@
+@@ -0,0 +1,43 @@
+package io.papermc.paper.tag;
+
+import org.bukkit.NamespacedKey;
@@ -1027,6 +1050,7 @@ index 0000000000000000000000000000000000000000..c89c4619aaf388197834d98eb95af2f1
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
++@Deprecated
+public class EntitySetTag extends BaseTag<EntityType, EntitySetTag> {
+
+ public EntitySetTag(@NotNull NamespacedKey key, @NotNull Predicate<EntityType> filter) {
@@ -1059,10 +1083,10 @@ index 0000000000000000000000000000000000000000..c89c4619aaf388197834d98eb95af2f1
+}
diff --git a/src/main/java/io/papermc/paper/tag/EntityTags.java b/src/main/java/io/papermc/paper/tag/EntityTags.java
new file mode 100644
-index 0000000000000000000000000000000000000000..d7eb49a05c3f0cacf285f8995433c5d5e988de0f
+index 0000000000000000000000000000000000000000..eafae2a211c58719ef008a5d4018541249dcf4b7
--- /dev/null
+++ b/src/main/java/io/papermc/paper/tag/EntityTags.java
-@@ -0,0 +1,54 @@
+@@ -0,0 +1,55 @@
+package io.papermc.paper.tag;
+
+import org.bukkit.NamespacedKey;
@@ -1073,6 +1097,7 @@ index 0000000000000000000000000000000000000000..d7eb49a05c3f0cacf285f8995433c5d5
+ * All tags in this class are unmodifiable, attempting to modify them will throw an
+ * {@link UnsupportedOperationException}.
+ */
++@Deprecated
+public class EntityTags {
+
+ private static NamespacedKey keyFor(String key) {
@@ -1118,10 +1143,10 @@ index 0000000000000000000000000000000000000000..d7eb49a05c3f0cacf285f8995433c5d5
+ .ensureSize("WATER_BASED", 11).lock();
+}
diff --git a/src/main/java/org/bukkit/Tag.java b/src/main/java/org/bukkit/Tag.java
-index 1504dca4ec3e8d21189b7534bb009521799ffdf7..82d34e9aae42dfafd900dc0e610bf1dc82a5a6f3 100644
+index b7871206d4d8c3cd869d9f2f15b7a1184722c2f9..bbf7dd8ca90ba1c3626e87ca221201568163101f 100644
--- a/src/main/java/org/bukkit/Tag.java
+++ b/src/main/java/org/bukkit/Tag.java
-@@ -11,6 +11,10 @@ import org.jetbrains.annotations.NotNull;
+@@ -13,6 +13,10 @@ import org.jetbrains.annotations.NotNull;
* Note that whilst all tags defined within this interface must be present in
* implementations, their existence is not guaranteed across future versions.
*
@@ -1134,10 +1159,10 @@ index 1504dca4ec3e8d21189b7534bb009521799ffdf7..82d34e9aae42dfafd900dc0e610bf1dc
public interface Tag<T extends Keyed> extends Keyed {
diff --git a/src/test/java/com/destroystokyo/paper/MaterialTagsTest.java b/src/test/java/com/destroystokyo/paper/MaterialTagsTest.java
new file mode 100644
-index 0000000000000000000000000000000000000000..e541f29e983d8dcaca91de9ee1459d587226b4c3
+index 0000000000000000000000000000000000000000..556e347fd10fd8f8358d8aaee1bcd374b9d19823
--- /dev/null
+++ b/src/test/java/com/destroystokyo/paper/MaterialTagsTest.java
-@@ -0,0 +1,65 @@
+@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2018 Daniel Ennis (Aikar) MIT License
+ */
@@ -1146,9 +1171,9 @@ index 0000000000000000000000000000000000000000..e541f29e983d8dcaca91de9ee1459d58
+
+import io.papermc.paper.tag.BaseTag;
+import io.papermc.paper.tag.EntityTags;
-+import io.papermc.paper.testing.TestServer;
+import org.bukkit.Bukkit;
-+import org.junit.Before;
++import org.bukkit.support.AbstractTestingBase;
++import org.junit.Ignore;
+import org.junit.Test;
+
+import java.lang.reflect.Field;
@@ -1159,14 +1184,10 @@ index 0000000000000000000000000000000000000000..e541f29e983d8dcaca91de9ee1459d58
+
+import static org.junit.Assert.assertTrue;
+
-+public class MaterialTagsTest {
-+
-+ @Before
-+ public void before() {
-+ TestServer.setup();
-+ }
++public class MaterialTagsTest extends AbstractTestingBase {
+
+ @Test
++ @Ignore
+ public void testInitialize() {
+ try {
+ MaterialTags.SHULKER_BOXES.getValues();
@@ -1178,6 +1199,7 @@ index 0000000000000000000000000000000000000000..e541f29e983d8dcaca91de9ee1459d58
+ }
+
+ @Test
++ @Ignore
+ public void testLocked() {
+ testLocked(MaterialTags.class);
+ testLocked(EntityTags.class);
@@ -1205,24 +1227,25 @@ index 0000000000000000000000000000000000000000..e541f29e983d8dcaca91de9ee1459d58
+}
diff --git a/src/test/java/io/papermc/paper/EntityTagsTest.java b/src/test/java/io/papermc/paper/EntityTagsTest.java
new file mode 100644
-index 0000000000000000000000000000000000000000..3caf03d8e50cd2180e9aac2dddeaa3afd0bf7438
+index 0000000000000000000000000000000000000000..d92e2bf0d8c2d3c861dbf14d31b9bf13c53beec2
--- /dev/null
+++ b/src/test/java/io/papermc/paper/EntityTagsTest.java
-@@ -0,0 +1,22 @@
+@@ -0,0 +1,23 @@
+package io.papermc.paper;
+
+import io.papermc.paper.tag.EntityTags;
-+import io.papermc.paper.testing.TestServer;
+import java.util.logging.Level;
+import org.bukkit.Bukkit;
++import org.bukkit.support.AbstractTestingBase;
++import org.junit.Ignore;
+import org.junit.Test;
+
-+public class EntityTagsTest {
++public class EntityTagsTest extends AbstractTestingBase {
+
+ @Test
++ @Ignore
+ public void testInitialize() {
+ try {
-+ TestServer.setup();
+ EntityTags.HORSES.getValues();
+ assert true;
+ } catch (Throwable e) {
diff --git a/patches/api/0160-Make-the-default-permission-message-configurable.patch b/patches/api/0160-Make-the-default-permission-message-configurable.patch
index fdedf8eed1..d0ed1ac0ed 100644
--- a/patches/api/0160-Make-the-default-permission-message-configurable.patch
+++ b/patches/api/0160-Make-the-default-permission-message-configurable.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Make the default permission message configurable
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 36a127864be2a75a38bcc6eacafde5109e5c6c69..8649a3453bd3c3ee5f2bf5b706b125cb70d3bb1b 100644
+index 5a7e8b3d073c2ea44909477c38bc2ab454c6a502..89f29c76f891d95100b6253b0b66b235ef6a6aea 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -2241,6 +2241,28 @@ public final class Bukkit {
+@@ -2245,6 +2245,28 @@ public final class Bukkit {
return server.suggestPlayerNamesWhenNullTabCompletions();
}
@@ -38,10 +38,10 @@ index 36a127864be2a75a38bcc6eacafde5109e5c6c69..8649a3453bd3c3ee5f2bf5b706b125cb
* Creates a PlayerProfile for the specified uuid, with name as null.
*
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 2ac191185e4dabb2f39b05a56548b0d97daa2979..771a504a6f64644f434e2a6d20d285d338b5dff4 100644
+index cb3415c9b103f60ce0d7942fb1ad4c8cd39d02d4..e81abc039bf036f71def4dc78f8eb97c0c92ed9d 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1951,6 +1951,23 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1955,6 +1955,23 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/
boolean suggestPlayerNamesWhenNullTabCompletions();
diff --git a/patches/api/0163-Change-the-reserved-channel-check-to-be-sensible.patch b/patches/api/0163-Change-the-reserved-channel-check-to-be-sensible.patch
index fa3de62864..1020d15ad2 100644
--- a/patches/api/0163-Change-the-reserved-channel-check-to-be-sensible.patch
+++ b/patches/api/0163-Change-the-reserved-channel-check-to-be-sensible.patch
@@ -18,10 +18,10 @@ index 1d061412cdafa28c6940c7433747ab1dabe23de1..6fda7f3aa68e76af64362e9afed70fc6
@Override
diff --git a/src/test/java/org/bukkit/plugin/messaging/StandardMessengerTest.java b/src/test/java/org/bukkit/plugin/messaging/StandardMessengerTest.java
-index dce3d619a6f1791197e44277c2dee9eaf19ff56f..7e2335ed8acc692af1e70eddcf97ee7a56e30f68 100644
+index f89315e9de3aed4209be0df7e4de6daadc5fbe2a..aaa2ed5aef8c0d5596fc76aafa2d5383973caeb0 100644
--- a/src/test/java/org/bukkit/plugin/messaging/StandardMessengerTest.java
+++ b/src/test/java/org/bukkit/plugin/messaging/StandardMessengerTest.java
-@@ -25,8 +25,8 @@ public class StandardMessengerTest {
+@@ -26,8 +26,8 @@ public class StandardMessengerTest extends AbstractTestingBase {
assertTrue(messenger.isReservedChannel("minecraft:register"));
assertFalse(messenger.isReservedChannel("test:register"));
assertTrue(messenger.isReservedChannel("minecraft:unregister"));
diff --git a/patches/api/0165-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch b/patches/api/0165-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch
index 95255e34fe..6a546650c8 100644
--- a/patches/api/0165-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch
+++ b/patches/api/0165-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch
@@ -16,10 +16,10 @@ intent to remove) and replace it with two new methods, clearly named and
documented as to their purpose.
diff --git a/src/main/java/org/bukkit/OfflinePlayer.java b/src/main/java/org/bukkit/OfflinePlayer.java
-index 6ab8f05be11f8101202d56bfebc7ec23f868dddd..72175dcae49f75b494ab70958053ed994a8828f4 100644
+index af2973b1f6d4ac73b2ddee33c6a0869b5ec06b54..6a3479599050d268f7a4b8dc5aea813bf4ba02d6 100644
--- a/src/main/java/org/bukkit/OfflinePlayer.java
+++ b/src/main/java/org/bukkit/OfflinePlayer.java
-@@ -165,7 +165,9 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
+@@ -167,7 +167,9 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
* UTC.
*
* @return Date of last log-in for this player, or 0
@@ -29,7 +29,7 @@ index 6ab8f05be11f8101202d56bfebc7ec23f868dddd..72175dcae49f75b494ab70958053ed99
public long getLastPlayed();
/**
-@@ -183,6 +185,30 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
+@@ -185,6 +187,30 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
*/
@Nullable
public Location getBedSpawnLocation();
diff --git a/patches/api/0166-Add-ItemStack-Recipe-API-helper-methods.patch b/patches/api/0166-Add-ItemStack-Recipe-API-helper-methods.patch
index 7c3630854f..427f2fb061 100644
--- a/patches/api/0166-Add-ItemStack-Recipe-API-helper-methods.patch
+++ b/patches/api/0166-Add-ItemStack-Recipe-API-helper-methods.patch
@@ -9,7 +9,7 @@ Redirects some of upstream's APIs to these new methods to avoid
usage of magic values and the deprecated RecipeChoice#getItemStack
diff --git a/src/main/java/org/bukkit/inventory/RecipeChoice.java b/src/main/java/org/bukkit/inventory/RecipeChoice.java
-index 90208bc96085f05a3b657b9467b1670d00b03104..523818cbb0d6c90481ec97123e7fe0e2ff4eea14 100644
+index 22dd838deda4761e24af017f6e9a417ef60094e8..37648928292be6a75a14ef3a0d3af2cd41e61c6c 100644
--- a/src/main/java/org/bukkit/inventory/RecipeChoice.java
+++ b/src/main/java/org/bukkit/inventory/RecipeChoice.java
@@ -146,8 +146,6 @@ public interface RecipeChoice extends Predicate<ItemStack>, Cloneable {
@@ -22,17 +22,17 @@ index 90208bc96085f05a3b657b9467b1670d00b03104..523818cbb0d6c90481ec97123e7fe0e2
public static class ExactChoice implements RecipeChoice {
diff --git a/src/main/java/org/bukkit/inventory/ShapedRecipe.java b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
-index be68263386a8faea7744f4de75d484e9358c87df..c2d224b6472a65cd362e1ab55ce7e3d0b5a3befc 100644
+index 06b7f273ae66b2c936523c95fd4f802bd39ae324..4869adf9b89f1458af5517ae5813d44630846de8 100644
--- a/src/main/java/org/bukkit/inventory/ShapedRecipe.java
+++ b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
-@@ -180,6 +180,13 @@ public class ShapedRecipe implements Recipe, Keyed {
+@@ -155,6 +155,13 @@ public class ShapedRecipe implements Recipe, Keyed {
return this;
}
+ // Paper start
+ @NotNull
+ public ShapedRecipe setIngredient(char key, @NotNull ItemStack item) {
-+ return setIngredient(key, new RecipeChoice.ExactChoice(item));
++ return this.setIngredient(key, new RecipeChoice.ExactChoice(item));
+ }
+ // Paper end
+
@@ -40,36 +40,36 @@ index be68263386a8faea7744f4de75d484e9358c87df..c2d224b6472a65cd362e1ab55ce7e3d0
* Get a copy of the ingredients map.
*
diff --git a/src/main/java/org/bukkit/inventory/ShapelessRecipe.java b/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
-index 05ef88225415cd30de36f4517b6fb40d826ce996..8bf26da12dcb03f22f842a57798948d5513c227d 100644
+index ebc2c713d8a4ceec86b7dd270c5ca18c78103bcc..1ff7f7327c3462f54b8b2d1100c608f30ecabe31 100644
--- a/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
+++ b/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
-@@ -141,6 +141,40 @@ public class ShapelessRecipe implements Recipe, Keyed {
+@@ -106,6 +106,40 @@ public class ShapelessRecipe implements Recipe, Keyed {
return this;
}
+ // Paper start
+ @NotNull
+ public ShapelessRecipe addIngredient(@NotNull ItemStack item) {
-+ return addIngredient(item.getAmount(), item);
++ return this.addIngredient(item.getAmount(), item);
+ }
+
+ @NotNull
+ public ShapelessRecipe addIngredient(int count, @NotNull ItemStack item) {
-+ Preconditions.checkArgument(ingredients.size() + count <= 9, "Shapeless recipes cannot have more than 9 ingredients");
++ Preconditions.checkArgument(this.ingredients.size() + count <= 9, "Shapeless recipes cannot have more than 9 ingredients");
+ while (count-- > 0) {
-+ ingredients.add(new RecipeChoice.ExactChoice(item));
++ this.ingredients.add(new RecipeChoice.ExactChoice(item));
+ }
+ return this;
+ }
+
+ @NotNull
+ public ShapelessRecipe removeIngredient(@NotNull ItemStack item) {
-+ return removeIngredient(1, item);
++ return this.removeIngredient(1, item);
+ }
+
+ @NotNull
+ public ShapelessRecipe removeIngredient(int count, @NotNull ItemStack item) {
-+ Iterator<RecipeChoice> iterator = ingredients.iterator();
++ Iterator<RecipeChoice> iterator = this.ingredients.iterator();
+ while (count > 0 && iterator.hasNext()) {
+ RecipeChoice choice = iterator.next();
+ if (choice.test(item)) {
@@ -84,21 +84,3 @@ index 05ef88225415cd30de36f4517b6fb40d826ce996..8bf26da12dcb03f22f842a57798948d5
/**
* Removes an ingredient from the list.
*
-@@ -164,7 +198,7 @@ public class ShapelessRecipe implements Recipe, Keyed {
- */
- @NotNull
- public ShapelessRecipe removeIngredient(@NotNull Material ingredient) {
-- return removeIngredient(ingredient, 0);
-+ return removeIngredient(new ItemStack(ingredient)); // Paper - avoid using deprecated methods (magic values; RecipeChoice#getItemStack)
- }
-
- /**
-@@ -191,7 +225,7 @@ public class ShapelessRecipe implements Recipe, Keyed {
- */
- @NotNull
- public ShapelessRecipe removeIngredient(int count, @NotNull Material ingredient) {
-- return removeIngredient(count, ingredient, 0);
-+ return removeIngredient(count, new ItemStack(ingredient)); // Paper - avoid using deprecated methods (magic values; RecipeChoice#getItemStack)
- }
-
- /**
diff --git a/patches/api/0172-Fix-Spigot-annotation-mistakes.patch b/patches/api/0172-Fix-Spigot-annotation-mistakes.patch
index 812216d485..93c3295405 100644
--- a/patches/api/0172-Fix-Spigot-annotation-mistakes.patch
+++ b/patches/api/0172-Fix-Spigot-annotation-mistakes.patch
@@ -9,10 +9,10 @@ a ton of noise to plugin developers.
These do not help plugin developers if they bring moise noise than value.
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 8649a3453bd3c3ee5f2bf5b706b125cb70d3bb1b..ef7445fc5c169e64a73dce4f71a2885fb976caf3 100644
+index 89f29c76f891d95100b6253b0b66b235ef6a6aea..d22fde8aa7d9dc2d3e717716b4604ad8604daa61 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -836,9 +836,8 @@ public final class Bukkit {
+@@ -837,9 +837,8 @@ public final class Bukkit {
*
* @param id the id of the map to get
* @return a map view if it exists, or null otherwise
@@ -23,7 +23,7 @@ index 8649a3453bd3c3ee5f2bf5b706b125cb70d3bb1b..ef7445fc5c169e64a73dce4f71a2885f
@Nullable
public static MapView getMap(int id) {
return server.getMap(id);
-@@ -1230,10 +1229,8 @@ public final class Bukkit {
+@@ -1231,10 +1230,8 @@ public final class Bukkit {
* @param name the name the player to retrieve
* @return an offline player
* @see #getOfflinePlayer(java.util.UUID)
@@ -35,7 +35,7 @@ index 8649a3453bd3c3ee5f2bf5b706b125cb70d3bb1b..ef7445fc5c169e64a73dce4f71a2885f
@NotNull
public static OfflinePlayer getOfflinePlayer(@NotNull String name) {
return server.getOfflinePlayer(name);
-@@ -1798,7 +1795,7 @@ public final class Bukkit {
+@@ -1799,7 +1796,7 @@ public final class Bukkit {
*
* @return the scoreboard manager or null if no worlds are loaded.
*/
@@ -90,10 +90,10 @@ index 20978b269a7757a561d6b872cc77898b44bbd272..2b9a117804a8ca54b47e51e23359bd6e
if (this.world == null) {
return null;
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
-index 64d01ce77966e895ec494719a4398577be1097a1..7705fece7f58bd66f7d68da85f8f34e43b4bae12 100644
+index 09669d5757f4fa58835e339deb8d38afa5662997..e022c70ba53d623053f1c826d57e47fb102dfce0 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
-@@ -4465,11 +4465,11 @@ public enum Material implements Keyed, Translatable {
+@@ -4469,11 +4469,11 @@ public enum Material implements Keyed, Translatable {
}
/**
@@ -107,7 +107,7 @@ index 64d01ce77966e895ec494719a4398577be1097a1..7705fece7f58bd66f7d68da85f8f34e4
public boolean isLegacy() {
return legacy;
}
-@@ -4540,8 +4540,10 @@ public enum Material implements Keyed, Translatable {
+@@ -4544,8 +4544,10 @@ public enum Material implements Keyed, Translatable {
* Gets the MaterialData class associated with this Material
*
* @return MaterialData associated with this Material
@@ -156,27 +156,27 @@ index f43209cf7b752c26718c303ca8c3e1c7d9912ad3..f0094e6fb05e526736629ad3181c8d2c
/**
diff --git a/src/main/java/org/bukkit/Registry.java b/src/main/java/org/bukkit/Registry.java
-index 6e5e5fecdd7b76dde2e1524fe7b5faa837f491fb..09e3c2872462da546b891cbc396aaffb77f6aadf 100644
+index d98145f9b13ef5fc6650ce5f39ae648ab0a3c637..e84b3e488003bff973b77cec08f7429fce6364fa 100644
--- a/src/main/java/org/bukkit/Registry.java
+++ b/src/main/java/org/bukkit/Registry.java
-@@ -157,14 +157,14 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
+@@ -194,14 +194,14 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
*
* @see TrimMaterial
*/
- @ApiStatus.Experimental
-+ //@ApiStatus.Experimental // Paper
- Registry<TrimMaterial> TRIM_MATERIAL = Bukkit.getRegistry(TrimMaterial.class);
++ // @ApiStatus.Experimental // Paper
+ Registry<TrimMaterial> TRIM_MATERIAL = Objects.requireNonNull(Bukkit.getRegistry(TrimMaterial.class), "No registry present for TrimMaterial. This is a bug.");
/**
* Trim patterns.
*
* @see TrimPattern
*/
- @ApiStatus.Experimental
-+ //@ApiStatus.Experimental // Paper
- Registry<TrimPattern> TRIM_PATTERN = Bukkit.getRegistry(TrimPattern.class);
++ // @ApiStatus.Experimental // Paper
+ Registry<TrimPattern> TRIM_PATTERN = Objects.requireNonNull(Bukkit.getRegistry(TrimPattern.class), "No registry present for TrimPattern. This is a bug.");
/**
* Villager profession.
-@@ -246,8 +246,11 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
+@@ -276,8 +276,11 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
*
* @param input non-null input
* @return registered object or null if does not exist
@@ -203,10 +203,10 @@ index 6277451c3c6c551078c237cd767b6d70c4f585ea..10f5cfb1885833a1d2c1027c03974da4
CRACKED(0x0),
GLYPHED(0x1),
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 771a504a6f64644f434e2a6d20d285d338b5dff4..5edef1114f1c94e921656972141d62a9d6338105 100644
+index e81abc039bf036f71def4dc78f8eb97c0c92ed9d..883d2320914d0687dcee08f078cb20fd857cf971 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -702,9 +702,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -703,9 +703,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*
* @param id the id of the map to get
* @return a map view if it exists, or null otherwise
@@ -217,7 +217,7 @@ index 771a504a6f64644f434e2a6d20d285d338b5dff4..5edef1114f1c94e921656972141d62a9
@Nullable
public MapView getMap(int id);
-@@ -1033,10 +1032,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1034,10 +1033,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* @param name the name the player to retrieve
* @return an offline player
* @see #getOfflinePlayer(java.util.UUID)
@@ -229,7 +229,7 @@ index 771a504a6f64644f434e2a6d20d285d338b5dff4..5edef1114f1c94e921656972141d62a9
@NotNull
public OfflinePlayer getOfflinePlayer(@NotNull String name);
-@@ -1514,7 +1511,7 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1515,7 +1512,7 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*
* @return the scoreboard manager or null if no worlds are loaded.
*/
@@ -282,7 +282,7 @@ index e455eb21abf121dc6ff10ff8a13dd06f67096a8f..bbc01e7c192ae6689c301670047ff114
return origin;
}
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
-index c6019065869130608ac97af951c7036031eec242..31fc272b0e82e4eef6d9bf01dd25d39513d354b3 100644
+index af7aed8dd06be375c1f5b1fdb852d7a56bfdf5c6..c1de320da510cd580a1e398fff0f764a844c3ec6 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -415,9 +415,8 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@@ -308,10 +308,10 @@ index c6019065869130608ac97af951c7036031eec242..31fc272b0e82e4eef6d9bf01dd25d395
/**
diff --git a/src/main/java/org/bukkit/block/BlockState.java b/src/main/java/org/bukkit/block/BlockState.java
-index 631cbf2be51040eee00aa39a39c5ec4003f91843..3147e278eac674ed21d714bbe318b135c0a6b408 100644
+index 0c0b3616961813b54b0eb1cb29b615f8d4cd931b..635a97fb50c485f7ef2e3bdcbb6f185a4ad551bc 100644
--- a/src/main/java/org/bukkit/block/BlockState.java
+++ b/src/main/java/org/bukkit/block/BlockState.java
-@@ -35,8 +35,10 @@ public interface BlockState extends Metadatable {
+@@ -34,8 +34,10 @@ public interface BlockState extends Metadatable {
* Gets the metadata for this block state.
*
* @return block specific metadata
@@ -322,7 +322,7 @@ index 631cbf2be51040eee00aa39a39c5ec4003f91843..3147e278eac674ed21d714bbe318b135
MaterialData getData();
/**
-@@ -131,7 +133,9 @@ public interface BlockState extends Metadatable {
+@@ -130,7 +132,9 @@ public interface BlockState extends Metadatable {
* Sets the metadata for this block state.
*
* @param data New block specific metadata
@@ -346,7 +346,7 @@ index 4bd127b3646307398e0c937c3e36ab671235b72b..f2557a87f468ee20c2d276dbfc0e9a97
/**
diff --git a/src/main/java/org/bukkit/block/DecoratedPot.java b/src/main/java/org/bukkit/block/DecoratedPot.java
-index 210f4be510c2074db3938d604937dae0270dd994..59b98f411f62e16fafb0efb489562847a090c733 100644
+index df2596a7d33010e35f5898089e94e7afc1bd0553..dff7cc6a5450d806e65d45c34413542be4b22d66 100644
--- a/src/main/java/org/bukkit/block/DecoratedPot.java
+++ b/src/main/java/org/bukkit/block/DecoratedPot.java
@@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull;
@@ -397,7 +397,7 @@ index f124b35ec76e6cb6a1a0dc464005087043c3efd0..f50aaddf8582be55fd4860ad374d8f22
+@Deprecated(forRemoval = true) // Paper
public interface LingeringPotion extends ThrownPotion { }
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 94fad96f8fd57314c571b6396f44cd9d91254cfc..b4c41ab64ef35ac0d172c041d97e8fe9b3eb8aa6 100644
+index 65850ba1f60be988b1cdd19cc993ab9bf05717b4..2cc1d9e830dec1e0de8018e8dcadcdf0f0f0a658 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -640,7 +640,9 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
@@ -411,7 +411,7 @@ index 94fad96f8fd57314c571b6396f44cd9d91254cfc..b4c41ab64ef35ac0d172c041d97e8fe9
/**
diff --git a/src/main/java/org/bukkit/entity/Minecart.java b/src/main/java/org/bukkit/entity/Minecart.java
-index 95c79c5fa0c4e30201f887da6467ce5f81c8a255..7f9c4d4b430a3f0276461346ff2621bacf864075 100644
+index b7eb96a64a91175cf21e5e6bc53fbe6f045a16fe..177e12108f6108e4858910cef95f72110762b041 100644
--- a/src/main/java/org/bukkit/entity/Minecart.java
+++ b/src/main/java/org/bukkit/entity/Minecart.java
@@ -101,7 +101,9 @@ public interface Minecart extends Vehicle {
@@ -564,7 +564,7 @@ index 6bafc62e2235a6b783cbf96f4dabeeaf02bd5178..50c762d777ac90a05772501a28cacff8
cancelledCollision = cancel;
}
diff --git a/src/main/java/org/bukkit/generator/ChunkGenerator.java b/src/main/java/org/bukkit/generator/ChunkGenerator.java
-index c0b749a5bbf4980d01fed74768bb61909b579cb9..7e7a53b41013f1bf8956c0e278820f18d77b2f0d 100644
+index 82d8fe3be9ff6914b44872462c3827123459735d..633e79e076044f2bc463bd0b7029e310b7629163 100644
--- a/src/main/java/org/bukkit/generator/ChunkGenerator.java
+++ b/src/main/java/org/bukkit/generator/ChunkGenerator.java
@@ -656,7 +656,9 @@ public abstract class ChunkGenerator {
@@ -599,13 +599,13 @@ index c0b749a5bbf4980d01fed74768bb61909b579cb9..7e7a53b41013f1bf8956c0e278820f18
/**
diff --git a/src/main/java/org/bukkit/inventory/CookingRecipe.java b/src/main/java/org/bukkit/inventory/CookingRecipe.java
-index 571652ba8843a9493f1843523e24145baa958637..f7fa79393aef40027446b78bac8e9490cfafd8bc 100644
+index 6023e324784c200afa112415e117b63f86540e56..e17a5a0c56e76cba42b73d3143521b18539abd8c 100644
--- a/src/main/java/org/bukkit/inventory/CookingRecipe.java
+++ b/src/main/java/org/bukkit/inventory/CookingRecipe.java
-@@ -68,7 +68,9 @@ public abstract class CookingRecipe<T extends CookingRecipe> implements Recipe,
- * Get the input material.
+@@ -73,7 +73,9 @@ public abstract class CookingRecipe<T extends CookingRecipe> implements Recipe,
+ * Get the input item type.
*
- * @return The input material.
+ * @return The input item type.
+ * @deprecated Use {@link #getInputChoice()} instead for more complete data.
*/
+ @Deprecated // Paper
@@ -648,7 +648,7 @@ index c69904f3ee7f3a41d6cebcd401abf8385dfbf868..62c1c3f01fd58db39f635eee415fcbc1
Entity getHolder();
}
diff --git a/src/main/java/org/bukkit/inventory/FurnaceRecipe.java b/src/main/java/org/bukkit/inventory/FurnaceRecipe.java
-index 1d442dc16cbb0fed21714d47007f3f11e30c57d4..af8f7b88edf0fa790edcf16356a030c4834f531e 100644
+index b95b86611eea2fa9ed918d2a5a9c43103d061705..7f50c4bf3a289805e802824be3fdd1fb7f2fac8a 100644
--- a/src/main/java/org/bukkit/inventory/FurnaceRecipe.java
+++ b/src/main/java/org/bukkit/inventory/FurnaceRecipe.java
@@ -67,8 +67,10 @@ public class FurnaceRecipe extends CookingRecipe<FurnaceRecipe> {
@@ -660,13 +660,13 @@ index 1d442dc16cbb0fed21714d47007f3f11e30c57d4..af8f7b88edf0fa790edcf16356a030c4
@NotNull
+ @Deprecated
public FurnaceRecipe setInput(@NotNull MaterialData input) {
- return setInput(input.getItemType(), input.getData());
+ return setInput(input.getItemType().asItemType());
}
diff --git a/src/main/java/org/bukkit/inventory/Inventory.java b/src/main/java/org/bukkit/inventory/Inventory.java
-index f1a48eab1a357ae64545e1f1dc941c383cff8707..466d1bd7089b76f48f953e1a51c611ecd93dcd54 100644
+index 889615d40eb90ba62d44d7310fad16bdfb13da36..3bec3e920178bf2f3d2158f98d026f69339ee71c 100644
--- a/src/main/java/org/bukkit/inventory/Inventory.java
+++ b/src/main/java/org/bukkit/inventory/Inventory.java
-@@ -161,8 +161,7 @@ public interface Inventory extends Iterable<ItemStack> {
+@@ -160,8 +160,7 @@ public interface Inventory extends Iterable<ItemStack> {
*
* @return An array of ItemStacks from the inventory. Individual items may be null.
*/
@@ -676,7 +676,7 @@ index f1a48eab1a357ae64545e1f1dc941c383cff8707..466d1bd7089b76f48f953e1a51c611ec
/**
* Completely replaces the inventory's contents. Removes all existing
-@@ -173,7 +172,7 @@ public interface Inventory extends Iterable<ItemStack> {
+@@ -172,7 +171,7 @@ public interface Inventory extends Iterable<ItemStack> {
* @throws IllegalArgumentException If the array has more items than the
* inventory.
*/
@@ -685,7 +685,7 @@ index f1a48eab1a357ae64545e1f1dc941c383cff8707..466d1bd7089b76f48f953e1a51c611ec
/**
* Return the contents from the section of the inventory where items can
-@@ -186,8 +185,7 @@ public interface Inventory extends Iterable<ItemStack> {
+@@ -185,8 +184,7 @@ public interface Inventory extends Iterable<ItemStack> {
*
* @return inventory storage contents. Individual items may be null.
*/
@@ -695,7 +695,7 @@ index f1a48eab1a357ae64545e1f1dc941c383cff8707..466d1bd7089b76f48f953e1a51c611ec
/**
* Put the given ItemStacks into the storage slots
-@@ -196,7 +194,7 @@ public interface Inventory extends Iterable<ItemStack> {
+@@ -195,7 +193,7 @@ public interface Inventory extends Iterable<ItemStack> {
* @throws IllegalArgumentException If the array has more items than the
* inventory.
*/
@@ -705,20 +705,20 @@ index f1a48eab1a357ae64545e1f1dc941c383cff8707..466d1bd7089b76f48f953e1a51c611ec
/**
* Checks if the inventory contains any ItemStacks with the given
diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
-index 349da0065ddf000cacdc259fab0f2c759332e9ad..abf95d917eca248ff3f5a5caa008c1c87fa1e029 100644
+index c8e1377f804c50d41ad29c6c67dea58526d28125..bda53b9db7112e82f581af09262d59da8d7769fa 100644
--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
+++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
-@@ -26,7 +26,7 @@ public interface ItemFactory {
+@@ -25,7 +25,7 @@ public interface ItemFactory {
* @return a new ItemMeta that could be applied to an item stack of the
- * specified material
+ * specified item type
*/
- @Nullable
-+ @org.bukkit.UndefinedNullability // Paper
- ItemMeta getItemMeta(@NotNull final Material material);
++ @org.bukkit.UndefinedNullability("null for air") // Paper
+ ItemMeta getItemMeta(@NotNull final ItemType itemType);
/**
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index 83a0631a80db156ace1d977df71d5fc653b70bb6..60a25898fb17c467ffae05039fcd4d3b154a99ff 100644
+index 8187b1b801c7a6fd71696bfe21de177705b0e3a2..f71f939ba5f02827999124c5e8dc589247f2c433 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -8,6 +8,7 @@ import java.util.Map;
@@ -729,26 +729,18 @@ index 83a0631a80db156ace1d977df71d5fc653b70bb6..60a25898fb17c467ffae05039fcd4d3b
import org.bukkit.Utility;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.enchantments.Enchantment;
-@@ -68,6 +69,7 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
- * @param damage durability / damage
- * @deprecated see {@link #setDurability(short)}
- */
-+ @Deprecated // Paper
- public ItemStack(@NotNull final Material type, final int amount, final short damage) {
- this(type, amount, damage, null);
- }
-@@ -169,8 +171,10 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -214,8 +215,10 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
* Gets the MaterialData for this stack of items
*
* @return MaterialData for this item
-+ * @deprecated cast to {@link org.bukkit.inventory.meta.BlockDataMeta} and use {@link org.bukkit.inventory.meta.BlockDataMeta#getBlockData(Material)}
++ * @deprecated cast to {@link org.bukkit.inventory.meta.BlockDataMeta} and use {@link org.bukkit.inventory.meta.BlockDataMeta#getBlockData(org.bukkit.block.BlockType)}
*/
@Nullable
+ @Deprecated // Paper
public MaterialData getData() {
- Material mat = Bukkit.getUnsafe().toLegacy(getType());
+ Material mat = Bukkit.getUnsafe().toLegacy(Bukkit.getUnsafe().toMaterial(getType()));
if (data == null && mat != null && mat.getData() != null) {
-@@ -184,7 +188,9 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -229,7 +232,9 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
* Sets the MaterialData for this stack of items
*
* @param data New MaterialData for this item
@@ -758,12 +750,12 @@ index 83a0631a80db156ace1d977df71d5fc653b70bb6..60a25898fb17c467ffae05039fcd4d3b
public void setData(@Nullable MaterialData data) {
if (data == null) {
this.data = data;
-@@ -546,7 +552,7 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -596,7 +601,7 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
*
* @return a copy of the current ItemStack's ItemData
*/
- @Nullable
-+ @UndefinedNullability // Paper
++ @UndefinedNullability("null for air") // Paper
public ItemMeta getItemMeta() {
return this.meta == null ? Bukkit.getItemFactory().getItemMeta(this.type) : this.meta.clone();
}
@@ -804,10 +796,10 @@ index 5461f7fa75f5a065bb333b4a113640b5fe1e3825..c4d657727e508cb941320730a9d3aa54
/**
diff --git a/src/main/java/org/bukkit/inventory/ShapedRecipe.java b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
-index c2d224b6472a65cd362e1ab55ce7e3d0b5a3befc..833322283bdddc16524ddb56aaa481bf36881eeb 100644
+index 4869adf9b89f1458af5517ae5813d44630846de8..9d86f3de1bfd5beeda1f19ae9d0db9849c72b0cb 100644
--- a/src/main/java/org/bukkit/inventory/ShapedRecipe.java
+++ b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
-@@ -112,8 +112,10 @@ public class ShapedRecipe implements Recipe, Keyed {
+@@ -111,8 +111,10 @@ public class ShapedRecipe implements Recipe, Keyed {
* @param ingredient The ingredient.
* @return The changed recipe, so you can chain calls.
* @throws IllegalArgumentException if the {@code key} does not appear in the shape.
@@ -816,9 +808,9 @@ index c2d224b6472a65cd362e1ab55ce7e3d0b5a3befc..833322283bdddc16524ddb56aaa481bf
@NotNull
+ @Deprecated // Paper
public ShapedRecipe setIngredient(char key, @NotNull MaterialData ingredient) {
- return setIngredient(key, ingredient.getItemType(), ingredient.getData());
+ return setIngredient(key, ingredient.getItemType().asItemType());
}
-@@ -191,7 +193,9 @@ public class ShapedRecipe implements Recipe, Keyed {
+@@ -166,7 +168,9 @@ public class ShapedRecipe implements Recipe, Keyed {
* Get a copy of the ingredients map.
*
* @return The mapping of character to ingredients.
@@ -829,10 +821,10 @@ index c2d224b6472a65cd362e1ab55ce7e3d0b5a3befc..833322283bdddc16524ddb56aaa481bf
public Map<Character, ItemStack> getIngredientMap() {
HashMap<Character, ItemStack> result = new HashMap<Character, ItemStack>();
diff --git a/src/main/java/org/bukkit/inventory/ShapelessRecipe.java b/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
-index 8bf26da12dcb03f22f842a57798948d5513c227d..e5a2febc26a2b0aca0b83c48cd35ccdea1e6a222 100644
+index 1ff7f7327c3462f54b8b2d1100c608f30ecabe31..90d54c39181e602af08dc43e37e66a8572fe1996 100644
--- a/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
+++ b/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
-@@ -53,8 +53,10 @@ public class ShapelessRecipe implements Recipe, Keyed {
+@@ -52,8 +52,10 @@ public class ShapelessRecipe implements Recipe, Keyed {
*
* @param ingredient The ingredient to add.
* @return The changed recipe, so you can chain calls.
@@ -843,7 +835,7 @@ index 8bf26da12dcb03f22f842a57798948d5513c227d..e5a2febc26a2b0aca0b83c48cd35ccde
public ShapelessRecipe addIngredient(@NotNull MaterialData ingredient) {
return addIngredient(1, ingredient);
}
-@@ -90,8 +92,10 @@ public class ShapelessRecipe implements Recipe, Keyed {
+@@ -75,8 +77,10 @@ public class ShapelessRecipe implements Recipe, Keyed {
* @param count How many to add (can't be more than 9!)
* @param ingredient The ingredient to add.
* @return The changed recipe, so you can chain calls.
@@ -852,9 +844,9 @@ index 8bf26da12dcb03f22f842a57798948d5513c227d..e5a2febc26a2b0aca0b83c48cd35ccde
@NotNull
+ @Deprecated // Paper
public ShapelessRecipe addIngredient(int count, @NotNull MaterialData ingredient) {
- return addIngredient(count, ingredient.getItemType(), ingredient.getData());
+ return addIngredient(count, ingredient.getItemType().asItemType());
}
-@@ -208,8 +212,10 @@ public class ShapelessRecipe implements Recipe, Keyed {
+@@ -173,8 +177,10 @@ public class ShapelessRecipe implements Recipe, Keyed {
*
* @param ingredient The ingredient to remove
* @return The changed recipe.
@@ -863,9 +855,9 @@ index 8bf26da12dcb03f22f842a57798948d5513c227d..e5a2febc26a2b0aca0b83c48cd35ccde
@NotNull
+ @Deprecated // Paper
public ShapelessRecipe removeIngredient(@NotNull MaterialData ingredient) {
- return removeIngredient(ingredient.getItemType(), ingredient.getData());
+ return removeIngredient(ingredient.getItemType().asItemType());
}
-@@ -236,8 +242,10 @@ public class ShapelessRecipe implements Recipe, Keyed {
+@@ -209,8 +215,10 @@ public class ShapelessRecipe implements Recipe, Keyed {
* @param count The number of copies to remove.
* @param ingredient The ingredient to remove.
* @return The changed recipe.
@@ -874,9 +866,9 @@ index 8bf26da12dcb03f22f842a57798948d5513c227d..e5a2febc26a2b0aca0b83c48cd35ccde
@NotNull
+ @Deprecated // Paper
public ShapelessRecipe removeIngredient(int count, @NotNull MaterialData ingredient) {
- return removeIngredient(count, ingredient.getItemType(), ingredient.getData());
+ return removeIngredient(count, ingredient.getItemType().asItemType());
}
-@@ -298,7 +306,9 @@ public class ShapelessRecipe implements Recipe, Keyed {
+@@ -230,7 +238,9 @@ public class ShapelessRecipe implements Recipe, Keyed {
* Get the list of ingredients used for this recipe.
*
* @return The input list
@@ -887,13 +879,13 @@ index 8bf26da12dcb03f22f842a57798948d5513c227d..e5a2febc26a2b0aca0b83c48cd35ccde
public List<ItemStack> getIngredientList() {
ArrayList<ItemStack> result = new ArrayList<ItemStack>(ingredients.size());
diff --git a/src/main/java/org/bukkit/inventory/StonecuttingRecipe.java b/src/main/java/org/bukkit/inventory/StonecuttingRecipe.java
-index 597a18a767b68b47e81454b7d44613c7178c1366..bc3440eb72127824b3961fbdae583bb61385f65e 100644
+index 0de3c34c67b8c37a3c7ba8bcec4404ed4ef5019e..d99c5f00905f3eaf2be20e3b68184c948c417b9e 100644
--- a/src/main/java/org/bukkit/inventory/StonecuttingRecipe.java
+++ b/src/main/java/org/bukkit/inventory/StonecuttingRecipe.java
-@@ -57,7 +57,9 @@ public class StonecuttingRecipe implements Recipe, Keyed {
- * Get the input material.
+@@ -62,7 +62,9 @@ public class StonecuttingRecipe implements Recipe, Keyed {
+ * Get the input item stack.
*
- * @return The input material.
+ * @return The input item stack.
+ * @deprecated Use {@link #getInputChoice()} instead for more complete data.
*/
+ @Deprecated // Paper
@@ -1033,14 +1025,14 @@ index 0ea9c6b2420a0f990bd1fdf50fc015e37a7060d8..e99644eae1c662b117aa19060d2484ac
/**
diff --git a/src/test/java/org/bukkit/materials/MaterialDataTest.java b/src/test/java/org/bukkit/materials/MaterialDataTest.java
-index a935ae4a25b7955416652bf8c4690a804f12e903..e83321263bb0e2b67af981dbb2e8fec4e973ae56 100644
+index c5ce01d7a84d06ab4a797207377a09706882e9af..13d351af0f9dd4d27b93cf48c521dff1bdab3a38 100644
--- a/src/test/java/org/bukkit/materials/MaterialDataTest.java
+++ b/src/test/java/org/bukkit/materials/MaterialDataTest.java
-@@ -22,6 +22,7 @@ import org.bukkit.material.WoodenStep;
- import org.bukkit.material.types.MushroomBlockTexture;
+@@ -23,6 +23,7 @@ import org.bukkit.material.types.MushroomBlockTexture;
+ import org.bukkit.support.AbstractTestingBase;
import org.junit.Test;
+@Deprecated // Paper
- public class MaterialDataTest {
+ public class MaterialDataTest extends AbstractTestingBase {
@Test
diff --git a/patches/api/0176-Mob-Spawner-API-Enhancements.patch b/patches/api/0176-Mob-Spawner-API-Enhancements.patch
index 4928839428..5784ca74a7 100644
--- a/patches/api/0176-Mob-Spawner-API-Enhancements.patch
+++ b/patches/api/0176-Mob-Spawner-API-Enhancements.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Mob Spawner API Enhancements
diff --git a/src/main/java/org/bukkit/block/CreatureSpawner.java b/src/main/java/org/bukkit/block/CreatureSpawner.java
-index 8dae9611e702d93b202563597c50752c5f5b77d4..3dcab76632c4f8646d7ae62bb8de287eb6ef55b5 100644
+index 6586c8a81e8d9b4fc5afcb89878f2594ed4306b6..98a9d2b012f6d084ae8d1886021c3dccfbb4ca74 100644
--- a/src/main/java/org/bukkit/block/CreatureSpawner.java
+++ b/src/main/java/org/bukkit/block/CreatureSpawner.java
@@ -199,4 +199,30 @@ public interface CreatureSpawner extends TileState {
@@ -27,7 +27,7 @@ index 8dae9611e702d93b202563597c50752c5f5b77d4..3dcab76632c4f8646d7ae62bb8de287e
+ public void resetTimer();
+
+ /**
-+ * Sets the {@link EntityType} to {@link EntityType#DROPPED_ITEM} and sets the data to the given
++ * Sets the {@link EntityType} to {@link EntityType#ITEM} and sets the data to the given
+ * {@link org.bukkit.inventory.ItemStack ItemStack}.
+ * <p>
+ * {@link #setSpawnCount(int)} does not dictate the amount of items in the stack spawned, but rather how many
diff --git a/patches/api/0177-Add-BlockSoundGroup-interface.patch b/patches/api/0177-Add-BlockSoundGroup-interface.patch
index 993c769c62..a42b49fcb4 100644
--- a/patches/api/0177-Add-BlockSoundGroup-interface.patch
+++ b/patches/api/0177-Add-BlockSoundGroup-interface.patch
@@ -76,10 +76,10 @@ index 0000000000000000000000000000000000000000..ec36942128cbacae171584c89480b4aa
+ Sound getFallSound();
+}
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 78f6cc1a8a8de05aec6f551f8a5f425944f0ffa3..b0b148918eeaf10d60734def6ac84b678c0d74c7 100644
+index cad80c8aeb55fe9846189c62ff9cfdb5525c7236..22926629a86b24e26a6949550178d5ead0a4ba25 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -607,4 +607,25 @@ public interface Block extends Metadatable, Translatable {
+@@ -606,4 +606,25 @@ public interface Block extends Metadatable, Translatable {
* @return <code>true</code> if the block data can be placed here
*/
boolean canPlace(@NotNull BlockData data);
diff --git a/patches/api/0180-Expose-the-internal-current-tick.patch b/patches/api/0180-Expose-the-internal-current-tick.patch
index 401df320b5..9bc0d417b9 100644
--- a/patches/api/0180-Expose-the-internal-current-tick.patch
+++ b/patches/api/0180-Expose-the-internal-current-tick.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Expose the internal current tick
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index ef7445fc5c169e64a73dce4f71a2885fb976caf3..d39c6b5d3fef5fe9727868175cf266fd68c2efa4 100644
+index d22fde8aa7d9dc2d3e717716b4604ad8604daa61..26acb25d6cce69c3da8c345c30b48817e2be47d4 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -2336,6 +2336,10 @@ public final class Bukkit {
+@@ -2340,6 +2340,10 @@ public final class Bukkit {
public static com.destroystokyo.paper.profile.PlayerProfile createProfileExact(@Nullable UUID uuid, @Nullable String name) {
return server.createProfileExact(uuid, name);
}
@@ -20,10 +20,10 @@ index ef7445fc5c169e64a73dce4f71a2885fb976caf3..d39c6b5d3fef5fe9727868175cf266fd
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 5edef1114f1c94e921656972141d62a9d6338105..e02bd7323e117e9977275b3a5d3e070ff891fdbd 100644
+index 883d2320914d0687dcee08f078cb20fd857cf971..b8bbdc6a7ab5562eae0977f694dc1ad25652ab99 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -2033,5 +2033,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -2037,5 +2037,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/
@NotNull
com.destroystokyo.paper.profile.PlayerProfile createProfileExact(@Nullable UUID uuid, @Nullable String name);
diff --git a/patches/api/0181-Improve-Block-breakNaturally-API.patch b/patches/api/0181-Improve-Block-breakNaturally-API.patch
index b96cf1505a..c508f51bf1 100644
--- a/patches/api/0181-Improve-Block-breakNaturally-API.patch
+++ b/patches/api/0181-Improve-Block-breakNaturally-API.patch
@@ -10,10 +10,10 @@ Adds bool param to trigger exp drops for blocks
Co-authored-by: William Blake Galbreath <[email protected]>
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index b0b148918eeaf10d60734def6ac84b678c0d74c7..232662f3130ca49156ed8b71acf4495aea33c212 100644
+index 22926629a86b24e26a6949550178d5ead0a4ba25..da77f02f164998b0b8905fcf85730deda947d742 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -481,6 +481,52 @@ public interface Block extends Metadatable, Translatable {
+@@ -480,6 +480,52 @@ public interface Block extends Metadatable, Translatable {
*/
boolean breakNaturally(@Nullable ItemStack tool);
diff --git a/patches/api/0186-Add-tick-times-API.patch b/patches/api/0186-Add-tick-times-API.patch
index 491be377a9..f579384f38 100644
--- a/patches/api/0186-Add-tick-times-API.patch
+++ b/patches/api/0186-Add-tick-times-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add tick times API
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index d39c6b5d3fef5fe9727868175cf266fd68c2efa4..354fa01b30ec26f78f874a06e57a89f14ef13ef4 100644
+index 26acb25d6cce69c3da8c345c30b48817e2be47d4..ad3de5789b2490f5f2c42cc173caa1ef18a95e53 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -2008,6 +2008,25 @@ public final class Bukkit {
+@@ -2009,6 +2009,25 @@ public final class Bukkit {
public static double[] getTPS() {
return server.getTPS();
}
@@ -35,10 +35,10 @@ index d39c6b5d3fef5fe9727868175cf266fd68c2efa4..354fa01b30ec26f78f874a06e57a89f1
/**
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index e02bd7323e117e9977275b3a5d3e070ff891fdbd..edceaefe5e46515300c819351aebe0fce576d599 100644
+index b8bbdc6a7ab5562eae0977f694dc1ad25652ab99..73fc1082b3c867ec73aff12378bf0cabef97054c 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1695,6 +1695,21 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1696,6 +1696,21 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/
@NotNull
public double[] getTPS();
diff --git a/patches/api/0187-Expose-MinecraftServer-isRunning.patch b/patches/api/0187-Expose-MinecraftServer-isRunning.patch
index 5e8b1257f3..a1a82daf1f 100644
--- a/patches/api/0187-Expose-MinecraftServer-isRunning.patch
+++ b/patches/api/0187-Expose-MinecraftServer-isRunning.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Expose MinecraftServer#isRunning
This allows for plugins to detect if the server is actually turning off in onDisable rather than just plugins reloading.
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 354fa01b30ec26f78f874a06e57a89f14ef13ef4..725de23dc102e3b63da5e49bb1eafca96e33fc4c 100644
+index ad3de5789b2490f5f2c42cc173caa1ef18a95e53..32847b69be4c73529b54d3f717d9cf15a16e9669 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -2359,6 +2359,15 @@ public final class Bukkit {
+@@ -2363,6 +2363,15 @@ public final class Bukkit {
public static int getCurrentTick() {
return server.getCurrentTick();
}
@@ -26,10 +26,10 @@ index 354fa01b30ec26f78f874a06e57a89f14ef13ef4..725de23dc102e3b63da5e49bb1eafca9
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index edceaefe5e46515300c819351aebe0fce576d599..960fc19a04bc3475bd81301ec283c9bb32f62821 100644
+index 73fc1082b3c867ec73aff12378bf0cabef97054c..e4370e5c0e529c221e0e0a7b0b0c89f8528dae0f 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -2055,5 +2055,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -2059,5 +2059,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* @return Current tick
*/
int getCurrentTick();
diff --git a/patches/api/0188-Add-Raw-Byte-ItemStack-Serialization.patch b/patches/api/0188-Add-Raw-Byte-ItemStack-Serialization.patch
index 58fe15d776..1c5d9a64ae 100644
--- a/patches/api/0188-Add-Raw-Byte-ItemStack-Serialization.patch
+++ b/patches/api/0188-Add-Raw-Byte-ItemStack-Serialization.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Add Raw Byte ItemStack Serialization
Serializes using NBT which is safer for server data migrations than bukkits format.
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index a6aa33b9574d0278e10927007a62290e1d102e73..beddcb13a598d799c8ae1cec9c01c900e38b1458 100644
+index 4c2ae9cb674260deba91d734bf7bf24fd7038485..f2909100f7abe0a650cc8b2631dddcb26380344a 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -126,5 +126,9 @@ public interface UnsafeValues {
+@@ -135,5 +135,9 @@ public interface UnsafeValues {
default com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() {
return new com.destroystokyo.paper.util.VersionFetcher.DummyVersionFetcher();
}
@@ -20,10 +20,10 @@ index a6aa33b9574d0278e10927007a62290e1d102e73..beddcb13a598d799c8ae1cec9c01c900
// Paper end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index 60a25898fb17c467ffae05039fcd4d3b154a99ff..3da071798b89e1dd1453f4339af87933cdf0105e 100644
+index f71f939ba5f02827999124c5e8dc589247f2c433..971df4980db6289bd11f661956d8f1d3c52b7822 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -639,6 +639,30 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -688,6 +688,30 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
return Bukkit.getServer().getItemFactory().ensureServerConversions(this);
}
diff --git a/patches/api/0189-Add-Player-Client-Options-API.patch b/patches/api/0189-Add-Player-Client-Options-API.patch
index 359289e4bf..791295c0c8 100644
--- a/patches/api/0189-Add-Player-Client-Options-API.patch
+++ b/patches/api/0189-Add-Player-Client-Options-API.patch
@@ -229,10 +229,10 @@ index 0000000000000000000000000000000000000000..cf67dc7d465223710adbf2b798109f52
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index b21834a0ec507d223cdb178b4500981c9e8dc248..e5781bec16cde82603022e117868be71c2a1faa4 100644
+index 9649e65d2b0af4f72d648eb33c0de124ba4b5e34..c3387633e7192887d61b871a9af85f1e35a2eecb 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2723,6 +2723,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2711,6 +2711,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* Reset the cooldown counter to 0, effectively starting the cooldown period.
*/
void resetCooldown();
diff --git a/patches/api/0191-Fix-Potion-toItemStack-swapping-the-extended-and-upg.patch b/patches/api/0191-Fix-Potion-toItemStack-swapping-the-extended-and-upg.patch
index 2fa02a7788..2d90e2d6f3 100644
--- a/patches/api/0191-Fix-Potion-toItemStack-swapping-the-extended-and-upg.patch
+++ b/patches/api/0191-Fix-Potion-toItemStack-swapping-the-extended-and-upg.patch
@@ -7,12 +7,12 @@ Subject: [PATCH] Fix Potion#toItemStack swapping the extended and upgraded
While the Potion class is deprecated, it is still used in some plugins for cross-version potion handling. This issue has existed for a long time, and has caused many heaches along the way.
diff --git a/src/main/java/org/bukkit/potion/Potion.java b/src/main/java/org/bukkit/potion/Potion.java
-index 266547c6da0e3270af5c9ca81268934294a7c48d..69e7ce61090e3e3a7a337a96b380c8ffe78ffb8d 100644
+index 9a670f91a4799933780fc6812e78c8df535d2ed8..c4e551e2c78e959b25c749c32c22c7f0e2f492a9 100644
--- a/src/main/java/org/bukkit/potion/Potion.java
+++ b/src/main/java/org/bukkit/potion/Potion.java
@@ -267,7 +267,7 @@ public class Potion {
}
- ItemStack itemStack = new ItemStack(material, amount);
+ ItemStack itemStack = ItemStack.of(itemType, amount);
PotionMeta meta = (PotionMeta) itemStack.getItemMeta();
- meta.setBasePotionData(new PotionData(type, level == 2, extended));
+ meta.setBasePotionData(new PotionData(type, extended, level == 2)); // Paper - fix swapped values
diff --git a/patches/api/0193-Villager-Restocks-API.patch b/patches/api/0193-Villager-Restocks-API.patch
index 5b3898429d..34f615dc7d 100644
--- a/patches/api/0193-Villager-Restocks-API.patch
+++ b/patches/api/0193-Villager-Restocks-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Villager Restocks API
diff --git a/src/main/java/org/bukkit/entity/Villager.java b/src/main/java/org/bukkit/entity/Villager.java
-index a91400cd8bb4c72d1f3200a17f6de025540fe09d..4128b848ec739308694d54d9e859c28185f42a63 100644
+index a6e57f8ad3f09d05ca61c824d128221528f7a96d..5ba0ac5f8675c8db1955318355d5a16f23f55e3f 100644
--- a/src/main/java/org/bukkit/entity/Villager.java
+++ b/src/main/java/org/bukkit/entity/Villager.java
-@@ -78,6 +78,20 @@ public interface Villager extends AbstractVillager {
+@@ -81,6 +81,20 @@ public interface Villager extends AbstractVillager {
*/
public void setVillagerExperience(int experience);
diff --git a/patches/api/0194-Expose-game-version.patch b/patches/api/0194-Expose-game-version.patch
index c2cef85ee5..ffef50c5d9 100644
--- a/patches/api/0194-Expose-game-version.patch
+++ b/patches/api/0194-Expose-game-version.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Expose game version
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 725de23dc102e3b63da5e49bb1eafca96e33fc4c..dfeaddc2d71f8569c349740c00c96868f9a56a12 100644
+index 32847b69be4c73529b54d3f717d9cf15a16e9669..834b5fb69de90ed1b5f012887f74608fdec56f6d 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -156,6 +156,18 @@ public final class Bukkit {
+@@ -157,6 +157,18 @@ public final class Bukkit {
return server.getBukkitVersion();
}
@@ -28,10 +28,10 @@ index 725de23dc102e3b63da5e49bb1eafca96e33fc4c..dfeaddc2d71f8569c349740c00c96868
* Gets a view of all currently logged in players. This {@linkplain
* Collections#unmodifiableCollection(Collection) view} is a reused
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 960fc19a04bc3475bd81301ec283c9bb32f62821..ccec37c00f8ab318d41350907b40a64118e4fab1 100644
+index e4370e5c0e529c221e0e0a7b0b0c89f8528dae0f..23d07141696d17c41a37dbda094d62b38386a45b 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -114,6 +114,16 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -115,6 +115,16 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@NotNull
public String getBukkitVersion();
diff --git a/patches/api/0195-Add-Mob-Goal-API.patch b/patches/api/0195-Add-Mob-Goal-API.patch
index a9605fb0bc..9474b56863 100644
--- a/patches/api/0195-Add-Mob-Goal-API.patch
+++ b/patches/api/0195-Add-Mob-Goal-API.patch
@@ -525,10 +525,10 @@ index 0000000000000000000000000000000000000000..c9837c7c47314b5bdf6c7973e6bc962d
+ @Deprecated(forRemoval = true) @ApiStatus.ScheduledForRemoval(inVersion = "1.21") GoalKey<Mob> UNIVERSAL_ANGER_RESET = GoalKey.of(Mob.class, NamespacedKey.minecraft("universal_anger_reset"));
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index dfeaddc2d71f8569c349740c00c96868f9a56a12..4e5e29251b713885eee562091ea4f253f027bdbb 100644
+index 834b5fb69de90ed1b5f012887f74608fdec56f6d..690d8584e3f74aae87038b2b8225f28f1b912362 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -2380,6 +2380,16 @@ public final class Bukkit {
+@@ -2384,6 +2384,16 @@ public final class Bukkit {
public static boolean isStopping() {
return server.isStopping();
}
@@ -546,10 +546,10 @@ index dfeaddc2d71f8569c349740c00c96868f9a56a12..4e5e29251b713885eee562091ea4f253
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index ccec37c00f8ab318d41350907b40a64118e4fab1..9634d82d603426979cab978f9474cc041e1cb701 100644
+index 23d07141696d17c41a37dbda094d62b38386a45b..e8a735a3035fe214889738bd0220dae8b51a9535 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -2072,5 +2072,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -2076,5 +2076,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* @return true if server is in the process of being shutdown
*/
boolean isStopping();
diff --git a/patches/api/0196-Add-villager-reputation-API.patch b/patches/api/0196-Add-villager-reputation-API.patch
index 4a2093aab9..51a682c3e0 100644
--- a/patches/api/0196-Add-villager-reputation-API.patch
+++ b/patches/api/0196-Add-villager-reputation-API.patch
@@ -110,20 +110,20 @@ index 0000000000000000000000000000000000000000..5600fcdc9795a9f49091db48d73bbd49
+ TRADING,
+}
diff --git a/src/main/java/org/bukkit/entity/Villager.java b/src/main/java/org/bukkit/entity/Villager.java
-index 4128b848ec739308694d54d9e859c28185f42a63..d841d94d46462e0ceb7c6b04cc8fc36792bd9201 100644
+index 5ba0ac5f8675c8db1955318355d5a16f23f55e3f..74cc876788674f64ca0451f5fb7c0da23b168d0c 100644
--- a/src/main/java/org/bukkit/entity/Villager.java
+++ b/src/main/java/org/bukkit/entity/Villager.java
-@@ -1,6 +1,8 @@
- package org.bukkit.entity;
+@@ -2,6 +2,8 @@ package org.bukkit.entity;
- import java.util.Locale;
+ import com.google.common.base.Preconditions;
+ import com.google.common.collect.Lists;
+import java.util.Map; // Paper
+import java.util.UUID; // Paper
import org.bukkit.Keyed;
import org.bukkit.Location;
import org.bukkit.NamespacedKey;
-@@ -242,4 +244,50 @@ public interface Villager extends AbstractVillager {
- return key;
+@@ -285,4 +287,50 @@ public interface Villager extends AbstractVillager {
+ return Lists.newArrayList(Registry.VILLAGER_PROFESSION).toArray(new Profession[0]);
}
}
+
diff --git a/patches/api/0197-Spawn-Reason-API.patch b/patches/api/0197-Spawn-Reason-API.patch
index dbde82e3ba..ff70668d2a 100644
--- a/patches/api/0197-Spawn-Reason-API.patch
+++ b/patches/api/0197-Spawn-Reason-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Spawn Reason API
diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java
-index 05c29cbd2ae1ca0434a90f8389479bd608ca2ac1..66bc6da2a482bb207ec50beb22fd62aeda90cc34 100644
+index 8264599a873ed23ec6552d1550a414ec3712487b..f53622413ecfb98b79bc59a397e1c7bd27951fb1 100644
--- a/src/main/java/org/bukkit/RegionAccessor.java
+++ b/src/main/java/org/bukkit/RegionAccessor.java
-@@ -10,6 +10,7 @@ import org.bukkit.block.data.BlockData;
+@@ -11,6 +11,7 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
@@ -16,7 +16,7 @@ index 05c29cbd2ae1ca0434a90f8389479bd608ca2ac1..66bc6da2a482bb207ec50beb22fd62ae
import org.bukkit.util.Consumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-@@ -309,7 +310,34 @@ public interface RegionAccessor {
+@@ -312,7 +313,34 @@ public interface RegionAccessor {
* {@link Entity} requested cannot be spawned
*/
@NotNull
diff --git a/patches/api/0198-Potential-bed-API.patch b/patches/api/0198-Potential-bed-API.patch
index cdbbcebbbc..c818de1337 100644
--- a/patches/api/0198-Potential-bed-API.patch
+++ b/patches/api/0198-Potential-bed-API.patch
@@ -8,10 +8,10 @@ Adds a new method to fetch the location of a player's bed without generating any
getPotentialBedLocation - Gets the last known location of a player's bed. This does not preform any check if the bed is still valid and does not load any chunks.
diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java
-index d44c5a3fda0b159dc541246cb2fca8427cb38243..7e9e1e0b21314e6542f5f40503cd6926c75cc369 100644
+index 384e310c725e53276886fe5ab3239d911aabc350..7bfc78cff563bc104a29b9d58befcd29a78653f3 100644
--- a/src/main/java/org/bukkit/entity/HumanEntity.java
+++ b/src/main/java/org/bukkit/entity/HumanEntity.java
-@@ -269,6 +269,19 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
+@@ -266,6 +266,19 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
*/
public int getSleepTicks();
diff --git a/patches/api/0199-Inventory-getHolder-method-without-block-snapshot.patch b/patches/api/0199-Inventory-getHolder-method-without-block-snapshot.patch
index d834d6cdb3..b2c5577b39 100644
--- a/patches/api/0199-Inventory-getHolder-method-without-block-snapshot.patch
+++ b/patches/api/0199-Inventory-getHolder-method-without-block-snapshot.patch
@@ -28,10 +28,10 @@ index 83a4642119c3f33749e04c774cf2b39839f797e2..a39d2f1acbbd84ae0e2cf29f85594e09
public Location getLocation() {
return getInventory().getLocation();
diff --git a/src/main/java/org/bukkit/inventory/Inventory.java b/src/main/java/org/bukkit/inventory/Inventory.java
-index 466d1bd7089b76f48f953e1a51c611ecd93dcd54..129b5ab5062beeb9bb52465a788bc3a3aee9c49e 100644
+index 3bec3e920178bf2f3d2158f98d026f69339ee71c..af6bfacd5f209e75b7c5f37201c3ba9e8e74d885 100644
--- a/src/main/java/org/bukkit/inventory/Inventory.java
+++ b/src/main/java/org/bukkit/inventory/Inventory.java
-@@ -385,6 +385,17 @@ public interface Inventory extends Iterable<ItemStack> {
+@@ -384,6 +384,17 @@ public interface Inventory extends Iterable<ItemStack> {
@Nullable
public InventoryHolder getHolder();
diff --git a/patches/api/0206-Brand-support.patch b/patches/api/0206-Brand-support.patch
index b7f049dcb2..e9cf4f60e6 100644
--- a/patches/api/0206-Brand-support.patch
+++ b/patches/api/0206-Brand-support.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Brand support
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index e5781bec16cde82603022e117868be71c2a1faa4..f42bc869ab78abb4f05d36c9a6563c71dfe1ea4f 100644
+index c3387633e7192887d61b871a9af85f1e35a2eecb..c6ee16a347dc10c718c2d277dba1eff76f7edbbf 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2832,6 +2832,16 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2820,6 +2820,16 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
// Paper end
}
diff --git a/patches/api/0208-Add-moon-phase-API.patch b/patches/api/0208-Add-moon-phase-API.patch
index 68b36e3b64..190c10f508 100644
--- a/patches/api/0208-Add-moon-phase-API.patch
+++ b/patches/api/0208-Add-moon-phase-API.patch
@@ -47,10 +47,10 @@ index 0000000000000000000000000000000000000000..df05153397b42930cd53d37b30824c7e
+ }
+}
diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java
-index 66bc6da2a482bb207ec50beb22fd62aeda90cc34..501dd5a26c27294420821b3d75f8938596afb1a8 100644
+index f53622413ecfb98b79bc59a397e1c7bd27951fb1..2349a935f87122bdda23c78142c810ed8ed80f4f 100644
--- a/src/main/java/org/bukkit/RegionAccessor.java
+++ b/src/main/java/org/bukkit/RegionAccessor.java
-@@ -421,4 +421,12 @@ public interface RegionAccessor {
+@@ -424,4 +424,12 @@ public interface RegionAccessor {
* {@link HeightMap}
*/
public int getHighestBlockYAt(@NotNull Location location, @NotNull HeightMap heightMap);
diff --git a/patches/api/0211-Add-methods-to-get-translation-keys.patch b/patches/api/0211-Add-methods-to-get-translation-keys.patch
index 96b7bbb309..af7eae5f7a 100644
--- a/patches/api/0211-Add-methods-to-get-translation-keys.patch
+++ b/patches/api/0211-Add-methods-to-get-translation-keys.patch
@@ -144,19 +144,19 @@ index 753bfcec441533071120d925c83789ef53afa176..c6bc84a8755b2fe5d7d8d3ec857700ec
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
-index 7705fece7f58bd66f7d68da85f8f34e43b4bae12..6a89eab53f21bc4420e616cc299864fb564e1045 100644
+index e022c70ba53d623053f1c826d57e47fb102dfce0..be4f6fbf013a4259b04f805b4265750bb7fcd0c3 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
-@@ -119,7 +119,7 @@ import org.jetbrains.annotations.Nullable;
- * An enum of all material IDs accepted by the official server and client
+@@ -122,7 +122,7 @@ import org.jetbrains.annotations.Nullable;
+ * @deprecated Material was split up into {@link ItemType} and {@link BlockType}
*/
- @SuppressWarnings({"DeprecatedIsStillUsed", "deprecation"}) // Paper
+ @Deprecated
-public enum Material implements Keyed, Translatable {
+public enum Material implements Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper
//<editor-fold desc="Materials" defaultstate="collapsed">
AIR(9648, 0),
STONE(22948),
-@@ -4450,6 +4450,15 @@ public enum Material implements Keyed, Translatable {
+@@ -4454,6 +4454,15 @@ public enum Material implements Keyed, Translatable {
}
return false;
}
@@ -172,7 +172,7 @@ index 7705fece7f58bd66f7d68da85f8f34e43b4bae12..6a89eab53f21bc4420e616cc299864fb
// Paper end
/**
-@@ -10949,9 +10958,11 @@ public enum Material implements Keyed, Translatable {
+@@ -10953,9 +10962,11 @@ public enum Material implements Keyed, Translatable {
* material
* @see #getBlockTranslationKey()
* @see #getItemTranslationKey()
@@ -208,59 +208,36 @@ index e3faa2c675c85a9cbdbbb1debec0ff81c58a1bbd..fd1629c2d2028a88fb3d56b0aeb833d1
String getTranslationKey();
}
diff --git a/src/main/java/org/bukkit/attribute/Attribute.java b/src/main/java/org/bukkit/attribute/Attribute.java
-index 13eac9ad2c1672051635d1c35cc49239252e7a61..107e36ef02a9481954bd770ce9a55a0b1e84be7a 100644
+index adccc6e33447006beefbd6165fe749dad4516852..e9b2f8622683b3293a99b99d77e0d9618e45d682 100644
--- a/src/main/java/org/bukkit/attribute/Attribute.java
+++ b/src/main/java/org/bukkit/attribute/Attribute.java
-@@ -7,7 +7,7 @@ import org.jetbrains.annotations.NotNull;
+@@ -11,7 +11,7 @@ import org.jetbrains.annotations.NotNull;
/**
* Types of attributes which may be present on an {@link Attributable}.
*/
--public enum Attribute implements Keyed {
-+public enum Attribute implements Keyed, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
+-public abstract class Attribute extends OldEnum<Attribute> implements Keyed {
++public abstract class Attribute extends OldEnum<Attribute> implements Keyed, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
/**
* Maximum health of an Entity.
-@@ -73,4 +73,10 @@ public enum Attribute implements Keyed {
- public NamespacedKey getKey() {
- return key;
- }
-+ // Paper start
-+ @Override
-+ public @NotNull String translationKey() {
-+ return "attribute.name." + this.key.getKey();
-+ }
-+ // Paper end
- }
diff --git a/src/main/java/org/bukkit/block/Biome.java b/src/main/java/org/bukkit/block/Biome.java
-index d3087d60378822cdd7cea25fd63d3f496e3cd2fb..5d8fa5b39a5d50cca48ba63af3a84b80f279b649 100644
+index a1e90ed16a9b1daafeb593fec7e894dde383fd52..93c2b0ce11cc16dccb829e57f61f5ca0f417716a 100644
--- a/src/main/java/org/bukkit/block/Biome.java
+++ b/src/main/java/org/bukkit/block/Biome.java
-@@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull;
- /**
- * Holds all accepted Biomes in the default server
+@@ -15,7 +15,7 @@ import org.jetbrains.annotations.NotNull;
+ * Depending on the server there might be additional biomes present (for example biomes created by data packs),
+ * which you can get via {@link Registry#BIOME}.
*/
--public enum Biome implements Keyed {
-+public enum Biome implements Keyed, net.kyori.adventure.translation.Translatable { // Paper
- OCEAN,
- PLAINS,
- DESERT,
-@@ -89,4 +89,11 @@ public enum Biome implements Keyed {
- public NamespacedKey getKey() {
- return key;
- }
-+
-+ // Paper start
-+ @Override
-+ public @NotNull String translationKey() {
-+ return "biome.minecraft." + this.key.getKey();
-+ }
-+ // Paper end
- }
+-public abstract class Biome extends OldEnum<Biome> implements Keyed {
++public abstract class Biome extends OldEnum<Biome> implements Keyed, net.kyori.adventure.translation.Translatable { // Paper
+
+ public static final Biome OCEAN = getBiome("ocean");
+ public static final Biome PLAINS = getBiome("plains");
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 232662f3130ca49156ed8b71acf4495aea33c212..5ae85ddc2cff3145dcba877a7bf55abd818f6881 100644
+index da77f02f164998b0b8905fcf85730deda947d742..bf50f6f1a6cb4f2493fe29d517289913d767ba26 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -32,7 +32,7 @@ import org.jetbrains.annotations.Nullable;
+@@ -31,7 +31,7 @@ import org.jetbrains.annotations.Nullable;
* (i.e. lighting and power) may not be able to be safely accessed during world
* generation when used in cases like BlockPhysicsEvent!!!!
*/
@@ -269,7 +246,7 @@ index 232662f3130ca49156ed8b71acf4495aea33c212..5ae85ddc2cff3145dcba877a7bf55abd
/**
* Gets the metadata for this block
-@@ -673,5 +673,12 @@ public interface Block extends Metadatable, Translatable {
+@@ -672,5 +672,12 @@ public interface Block extends Metadatable, Translatable {
* @return the sound group for this block
*/
@NotNull org.bukkit.SoundGroup getBlockSoundGroup();
@@ -282,11 +259,24 @@ index 232662f3130ca49156ed8b71acf4495aea33c212..5ae85ddc2cff3145dcba877a7bf55abd
+ String getTranslationKey();
// Paper end
}
+diff --git a/src/main/java/org/bukkit/block/BlockType.java b/src/main/java/org/bukkit/block/BlockType.java
+index f39a7fa2e2b70a458e97f727ef8f4c696a859b71..9f77976b2f33ba2d5af89ea143a39a0f417a4429 100644
+--- a/src/main/java/org/bukkit/block/BlockType.java
++++ b/src/main/java/org/bukkit/block/BlockType.java
+@@ -109,7 +109,7 @@ import org.bukkit.inventory.ItemType;
+ import org.jetbrains.annotations.NotNull;
+ import org.jetbrains.annotations.Nullable;
+
+-public interface BlockType<B extends BlockData> extends Keyed, Translatable {
++public interface BlockType<B extends BlockData> extends Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
+ //<editor-fold desc="BlockTypes" defaultstate="collapsed">
+ BlockType<BlockData> AIR = getBlockType("air");
+ BlockType<BlockData> STONE = getBlockType("stone");
diff --git a/src/main/java/org/bukkit/enchantments/Enchantment.java b/src/main/java/org/bukkit/enchantments/Enchantment.java
-index 2dc749936df6168073a5bb9f9051d55f8589ac62..1b6f42ff632b1f3f5034c825e99b72f389a890b4 100644
+index 340a06329e6603fb20d02eda294972fc18508543..0eb240094901b66c118c5a68bc0b2d0396ec6835 100644
--- a/src/main/java/org/bukkit/enchantments/Enchantment.java
+++ b/src/main/java/org/bukkit/enchantments/Enchantment.java
-@@ -12,7 +12,7 @@ import org.jetbrains.annotations.Nullable;
+@@ -13,7 +13,7 @@ import org.jetbrains.annotations.Nullable;
/**
* The various type of enchantments that may be added to armour or weapons
*/
@@ -296,10 +286,10 @@ index 2dc749936df6168073a5bb9f9051d55f8589ac62..1b6f42ff632b1f3f5034c825e99b72f3
* Provides protection against environmental damage
*/
diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
-index 4d5f0837bd0e02a30c943d8969fb6b13452322e0..a39f9c078f42451bd122f3e3729d10ca299bee5f 100644
+index 3f432a055d9fc70e6b16bf87c209be50232f2e93..fa6613efcfcee70507c77ee40460d35c3957d91b 100644
--- a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
+++ b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
-@@ -69,5 +69,10 @@ public class EnchantmentWrapper extends Enchantment {
+@@ -77,5 +77,10 @@ public class EnchantmentWrapper extends Enchantment {
public net.kyori.adventure.text.Component displayName(int level) {
return getEnchantment().displayName(level);
}
@@ -311,68 +301,31 @@ index 4d5f0837bd0e02a30c943d8969fb6b13452322e0..a39f9c078f42451bd122f3e3729d10ca
// Paper end
}
diff --git a/src/main/java/org/bukkit/entity/EntityType.java b/src/main/java/org/bukkit/entity/EntityType.java
-index bb9ae81870a340c00d7480aff5106dc2c44dab8a..6c40a989eff1163c19106c1e6b4c8fc01ace7280 100644
+index 9bb9b2d164a027ab8e9e5b05a819c902d5ef2fe4..a086c3472fa12667e5ca9276a201dbd731101602 100644
--- a/src/main/java/org/bukkit/entity/EntityType.java
+++ b/src/main/java/org/bukkit/entity/EntityType.java
-@@ -22,7 +22,7 @@ import org.jetbrains.annotations.Contract;
+@@ -25,7 +25,7 @@ import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
--public enum EntityType implements Keyed, Translatable {
-+public enum EntityType implements Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper - translatable
+-public abstract class EntityType<E extends Entity> extends OldEnum<EntityType<E>> implements Keyed, Translatable {
++public abstract class EntityType<E extends Entity> extends OldEnum<EntityType<E>> implements Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper - translatable
+ private static final BiMap<Short, EntityType> ID_MAP = HashBiMap.create();
// These strings MUST match the strings in nms.EntityTypes and are case sensitive.
- /**
-@@ -435,10 +435,22 @@ public enum EntityType implements Keyed, Translatable {
-
- @Override
- @NotNull
-+ @Deprecated(forRemoval = true) // Paper
- public String getTranslationKey() {
- return Bukkit.getUnsafe().getTranslationKey(this);
- }
-
-+ // Paper start
-+ /**
-+ * @throws IllegalArgumentException if the entity does not have a translation key (is probably a custom entity)
-+ */
-+ @Override
-+ public @NotNull String translationKey() {
-+ Preconditions.checkArgument(this != UNKNOWN, "UNKNOWN entities do not have translation keys");
-+ return org.bukkit.Bukkit.getUnsafe().getTranslationKey(this);
-+ }
-+ // Paper end
-+
- /**
- * Gets if this EntityType is enabled by feature in a world.
- *
diff --git a/src/main/java/org/bukkit/entity/Villager.java b/src/main/java/org/bukkit/entity/Villager.java
-index d841d94d46462e0ceb7c6b04cc8fc36792bd9201..8c8176121cafed0ed09239b6a7b392dc846438e2 100644
+index 74cc876788674f64ca0451f5fb7c0da23b168d0c..767f940149821a2a31124d3186229deadbb53c67 100644
--- a/src/main/java/org/bukkit/entity/Villager.java
+++ b/src/main/java/org/bukkit/entity/Villager.java
-@@ -160,7 +160,7 @@ public interface Villager extends AbstractVillager {
+@@ -183,7 +183,7 @@ public interface Villager extends AbstractVillager {
* Represents the various different Villager professions there may be.
* Villagers have different trading options depending on their profession,
*/
-- public enum Profession implements Keyed {
-+ public enum Profession implements Keyed, net.kyori.adventure.translation.Translatable { // Paper
- NONE,
+- public abstract class Profession extends OldEnum<Profession> implements Keyed {
++ public abstract class Profession extends OldEnum<Profession> implements Keyed, net.kyori.adventure.translation.Translatable { // Paper
+ public static final Profession NONE = getProfession("none");
/**
* Armorer profession. Wears a black apron. Armorers primarily trade for
-@@ -243,6 +243,13 @@ public interface Villager extends AbstractVillager {
- public NamespacedKey getKey() {
- return key;
- }
-+
-+ // Paper start
-+ @Override
-+ public @NotNull String translationKey() {
-+ return "entity.minecraft.villager." + this.key.getKey();
-+ }
-+ // Paper end
- }
-
- // Paper start - Add villager reputation API
diff --git a/src/main/java/org/bukkit/inventory/CreativeCategory.java b/src/main/java/org/bukkit/inventory/CreativeCategory.java
index 5bd252c0ae3b09fe141d131360c67bb9bfbf5422..78587d9fabe6371a23a7963917b054dbe7603694 100644
--- a/src/main/java/org/bukkit/inventory/CreativeCategory.java
@@ -453,7 +406,7 @@ index 5bd252c0ae3b09fe141d131360c67bb9bfbf5422..78587d9fabe6371a23a7963917b054db
+
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index 3da071798b89e1dd1453f4339af87933cdf0105e..e4ad3a550050c4bf9cc7a2a1082bfdf668050efe 100644
+index 971df4980db6289bd11f661956d8f1d3c52b7822..89fe32de713df3a5f2a25d72cbfe316e5b6c3f1b 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -25,7 +25,7 @@ import org.jetbrains.annotations.Nullable;
@@ -462,10 +415,10 @@ index 3da071798b89e1dd1453f4339af87933cdf0105e..e4ad3a550050c4bf9cc7a2a1082bfdf6
*/
-public class ItemStack implements Cloneable, ConfigurationSerializable, Translatable, net.kyori.adventure.text.event.HoverEventSource<net.kyori.adventure.text.event.HoverEvent.ShowItem> { // Paper
+public class ItemStack implements Cloneable, ConfigurationSerializable, Translatable, net.kyori.adventure.text.event.HoverEventSource<net.kyori.adventure.text.event.HoverEvent.ShowItem>, net.kyori.adventure.translation.Translatable { // Paper
- private Material type = Material.AIR;
- private int amount = 0;
- private MaterialData data = null;
-@@ -606,6 +606,7 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+
+ /**
+ * Creates a new ItemStack with an amount of 1.
+@@ -655,6 +655,7 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
@Override
@NotNull
@@ -473,7 +426,7 @@ index 3da071798b89e1dd1453f4339af87933cdf0105e..e4ad3a550050c4bf9cc7a2a1082bfdf6
public String getTranslationKey() {
return Bukkit.getUnsafe().getTranslationKey(this);
}
-@@ -865,5 +866,16 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -914,5 +915,16 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
ItemMeta itemMeta = getItemMeta();
return itemMeta != null && itemMeta.hasItemFlag(flag);
}
@@ -490,3 +443,16 @@ index 3da071798b89e1dd1453f4339af87933cdf0105e..e4ad3a550050c4bf9cc7a2a1082bfdf6
+ }
// Paper end
}
+diff --git a/src/main/java/org/bukkit/inventory/ItemType.java b/src/main/java/org/bukkit/inventory/ItemType.java
+index ad7f415dcd9ca38c53cae75798d84a74b39ae7de..834c6b0ba732a8f5c2bdb3163a74efb3aa687ba9 100644
+--- a/src/main/java/org/bukkit/inventory/ItemType.java
++++ b/src/main/java/org/bukkit/inventory/ItemType.java
+@@ -12,7 +12,7 @@ import org.bukkit.block.BlockType;
+ import org.jetbrains.annotations.NotNull;
+ import org.jetbrains.annotations.Nullable;
+
+-public interface ItemType extends Keyed, Translatable {
++public interface ItemType extends Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
+ //<editor-fold desc="ItemTypes" defaultstate="collapsed">
+ ItemType AIR = getItemType("air");
+ ItemType STONE = getItemType("stone");
diff --git a/patches/api/0212-Create-HoverEvent-from-ItemStack-Entity.patch b/patches/api/0212-Create-HoverEvent-from-ItemStack-Entity.patch
index 49e64dc27d..8e1749791f 100644
--- a/patches/api/0212-Create-HoverEvent-from-ItemStack-Entity.patch
+++ b/patches/api/0212-Create-HoverEvent-from-ItemStack-Entity.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Create HoverEvent from ItemStack Entity
diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
-index abf95d917eca248ff3f5a5caa008c1c87fa1e029..11e59068b8a8ef1128e3c75283d161c39e2a3a99 100644
+index bda53b9db7112e82f581af09262d59da8d7769fa..c6f910af4d6e6f2a5afe23a6a86433ac4ff4d68d 100644
--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
+++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
-@@ -204,5 +204,64 @@ public interface ItemFactory {
+@@ -203,5 +203,64 @@ public interface ItemFactory {
*/
@NotNull
ItemStack ensureServerConversions(@NotNull ItemStack item);
diff --git a/patches/api/0214-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch b/patches/api/0214-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch
index f151559a94..021e3176fa 100644
--- a/patches/api/0214-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch
+++ b/patches/api/0214-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Expose the Entity Counter to allow plugins to use valid and
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index beddcb13a598d799c8ae1cec9c01c900e38b1458..eabbe1cd18316948f70e7b56fb80827fdd3672f0 100644
+index f2909100f7abe0a650cc8b2631dddcb26380344a..29d3dccb81f48c6743c01cc875621257752ebea6 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -130,5 +130,12 @@ public interface UnsafeValues {
+@@ -139,5 +139,12 @@ public interface UnsafeValues {
byte[] serializeItem(ItemStack item);
ItemStack deserializeItem(byte[] data);
diff --git a/patches/api/0217-Player-elytra-boost-API.patch b/patches/api/0217-Player-elytra-boost-API.patch
index 935331d62f..492cfd1927 100644
--- a/patches/api/0217-Player-elytra-boost-API.patch
+++ b/patches/api/0217-Player-elytra-boost-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Player elytra boost API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index f42bc869ab78abb4f05d36c9a6563c71dfe1ea4f..e232de8c09397fd7a539f15e326a8344358a7d2a 100644
+index c6ee16a347dc10c718c2d277dba1eff76f7edbbf..873a7bafe2631d012d00eb813889b31ec02d0e30 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2729,6 +2729,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2717,6 +2717,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
@NotNull
<T> T getClientOption(@NotNull com.destroystokyo.paper.ClientOption<T> option);
diff --git a/patches/api/0218-Add-getOfflinePlayerIfCached-String.patch b/patches/api/0218-Add-getOfflinePlayerIfCached-String.patch
index 6d5e161e24..251ef86ba9 100644
--- a/patches/api/0218-Add-getOfflinePlayerIfCached-String.patch
+++ b/patches/api/0218-Add-getOfflinePlayerIfCached-String.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add getOfflinePlayerIfCached(String)
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 4e5e29251b713885eee562091ea4f253f027bdbb..6d5423f6b6b1aa013a1f77d368058e4cdf2cbe84 100644
+index 690d8584e3f74aae87038b2b8225f28f1b912362..3d52f199c7635e0c89dd6540c7dc0fbf60177d1b 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -1248,6 +1248,27 @@ public final class Bukkit {
+@@ -1249,6 +1249,27 @@ public final class Bukkit {
return server.getOfflinePlayer(name);
}
@@ -37,10 +37,10 @@ index 4e5e29251b713885eee562091ea4f253f027bdbb..6d5423f6b6b1aa013a1f77d368058e4c
* Gets the player by the given UUID, regardless if they are offline or
* online.
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 9634d82d603426979cab978f9474cc041e1cb701..f8ef98c9d266e12a3a3f69647cf4d7a9bc633419 100644
+index e8a735a3035fe214889738bd0220dae8b51a9535..94cccd613394b587c6df5b4feea354f883f83e50 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1047,6 +1047,25 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1048,6 +1048,25 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@NotNull
public OfflinePlayer getOfflinePlayer(@NotNull String name);
diff --git a/patches/api/0219-Add-ignore-discounts-API.patch b/patches/api/0219-Add-ignore-discounts-API.patch
index 89655ddef8..8d0894d13a 100644
--- a/patches/api/0219-Add-ignore-discounts-API.patch
+++ b/patches/api/0219-Add-ignore-discounts-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add ignore discounts API
diff --git a/src/main/java/org/bukkit/inventory/MerchantRecipe.java b/src/main/java/org/bukkit/inventory/MerchantRecipe.java
-index d33b66facf36587d703c29e9085289ce919ae621..afaa21b9347683fa373a938d9b1aa01c2058192a 100644
+index abea2a7ae3a2e70faa96038699bbafb494896617..03366a1d84b7037de7af18b057872c65d7a425bf 100644
--- a/src/main/java/org/bukkit/inventory/MerchantRecipe.java
+++ b/src/main/java/org/bukkit/inventory/MerchantRecipe.java
-@@ -57,6 +57,7 @@ public class MerchantRecipe implements Recipe {
+@@ -56,6 +56,7 @@ public class MerchantRecipe implements Recipe {
private int demand;
private int villagerExperience;
private float priceMultiplier;
@@ -16,7 +16,7 @@ index d33b66facf36587d703c29e9085289ce919ae621..afaa21b9347683fa373a938d9b1aa01c
public MerchantRecipe(@NotNull ItemStack result, int maxUses) {
this(result, 0, maxUses, false);
-@@ -71,6 +72,15 @@ public class MerchantRecipe implements Recipe {
+@@ -70,6 +71,15 @@ public class MerchantRecipe implements Recipe {
}
public MerchantRecipe(@NotNull ItemStack result, int uses, int maxUses, boolean experienceReward, int villagerExperience, float priceMultiplier, int demand, int specialPrice) {
@@ -32,7 +32,7 @@ index d33b66facf36587d703c29e9085289ce919ae621..afaa21b9347683fa373a938d9b1aa01c
this.result = result;
this.uses = uses;
this.maxUses = maxUses;
-@@ -283,4 +293,20 @@ public class MerchantRecipe implements Recipe {
+@@ -282,4 +292,20 @@ public class MerchantRecipe implements Recipe {
public void setPriceMultiplier(float priceMultiplier) {
this.priceMultiplier = priceMultiplier;
}
diff --git a/patches/api/0223-Add-Destroy-Speed-API.patch b/patches/api/0223-Add-Destroy-Speed-API.patch
index 6e2512b8b7..515f2fd159 100644
--- a/patches/api/0223-Add-Destroy-Speed-API.patch
+++ b/patches/api/0223-Add-Destroy-Speed-API.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Add Destroy Speed API
Co-authored-by: Jake Potrebic <[email protected]>
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 5ae85ddc2cff3145dcba877a7bf55abd818f6881..546c6709383edb0007b9a8a560af0b64f498dadd 100644
+index bf50f6f1a6cb4f2493fe29d517289913d767ba26..11fd5db6243413b86e5a3a5b8017df988b16d48b 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -680,5 +680,29 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
+@@ -679,5 +679,29 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
@NotNull
@Deprecated(forRemoval = true)
String getTranslationKey();
diff --git a/patches/api/0229-Expose-LivingEntity-hurt-direction.patch b/patches/api/0229-Expose-LivingEntity-hurt-direction.patch
index 717b97d228..ecae96fbb7 100644
--- a/patches/api/0229-Expose-LivingEntity-hurt-direction.patch
+++ b/patches/api/0229-Expose-LivingEntity-hurt-direction.patch
@@ -5,12 +5,12 @@ Subject: [PATCH] Expose LivingEntity hurt direction
diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java
-index 94f2c3167f4ce7f5f2b4ecc067739c64af0a2508..4054d2c836342f0e4bcbd33adb13f50daea5086a 100644
+index 629c19ae29ce9b215364e2fca41b1fbb608c0493..1a6b22c41863315ec577fc42996b3264598219bf 100644
--- a/src/main/java/org/bukkit/entity/HumanEntity.java
+++ b/src/main/java/org/bukkit/entity/HumanEntity.java
-@@ -348,6 +348,16 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
+@@ -345,6 +345,16 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
*/
- public void setCooldown(@NotNull Material material, int ticks);
+ public void setCooldown(@NotNull ItemType itemType, int ticks);
+ // Paper start
+ /**
@@ -26,7 +26,7 @@ index 94f2c3167f4ce7f5f2b4ecc067739c64af0a2508..4054d2c836342f0e4bcbd33adb13f50d
* Get the sleep ticks of the player. This value may be capped.
*
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 511a48df780364d054858079273fe408aa0bc749..6a4c54ea92478be6e53b62ebe4e73068b9ed4a29 100644
+index 4809201b15b82bf9526367295de5030b267cb4fa..bae92046540a7446a78114dc69a2236c1af26121 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -997,5 +997,21 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0233-Additional-Block-Material-API-s.patch b/patches/api/0233-Additional-Block-Material-API-s.patch
index 91196a2442..7abf22de4b 100644
--- a/patches/api/0233-Additional-Block-Material-API-s.patch
+++ b/patches/api/0233-Additional-Block-Material-API-s.patch
@@ -9,10 +9,10 @@ process to do this in the Bukkit API
Adds API for buildable, replaceable, burnable too.
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 546c6709383edb0007b9a8a560af0b64f498dadd..6c0249863601e8f0fc06828574315a9f0af66e5b 100644
+index 11fd5db6243413b86e5a3a5b8017df988b16d48b..30c7dc35bea310358ba92a8488981fff8132c049 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -439,6 +439,42 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
+@@ -438,6 +438,42 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
*/
boolean isLiquid();
diff --git a/patches/api/0234-Add-API-to-get-Material-from-Boats-and-Minecarts.patch b/patches/api/0234-Add-API-to-get-Material-from-Boats-and-Minecarts.patch
index d297dd5c24..1d418d6e84 100644
--- a/patches/api/0234-Add-API-to-get-Material-from-Boats-and-Minecarts.patch
+++ b/patches/api/0234-Add-API-to-get-Material-from-Boats-and-Minecarts.patch
@@ -5,26 +5,35 @@ Subject: [PATCH] Add API to get Material from Boats and Minecarts
diff --git a/src/main/java/org/bukkit/entity/Boat.java b/src/main/java/org/bukkit/entity/Boat.java
-index 88852215d01f3fc4866449f7b826f6603b0ed9d8..f7548098bcdd033d9c530fdc584fc5538c635ca1 100644
+index d6e114107c3990d91b179cd2cc3a8c04d4df0a2a..7410d0ec4f00ae275544ea67a0908df0e9a36ceb 100644
--- a/src/main/java/org/bukkit/entity/Boat.java
+++ b/src/main/java/org/bukkit/entity/Boat.java
-@@ -175,4 +175,14 @@ public interface Boat extends Vehicle {
+@@ -175,4 +175,23 @@ public interface Boat extends Vehicle {
ON_LAND,
IN_AIR;
}
+
+ // Paper start
+ /**
-+ * Gets the {@link Material} that represents this Boat type.
++ * Gets the {@link org.bukkit.Material} that represents this Boat type.
+ *
+ * @return the boat material.
++ * @deprecated use {@link #getBoatItem()}
+ */
+ @NotNull
-+ public Material getBoatMaterial();
++ @Deprecated
++ public org.bukkit.Material getBoatMaterial();
++
++ /**
++ * Gets the {@link ItemType} that represents this Boat type.
++ *
++ * @return the boat item type
++ */
++ @NotNull ItemType getBoatItem();
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/entity/Minecart.java b/src/main/java/org/bukkit/entity/Minecart.java
-index 7f9c4d4b430a3f0276461346ff2621bacf864075..bc1e62759c995a1463ebcd10d73c7d502c9acc45 100644
+index 177e12108f6108e4858910cef95f72110762b041..320058c7fc7b965ccf134b0686bfaacf8ed8111d 100644
--- a/src/main/java/org/bukkit/entity/Minecart.java
+++ b/src/main/java/org/bukkit/entity/Minecart.java
@@ -1,5 +1,6 @@
diff --git a/patches/api/0243-Add-API-to-get-exact-interaction-point-in-PlayerInte.patch b/patches/api/0243-Add-API-to-get-exact-interaction-point-in-PlayerInte.patch
index afc3f45d28..1935381bab 100644
--- a/patches/api/0243-Add-API-to-get-exact-interaction-point-in-PlayerInte.patch
+++ b/patches/api/0243-Add-API-to-get-exact-interaction-point-in-PlayerInte.patch
@@ -5,16 +5,16 @@ Subject: [PATCH] Add API to get exact interaction point in PlayerInteractEvent
diff --git a/src/main/java/org/bukkit/event/player/PlayerInteractEvent.java b/src/main/java/org/bukkit/event/player/PlayerInteractEvent.java
-index 1208e1f8c2163d83c5b12bbb9b7ac044c72380e0..a01f86e6aba8b66ecc713da0787cd861e2930a2a 100644
+index f5bb9eb36d810d2ad988b71951b4029c70704287..16a0d738706b7aac1490a875a7052ce5490c6655 100644
--- a/src/main/java/org/bukkit/event/player/PlayerInteractEvent.java
+++ b/src/main/java/org/bukkit/event/player/PlayerInteractEvent.java
@@ -1,5 +1,6 @@
package org.bukkit.event.player;
+import org.bukkit.Location;
- import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
+ import org.bukkit.entity.Player;
@@ -34,22 +35,30 @@ public class PlayerInteractEvent extends PlayerEvent implements Cancellable {
private Result useClickedBlock;
private Result useItemInHand;
diff --git a/patches/api/0244-Add-sendOpLevel-API.patch b/patches/api/0244-Add-sendOpLevel-API.patch
index 5ba481a68d..551dc69c36 100644
--- a/patches/api/0244-Add-sendOpLevel-API.patch
+++ b/patches/api/0244-Add-sendOpLevel-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add sendOpLevel API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index e232de8c09397fd7a539f15e326a8344358a7d2a..4e8f58d57d0273ef6a9ed75cdf195149dea44df7 100644
+index 873a7bafe2631d012d00eb813889b31ec02d0e30..48f55ea0db1bd9ac24e44b1f1fa83ea58609fd48 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2742,6 +2742,17 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2730,6 +2730,17 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
@Nullable
Firework boostElytra(@NotNull ItemStack firework);
diff --git a/patches/api/0246-Add-StructuresLocateEvent.patch b/patches/api/0246-Add-StructuresLocateEvent.patch
index 51a892b911..13d19600c8 100644
--- a/patches/api/0246-Add-StructuresLocateEvent.patch
+++ b/patches/api/0246-Add-StructuresLocateEvent.patch
@@ -505,13 +505,13 @@ index 0000000000000000000000000000000000000000..1e7b53f9bc13dcd5a0a4a40004591e4f
+ }
+}
diff --git a/src/main/java/org/bukkit/Registry.java b/src/main/java/org/bukkit/Registry.java
-index 09e3c2872462da546b891cbc396aaffb77f6aadf..c21aefb63678d78a441436761373e9710c1e543a 100644
+index e84b3e488003bff973b77cec08f7429fce6364fa..413156927cfea8e73f9f3475e1a0da99169b8d4d 100644
--- a/src/main/java/org/bukkit/Registry.java
+++ b/src/main/java/org/bukkit/Registry.java
-@@ -228,6 +228,15 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
- return GameEvent.getByKey(key);
- }
- };
+@@ -259,6 +259,16 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
+ */
+ Registry<PotionEffectType> POTION_EFFECT_TYPE = Objects.requireNonNull(Bukkit.getRegistry(PotionEffectType.class), "No registry present for Potion Effect Type. This is a bug.");
+
+ // Paper start
+ /**
+ * Configured structures.
@@ -519,8 +519,9 @@ index 09e3c2872462da546b891cbc396aaffb77f6aadf..c21aefb63678d78a441436761373e971
+ * @deprecated use {@link #STRUCTURE}
+ */
+ @Deprecated(forRemoval = true)
-+ Registry<io.papermc.paper.world.structure.ConfiguredStructure> CONFIGURED_STRUCTURE = Bukkit.getRegistry(io.papermc.paper.world.structure.ConfiguredStructure.class);
++ Registry<io.papermc.paper.world.structure.ConfiguredStructure> CONFIGURED_STRUCTURE = Objects.requireNonNull(Bukkit.getRegistry(io.papermc.paper.world.structure.ConfiguredStructure.class), "No registry present for Configured Structure. This is a bug.");
+ // Paper end
-
++
/**
* Get the object by its key.
+ *
diff --git a/patches/api/0248-Added-missing-vanilla-tags.patch b/patches/api/0248-Added-missing-vanilla-tags.patch
index 0b81d3e855..1ab924744a 100644
--- a/patches/api/0248-Added-missing-vanilla-tags.patch
+++ b/patches/api/0248-Added-missing-vanilla-tags.patch
@@ -5,18 +5,18 @@ Subject: [PATCH] Added missing vanilla tags
diff --git a/src/main/java/org/bukkit/Tag.java b/src/main/java/org/bukkit/Tag.java
-index 82d34e9aae42dfafd900dc0e610bf1dc82a5a6f3..3e9f1ee242b8087759c98b54ebb3cc3b8f5fcbd5 100644
+index bbf7dd8ca90ba1c3626e87ca221201568163101f..974dcacb09ec05c98a4a6af28f86694b97b9c925 100644
--- a/src/main/java/org/bukkit/Tag.java
+++ b/src/main/java/org/bukkit/Tag.java
-@@ -759,6 +759,12 @@ public interface Tag<T extends Keyed> extends Keyed {
+@@ -761,6 +761,12 @@ public interface Tag<T extends Keyed> extends Keyed {
* Vanilla item tag representing all chest boat items.
*/
- Tag<Material> ITEMS_CHEST_BOATS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("chest_boats"), Material.class);
+ Tag<ItemType> ITEMS_CHEST_BOATS = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("chest_boats"), ItemType.class);
+ // Paper start
+ /**
+ * Vanilla item tag representing all non-flammable wood items.
+ */
-+ Tag<Material> ITEMS_NON_FLAMMABLE_WOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("non_flammable_wood"), Material.class);
++ Tag<ItemType> ITEMS_NON_FLAMMABLE_WOOD = Bukkit.getTag(REGISTRY_ITEMS, NamespacedKey.minecraft("non_flammable_wood"), ItemType.class);
+ // Paper end
/**
* Vanilla item tag representing all fish items.
diff --git a/patches/api/0257-Add-missing-effects.patch b/patches/api/0257-Add-missing-effects.patch
index 1a3589e272..31474be3db 100644
--- a/patches/api/0257-Add-missing-effects.patch
+++ b/patches/api/0257-Add-missing-effects.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add missing effects
diff --git a/src/main/java/org/bukkit/Effect.java b/src/main/java/org/bukkit/Effect.java
-index 879d637691683ca862045402f74b751a892bf3ff..3ae64e7e42338a2a550917ccd01d755a1ba0bf03 100644
+index 7dc00d1ab2e845ef57c650faea77363023964712..1c7dd6f7e2eff67a025461ef0119037ddf0e0073 100644
--- a/src/main/java/org/bukkit/Effect.java
+++ b/src/main/java/org/bukkit/Effect.java
-@@ -337,7 +337,100 @@ public enum Effect {
+@@ -339,7 +339,100 @@ public enum Effect {
* block.
*/
OXIDISED_COPPER_SCRAPE(3005, Type.VISUAL),
@@ -109,7 +109,7 @@ index 879d637691683ca862045402f74b751a892bf3ff..3ae64e7e42338a2a550917ccd01d755a
private final int id;
private final Type type;
-@@ -397,10 +490,22 @@ public enum Effect {
+@@ -399,10 +492,22 @@ public enum Effect {
static {
for (Effect effect : values()) {
diff --git a/patches/api/0259-Cache-the-result-of-Material-isBlock.patch b/patches/api/0259-Cache-the-result-of-Material-isBlock.patch
index 49dab657f2..28a7d822c4 100644
--- a/patches/api/0259-Cache-the-result-of-Material-isBlock.patch
+++ b/patches/api/0259-Cache-the-result-of-Material-isBlock.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Cache the result of Material#isBlock
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
-index 6a89eab53f21bc4420e616cc299864fb564e1045..37898f36f859eda945471fa9b00fcabbc3d211df 100644
+index be4f6fbf013a4259b04f805b4265750bb7fcd0c3..ffcb8e24a553f0cd81ec8c48511f28d284dbbd42 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
-@@ -4394,6 +4394,7 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
+@@ -4397,6 +4397,7 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
public final Class<?> data;
private final boolean legacy;
private final NamespacedKey key;
@@ -16,7 +16,7 @@ index 6a89eab53f21bc4420e616cc299864fb564e1045..37898f36f859eda945471fa9b00fcabb
private Material(final int id) {
this(id, 64);
-@@ -4592,6 +4593,11 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
+@@ -4596,6 +4597,11 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
* @return true if this material is a block
*/
public boolean isBlock() {
@@ -28,7 +28,7 @@ index 6a89eab53f21bc4420e616cc299864fb564e1045..37898f36f859eda945471fa9b00fcabb
switch (this) {
//<editor-fold defaultstate="collapsed" desc="isBlock">
case ACACIA_BUTTON:
-@@ -5778,6 +5784,7 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
+@@ -5782,6 +5788,7 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
static {
for (Material material : values()) {
BY_NAME.put(material.name(), material);
diff --git a/patches/api/0263-Add-Block-isValidTool.patch b/patches/api/0263-Add-Block-isValidTool.patch
index 182e364647..23731371d6 100644
--- a/patches/api/0263-Add-Block-isValidTool.patch
+++ b/patches/api/0263-Add-Block-isValidTool.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add Block#isValidTool
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 6c0249863601e8f0fc06828574315a9f0af66e5b..93b9b57c95a0d24e885a205cd9d9e05a5631806a 100644
+index 30c7dc35bea310358ba92a8488981fff8132c049..6f6d7816f4e928e849e6e4f7265c977437ccf1bf 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -230,6 +230,15 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
+@@ -229,6 +229,15 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
public static int getBlockKeyZ(long packed) {
return (int) ((packed << 10) >> 37);
}
diff --git a/patches/api/0264-Expand-world-key-API.patch b/patches/api/0264-Expand-world-key-API.patch
index 1908ecc58e..4e1b268119 100644
--- a/patches/api/0264-Expand-world-key-API.patch
+++ b/patches/api/0264-Expand-world-key-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Expand world key API
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 6d5423f6b6b1aa013a1f77d368058e4cdf2cbe84..be32ddb8ad5d6290b76cb520d159d456ed16f1b1 100644
+index 3d52f199c7635e0c89dd6540c7dc0fbf60177d1b..ebe6ba1f62a8538f5a1115248e87b80285368543 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -830,6 +830,18 @@ public final class Bukkit {
+@@ -831,6 +831,18 @@ public final class Bukkit {
public static World getWorld(@NotNull UUID uid) {
return server.getWorld(uid);
}
@@ -28,10 +28,10 @@ index 6d5423f6b6b1aa013a1f77d368058e4cdf2cbe84..be32ddb8ad5d6290b76cb520d159d456
/**
* Create a new virtual {@link WorldBorder}.
diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java
-index 501dd5a26c27294420821b3d75f8938596afb1a8..71ef9b479888aa83455757560b60745572c7196d 100644
+index 2349a935f87122bdda23c78142c810ed8ed80f4f..7c4cfc274ab7840d2474498b3e5d9251d6e731e9 100644
--- a/src/main/java/org/bukkit/RegionAccessor.java
+++ b/src/main/java/org/bukkit/RegionAccessor.java
-@@ -19,7 +19,7 @@ import org.jetbrains.annotations.Nullable;
+@@ -20,7 +20,7 @@ import org.jetbrains.annotations.Nullable;
* A RegionAccessor gives access to getting, modifying and spawning {@link Biome}, {@link BlockState} and {@link Entity},
* as well as generating some basic structures.
*/
@@ -40,7 +40,7 @@ index 501dd5a26c27294420821b3d75f8938596afb1a8..71ef9b479888aa83455757560b607455
/**
* Gets the {@link Biome} at the given {@link Location}.
-@@ -428,5 +428,14 @@ public interface RegionAccessor {
+@@ -431,5 +431,14 @@ public interface RegionAccessor {
*/
@NotNull
io.papermc.paper.world.MoonPhase getMoonPhase();
@@ -56,10 +56,10 @@ index 501dd5a26c27294420821b3d75f8938596afb1a8..71ef9b479888aa83455757560b607455
// Paper end
}
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index f8ef98c9d266e12a3a3f69647cf4d7a9bc633419..d1d035ee86264b38b6bb50135d031946daf25a00 100644
+index 94cccd613394b587c6df5b4feea354f883f83e50..3678de1b963dfb61de487b63ebf4dddd18ff8a34 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -694,6 +694,17 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -695,6 +695,17 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@Nullable
public World getWorld(@NotNull UUID uid);
@@ -78,10 +78,10 @@ index f8ef98c9d266e12a3a3f69647cf4d7a9bc633419..d1d035ee86264b38b6bb50135d031946
* Create a new virtual {@link WorldBorder}.
* <p>
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index eabbe1cd18316948f70e7b56fb80827fdd3672f0..a00d93eee9710bb0fdf0fb791ef1a9262f89ef60 100644
+index 29d3dccb81f48c6743c01cc875621257752ebea6..413085e6793a17762685198a5416cc3dfcc88995 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -137,5 +137,10 @@ public interface UnsafeValues {
+@@ -146,5 +146,10 @@ public interface UnsafeValues {
* Use this when sending custom packets, so that there are no collisions on the client or server.
*/
public int nextEntityId();
diff --git a/patches/api/0265-Item-Rarity-API.patch b/patches/api/0265-Item-Rarity-API.patch
index 5c25c66d65..489c4f72f1 100644
--- a/patches/api/0265-Item-Rarity-API.patch
+++ b/patches/api/0265-Item-Rarity-API.patch
@@ -39,10 +39,10 @@ index 0000000000000000000000000000000000000000..74ef8395cc040ce488c2acaa416db202
+ }
+}
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
-index 37898f36f859eda945471fa9b00fcabbc3d211df..85d19b0c659c75472aa91d18fdf17f25bd6a2e04 100644
+index ffcb8e24a553f0cd81ec8c48511f28d284dbbd42..d6c3c6b320e4996dfbc185d594d94efbedf453c9 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
-@@ -4460,6 +4460,17 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
+@@ -4464,6 +4464,20 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
return Bukkit.getUnsafe().getBlockTranslationKey(this);
}
}
@@ -52,33 +52,27 @@ index 37898f36f859eda945471fa9b00fcabbc3d211df..85d19b0c659c75472aa91d18fdf17f25
+ * Use {@link #isItem()} before this.
+ *
+ * @return the item rarity
++ * @deprecated use {@link ItemType#getItemRarity()}
+ */
++ @Deprecated
+ @NotNull
+ public io.papermc.paper.inventory.ItemRarity getItemRarity() {
-+ return Bukkit.getUnsafe().getItemRarity(this);
++ Preconditions.checkArgument(this.isItem(), this + " must be an item");
++ return this.asItemType().getItemRarity();
+ }
// Paper end
/**
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index a00d93eee9710bb0fdf0fb791ef1a9262f89ef60..f79784e1823f646181a434a6dbce3bac0eaf25c9 100644
+index 413085e6793a17762685198a5416cc3dfcc88995..4fbb9153c34ef95170e62e4e519ce4ea2e685558 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -142,5 +142,22 @@ public interface UnsafeValues {
+@@ -151,5 +151,13 @@ public interface UnsafeValues {
* Just don't use it.
*/
@org.jetbrains.annotations.NotNull String getMainLevelName();
+
+ /**
-+ * Gets the item rarity of a material. The material <b>MUST</b> be an item.
-+ * Use {@link Material#isItem()} before this.
-+ *
-+ * @param material the material to get the rarity of
-+ * @return the item rarity
-+ */
-+ public io.papermc.paper.inventory.ItemRarity getItemRarity(Material material);
-+
-+ /**
+ * Gets the item rarity of the itemstack. The rarity can change based on enchantements.
+ *
+ * @param itemStack the itemstack to get the rarity of
@@ -88,10 +82,10 @@ index a00d93eee9710bb0fdf0fb791ef1a9262f89ef60..f79784e1823f646181a434a6dbce3bac
// Paper end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index e4ad3a550050c4bf9cc7a2a1082bfdf668050efe..4f867ba2bc9b1a7c277e4a5f0ea8b452315f3272 100644
+index 89fe32de713df3a5f2a25d72cbfe316e5b6c3f1b..d4bc360cf7f0b0fbed07dc10b5778605fde7c219 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -877,5 +877,15 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -926,5 +926,15 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
public @NotNull String translationKey() {
return Bukkit.getUnsafe().getTranslationKey(this);
}
@@ -107,3 +101,22 @@ index e4ad3a550050c4bf9cc7a2a1082bfdf668050efe..4f867ba2bc9b1a7c277e4a5f0ea8b452
+ }
// Paper end
}
+diff --git a/src/main/java/org/bukkit/inventory/ItemType.java b/src/main/java/org/bukkit/inventory/ItemType.java
+index 834c6b0ba732a8f5c2bdb3163a74efb3aa687ba9..27a1d255b8fcbd6487e4d4eb1abf784b43eaf90e 100644
+--- a/src/main/java/org/bukkit/inventory/ItemType.java
++++ b/src/main/java/org/bukkit/inventory/ItemType.java
+@@ -1371,4 +1371,14 @@ public interface ItemType extends Keyed, Translatable, net.kyori.adventure.trans
+ */
+ @Nullable
+ CreativeCategory getCreativeCategory();
++
++ // Paper start - Item Rarity API
++ /**
++ * Returns the item rarity for the item.
++ *
++ * @return the item rarity
++ */
++ @NotNull
++ io.papermc.paper.inventory.ItemRarity getItemRarity();
++ // Paper end
+ }
diff --git a/patches/api/0267-add-isDeeplySleeping-to-HumanEntity.patch b/patches/api/0267-add-isDeeplySleeping-to-HumanEntity.patch
index fc6f6dcab3..e7c32c835c 100644
--- a/patches/api/0267-add-isDeeplySleeping-to-HumanEntity.patch
+++ b/patches/api/0267-add-isDeeplySleeping-to-HumanEntity.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] add isDeeplySleeping to HumanEntity
diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java
-index 4054d2c836342f0e4bcbd33adb13f50daea5086a..ff1ebe184ba5a1bdc8e2784025b07d3bb90a5078 100644
+index 1a6b22c41863315ec577fc42996b3264598219bf..c7757f4de66cd6d136266a15801fe31e9d61538e 100644
--- a/src/main/java/org/bukkit/entity/HumanEntity.java
+++ b/src/main/java/org/bukkit/entity/HumanEntity.java
-@@ -358,6 +358,15 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
+@@ -355,6 +355,15 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
void setHurtDirection(float hurtDirection);
// Paper end
diff --git a/patches/api/0271-More-World-API.patch b/patches/api/0271-More-World-API.patch
index 5567e22dc7..78e492ca6e 100644
--- a/patches/api/0271-More-World-API.patch
+++ b/patches/api/0271-More-World-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] More World API
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
-index 0c5ce79c04e8193db248a221f519d80a944ef6ba..fff4d89e978bd0050a298ab8f43401b6c600e5a2 100644
+index f5845d33dc3512573396f7784af9f7265356fce8..c63832afe080bf1cd5f66cf375079ed779c47ffb 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
-@@ -3716,6 +3716,114 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+@@ -3701,6 +3701,114 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@Nullable
StructureSearchResult locateNearestStructure(@NotNull Location origin, @NotNull Structure structure, int radius, boolean findUnexplored);
diff --git a/patches/api/0273-Introduce-beacon-activation-deactivation-events.patch b/patches/api/0273-Introduce-beacon-activation-deactivation-events.patch
index c2f0577191..8f63bc98be 100644
--- a/patches/api/0273-Introduce-beacon-activation-deactivation-events.patch
+++ b/patches/api/0273-Introduce-beacon-activation-deactivation-events.patch
@@ -52,15 +52,15 @@ index 0000000000000000000000000000000000000000..7575ca7dd84dee89528ec2e5e5f99f97
+}
diff --git a/src/main/java/io/papermc/paper/event/block/BeaconDeactivatedEvent.java b/src/main/java/io/papermc/paper/event/block/BeaconDeactivatedEvent.java
new file mode 100644
-index 0000000000000000000000000000000000000000..34f18468b4cfc08717cc3442778c9e85124e5a22
+index 0000000000000000000000000000000000000000..46fd5eac7b6b1eb73016fdc1dfd97aa752450496
--- /dev/null
+++ b/src/main/java/io/papermc/paper/event/block/BeaconDeactivatedEvent.java
@@ -0,0 +1,43 @@
+package io.papermc.paper.event.block;
+
-+import org.bukkit.Material;
+import org.bukkit.block.Beacon;
+import org.bukkit.block.Block;
++import org.bukkit.block.BlockType;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.block.BlockEvent;
+import org.jetbrains.annotations.NotNull;
@@ -70,7 +70,7 @@ index 0000000000000000000000000000000000000000..34f18468b4cfc08717cc3442778c9e85
+ * Called when a beacon is deactivated, either because its base block(s) or itself were destroyed.
+ */
+public class BeaconDeactivatedEvent extends BlockEvent {
-+ private static final HandlerList handlers = new HandlerList();
++ private static final HandlerList HANDLER_LIST = new HandlerList();
+
+ public BeaconDeactivatedEvent(@NotNull Block block) {
+ super(block);
@@ -85,17 +85,17 @@ index 0000000000000000000000000000000000000000..34f18468b4cfc08717cc3442778c9e85
+ */
+ @Nullable
+ public Beacon getBeacon() {
-+ return block.getType() == Material.BEACON ? (Beacon) block.getState() : null;
++ return this.block.getType() == BlockType.BEACON ? (Beacon) this.block.getState() : null;
+ }
+
+ @NotNull
+ @Override
+ public HandlerList getHandlers() {
-+ return handlers;
++ return HANDLER_LIST;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
-+ return handlers;
++ return HANDLER_LIST;
+ }
+}
diff --git a/patches/api/0280-Inventory-close.patch b/patches/api/0280-Inventory-close.patch
index 87dfa1a083..fb4e9602ab 100644
--- a/patches/api/0280-Inventory-close.patch
+++ b/patches/api/0280-Inventory-close.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Inventory#close
diff --git a/src/main/java/org/bukkit/inventory/Inventory.java b/src/main/java/org/bukkit/inventory/Inventory.java
-index 129b5ab5062beeb9bb52465a788bc3a3aee9c49e..0d519813c12d98b28d62e6d01d7ec6e8c2dba3c3 100644
+index af6bfacd5f209e75b7c5f37201c3ba9e8e74d885..f4f4c7a0837d2a9a5390fc76ca2054962f5923c1 100644
--- a/src/main/java/org/bukkit/inventory/Inventory.java
+++ b/src/main/java/org/bukkit/inventory/Inventory.java
-@@ -355,6 +355,15 @@ public interface Inventory extends Iterable<ItemStack> {
+@@ -354,6 +354,15 @@ public interface Inventory extends Iterable<ItemStack> {
*/
public void clear();
diff --git a/patches/api/0282-Add-basic-Datapack-API.patch b/patches/api/0282-Add-basic-Datapack-API.patch
index 0582d74ff9..060f097eb8 100644
--- a/patches/api/0282-Add-basic-Datapack-API.patch
+++ b/patches/api/0282-Add-basic-Datapack-API.patch
@@ -70,10 +70,10 @@ index 0000000000000000000000000000000000000000..58f78d5e91beacaf710f62461cf869f7
+
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index be32ddb8ad5d6290b76cb520d159d456ed16f1b1..a6fef51a8435eced8c2981588ae98046c42d8ed4 100644
+index ebe6ba1f62a8538f5a1115248e87b80285368543..a345ea2f9a7cdb30df07aab305e2bb42100bab63 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -316,9 +316,11 @@ public final class Bukkit {
+@@ -317,9 +317,11 @@ public final class Bukkit {
/**
* Get the DataPack Manager.
*
@@ -85,7 +85,7 @@ index be32ddb8ad5d6290b76cb520d159d456ed16f1b1..a6fef51a8435eced8c2981588ae98046
public static DataPackManager getDataPackManager() {
return server.getDataPackManager();
}
-@@ -2423,6 +2425,14 @@ public final class Bukkit {
+@@ -2427,6 +2429,14 @@ public final class Bukkit {
public static com.destroystokyo.paper.entity.ai.MobGoals getMobGoals() {
return server.getMobGoals();
}
@@ -101,10 +101,10 @@ index be32ddb8ad5d6290b76cb520d159d456ed16f1b1..a6fef51a8435eced8c2981588ae98046
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index d1d035ee86264b38b6bb50135d031946daf25a00..529054834865813520ebe6784894e759c22ec4f4 100644
+index 3678de1b963dfb61de487b63ebf4dddd18ff8a34..90129c2d9141969241dcc483b82290df64844c0c 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -254,9 +254,11 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -255,9 +255,11 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
/**
* Get the DataPack Manager.
*
@@ -116,7 +116,7 @@ index d1d035ee86264b38b6bb50135d031946daf25a00..529054834865813520ebe6784894e759
public DataPackManager getDataPackManager();
/**
-@@ -2110,5 +2112,11 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -2114,5 +2116,11 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/
@NotNull
com.destroystokyo.paper.entity.ai.MobGoals getMobGoals();
@@ -144,7 +144,7 @@ index 744d8c055b0e643e2e0d12218af4ef856f56340f..2ac72913e2a5b70eb98a4f25f865855b
/**
diff --git a/src/main/java/org/bukkit/packs/DataPackManager.java b/src/main/java/org/bukkit/packs/DataPackManager.java
-index d7fb6310e6b1050c496d748388310bc6f8d78e23..2cd505046277febe010e9476539b064321d8b2ec 100644
+index 764daa5d8da4618bdb6146e317e2d822c9b7934e..f48c6faa96a1331af183c217c5d6aa8ba596f843 100644
--- a/src/main/java/org/bukkit/packs/DataPackManager.java
+++ b/src/main/java/org/bukkit/packs/DataPackManager.java
@@ -11,8 +11,10 @@ import org.jetbrains.annotations.Nullable;
diff --git a/patches/api/0284-ItemStack-repair-check-API.patch b/patches/api/0284-ItemStack-repair-check-API.patch
index d35e2fa9ad..2ef45489f9 100644
--- a/patches/api/0284-ItemStack-repair-check-API.patch
+++ b/patches/api/0284-ItemStack-repair-check-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] ItemStack repair check API
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index a27e14e00d759d6c15530ef038bcf4b5cbd9f120..00e61ab3103c86c9aabcdfa2fd4c565adcc091da 100644
+index 5a5e5bd70322700c92fd8caf781dab662643c824..b134d63351faa0d6e5469e0a09442ab82f8d60e3 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
@@ -160,6 +160,16 @@ public interface UnsafeValues {
@@ -26,10 +26,10 @@ index a27e14e00d759d6c15530ef038bcf4b5cbd9f120..00e61ab3103c86c9aabcdfa2fd4c565a
* Returns the server's protocol version.
*
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index 4f867ba2bc9b1a7c277e4a5f0ea8b452315f3272..2d945516ec65ffe103479aea218b3002cc572dc1 100644
+index d4bc360cf7f0b0fbed07dc10b5778605fde7c219..99768256af87b72b3366898278b52acef4ae4ded 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -887,5 +887,27 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -936,5 +936,27 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
public io.papermc.paper.inventory.ItemRarity getRarity() {
return Bukkit.getUnsafe().getItemStackRarity(this);
}
diff --git a/patches/api/0285-More-Enchantment-API.patch b/patches/api/0285-More-Enchantment-API.patch
index 0ccfe049b4..1b41d8b400 100644
--- a/patches/api/0285-More-Enchantment-API.patch
+++ b/patches/api/0285-More-Enchantment-API.patch
@@ -35,10 +35,10 @@ index 0000000000000000000000000000000000000000..e6a40c1fcea761bd66743b50e3da3d14
+ }
+}
diff --git a/src/main/java/org/bukkit/enchantments/Enchantment.java b/src/main/java/org/bukkit/enchantments/Enchantment.java
-index 1b6f42ff632b1f3f5034c825e99b72f389a890b4..4cfe8501368f601fdd4203570f4e6a8f6f9685e6 100644
+index 0eb240094901b66c118c5a68bc0b2d0396ec6835..5fa52263028f983bc6ba79cc47f6f71709fb117c 100644
--- a/src/main/java/org/bukkit/enchantments/Enchantment.java
+++ b/src/main/java/org/bukkit/enchantments/Enchantment.java
-@@ -273,11 +273,7 @@ public abstract class Enchantment implements Keyed, net.kyori.adventure.translat
+@@ -267,11 +267,7 @@ public abstract class Enchantment implements Keyed, net.kyori.adventure.translat
* Cursed enchantments are found the same way treasure enchantments are
*
* @return true if the enchantment is cursed
@@ -50,7 +50,7 @@ index 1b6f42ff632b1f3f5034c825e99b72f389a890b4..4cfe8501368f601fdd4203570f4e6a8f
public abstract boolean isCursed();
/**
-@@ -311,6 +307,46 @@ public abstract class Enchantment implements Keyed, net.kyori.adventure.translat
+@@ -305,6 +301,46 @@ public abstract class Enchantment implements Keyed, net.kyori.adventure.translat
* @return the name of the enchantment with {@code level} applied
*/
public abstract net.kyori.adventure.text.@NotNull Component displayName(int level);
@@ -96,12 +96,12 @@ index 1b6f42ff632b1f3f5034c825e99b72f389a890b4..4cfe8501368f601fdd4203570f4e6a8f
+ public abstract java.util.Set<org.bukkit.inventory.EquipmentSlot> getActiveSlots();
// Paper end
- @Override
+ /**
diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
-index a39f9c078f42451bd122f3e3729d10ca299bee5f..5f42a9c0c43ced10b754170d7c83793a99fce81b 100644
+index fa6613efcfcee70507c77ee40460d35c3957d91b..bfdac08bfcb83b20397675066e48ae2572277ada 100644
--- a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
+++ b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
-@@ -74,5 +74,32 @@ public class EnchantmentWrapper extends Enchantment {
+@@ -82,5 +82,32 @@ public class EnchantmentWrapper extends Enchantment {
public @NotNull String translationKey() {
return getEnchantment().translationKey();
}
diff --git a/patches/api/0287-ItemStack-editMeta.patch b/patches/api/0287-ItemStack-editMeta.patch
index 7893a035c9..f26d30a2e3 100644
--- a/patches/api/0287-ItemStack-editMeta.patch
+++ b/patches/api/0287-ItemStack-editMeta.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] ItemStack#editMeta
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index 2d945516ec65ffe103479aea218b3002cc572dc1..f9faef1b73b5027a3d22e76a0b33b7c952f3ae08 100644
+index 99768256af87b72b3366898278b52acef4ae4ded..3a5d5968f1c3b75292c06606733c9f449d6b550f 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -547,6 +547,50 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -596,6 +596,50 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
return result.ensureServerConversions(); // Paper
}
diff --git a/patches/api/0289-Attributes-API-for-item-defaults.patch b/patches/api/0289-Attributes-API-for-item-defaults.patch
index abd3dd1e69..41876b8b3e 100644
--- a/patches/api/0289-Attributes-API-for-item-defaults.patch
+++ b/patches/api/0289-Attributes-API-for-item-defaults.patch
@@ -5,12 +5,12 @@ Subject: [PATCH] Attributes API for item defaults
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
-index 85d19b0c659c75472aa91d18fdf17f25bd6a2e04..5fe8207fd9b76564b0547eec5e3db2b7abed0150 100644
+index d6c3c6b320e4996dfbc185d594d94efbedf453c9..8c900d455d37713ec6395caafa752bf8e2e89c58 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
-@@ -4471,6 +4471,21 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
- public io.papermc.paper.inventory.ItemRarity getItemRarity() {
- return Bukkit.getUnsafe().getItemRarity(this);
+@@ -4478,6 +4478,21 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
+ Preconditions.checkArgument(this.isItem(), this + " must be an item");
+ return this.asItemType().getItemRarity();
}
+
+ /**
@@ -25,31 +25,8 @@ index 85d19b0c659c75472aa91d18fdf17f25bd6a2e04..5fe8207fd9b76564b0547eec5e3db2b7
+ @NotNull
+ @Deprecated
+ public Multimap<Attribute, AttributeModifier> getItemAttributes(@NotNull EquipmentSlot equipmentSlot) {
-+ return Bukkit.getUnsafe().getItemAttributes(this, equipmentSlot);
++ return this.getDefaultAttributeModifiers(equipmentSlot);
+ }
// Paper end
/**
-diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index 00e61ab3103c86c9aabcdfa2fd4c565adcc091da..a9e7c64e1f98ff73c1804466d7c79eaf343dde7c 100644
---- a/src/main/java/org/bukkit/UnsafeValues.java
-+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -170,6 +170,18 @@ public interface UnsafeValues {
- */
- public boolean isValidRepairItemStack(@org.jetbrains.annotations.NotNull ItemStack itemToBeRepaired, @org.jetbrains.annotations.NotNull ItemStack repairMaterial);
-
-+ /**
-+ * Returns an immutable multimap of attributes for the material and slot.
-+ * {@link Material#isItem()} must be true for this material.
-+ *
-+ * @param material the material
-+ * @param equipmentSlot the slot to get the attributes for
-+ * @throws IllegalArgumentException if {@link Material#isItem()} is false
-+ * @return an immutable multimap of attributes
-+ */
-+ @org.jetbrains.annotations.NotNull
-+ public Multimap<Attribute, AttributeModifier> getItemAttributes(@org.jetbrains.annotations.NotNull Material material, @org.jetbrains.annotations.NotNull EquipmentSlot equipmentSlot);
-+
- /**
- * Returns the server's protocol version.
- *
diff --git a/patches/api/0296-Add-more-line-of-sight-methods.patch b/patches/api/0296-Add-more-line-of-sight-methods.patch
index f8182b74f7..4a5b35d021 100644
--- a/patches/api/0296-Add-more-line-of-sight-methods.patch
+++ b/patches/api/0296-Add-more-line-of-sight-methods.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add more line of sight methods
diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java
-index 71ef9b479888aa83455757560b60745572c7196d..cd83348de3f82b3fddcf2d4bb9187ec8173b0e40 100644
+index 7c4cfc274ab7840d2474498b3e5d9251d6e731e9..78396b7f754641de520f95d2015a9c6f1d933e7f 100644
--- a/src/main/java/org/bukkit/RegionAccessor.java
+++ b/src/main/java/org/bukkit/RegionAccessor.java
-@@ -437,5 +437,13 @@ public interface RegionAccessor extends Keyed { // Paper
+@@ -440,5 +440,13 @@ public interface RegionAccessor extends Keyed { // Paper
@NotNull
@Override
NamespacedKey getKey();
@@ -23,7 +23,7 @@ index 71ef9b479888aa83455757560b60745572c7196d..cd83348de3f82b3fddcf2d4bb9187ec8
// Paper end
}
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 6a4c54ea92478be6e53b62ebe4e73068b9ed4a29..626eb1796d5a19d110855e2fb95cb4c761ecc544 100644
+index bae92046540a7446a78114dc69a2236c1af26121..9ad0464661d1c44409a98bad13edc23ca5f721b8 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -546,6 +546,19 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0299-Missing-Entity-Behavior-API.patch b/patches/api/0299-Missing-Entity-Behavior-API.patch
index ee75b4ff48..b605e08d90 100644
--- a/patches/api/0299-Missing-Entity-Behavior-API.patch
+++ b/patches/api/0299-Missing-Entity-Behavior-API.patch
@@ -241,12 +241,12 @@ index adb20a9abba33c32d553f620fa82b27dff64ab5f..1f6702b0de00b87dbed7f6d93e911655
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/entity/Cat.java b/src/main/java/org/bukkit/entity/Cat.java
-index c2a566b864c82ffb094b7334d9e6e25a1bfc87d1..c340fecb61bac66baf0f44189d21bc85289b1269 100644
+index a541d9618ecdf86dcfdbe1a10e2d774d9d71d644..94fef2c823eb340fe02d18e24e67b4aa97c3b83c 100644
--- a/src/main/java/org/bukkit/entity/Cat.java
+++ b/src/main/java/org/bukkit/entity/Cat.java
-@@ -54,4 +54,36 @@ public interface Cat extends Tameable, Sittable {
- JELLIE,
- ALL_BLACK;
+@@ -91,4 +91,36 @@ public interface Cat extends Tameable, Sittable {
+ return Lists.newArrayList(Registry.CAT_TYPE).toArray(new Type[0]);
+ }
}
+
+ // Paper Start - More cat api
@@ -711,13 +711,13 @@ index 3dafdf14ced991ae1179ef1ca455da62f8c3243e..2fe8e8868f12bd9e846baf8858cd2c33
// Paper end
}
diff --git a/src/main/java/org/bukkit/entity/Piglin.java b/src/main/java/org/bukkit/entity/Piglin.java
-index 6fdc0e0bb62189dbf3cf9ce7a87b7fbb995956a3..d4cb4b0ed1d9766a87867dcf1a3a839526ba9332 100644
+index 2769b4acd91ecb80637d3e4831e0590ae5e1220c..6109f185b7f5feaa7093d8833ad58f0e64f6fc95 100644
--- a/src/main/java/org/bukkit/entity/Piglin.java
+++ b/src/main/java/org/bukkit/entity/Piglin.java
-@@ -90,4 +90,25 @@ public interface Piglin extends PiglinAbstract, InventoryHolder, com.destroystok
+@@ -90,4 +90,24 @@ public interface Piglin extends PiglinAbstract, InventoryHolder, com.destroystok
*/
@NotNull
- public Set<Material> getBarterList();
+ public Set<ItemType> getBarterList();
+
+ // Paper start
+ /**
@@ -738,7 +738,6 @@ index 6fdc0e0bb62189dbf3cf9ce7a87b7fbb995956a3..d4cb4b0ed1d9766a87867dcf1a3a8395
+ */
+ boolean isChargingCrossbow();
+ // Paper end
-+
}
diff --git a/src/main/java/org/bukkit/entity/PolarBear.java b/src/main/java/org/bukkit/entity/PolarBear.java
index 479f7a7c54c85cb685f56e60906650d1989c03ff..4e526ba6aa462a484984fb9f0512b8db113086fe 100644
diff --git a/patches/api/0311-Option-to-prevent-NBT-copy-in-smithing-recipes.patch b/patches/api/0311-Option-to-prevent-NBT-copy-in-smithing-recipes.patch
index a37dea550d..e9c0b365dd 100644
--- a/patches/api/0311-Option-to-prevent-NBT-copy-in-smithing-recipes.patch
+++ b/patches/api/0311-Option-to-prevent-NBT-copy-in-smithing-recipes.patch
@@ -84,11 +84,11 @@ index 08fd3eca8383cdc2d06c3ce973e8c402d279077e..ad2fc850819c9784d477b59adcc5f5ab
/**
* Get the template recipe item.
diff --git a/src/main/java/org/bukkit/inventory/SmithingTrimRecipe.java b/src/main/java/org/bukkit/inventory/SmithingTrimRecipe.java
-index 32cbdc342615e76ff7a896e67cb0736b0bdf1978..9e84114528507848a4c1947d677ba02d06f9dc14 100644
+index c631a7d49b9248a7410776487a0eeaab41fefffa..69871ca922a351d0de46e7f0927339bf94325f38 100644
--- a/src/main/java/org/bukkit/inventory/SmithingTrimRecipe.java
+++ b/src/main/java/org/bukkit/inventory/SmithingTrimRecipe.java
-@@ -23,6 +23,21 @@ public class SmithingTrimRecipe extends SmithingRecipe implements ComplexRecipe
- super(key, new ItemStack(Material.AIR), base, addition);
+@@ -22,6 +22,21 @@ public class SmithingTrimRecipe extends SmithingRecipe implements ComplexRecipe
+ super(key, ItemStack.of(ItemType.AIR), base, addition);
this.template = template;
}
+ // Paper start
@@ -102,7 +102,7 @@ index 32cbdc342615e76ff7a896e67cb0736b0bdf1978..9e84114528507848a4c1947d677ba02d
+ * @param copyNbt whether to copy the nbt from the input base item to the output
+ */
+ public SmithingTrimRecipe(@NotNull NamespacedKey key, @NotNull RecipeChoice template, @NotNull RecipeChoice base, @NotNull RecipeChoice addition, boolean copyNbt) {
-+ super(key, new ItemStack(Material.AIR), base, addition, copyNbt);
++ super(key, ItemStack.of(ItemType.AIR), base, addition, copyNbt);
+ this.template = template;
+ }
+ // Paper end
diff --git a/patches/api/0316-Get-entity-default-attributes.patch b/patches/api/0316-Get-entity-default-attributes.patch
index 32c28f3adf..9e00c420f0 100644
--- a/patches/api/0316-Get-entity-default-attributes.patch
+++ b/patches/api/0316-Get-entity-default-attributes.patch
@@ -4,50 +4,22 @@ Date: Fri, 20 Aug 2021 13:03:55 -0700
Subject: [PATCH] Get entity default attributes
-diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index a9e7c64e1f98ff73c1804466d7c79eaf343dde7c..c2b042ced0f32b0dafc13a2933c2bd9b18db774a 100644
---- a/src/main/java/org/bukkit/UnsafeValues.java
-+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -188,5 +188,22 @@ public interface UnsafeValues {
- * @return the server's protocol version
- */
- int getProtocolVersion();
-+
-+ /**
-+ * Checks if the entity represented by the namespaced key has default attributes.
-+ *
-+ * @param entityKey the entity's key
-+ * @return true if it has default attributes
-+ */
-+ boolean hasDefaultEntityAttributes(@org.jetbrains.annotations.NotNull NamespacedKey entityKey);
-+
-+ /**
-+ * Gets the default attributes for the entity represented by the namespaced key.
-+ *
-+ * @param entityKey the entity's key
-+ * @return an unmodifiable instance of Attributable for reading default attributes.
-+ * @throws IllegalArgumentException if the entity does not exist of have default attributes (use {@link #hasDefaultEntityAttributes(NamespacedKey)} first)
-+ */
-+ @org.jetbrains.annotations.NotNull org.bukkit.attribute.Attributable getDefaultEntityAttributes(@org.jetbrains.annotations.NotNull NamespacedKey entityKey);
- // Paper end
- }
diff --git a/src/main/java/org/bukkit/entity/EntityType.java b/src/main/java/org/bukkit/entity/EntityType.java
-index 6c40a989eff1163c19106c1e6b4c8fc01ace7280..6cf14afd2c1b8018c67c6cac302ae28bb12ab5a5 100644
+index a086c3472fa12667e5ca9276a201dbd731101602..9f7430282d1d7f5967ea281101d92377b3fcf5a9 100644
--- a/src/main/java/org/bukkit/entity/EntityType.java
+++ b/src/main/java/org/bukkit/entity/EntityType.java
-@@ -449,6 +449,25 @@ public enum EntityType implements Keyed, Translatable, net.kyori.adventure.trans
- Preconditions.checkArgument(this != UNKNOWN, "UNKNOWN entities do not have translation keys");
- return org.bukkit.Bukkit.getUnsafe().getTranslationKey(this);
+@@ -488,4 +488,21 @@ public abstract class EntityType<E extends Entity> extends OldEnum<EntityType<E>
+ public boolean isEnabledByFeature(@NotNull World world) {
+ return Bukkit.getDataPackManager().isEnabledByFeature(this, world);
}
+
++ // Paper start - default EntityType attributes API
+ /**
+ * Checks if the entity has default attributes.
+ *
+ * @return true if it has default attributes
+ */
-+ public boolean hasDefaultAttributes() {
-+ return org.bukkit.Bukkit.getUnsafe().hasDefaultEntityAttributes(this.key);
-+ }
++ public abstract boolean hasDefaultAttributes();
+
+ /**
+ * Gets the default attributes for the entity.
@@ -55,9 +27,6 @@ index 6c40a989eff1163c19106c1e6b4c8fc01ace7280..6cf14afd2c1b8018c67c6cac302ae28b
+ * @return an unmodifiable instance of Attributable for reading default attributes.
+ * @throws IllegalArgumentException if the entity does not exist of have default attributes (use {@link #hasDefaultAttributes()} first)
+ */
-+ public @NotNull org.bukkit.attribute.Attributable getDefaultAttributes() {
-+ return org.bukkit.Bukkit.getUnsafe().getDefaultEntityAttributes(this.key);
-+ }
- // Paper end
-
- /**
++ public abstract @NotNull org.bukkit.attribute.Attributable getDefaultAttributes();
++ // Paper end
+ }
diff --git a/patches/api/0319-Add-ItemFactory-getSpawnEgg-API.patch b/patches/api/0319-Add-ItemFactory-getSpawnEgg-API.patch
index bf76f634c7..dc2f9e7bc3 100644
--- a/patches/api/0319-Add-ItemFactory-getSpawnEgg-API.patch
+++ b/patches/api/0319-Add-ItemFactory-getSpawnEgg-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add ItemFactory#getSpawnEgg API
diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
-index 11e59068b8a8ef1128e3c75283d161c39e2a3a99..67d3105258fe4e8165a662dd65bc501b30fcff51 100644
+index c6f910af4d6e6f2a5afe23a6a86433ac4ff4d68d..2b95876d06022ee897279294be341bcfe01ded5d 100644
--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
+++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
-@@ -263,5 +263,14 @@ public interface ItemFactory {
+@@ -262,5 +262,14 @@ public interface ItemFactory {
@NotNull
@Deprecated
net.md_5.bungee.api.chat.hover.content.Content hoverContentOf(@NotNull org.bukkit.entity.Entity entity, @NotNull net.md_5.bungee.api.chat.BaseComponent[] customName);
diff --git a/patches/api/0322-Add-isCollidable-methods-to-various-places.patch b/patches/api/0322-Add-isCollidable-methods-to-various-places.patch
index 62fba2ca0e..d7d2755833 100644
--- a/patches/api/0322-Add-isCollidable-methods-to-various-places.patch
+++ b/patches/api/0322-Add-isCollidable-methods-to-various-places.patch
@@ -5,12 +5,12 @@ Subject: [PATCH] Add isCollidable methods to various places
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
-index 5fe8207fd9b76564b0547eec5e3db2b7abed0150..03b47012447430a350e152920f754d993d4023db 100644
+index 8c900d455d37713ec6395caafa752bf8e2e89c58..1d92759a7284a4b2d9b5af08470e57f2fa70d82f 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
-@@ -4486,6 +4486,16 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
+@@ -4493,6 +4493,17 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
public Multimap<Attribute, AttributeModifier> getItemAttributes(@NotNull EquipmentSlot equipmentSlot) {
- return Bukkit.getUnsafe().getItemAttributes(this, equipmentSlot);
+ return this.getDefaultAttributeModifiers(equipmentSlot);
}
+
+ /**
@@ -20,35 +20,17 @@ index 5fe8207fd9b76564b0547eec5e3db2b7abed0150..03b47012447430a350e152920f754d99
+ * @throws IllegalArgumentException if {@link #isBlock()} is false
+ */
+ public boolean isCollidable() {
-+ return Bukkit.getUnsafe().isCollidable(this);
++ Preconditions.checkArgument(this.isBlock(), this + " isn't a block");
++ return this.asBlockType().isCollidable();
+ }
// Paper end
/**
-diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index c2b042ced0f32b0dafc13a2933c2bd9b18db774a..820c7e8f28d7276e4d4b31a81746720a1cc10f09 100644
---- a/src/main/java/org/bukkit/UnsafeValues.java
-+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -205,5 +205,14 @@ public interface UnsafeValues {
- * @throws IllegalArgumentException if the entity does not exist of have default attributes (use {@link #hasDefaultEntityAttributes(NamespacedKey)} first)
- */
- @org.jetbrains.annotations.NotNull org.bukkit.attribute.Attributable getDefaultEntityAttributes(@org.jetbrains.annotations.NotNull NamespacedKey entityKey);
-+
-+ /**
-+ * Checks if this material is collidable.
-+ *
-+ * @param material the material to check
-+ * @return true if collidable
-+ * @throws IllegalArgumentException if {@link Material#isBlock()} is false
-+ */
-+ boolean isCollidable(@org.jetbrains.annotations.NotNull Material material);
- // Paper end
- }
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 93b9b57c95a0d24e885a205cd9d9e05a5631806a..cb0dcbbfb77158c3b17bd7994a9bbcef8060941a 100644
+index 6f6d7816f4e928e849e6e4f7265c977437ccf1bf..31dcec117ef278f8060e0a5a4e706239329f9915 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -482,6 +482,13 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
+@@ -481,6 +481,13 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
* @return true if block is solid
*/
boolean isSolid();
@@ -63,10 +45,10 @@ index 93b9b57c95a0d24e885a205cd9d9e05a5631806a..cb0dcbbfb77158c3b17bd7994a9bbcef
/**
diff --git a/src/main/java/org/bukkit/block/BlockState.java b/src/main/java/org/bukkit/block/BlockState.java
-index 3147e278eac674ed21d714bbe318b135c0a6b408..10cbe71917bc32cca61748bcb0aa3395c554dbf8 100644
+index 635a97fb50c485f7ef2e3bdcbb6f185a4ad551bc..ef861fcd5caa39ca4c4eeec4a63f3eb28a033a31 100644
--- a/src/main/java/org/bukkit/block/BlockState.java
+++ b/src/main/java/org/bukkit/block/BlockState.java
-@@ -225,4 +225,13 @@ public interface BlockState extends Metadatable {
+@@ -224,4 +224,13 @@ public interface BlockState extends Metadatable {
* or 'virtual' (e.g. on an itemstack)
*/
boolean isPlaced();
@@ -80,3 +62,21 @@ index 3147e278eac674ed21d714bbe318b135c0a6b408..10cbe71917bc32cca61748bcb0aa3395
+ boolean isCollidable();
+ // Paper end
}
+diff --git a/src/main/java/org/bukkit/block/BlockType.java b/src/main/java/org/bukkit/block/BlockType.java
+index 9f77976b2f33ba2d5af89ea143a39a0f417a4429..fca5ce5f41861a82a54f5291e25c89b82103ae31 100644
+--- a/src/main/java/org/bukkit/block/BlockType.java
++++ b/src/main/java/org/bukkit/block/BlockType.java
+@@ -3210,4 +3210,13 @@ public interface BlockType<B extends BlockData> extends Keyed, Translatable, net
+ * @return True if this block type is an air block.
+ */
+ boolean isAir();
++
++ // Paper start - isCollidable API
++ /**
++ * Checks if this block type is collidable.
++ *
++ * @return true if collidable
++ */
++ boolean isCollidable();
++ // Paper end
+ }
diff --git a/patches/api/0325-Add-Raw-Byte-Entity-Serialization.patch b/patches/api/0325-Add-Raw-Byte-Entity-Serialization.patch
index f824dd3957..a654455632 100644
--- a/patches/api/0325-Add-Raw-Byte-Entity-Serialization.patch
+++ b/patches/api/0325-Add-Raw-Byte-Entity-Serialization.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add Raw Byte Entity Serialization
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index 820c7e8f28d7276e4d4b31a81746720a1cc10f09..fed8f959f87f82a7f8fb8afe770f5cb73fcf27b2 100644
+index b134d63351faa0d6e5469e0a09442ab82f8d60e3..26006c3241efc76f0bbf9ba80bfada4bbf52c278 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -131,6 +131,14 @@ public interface UnsafeValues {
+@@ -140,6 +140,14 @@ public interface UnsafeValues {
ItemStack deserializeItem(byte[] data);
@@ -24,7 +24,7 @@ index 820c7e8f28d7276e4d4b31a81746720a1cc10f09..fed8f959f87f82a7f8fb8afe770f5cb7
* Creates and returns the next EntityId available.
* <p>
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index a6f9fb065a9e3e56b86ce5f606f86e681a90d7e6..962989e74a66dadab2a8951ccc85ef0c49f8da6b 100644
+index a06700c47c0abb55d8b971e6a85ed80be75168ce..b0a4c772f1f189991cbd6ffd13db8320decebff5 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -834,5 +834,32 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
diff --git a/patches/api/0327-Add-player-health-update-API.patch b/patches/api/0327-Add-player-health-update-API.patch
index 0ded0646f9..4f09154a37 100644
--- a/patches/api/0327-Add-player-health-update-API.patch
+++ b/patches/api/0327-Add-player-health-update-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add player health update API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index e897c373406aa0105b1060549469590585d5c78d..18e098920193438d171ca57e505e20c6c96742ae 100644
+index 11fc6fd371a6276d2bfbdde3778a83f8a9c754cf..dbb5ecbdd0e3f15ffba7f0a13d5784066c569b2f 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2118,6 +2118,31 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2106,6 +2106,31 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
public double getHealthScale();
diff --git a/patches/api/0328-Allow-delegation-to-vanilla-chunk-gen.patch b/patches/api/0328-Allow-delegation-to-vanilla-chunk-gen.patch
index f31c8284f6..60c933cd19 100644
--- a/patches/api/0328-Allow-delegation-to-vanilla-chunk-gen.patch
+++ b/patches/api/0328-Allow-delegation-to-vanilla-chunk-gen.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow delegation to vanilla chunk gen
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index a6fef51a8435eced8c2981588ae98046c42d8ed4..e75da4494582594dfa8f21e6abd36fb345558127 100644
+index a345ea2f9a7cdb30df07aab305e2bb42100bab63..9ead45a6e881a77014d56c60eb8af85ea446e33a 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -1943,6 +1943,24 @@ public final class Bukkit {
+@@ -1944,6 +1944,24 @@ public final class Bukkit {
return server.createChunkData(world);
}
@@ -34,10 +34,10 @@ index a6fef51a8435eced8c2981588ae98046c42d8ed4..e75da4494582594dfa8f21e6abd36fb3
* Creates a boss bar instance to display to players. The progress
* defaults to 1.0
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 529054834865813520ebe6784894e759c22ec4f4..b6e8dd95cc58f53e3e6ca64dd796ed6633630cf4 100644
+index 90129c2d9141969241dcc483b82290df64844c0c..7785f88a0bcee28e8ad5f255252e1bb9c9975722 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1638,6 +1638,22 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1639,6 +1639,22 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@NotNull
public ChunkGenerator.ChunkData createChunkData(@NotNull World world);
@@ -61,7 +61,7 @@ index 529054834865813520ebe6784894e759c22ec4f4..b6e8dd95cc58f53e3e6ca64dd796ed66
* Creates a boss bar instance to display to players. The progress
* defaults to 1.0
diff --git a/src/main/java/org/bukkit/generator/ChunkGenerator.java b/src/main/java/org/bukkit/generator/ChunkGenerator.java
-index 7e7a53b41013f1bf8956c0e278820f18d77b2f0d..c942b7101a38ac7dc70e11e87afa1f9210000bc1 100644
+index 633e79e076044f2bc463bd0b7029e310b7629163..793b49eee377cb0aab92f4abb96a8a4e5f349979 100644
--- a/src/main/java/org/bukkit/generator/ChunkGenerator.java
+++ b/src/main/java/org/bukkit/generator/ChunkGenerator.java
@@ -577,6 +577,22 @@ public abstract class ChunkGenerator {
diff --git a/patches/api/0342-Multi-Block-Change-API.patch b/patches/api/0342-Multi-Block-Change-API.patch
index 91bef833ff..4a0bfc1680 100644
--- a/patches/api/0342-Multi-Block-Change-API.patch
+++ b/patches/api/0342-Multi-Block-Change-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Multi Block Change API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 18e098920193438d171ca57e505e20c6c96742ae..505fdb8885b05be9fb51acda49530f8bf0e120ff 100644
+index dbb5ecbdd0e3f15ffba7f0a13d5784066c569b2f..76cc276bd91cc90b0a5aed8e5c56541741d0586a 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -686,6 +686,29 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -674,6 +674,29 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
public void sendBlockDamage(@NotNull Location loc, float progress);
diff --git a/patches/api/0346-More-PotionEffectType-API.patch b/patches/api/0346-More-PotionEffectType-API.patch
index 5cd5753a92..2784d9960c 100644
--- a/patches/api/0346-More-PotionEffectType-API.patch
+++ b/patches/api/0346-More-PotionEffectType-API.patch
@@ -4,53 +4,22 @@ Date: Thu, 27 May 2021 21:58:33 -0700
Subject: [PATCH] More PotionEffectType API
-diff --git a/src/main/java/org/bukkit/Registry.java b/src/main/java/org/bukkit/Registry.java
-index c21aefb63678d78a441436761373e9710c1e543a..1d96ed754be09b52a518967c870eba05bb3e99ee 100644
---- a/src/main/java/org/bukkit/Registry.java
-+++ b/src/main/java/org/bukkit/Registry.java
-@@ -236,6 +236,26 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
- */
- @Deprecated(forRemoval = true)
- Registry<io.papermc.paper.world.structure.ConfiguredStructure> CONFIGURED_STRUCTURE = Bukkit.getRegistry(io.papermc.paper.world.structure.ConfiguredStructure.class);
-+
-+ /**
-+ * Potion effect types.
-+ *
-+ * @see org.bukkit.potion.PotionEffectType
-+ */
-+ Registry<org.bukkit.potion.PotionEffectType> POTION_EFFECT_TYPE = new Registry<org.bukkit.potion.PotionEffectType>() {
-+
-+ @Nullable
-+ @Override
-+ public org.bukkit.potion.PotionEffectType get(@NotNull NamespacedKey key) {
-+ return org.bukkit.potion.PotionEffectType.getByKey(key);
-+ }
-+
-+ @NotNull
-+ @Override
-+ public Iterator<org.bukkit.potion.PotionEffectType> iterator() {
-+ return Arrays.stream(org.bukkit.potion.PotionEffectType.values()).iterator();
-+ }
-+ };
- // Paper end
-
- /**
diff --git a/src/main/java/org/bukkit/potion/PotionEffectType.java b/src/main/java/org/bukkit/potion/PotionEffectType.java
-index 5f3aa6fd18d57055a6d8494938dff149d51b2803..84fd181ad897f620e450750246d9ea416dcbd48a 100644
+index 686e1cfec546fb2268d884e713a863c8fc967802..3c74bcb0349cf6b3448b08e2564ba16618f6ecaa 100644
--- a/src/main/java/org/bukkit/potion/PotionEffectType.java
+++ b/src/main/java/org/bukkit/potion/PotionEffectType.java
-@@ -14,7 +14,7 @@ import org.jetbrains.annotations.Nullable;
+@@ -15,7 +15,7 @@ import org.jetbrains.annotations.Nullable;
/**
* Represents a type of potion and its effect on an entity.
*/
-public abstract class PotionEffectType implements Keyed {
+public abstract class PotionEffectType implements Keyed, net.kyori.adventure.translation.Translatable { // Paper - implement Translatable
+ protected static final BiMap<Integer, PotionEffectType> ID_MAP = HashBiMap.create();
+
/**
- * Increases movement speed.
- */
-@@ -363,4 +363,56 @@ public abstract class PotionEffectType implements Keyed {
- public static PotionEffectType[] values() {
- return Arrays.copyOfRange(byId, 1, byId.length);
+@@ -351,4 +351,56 @@ public abstract class PotionEffectType implements Keyed {
+
+ return from;
}
+ // Paper start
+ /**
@@ -58,7 +27,7 @@ index 5f3aa6fd18d57055a6d8494938dff149d51b2803..84fd181ad897f620e450750246d9ea41
+ *
+ * @return the attribute map
+ */
-+ public abstract @NotNull Map<org.bukkit.attribute.Attribute, org.bukkit.attribute.AttributeModifier> getEffectAttributes();
++ public abstract @NotNull java.util.Map<org.bukkit.attribute.Attribute, org.bukkit.attribute.AttributeModifier> getEffectAttributes();
+
+ /**
+ * Gets the true modifier amount based on the effect amplifier.
@@ -106,19 +75,15 @@ index 5f3aa6fd18d57055a6d8494938dff149d51b2803..84fd181ad897f620e450750246d9ea41
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java b/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
-index c3a86bb1910158a8d13a675dfa7236dd6a3f397c..a7653806c0fa76f4b3342ea199fe892c514a4c27 100644
+index 7a2ee20d32fc39d6fe29c384975c208341552648..08cfe3c8d675fafdd6a38d27bdef2f1f3b68551a 100644
--- a/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
+++ b/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
-@@ -40,4 +40,30 @@ public class PotionEffectTypeWrapper extends PotionEffectType {
- public Color getColor() {
- return getType().getColor();
+@@ -53,4 +53,26 @@ public class PotionEffectTypeWrapper extends PotionEffectType {
+ public NamespacedKey getKey() {
+ return getType().getKey();
}
-+ // Paper start
-+ @Override
-+ public @NotNull org.bukkit.NamespacedKey getKey() {
-+ return this.getType().getKey();
-+ }
+
++ // Paper start
+ @Override
+ public @NotNull java.util.Map<org.bukkit.attribute.Attribute, org.bukkit.attribute.AttributeModifier> getEffectAttributes() {
+ return this.getType().getEffectAttributes();
diff --git a/patches/api/0347-API-for-creating-command-sender-which-forwards-feedb.patch b/patches/api/0347-API-for-creating-command-sender-which-forwards-feedb.patch
index d9bb4574b2..d88b142390 100644
--- a/patches/api/0347-API-for-creating-command-sender-which-forwards-feedb.patch
+++ b/patches/api/0347-API-for-creating-command-sender-which-forwards-feedb.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] API for creating command sender which forwards feedback
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index e75da4494582594dfa8f21e6abd36fb345558127..43f93aa0efc35488fab44cb55081cfc486c319f5 100644
+index 9ead45a6e881a77014d56c60eb8af85ea446e33a..3587dfd620794ebf372c3fabc62ba68e7676e506 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -1432,6 +1432,20 @@ public final class Bukkit {
+@@ -1433,6 +1433,20 @@ public final class Bukkit {
return server.getConsoleSender();
}
@@ -30,10 +30,10 @@ index e75da4494582594dfa8f21e6abd36fb345558127..43f93aa0efc35488fab44cb55081cfc4
* Gets the folder that contains all of the various {@link World}s.
*
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index b6e8dd95cc58f53e3e6ca64dd796ed6633630cf4..693e07b7e4aeef2ebc7fba5d20d6c6071762896c 100644
+index 7785f88a0bcee28e8ad5f255252e1bb9c9975722..05a8769737f15a88aaca2c5eafa15b8a49abae6a 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -1202,6 +1202,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -1203,6 +1203,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@NotNull
public ConsoleCommandSender getConsoleSender();
diff --git a/patches/api/0349-Add-GameEvent-tags.patch b/patches/api/0349-Add-GameEvent-tags.patch
index 1aabdd065a..c4562cba82 100644
--- a/patches/api/0349-Add-GameEvent-tags.patch
+++ b/patches/api/0349-Add-GameEvent-tags.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add GameEvent tags
diff --git a/src/main/java/org/bukkit/Tag.java b/src/main/java/org/bukkit/Tag.java
-index 3e9f1ee242b8087759c98b54ebb3cc3b8f5fcbd5..9257a5530264195260becedf73d291488c29d176 100644
+index 974dcacb09ec05c98a4a6af28f86694b97b9c925..5bf66852aa94b29a857e208e2176e8181caf58a3 100644
--- a/src/main/java/org/bukkit/Tag.java
+++ b/src/main/java/org/bukkit/Tag.java
-@@ -960,6 +960,24 @@ public interface Tag<T extends Keyed> extends Keyed {
+@@ -962,6 +962,24 @@ public interface Tag<T extends Keyed> extends Keyed {
* Vanilla tag representing entities which are dismounted when underwater.
*/
Tag<EntityType> ENTITY_TYPES_DISMOUNTS_UNDERWATER = Bukkit.getTag(REGISTRY_ENTITY_TYPES, NamespacedKey.minecraft("dismounts_underwater"), EntityType.class);
diff --git a/patches/api/0353-Custom-Potion-Mixes.patch b/patches/api/0353-Custom-Potion-Mixes.patch
index a8c7167526..575e0d4084 100644
--- a/patches/api/0353-Custom-Potion-Mixes.patch
+++ b/patches/api/0353-Custom-Potion-Mixes.patch
@@ -102,10 +102,10 @@ index 0000000000000000000000000000000000000000..cb6d93526b637946aec311bef103ad30
+ }
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 43f93aa0efc35488fab44cb55081cfc486c319f5..ac6a49e39790aa9f12c7d98990f4cac297200cb0 100644
+index 3587dfd620794ebf372c3fabc62ba68e7676e506..713f9227f0aeaf5910053fad3f888a0b87470932 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -2465,6 +2465,15 @@ public final class Bukkit {
+@@ -2469,6 +2469,15 @@ public final class Bukkit {
public static io.papermc.paper.datapack.DatapackManager getDatapackManager() {
return server.getDatapackManager();
}
@@ -122,10 +122,10 @@ index 43f93aa0efc35488fab44cb55081cfc486c319f5..ac6a49e39790aa9f12c7d98990f4cac2
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 693e07b7e4aeef2ebc7fba5d20d6c6071762896c..18f4ae463f0e1406842c451b91f333a1bfabae69 100644
+index 05a8769737f15a88aaca2c5eafa15b8a49abae6a..a319928cd485a9831b584c73980b4e987f9a5ea4 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -2146,5 +2146,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -2150,5 +2150,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/
@NotNull
io.papermc.paper.datapack.DatapackManager getDatapackManager();
diff --git a/patches/api/0355-More-Projectile-API.patch b/patches/api/0355-More-Projectile-API.patch
index fac92210c3..b689beeb6b 100644
--- a/patches/api/0355-More-Projectile-API.patch
+++ b/patches/api/0355-More-Projectile-API.patch
@@ -346,7 +346,7 @@ index 4623e0d767b343cbdc6fcf20b3b2ff7ff14863cf..dd69a68d1f005c25329bb0366d161ae9
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/entity/ThrownPotion.java b/src/main/java/org/bukkit/entity/ThrownPotion.java
-index 7051e07b4e456aae0ec9e37808b59e5fa62a4027..225ac312613b9e8f3cf680819f2ebe350d1bf48a 100644
+index 4b3e70a029a3402b3ade9deef2b7b4f3e1006f98..225ac312613b9e8f3cf680819f2ebe350d1bf48a 100644
--- a/src/main/java/org/bukkit/entity/ThrownPotion.java
+++ b/src/main/java/org/bukkit/entity/ThrownPotion.java
@@ -32,12 +32,34 @@ public interface ThrownPotion extends ThrowableProjectile {
@@ -354,8 +354,8 @@ index 7051e07b4e456aae0ec9e37808b59e5fa62a4027..225ac312613b9e8f3cf680819f2ebe35
/**
* Set the ItemStack for this thrown potion.
- * <p>
-- * The ItemStack must be of type {@link org.bukkit.Material#SPLASH_POTION}
-- * or {@link org.bukkit.Material#LINGERING_POTION}, otherwise an exception
+- * The ItemStack must be of type {@link org.bukkit.inventory.ItemType#SPLASH_POTION}
+- * or {@link org.bukkit.inventory.ItemType#LINGERING_POTION}, otherwise an exception
- * is thrown.
*
* @param item New ItemStack
diff --git a/patches/api/0356-Add-getComputedBiome-API.patch b/patches/api/0356-Add-getComputedBiome-API.patch
index a1ec54fe08..bb3260105b 100644
--- a/patches/api/0356-Add-getComputedBiome-API.patch
+++ b/patches/api/0356-Add-getComputedBiome-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add getComputedBiome API
diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java
-index cd83348de3f82b3fddcf2d4bb9187ec8173b0e40..8f50eb9b902236f5e039f5d26f3ca9a044b01a75 100644
+index 78396b7f754641de520f95d2015a9c6f1d933e7f..9bfb26f13a0a8b36b8148769b8ce75368e7d4fe2 100644
--- a/src/main/java/org/bukkit/RegionAccessor.java
+++ b/src/main/java/org/bukkit/RegionAccessor.java
-@@ -26,6 +26,7 @@ public interface RegionAccessor extends Keyed { // Paper
+@@ -27,6 +27,7 @@ public interface RegionAccessor extends Keyed { // Paper
*
* @param location the location of the biome
* @return Biome at the given location
@@ -16,7 +16,7 @@ index cd83348de3f82b3fddcf2d4bb9187ec8173b0e40..8f50eb9b902236f5e039f5d26f3ca9a0
*/
@NotNull
Biome getBiome(@NotNull Location location);
-@@ -37,10 +38,33 @@ public interface RegionAccessor extends Keyed { // Paper
+@@ -38,10 +39,33 @@ public interface RegionAccessor extends Keyed { // Paper
* @param y Y-coordinate of the block
* @param z Z-coordinate of the block
* @return Biome at the given coordinates
@@ -51,10 +51,10 @@ index cd83348de3f82b3fddcf2d4bb9187ec8173b0e40..8f50eb9b902236f5e039f5d26f3ca9a0
* Sets the {@link Biome} at the given {@link Location}.
*
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index cb0dcbbfb77158c3b17bd7994a9bbcef8060941a..921864e748407291b7fa153381e7d9701e1c4608 100644
+index 31dcec117ef278f8060e0a5a4e706239329f9915..21a48ce4b10adb1711665d2c751a00ff7c84e2f1 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -371,10 +371,22 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
+@@ -370,10 +370,22 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
* Returns the biome that this block resides in
*
* @return Biome type containing this block
diff --git a/patches/api/0357-Add-enchantWithLevels-API.patch b/patches/api/0357-Add-enchantWithLevels-API.patch
index fe08c8a617..893b79590d 100644
--- a/patches/api/0357-Add-enchantWithLevels-API.patch
+++ b/patches/api/0357-Add-enchantWithLevels-API.patch
@@ -5,11 +5,11 @@ Subject: [PATCH] Add enchantWithLevels API
diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
-index 67d3105258fe4e8165a662dd65bc501b30fcff51..5a2e091785043e66c5560e870e3729fa70b28bb4 100644
+index 2b95876d06022ee897279294be341bcfe01ded5d..95054b8573bb96eebcf9be8d26078f82efa91c33 100644
--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
+++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
-@@ -161,6 +161,22 @@ public interface ItemFactory {
- Material updateMaterial(@NotNull final ItemMeta meta, @NotNull final Material material) throws IllegalArgumentException;
+@@ -160,6 +160,22 @@ public interface ItemFactory {
+ ItemType updateItemType(@NotNull final ItemMeta meta, @NotNull final ItemType itemType) throws IllegalArgumentException;
// Paper start
+ /**
@@ -32,10 +32,10 @@ index 67d3105258fe4e8165a662dd65bc501b30fcff51..5a2e091785043e66c5560e870e3729fa
* Creates a hover event for the given item.
*
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index f9faef1b73b5027a3d22e76a0b33b7c952f3ae08..eac7adf622b91489711a2f8bcff77fb31292dd67 100644
+index 3a5d5968f1c3b75292c06606733c9f449d6b550f..a139c9e3fdd61c3e228284ae56c39162f0cc045d 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -656,6 +656,24 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -705,6 +705,24 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
}
// Paper start
diff --git a/patches/api/0362-Add-EntityDyeEvent-and-CollarColorable-interface.patch b/patches/api/0362-Add-EntityDyeEvent-and-CollarColorable-interface.patch
index 032a0872d1..281539dd7a 100644
--- a/patches/api/0362-Add-EntityDyeEvent-and-CollarColorable-interface.patch
+++ b/patches/api/0362-Add-EntityDyeEvent-and-CollarColorable-interface.patch
@@ -117,10 +117,10 @@ index 0000000000000000000000000000000000000000..aefbaccd32f1ab25a4da63bdc878922e
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/Cat.java b/src/main/java/org/bukkit/entity/Cat.java
-index c340fecb61bac66baf0f44189d21bc85289b1269..97b0d8ccd3fd3a711ec5fa4ce3d8703515895081 100644
+index 94fef2c823eb340fe02d18e24e67b4aa97c3b83c..a61cf1c212bc497df4093105947593abbf11c01e 100644
--- a/src/main/java/org/bukkit/entity/Cat.java
+++ b/src/main/java/org/bukkit/entity/Cat.java
-@@ -6,7 +6,7 @@ import org.jetbrains.annotations.NotNull;
+@@ -12,7 +12,7 @@ import org.jetbrains.annotations.NotNull;
/**
* Meow.
*/
@@ -129,7 +129,7 @@ index c340fecb61bac66baf0f44189d21bc85289b1269..97b0d8ccd3fd3a711ec5fa4ce3d87035
/**
* Gets the current type of this cat.
-@@ -29,6 +29,7 @@ public interface Cat extends Tameable, Sittable {
+@@ -35,6 +35,7 @@ public interface Cat extends Tameable, Sittable {
* @return the color of the collar
*/
@NotNull
@@ -137,7 +137,7 @@ index c340fecb61bac66baf0f44189d21bc85289b1269..97b0d8ccd3fd3a711ec5fa4ce3d87035
public DyeColor getCollarColor();
/**
-@@ -36,6 +37,7 @@ public interface Cat extends Tameable, Sittable {
+@@ -42,6 +43,7 @@ public interface Cat extends Tameable, Sittable {
*
* @param color the color to apply
*/
diff --git a/patches/api/0364-FallingBlock-auto-expire-setting.patch b/patches/api/0364-FallingBlock-auto-expire-setting.patch
index 82ddf953e9..1af9b43cd2 100644
--- a/patches/api/0364-FallingBlock-auto-expire-setting.patch
+++ b/patches/api/0364-FallingBlock-auto-expire-setting.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] FallingBlock auto expire setting
diff --git a/src/main/java/org/bukkit/entity/FallingBlock.java b/src/main/java/org/bukkit/entity/FallingBlock.java
-index bd87d1548faa2fb095adce9f156f24163995dbe7..ccb4517526819d974df861106aa786eb596189a3 100644
+index 320a0e1f6b93ca9e85eac7d9a3f5821fa242c257..be6f983e94782b60960b1cfe28fba08623091081 100644
--- a/src/main/java/org/bukkit/entity/FallingBlock.java
+++ b/src/main/java/org/bukkit/entity/FallingBlock.java
-@@ -103,4 +103,23 @@ public interface FallingBlock extends Entity {
+@@ -92,4 +92,23 @@ public interface FallingBlock extends Entity {
default org.bukkit.Location getSourceLoc() {
return this.getOrigin();
}
diff --git a/patches/api/0366-Add-method-isTickingWorlds-to-Bukkit.patch b/patches/api/0365-Add-method-isTickingWorlds-to-Bukkit.patch
index 57225f80c3..814e6ea677 100644
--- a/patches/api/0366-Add-method-isTickingWorlds-to-Bukkit.patch
+++ b/patches/api/0365-Add-method-isTickingWorlds-to-Bukkit.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add method isTickingWorlds() to Bukkit.
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index ac6a49e39790aa9f12c7d98990f4cac297200cb0..ef36d793ab77c7b7208f8f5994815599cff470d1 100644
+index 713f9227f0aeaf5910053fad3f888a0b87470932..33e980002054d08fef688f5a971be93d05f7a4c5 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
-@@ -774,12 +774,26 @@ public final class Bukkit {
+@@ -775,12 +775,26 @@ public final class Bukkit {
return server.getWorlds();
}
@@ -35,7 +35,7 @@ index ac6a49e39790aa9f12c7d98990f4cac297200cb0..ef36d793ab77c7b7208f8f5994815599
*
* @param creator the options to use when creating the world
* @return newly created or loaded world
-@@ -791,6 +805,9 @@ public final class Bukkit {
+@@ -792,6 +806,9 @@ public final class Bukkit {
/**
* Unloads a world with the given name.
@@ -45,7 +45,7 @@ index ac6a49e39790aa9f12c7d98990f4cac297200cb0..ef36d793ab77c7b7208f8f5994815599
*
* @param name Name of the world to unload
* @param save whether to save the chunks before unloading
-@@ -802,6 +819,9 @@ public final class Bukkit {
+@@ -803,6 +820,9 @@ public final class Bukkit {
/**
* Unloads the given world.
@@ -56,10 +56,10 @@ index ac6a49e39790aa9f12c7d98990f4cac297200cb0..ef36d793ab77c7b7208f8f5994815599
* @param world the world to unload
* @param save whether to save the chunks before unloading
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 18f4ae463f0e1406842c451b91f333a1bfabae69..5b225bbb128893d67251a96ab318035802a0cf76 100644
+index a319928cd485a9831b584c73980b4e987f9a5ea4..6abc8e07d5478636f82a99947afa36bef55a053b 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
-@@ -647,34 +647,55 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+@@ -648,34 +648,55 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@NotNull
public List<World> getWorlds();
diff --git a/patches/api/0365-Keyed-Cat-Type.patch b/patches/api/0365-Keyed-Cat-Type.patch
deleted file mode 100644
index b0797d78b7..0000000000
--- a/patches/api/0365-Keyed-Cat-Type.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Owen1212055 <[email protected]>
-Date: Wed, 8 Jun 2022 18:23:17 -0400
-Subject: [PATCH] Keyed Cat Type
-
-
-diff --git a/src/main/java/org/bukkit/entity/Cat.java b/src/main/java/org/bukkit/entity/Cat.java
-index 97b0d8ccd3fd3a711ec5fa4ce3d8703515895081..bd74b47879b69b7a2e078a5aca460e5c97b0a919 100644
---- a/src/main/java/org/bukkit/entity/Cat.java
-+++ b/src/main/java/org/bukkit/entity/Cat.java
-@@ -43,7 +43,7 @@ public interface Cat extends Tameable, Sittable, io.papermc.paper.entity.CollarC
- /**
- * Represents the various different cat types there are.
- */
-- public enum Type {
-+ public enum Type implements org.bukkit.Keyed { // Paper
- TABBY,
- BLACK,
- RED,
-@@ -55,6 +55,20 @@ public interface Cat extends Tameable, Sittable, io.papermc.paper.entity.CollarC
- WHITE,
- JELLIE,
- ALL_BLACK;
-+
-+ // Paper start
-+ private final org.bukkit.NamespacedKey key;
-+
-+ Type() {
-+ this.key = org.bukkit.NamespacedKey.minecraft(name().toLowerCase(java.util.Locale.ROOT));
-+ }
-+
-+ @NotNull
-+ @Override
-+ public org.bukkit.NamespacedKey getKey() {
-+ return key;
-+ }
-+ // Paper end
- }
-
- // Paper Start - More cat api
diff --git a/patches/api/0367-Add-WardenAngerChangeEvent.patch b/patches/api/0366-Add-WardenAngerChangeEvent.patch
index acf45b5314..acf45b5314 100644
--- a/patches/api/0367-Add-WardenAngerChangeEvent.patch
+++ b/patches/api/0366-Add-WardenAngerChangeEvent.patch
diff --git a/patches/api/0368-Nameable-Banner-API.patch b/patches/api/0367-Nameable-Banner-API.patch
index eba196daaf..eba196daaf 100644
--- a/patches/api/0368-Nameable-Banner-API.patch
+++ b/patches/api/0367-Nameable-Banner-API.patch
diff --git a/patches/api/0369-Add-Player-getFishHook.patch b/patches/api/0368-Add-Player-getFishHook.patch
index 291eac5db5..dbc426a916 100644
--- a/patches/api/0369-Add-Player-getFishHook.patch
+++ b/patches/api/0368-Add-Player-getFishHook.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add Player#getFishHook
diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java
-index ff1ebe184ba5a1bdc8e2784025b07d3bb90a5078..8b0d04d5b39ee817555a36adddc39b18fc6f0d02 100644
+index c7757f4de66cd6d136266a15801fe31e9d61538e..4ac4d0787e3dd13476afa7173a529cd31b6968ab 100644
--- a/src/main/java/org/bukkit/entity/HumanEntity.java
+++ b/src/main/java/org/bukkit/entity/HumanEntity.java
-@@ -386,6 +386,13 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
+@@ -383,6 +383,13 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
@Nullable
public Location getPotentialBedLocation();
// Paper end
diff --git a/patches/api/0370-More-Teleport-API.patch b/patches/api/0369-More-Teleport-API.patch
index f96981646f..c51a2eec98 100644
--- a/patches/api/0370-More-Teleport-API.patch
+++ b/patches/api/0369-More-Teleport-API.patch
@@ -125,7 +125,7 @@ index 0000000000000000000000000000000000000000..dbacefc919fd6ed6a0f5cdaa0f695a12
+
+}
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index ab0ceaba9ddcbe20a8b8a1fc3ed19cb3c64ecd3d..97f0bc6573c8ba09de77061b6312b91cd713221d 100644
+index 833f792b7a3fd33248d00adbfa5a55d90f3ea612..72d2e81905bdbd2516755eed6b7afe6a6e83667f 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -123,10 +123,34 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
@@ -165,10 +165,10 @@ index ab0ceaba9ddcbe20a8b8a1fc3ed19cb3c64ecd3d..97f0bc6573c8ba09de77061b6312b91c
* Teleports this entity to the given location. If this entity is riding a
* vehicle, it will be dismounted prior to teleportation.
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 505fdb8885b05be9fb51acda49530f8bf0e120ff..d2f3114d2fe708553b638010394022d09bde39cf 100644
+index 76cc276bd91cc90b0a5aed8e5c56541741d0586a..3f745da3a7a6b2ef34848bffc594881f1d4f18cb 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2922,6 +2922,49 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2910,6 +2910,49 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
String getClientBrandName();
// Paper end
diff --git a/patches/api/0371-Add-EntityPortalReadyEvent.patch b/patches/api/0370-Add-EntityPortalReadyEvent.patch
index 4b1b1f1e1f..4b1b1f1e1f 100644
--- a/patches/api/0371-Add-EntityPortalReadyEvent.patch
+++ b/patches/api/0370-Add-EntityPortalReadyEvent.patch
diff --git a/patches/api/0372-Custom-Chat-Completion-Suggestions-API.patch b/patches/api/0371-Custom-Chat-Completion-Suggestions-API.patch
index 7a2c93272a..5e761ef9f2 100644
--- a/patches/api/0372-Custom-Chat-Completion-Suggestions-API.patch
+++ b/patches/api/0371-Custom-Chat-Completion-Suggestions-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Custom Chat Completion Suggestions API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index d2f3114d2fe708553b638010394022d09bde39cf..104629c89bd4d2a9c086bf2bdbf5dddc7d247660 100644
+index 3f745da3a7a6b2ef34848bffc594881f1d4f18cb..591df0b08b48d257db5a425668c672d4bc8aa6a5 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2809,6 +2809,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2797,6 +2797,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @throws IllegalArgumentException If the level is negative or greater than {@code 4} (i.e. not within {@code [0, 4]}).
*/
void sendOpLevel(byte level);
diff --git a/patches/api/0373-Collision-API.patch b/patches/api/0372-Collision-API.patch
index 24bcebc503..7fe1c8f8d9 100644
--- a/patches/api/0373-Collision-API.patch
+++ b/patches/api/0372-Collision-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Collision API
diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java
-index 8f50eb9b902236f5e039f5d26f3ca9a044b01a75..0d9184abd7090a5123a990f76847ee9b8971f735 100644
+index 9bfb26f13a0a8b36b8148769b8ce75368e7d4fe2..163c8b6abea291bcf2c7af9aca1e829a54e721e5 100644
--- a/src/main/java/org/bukkit/RegionAccessor.java
+++ b/src/main/java/org/bukkit/RegionAccessor.java
-@@ -469,5 +469,15 @@ public interface RegionAccessor extends Keyed { // Paper
+@@ -472,5 +472,15 @@ public interface RegionAccessor extends Keyed { // Paper
* @return whether a line of sight exists between {@code from} and {@code to}
*/
public boolean lineOfSightExists(@NotNull Location from, @NotNull Location to);
@@ -25,7 +25,7 @@ index 8f50eb9b902236f5e039f5d26f3ca9a044b01a75..0d9184abd7090a5123a990f76847ee9b
// Paper end
}
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index 97f0bc6573c8ba09de77061b6312b91cd713221d..3f3ea5bb6b3ea6f55b5cd699f1c01ac159619add 100644
+index 72d2e81905bdbd2516755eed6b7afe6a6e83667f..6fac8564a97f58f4786dab8142556ef36b11e48e 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -913,4 +913,26 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
diff --git a/patches/api/0374-Block-Ticking-API.patch b/patches/api/0373-Block-Ticking-API.patch
index 9b2fc54ea1..6c8007c5cd 100644
--- a/patches/api/0374-Block-Ticking-API.patch
+++ b/patches/api/0373-Block-Ticking-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Block Ticking API
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 921864e748407291b7fa153381e7d9701e1c4608..1c3f54382d66549dc881d4577c7104be6673a274 100644
+index 21a48ce4b10adb1711665d2c751a00ff7c84e2f1..136ce20b19fc97faedbadb89171c3c4d287acaeb 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
-@@ -589,6 +589,21 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
+@@ -588,6 +588,21 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
* @return true if the block was destroyed
*/
boolean breakNaturally(@NotNull ItemStack tool, boolean triggerEffect, boolean dropExperience);
@@ -31,10 +31,10 @@ index 921864e748407291b7fa153381e7d9701e1c4608..1c3f54382d66549dc881d4577c7104be
/**
diff --git a/src/main/java/org/bukkit/block/data/BlockData.java b/src/main/java/org/bukkit/block/data/BlockData.java
-index 869fa47a13fbcb128228963bf53cc72da4499a01..c6b17605090f2f284e6536567ddf0e0977eeaaf8 100644
+index 7f4a858ab98f8d0c3c2f890ca88bc13b6ba967fa..55f5d09664a7858a67b795465282adcf481a2a65 100644
--- a/src/main/java/org/bukkit/block/data/BlockData.java
+++ b/src/main/java/org/bukkit/block/data/BlockData.java
-@@ -247,4 +247,14 @@ public interface BlockData extends Cloneable {
+@@ -246,4 +246,14 @@ public interface BlockData extends Cloneable {
@NotNull
@ApiStatus.Experimental
BlockState createBlockState();
diff --git a/patches/api/0376-Also-load-resources-from-LibraryLoader.patch b/patches/api/0374-Also-load-resources-from-LibraryLoader.patch
index ee5785d8cb..ee5785d8cb 100644
--- a/patches/api/0376-Also-load-resources-from-LibraryLoader.patch
+++ b/patches/api/0374-Also-load-resources-from-LibraryLoader.patch
diff --git a/patches/api/0375-Add-NamespacedKey-biome-methods.patch b/patches/api/0375-Add-NamespacedKey-biome-methods.patch
deleted file mode 100644
index 24cd2b9867..0000000000
--- a/patches/api/0375-Add-NamespacedKey-biome-methods.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Josh Roy <[email protected]>
-Date: Sun, 14 Aug 2022 12:22:54 -0400
-Subject: [PATCH] Add NamespacedKey biome methods
-
-Co-authored-by: Thonk <[email protected]>
-
-diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index fed8f959f87f82a7f8fb8afe770f5cb73fcf27b2..c661eab343ae76488de701630424e2d589f44fc0 100644
---- a/src/main/java/org/bukkit/UnsafeValues.java
-+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -222,5 +222,32 @@ public interface UnsafeValues {
- * @throws IllegalArgumentException if {@link Material#isBlock()} is false
- */
- boolean isCollidable(@org.jetbrains.annotations.NotNull Material material);
-+
-+ /**
-+ * Gets the {@link NamespacedKey} for the biome at the given location.
-+ *
-+ * @param accessor The {@link RegionAccessor} of the provided coordinates
-+ * @param x X-coordinate of the block
-+ * @param y Y-coordinate of the block
-+ * @param z Z-coordinate of the block
-+ * @return the biome's {@link NamespacedKey}
-+ */
-+ @org.jetbrains.annotations.NotNull
-+ NamespacedKey getBiomeKey(RegionAccessor accessor, int x, int y, int z);
-+
-+ /**
-+ * Sets the biome at the given location to a biome registered
-+ * to the given {@link NamespacedKey}. If no biome by the given
-+ * {@link NamespacedKey} exists, an {@link IllegalStateException}
-+ * will be thrown.
-+ *
-+ * @param accessor The {@link RegionAccessor} of the provided coordinates
-+ * @param x X-coordinate of the block
-+ * @param y Y-coordinate of the block
-+ * @param z Z-coordinate of the block
-+ * @param biomeKey Biome key
-+ * @throws IllegalStateException if no biome by the given key is registered.
-+ */
-+ void setBiomeKey(RegionAccessor accessor, int x, int y, int z, NamespacedKey biomeKey);
- // Paper end
- }
diff --git a/patches/api/0377-Added-byte-array-serialization-deserialization-for-P.patch b/patches/api/0375-Added-byte-array-serialization-deserialization-for-P.patch
index 161c82afe3..161c82afe3 100644
--- a/patches/api/0377-Added-byte-array-serialization-deserialization-for-P.patch
+++ b/patches/api/0375-Added-byte-array-serialization-deserialization-for-P.patch
diff --git a/patches/api/0378-Add-a-consumer-parameter-to-ProjectileSource-launchP.patch b/patches/api/0376-Add-a-consumer-parameter-to-ProjectileSource-launchP.patch
index bec7a5d015..bec7a5d015 100644
--- a/patches/api/0378-Add-a-consumer-parameter-to-ProjectileSource-launchP.patch
+++ b/patches/api/0376-Add-a-consumer-parameter-to-ProjectileSource-launchP.patch
diff --git a/patches/api/0379-Expose-codepoint-limit-in-YamlConfigOptions-and-incr.patch b/patches/api/0377-Expose-codepoint-limit-in-YamlConfigOptions-and-incr.patch
index 9b5ef25cf4..9b5ef25cf4 100644
--- a/patches/api/0379-Expose-codepoint-limit-in-YamlConfigOptions-and-incr.patch
+++ b/patches/api/0377-Expose-codepoint-limit-in-YamlConfigOptions-and-incr.patch
diff --git a/patches/api/0380-Add-getDrops-to-BlockState.patch b/patches/api/0378-Add-getDrops-to-BlockState.patch
index 48f3a99f04..352d330ff2 100644
--- a/patches/api/0380-Add-getDrops-to-BlockState.patch
+++ b/patches/api/0378-Add-getDrops-to-BlockState.patch
@@ -7,10 +7,10 @@ Originally added isPreferredTool to BlockData but
upstream added that.
diff --git a/src/main/java/org/bukkit/block/BlockState.java b/src/main/java/org/bukkit/block/BlockState.java
-index 10cbe71917bc32cca61748bcb0aa3395c554dbf8..37ca7b6b0fcee8bec12026ec3715dcc47400cc11 100644
+index ef861fcd5caa39ca4c4eeec4a63f3eb28a033a31..406cccc82e2e734524b6714255e61b43a7a3b97b 100644
--- a/src/main/java/org/bukkit/block/BlockState.java
+++ b/src/main/java/org/bukkit/block/BlockState.java
-@@ -233,5 +233,34 @@ public interface BlockState extends Metadatable {
+@@ -232,5 +232,34 @@ public interface BlockState extends Metadatable {
* @return true if collidable
*/
boolean isCollidable();
diff --git a/patches/api/0381-Add-PlayerInventorySlotChangeEvent.patch b/patches/api/0379-Add-PlayerInventorySlotChangeEvent.patch
index f094f9dbc9..f094f9dbc9 100644
--- a/patches/api/0381-Add-PlayerInventorySlotChangeEvent.patch
+++ b/patches/api/0379-Add-PlayerInventorySlotChangeEvent.patch
diff --git a/patches/api/0382-Elder-Guardian-appearance-API.patch b/patches/api/0380-Elder-Guardian-appearance-API.patch
index 0922867417..7cf678a26f 100644
--- a/patches/api/0382-Elder-Guardian-appearance-API.patch
+++ b/patches/api/0380-Elder-Guardian-appearance-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Elder Guardian appearance API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 104629c89bd4d2a9c086bf2bdbf5dddc7d247660..c0501ab1d6d01b2a8bd8483b3a748858c960eb5c 100644
+index 591df0b08b48d257db5a425668c672d4bc8aa6a5..4a5c4f64ad6f49cbbd5c41ed41d49420b5757204 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2984,6 +2984,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2972,6 +2972,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
void lookAt(@NotNull org.bukkit.entity.Entity entity, @NotNull io.papermc.paper.entity.LookAnchor playerAnchor, @NotNull io.papermc.paper.entity.LookAnchor entityAnchor);
// Paper end - Teleport API
diff --git a/patches/api/0383-Allow-changing-bed-s-occupied-property.patch b/patches/api/0381-Allow-changing-bed-s-occupied-property.patch
index 8dfafd6d33..8dfafd6d33 100644
--- a/patches/api/0383-Allow-changing-bed-s-occupied-property.patch
+++ b/patches/api/0381-Allow-changing-bed-s-occupied-property.patch
diff --git a/patches/api/0384-Add-EquipmentSlot-convenience-methods.patch b/patches/api/0382-Add-EquipmentSlot-convenience-methods.patch
index 0ef6b4c9b0..0ef6b4c9b0 100644
--- a/patches/api/0384-Add-EquipmentSlot-convenience-methods.patch
+++ b/patches/api/0382-Add-EquipmentSlot-convenience-methods.patch
diff --git a/patches/api/0385-Add-LivingEntity-swingHand-EquipmentSlot-convenience.patch b/patches/api/0383-Add-LivingEntity-swingHand-EquipmentSlot-convenience.patch
index 1a53a5fcc5..4cdc0b8f72 100644
--- a/patches/api/0385-Add-LivingEntity-swingHand-EquipmentSlot-convenience.patch
+++ b/patches/api/0383-Add-LivingEntity-swingHand-EquipmentSlot-convenience.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add LivingEntity#swingHand(EquipmentSlot) convenience method
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 08167783b6e4e7d393779c92500793518ee346a6..68248bf3d6c84cb6debd9ddd3c0623353bed71f0 100644
+index 6217ada1d30a252af5394b32720468628809fd91..8d75d2a2afd1a4c75a00c0acbd292c6b18ace827 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -1056,5 +1056,23 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0386-Add-entity-knockback-API.patch b/patches/api/0384-Add-entity-knockback-API.patch
index f53aa9c293..a9ff8ddd0d 100644
--- a/patches/api/0386-Add-entity-knockback-API.patch
+++ b/patches/api/0384-Add-entity-knockback-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add entity knockback API
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 68248bf3d6c84cb6debd9ddd3c0623353bed71f0..84b78742f2bac07322e8a758ca9abc6b763ccc28 100644
+index 8d75d2a2afd1a4c75a00c0acbd292c6b18ace827..8489aae76d649e2e60b7004ecca6ab437917ca78 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -1074,5 +1074,17 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0387-Added-EntityToggleSitEvent.patch b/patches/api/0385-Added-EntityToggleSitEvent.patch
index af2476123b..af2476123b 100644
--- a/patches/api/0387-Added-EntityToggleSitEvent.patch
+++ b/patches/api/0385-Added-EntityToggleSitEvent.patch
diff --git a/patches/api/0388-Add-Moving-Piston-API.patch b/patches/api/0386-Add-Moving-Piston-API.patch
index 8f889f1e3d..8f889f1e3d 100644
--- a/patches/api/0388-Add-Moving-Piston-API.patch
+++ b/patches/api/0386-Add-Moving-Piston-API.patch
diff --git a/patches/api/0389-Add-PrePlayerAttackEntityEvent.patch b/patches/api/0387-Add-PrePlayerAttackEntityEvent.patch
index 507b313e56..507b313e56 100644
--- a/patches/api/0389-Add-PrePlayerAttackEntityEvent.patch
+++ b/patches/api/0387-Add-PrePlayerAttackEntityEvent.patch
diff --git a/patches/api/0390-Add-Player-Warden-Warning-API.patch b/patches/api/0388-Add-Player-Warden-Warning-API.patch
index ea67a85d9c..e876088d97 100644
--- a/patches/api/0390-Add-Player-Warden-Warning-API.patch
+++ b/patches/api/0388-Add-Player-Warden-Warning-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add Player Warden Warning API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index c0501ab1d6d01b2a8bd8483b3a748858c960eb5c..dbb208e2badea38a4058491650b773192fae80bc 100644
+index 4a5c4f64ad6f49cbbd5c41ed41d49420b5757204..a7dcb46434110a2871228679bef7018703848f84 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3000,6 +3000,59 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2988,6 +2988,59 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param silent whether sound should be silenced
*/
void showElderGuardian(boolean silent);
diff --git a/patches/api/0391-More-vanilla-friendly-methods-to-update-trades.patch b/patches/api/0389-More-vanilla-friendly-methods-to-update-trades.patch
index f13fdb5601..72c1a311b3 100644
--- a/patches/api/0391-More-vanilla-friendly-methods-to-update-trades.patch
+++ b/patches/api/0389-More-vanilla-friendly-methods-to-update-trades.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] More vanilla friendly methods to update trades
diff --git a/src/main/java/org/bukkit/entity/Villager.java b/src/main/java/org/bukkit/entity/Villager.java
-index 8c8176121cafed0ed09239b6a7b392dc846438e2..3bc24457d143449e6a338d79becf7c39b9f81054 100644
+index 767f940149821a2a31124d3186229deadbb53c67..309dbad419b313dade381fb2464a2ccd56fbfe36 100644
--- a/src/main/java/org/bukkit/entity/Villager.java
+++ b/src/main/java/org/bukkit/entity/Villager.java
-@@ -60,8 +60,11 @@ public interface Villager extends AbstractVillager {
+@@ -63,8 +63,11 @@ public interface Villager extends AbstractVillager {
* A villager with a level of 1 and no experience is liable to lose its
* profession.
*
@@ -20,7 +20,7 @@ index 8c8176121cafed0ed09239b6a7b392dc846438e2..3bc24457d143449e6a338d79becf7c39
*/
public void setVillagerLevel(int level);
-@@ -81,6 +84,34 @@ public interface Villager extends AbstractVillager {
+@@ -84,6 +87,34 @@ public interface Villager extends AbstractVillager {
public void setVillagerExperience(int experience);
// Paper start
diff --git a/patches/api/0392-Add-paper-dumplisteners-command.patch b/patches/api/0390-Add-paper-dumplisteners-command.patch
index 8053dc2c4f..8053dc2c4f 100644
--- a/patches/api/0392-Add-paper-dumplisteners-command.patch
+++ b/patches/api/0390-Add-paper-dumplisteners-command.patch
diff --git a/patches/api/0393-ItemStack-damage-API.patch b/patches/api/0391-ItemStack-damage-API.patch
index 12c1e68439..b74b6bcff2 100644
--- a/patches/api/0393-ItemStack-damage-API.patch
+++ b/patches/api/0391-ItemStack-damage-API.patch
@@ -8,7 +8,7 @@ to simulate damage done to an itemstack and all
the logic associated with damaging them
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 84b78742f2bac07322e8a758ca9abc6b763ccc28..5b0e14a7397d3de683d17ee2f1a805d289597a4b 100644
+index 8489aae76d649e2e60b7004ecca6ab437917ca78..ea90b6f2137a9580fe3dfaaa57ce03bfeb496782 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -1086,5 +1086,52 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
@@ -65,10 +65,10 @@ index 84b78742f2bac07322e8a758ca9abc6b763ccc28..5b0e14a7397d3de683d17ee2f1a805d2
// Paper end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index eac7adf622b91489711a2f8bcff77fb31292dd67..d15a74c38576c49df61cfab02c70fc5d8c0dd5f7 100644
+index a139c9e3fdd61c3e228284ae56c39162f0cc045d..de5884266e135c533d5fd6c6397eefeb0e3dad82 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -971,5 +971,19 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+@@ -1020,5 +1020,19 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
public boolean canRepair(@NotNull ItemStack toBeRepaired) {
return Bukkit.getUnsafe().isValidRepairItemStack(toBeRepaired, this);
}
diff --git a/patches/api/0394-Add-Tick-TemporalUnit.patch b/patches/api/0392-Add-Tick-TemporalUnit.patch
index 96c1dddab8..96c1dddab8 100644
--- a/patches/api/0394-Add-Tick-TemporalUnit.patch
+++ b/patches/api/0392-Add-Tick-TemporalUnit.patch
diff --git a/patches/api/0395-Friction-API.patch b/patches/api/0393-Friction-API.patch
index f4d3031506..dcfa02d314 100644
--- a/patches/api/0395-Friction-API.patch
+++ b/patches/api/0393-Friction-API.patch
@@ -59,7 +59,7 @@ index d0bef15785493b512ff0f7414c1d58d38fead581..58017fce436cdbda255f7172fbdadb72
/**
* Gets the item stack associated with this item drop.
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 5b0e14a7397d3de683d17ee2f1a805d289597a4b..ec5fe22b8092c8fc837e5c36e4f17053e48a77a8 100644
+index ea90b6f2137a9580fe3dfaaa57ce03bfeb496782..a56b4c2ccb738c8d1d5b2186506e82b384cf8873 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -25,7 +25,7 @@ import org.jetbrains.annotations.Nullable;
diff --git a/patches/api/0396-Player-Entity-Tracking-Events.patch b/patches/api/0394-Player-Entity-Tracking-Events.patch
index a824ae278f..a824ae278f 100644
--- a/patches/api/0396-Player-Entity-Tracking-Events.patch
+++ b/patches/api/0394-Player-Entity-Tracking-Events.patch
diff --git a/patches/api/0398-fix-Instruments.patch b/patches/api/0395-fix-Instruments.patch
index 00386f987b..b36de11f2d 100644
--- a/patches/api/0398-fix-Instruments.patch
+++ b/patches/api/0395-fix-Instruments.patch
@@ -98,7 +98,7 @@ index de976be7132d05506fde7a839cac3954b0dd8da4..642feb8b4578e6dbd2bf78d859283d20
public static Instrument getByType(final byte type) {
return BY_DATA.get(type);
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index dbb208e2badea38a4058491650b773192fae80bc..b11d6e190407b0ab0d9ff25c2c13f04ae907f612 100644
+index a7dcb46434110a2871228679bef7018703848f84..f60787152a3d2da050cef74711d73380135e60c4 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -407,9 +407,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0399-Add-BlockLockCheckEvent.patch b/patches/api/0396-Add-BlockLockCheckEvent.patch
index 55a23307b1..55a23307b1 100644
--- a/patches/api/0399-Add-BlockLockCheckEvent.patch
+++ b/patches/api/0396-Add-BlockLockCheckEvent.patch
diff --git a/patches/api/0400-Add-Sneaking-API-for-Entities.patch b/patches/api/0397-Add-Sneaking-API-for-Entities.patch
index eb85a81295..f631a2ada3 100644
--- a/patches/api/0400-Add-Sneaking-API-for-Entities.patch
+++ b/patches/api/0397-Add-Sneaking-API-for-Entities.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add Sneaking API for Entities
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index 3f3ea5bb6b3ea6f55b5cd699f1c01ac159619add..a2a423d4e4c2702ba5967223cab0432dd7d04732 100644
+index 6fac8564a97f58f4786dab8142556ef36b11e48e..ca1bd0078e381c892c70b741664b4d1ae27bdcb4 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -765,6 +765,25 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
@@ -35,7 +35,7 @@ index 3f3ea5bb6b3ea6f55b5cd699f1c01ac159619add..a2a423d4e4c2702ba5967223cab0432d
* Get the category of spawn to which this entity belongs.
*
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index b11d6e190407b0ab0d9ff25c2c13f04ae907f612..14a8831aabe7c7f1803151b382e27c606e7a049f 100644
+index f60787152a3d2da050cef74711d73380135e60c4..da6f37b9807c2523df2002d4f19ec75029c75961 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -310,6 +310,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0397-Add-missing-Fluid-type.patch b/patches/api/0397-Add-missing-Fluid-type.patch
deleted file mode 100644
index c260bf8497..0000000000
--- a/patches/api/0397-Add-missing-Fluid-type.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Jake Potrebic <[email protected]>
-Date: Sun, 4 Dec 2022 10:07:16 -0800
-Subject: [PATCH] Add missing Fluid type
-
-
-diff --git a/src/main/java/org/bukkit/Fluid.java b/src/main/java/org/bukkit/Fluid.java
-index 4cc974689a229e73ddbf2c353ac0fe23da03a5b2..7202b44a65e8699cf64329e441e83d4dd1779c19 100644
---- a/src/main/java/org/bukkit/Fluid.java
-+++ b/src/main/java/org/bukkit/Fluid.java
-@@ -8,6 +8,12 @@ import org.jetbrains.annotations.NotNull;
- */
- public enum Fluid implements Keyed {
-
-+ // Paper start
-+ /**
-+ * No fluid.
-+ */
-+ EMPTY,
-+ // Paper end
- /**
- * Stationary water.
- */
diff --git a/patches/api/0401-Improve-PortalEvents.patch b/patches/api/0398-Improve-PortalEvents.patch
index f7f53b19fc..f7f53b19fc 100644
--- a/patches/api/0401-Improve-PortalEvents.patch
+++ b/patches/api/0398-Improve-PortalEvents.patch
diff --git a/patches/api/0402-Add-exploded-block-state-to-BlockExplodeEvent.patch b/patches/api/0399-Add-exploded-block-state-to-BlockExplodeEvent.patch
index bdc2de6d23..bdc2de6d23 100644
--- a/patches/api/0402-Add-exploded-block-state-to-BlockExplodeEvent.patch
+++ b/patches/api/0399-Add-exploded-block-state-to-BlockExplodeEvent.patch
diff --git a/patches/api/0403-Flying-Fall-Damage-API.patch b/patches/api/0400-Flying-Fall-Damage-API.patch
index 4629c12d80..bad52c18e9 100644
--- a/patches/api/0403-Flying-Fall-Damage-API.patch
+++ b/patches/api/0400-Flying-Fall-Damage-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Flying Fall Damage API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 14a8831aabe7c7f1803151b382e27c606e7a049f..6cebd564b4262ae2145996612bc21e0de5356b84 100644
+index da6f37b9807c2523df2002d4f19ec75029c75961..9417b9ef775f8eebab15caff426f1f4b04ab406f 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -1579,6 +1579,23 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1567,6 +1567,23 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
public void setAllowFlight(boolean flight);
diff --git a/patches/api/0404-Expose-pre-collision-moving-velocity-to-VehicleBlock.patch b/patches/api/0401-Expose-pre-collision-moving-velocity-to-VehicleBlock.patch
index 25fa280b26..25fa280b26 100644
--- a/patches/api/0404-Expose-pre-collision-moving-velocity-to-VehicleBlock.patch
+++ b/patches/api/0401-Expose-pre-collision-moving-velocity-to-VehicleBlock.patch
diff --git a/patches/api/0405-Replace-ItemFlag.HIDE_POTION_EFFECTS.patch b/patches/api/0402-Replace-ItemFlag.HIDE_POTION_EFFECTS.patch
index 3936bb4a92..3936bb4a92 100644
--- a/patches/api/0405-Replace-ItemFlag.HIDE_POTION_EFFECTS.patch
+++ b/patches/api/0402-Replace-ItemFlag.HIDE_POTION_EFFECTS.patch
diff --git a/patches/api/0406-Win-Screen-API.patch b/patches/api/0403-Win-Screen-API.patch
index 8d131d362e..a8ff93bda9 100644
--- a/patches/api/0406-Win-Screen-API.patch
+++ b/patches/api/0403-Win-Screen-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Win Screen API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 6cebd564b4262ae2145996612bc21e0de5356b84..06f00d016f1e46edb8f4fe0c14eb8b364900c3ef 100644
+index 9417b9ef775f8eebab15caff426f1f4b04ab406f..f90b031b979aba116aaf5cf1936d50127268d3e1 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -946,6 +946,47 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -934,6 +934,47 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
public void sendMap(@NotNull MapView map);
diff --git a/patches/api/0407-Add-Entity-Body-Yaw-API.patch b/patches/api/0404-Add-Entity-Body-Yaw-API.patch
index 1d6aba7a15..82ec802456 100644
--- a/patches/api/0407-Add-Entity-Body-Yaw-API.patch
+++ b/patches/api/0404-Add-Entity-Body-Yaw-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add Entity Body Yaw API
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index ec5fe22b8092c8fc837e5c36e4f17053e48a77a8..ffca32ae2464ea5a669029079a50585ca259a4f8 100644
+index a56b4c2ccb738c8d1d5b2186506e82b384cf8873..e8aa113c66de8bc9d6c541b19477fd3d13d6e5e6 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -1133,5 +1133,21 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0408-Fix-HandlerList-for-InventoryBlockStartEvent-subclas.patch b/patches/api/0405-Fix-HandlerList-for-InventoryBlockStartEvent-subclas.patch
index 98799cd97d..98799cd97d 100644
--- a/patches/api/0408-Fix-HandlerList-for-InventoryBlockStartEvent-subclas.patch
+++ b/patches/api/0405-Fix-HandlerList-for-InventoryBlockStartEvent-subclas.patch
diff --git a/patches/api/0409-Add-EntityFertilizeEggEvent.patch b/patches/api/0406-Add-EntityFertilizeEggEvent.patch
index 52283a9df2..52283a9df2 100644
--- a/patches/api/0409-Add-EntityFertilizeEggEvent.patch
+++ b/patches/api/0406-Add-EntityFertilizeEggEvent.patch
diff --git a/patches/api/0410-Add-CompostItemEvent-and-EntityCompostItemEvent.patch b/patches/api/0407-Add-CompostItemEvent-and-EntityCompostItemEvent.patch
index f720032bf2..f720032bf2 100644
--- a/patches/api/0410-Add-CompostItemEvent-and-EntityCompostItemEvent.patch
+++ b/patches/api/0407-Add-CompostItemEvent-and-EntityCompostItemEvent.patch
diff --git a/patches/api/0411-Add-Shearable-API.patch b/patches/api/0408-Add-Shearable-API.patch
index 96049cfd38..96049cfd38 100644
--- a/patches/api/0411-Add-Shearable-API.patch
+++ b/patches/api/0408-Add-Shearable-API.patch
diff --git a/patches/api/0412-Fix-SpawnEggMeta-get-setSpawnedType.patch b/patches/api/0409-Fix-SpawnEggMeta-get-setSpawnedType.patch
index 4014e17083..4ea704f3f4 100644
--- a/patches/api/0412-Fix-SpawnEggMeta-get-setSpawnedType.patch
+++ b/patches/api/0409-Fix-SpawnEggMeta-get-setSpawnedType.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Fix SpawnEggMeta#get/setSpawnedType
diff --git a/src/main/java/org/bukkit/inventory/meta/SpawnEggMeta.java b/src/main/java/org/bukkit/inventory/meta/SpawnEggMeta.java
-index 9ae84de43018e2dc9df5e1a56244d8812c2ffbb8..c190dff53e18994c93c35b6a9502cba38e6886ed 100644
+index 28a7544dddc05be0c5f9a7bad21b9d41029230bd..4dbaf178d6ea3e9ce9dc03e0f5aacc51be5af5c9 100644
--- a/src/main/java/org/bukkit/inventory/meta/SpawnEggMeta.java
+++ b/src/main/java/org/bukkit/inventory/meta/SpawnEggMeta.java
@@ -15,7 +15,7 @@ public interface SpawnEggMeta extends ItemMeta {
@@ -15,7 +15,7 @@ index 9ae84de43018e2dc9df5e1a56244d8812c2ffbb8..c190dff53e18994c93c35b6a9502cba3
- @Deprecated
+ @Deprecated(forRemoval = true) // Paper
@Contract("-> fail")
- EntityType getSpawnedType();
+ EntityType<?> getSpawnedType();
@@ -26,10 +26,26 @@ public interface SpawnEggMeta extends ItemMeta {
* default.
@@ -24,7 +24,7 @@ index 9ae84de43018e2dc9df5e1a56244d8812c2ffbb8..c190dff53e18994c93c35b6a9502cba3
- @Deprecated
+ @Deprecated(forRemoval = true) // Paper
@Contract("_ -> fail")
- void setSpawnedType(EntityType type);
+ void setSpawnedType(EntityType<?> type);
+ // Paper start
+ /**
diff --git a/patches/api/0413-Add-Mob-Experience-reward-API.patch b/patches/api/0410-Add-Mob-Experience-reward-API.patch
index e399177aeb..e399177aeb 100644
--- a/patches/api/0413-Add-Mob-Experience-reward-API.patch
+++ b/patches/api/0410-Add-Mob-Experience-reward-API.patch
diff --git a/patches/api/0414-Expand-PlayerItemMendEvent.patch b/patches/api/0411-Expand-PlayerItemMendEvent.patch
index 223922e05e..223922e05e 100644
--- a/patches/api/0414-Expand-PlayerItemMendEvent.patch
+++ b/patches/api/0411-Expand-PlayerItemMendEvent.patch
diff --git a/patches/api/0415-Add-transient-modifier-API.patch b/patches/api/0412-Add-transient-modifier-API.patch
index a32e4c86a9..a32e4c86a9 100644
--- a/patches/api/0415-Add-transient-modifier-API.patch
+++ b/patches/api/0412-Add-transient-modifier-API.patch
diff --git a/patches/api/0416-Add-API-for-waxed-signs.patch b/patches/api/0413-Add-API-for-waxed-signs.patch
index 38a844fdb2..38a844fdb2 100644
--- a/patches/api/0416-Add-API-for-waxed-signs.patch
+++ b/patches/api/0413-Add-API-for-waxed-signs.patch
diff --git a/patches/api/0417-Properly-remove-the-experimental-smithing-inventory-.patch b/patches/api/0414-Properly-remove-the-experimental-smithing-inventory-.patch
index 58275cea90..58275cea90 100644
--- a/patches/api/0417-Properly-remove-the-experimental-smithing-inventory-.patch
+++ b/patches/api/0414-Properly-remove-the-experimental-smithing-inventory-.patch
diff --git a/patches/api/0418-Add-method-to-remove-all-active-potion-effects.patch b/patches/api/0415-Add-method-to-remove-all-active-potion-effects.patch
index ebb66dfa7f..4ed5a76426 100644
--- a/patches/api/0418-Add-method-to-remove-all-active-potion-effects.patch
+++ b/patches/api/0415-Add-method-to-remove-all-active-potion-effects.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add method to remove all active potion effects
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index ffca32ae2464ea5a669029079a50585ca259a4f8..9712f7140933d7fc87c5838c173e2d818b70cfde 100644
+index e8aa113c66de8bc9d6c541b19477fd3d13d6e5e6..6c48e29d7b17bf5ef8ee239d8131046f9f7b7ebd 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -565,6 +565,15 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0416-Mark-experimental-mc-things-appropriately.patch b/patches/api/0416-Mark-experimental-mc-things-appropriately.patch
new file mode 100644
index 0000000000..a4a6aca575
--- /dev/null
+++ b/patches/api/0416-Mark-experimental-mc-things-appropriately.patch
@@ -0,0 +1,19 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Mon, 19 Jun 2023 18:17:47 -0700
+Subject: [PATCH] Mark experimental mc things appropriately
+
+
+diff --git a/src/main/java/org/bukkit/inventory/ItemType.java b/src/main/java/org/bukkit/inventory/ItemType.java
+index 27a1d255b8fcbd6487e4d4eb1abf784b43eaf90e..2beed0864779ab121dc41b330e1ba4bc9505a38a 100644
+--- a/src/main/java/org/bukkit/inventory/ItemType.java
++++ b/src/main/java/org/bukkit/inventory/ItemType.java
+@@ -904,6 +904,8 @@ public interface ItemType extends Keyed, Translatable, net.kyori.adventure.trans
+ ItemType EGG = getItemType("egg");
+ ItemType COMPASS = getItemType("compass");
+ ItemType RECOVERY_COMPASS = getItemType("recovery_compass");
++ @org.bukkit.MinecraftExperimental // Paper
++ @org.jetbrains.annotations.ApiStatus.Experimental // Paper
+ ItemType BUNDLE = getItemType("bundle");
+ ItemType FISHING_ROD = getItemType("fishing_rod");
+ ItemType CLOCK = getItemType("clock");
diff --git a/patches/api/0417-fixup-Paper-Utils.patch b/patches/api/0417-fixup-Paper-Utils.patch
new file mode 100644
index 0000000000..a212a96609
--- /dev/null
+++ b/patches/api/0417-fixup-Paper-Utils.patch
@@ -0,0 +1,19 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Tue, 20 Jun 2023 09:37:42 -0700
+Subject: [PATCH] fixup! Paper Utils
+
+
+diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
+index 26006c3241efc76f0bbf9ba80bfada4bbf52c278..f04e2c955c03e3c2bf05935c7650356705b2c869 100644
+--- a/src/main/java/org/bukkit/UnsafeValues.java
++++ b/src/main/java/org/bukkit/UnsafeValues.java
+@@ -49,7 +49,7 @@ public interface UnsafeValues {
+ Material fromLegacy(MaterialData material, boolean itemPriority);
+
+ Material toMaterial(ItemType itemType);
+- Material toMaterial(BlockType<?> blockType); // Paper
++ Material blockTypeToMaterial(BlockType<?> blockType); // Paper
+
+ BlockData fromLegacy(Material material, byte data);
+
diff --git a/patches/api/0418-fixup-Add-Material-Tags.patch b/patches/api/0418-fixup-Add-Material-Tags.patch
new file mode 100644
index 0000000000..28eddb755c
--- /dev/null
+++ b/patches/api/0418-fixup-Add-Material-Tags.patch
@@ -0,0 +1,28 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Tue, 20 Jun 2023 09:37:53 -0700
+Subject: [PATCH] fixup! Add Material Tags
+
+
+diff --git a/src/main/java/com/destroystokyo/paper/MaterialSetTag.java b/src/main/java/com/destroystokyo/paper/MaterialSetTag.java
+index 64dd5e6674f83075be0f0868f66f114ff71dbe24..8f5530188e340336dfffb3054c1743b068bc9342 100644
+--- a/src/main/java/com/destroystokyo/paper/MaterialSetTag.java
++++ b/src/main/java/com/destroystokyo/paper/MaterialSetTag.java
+@@ -83,7 +83,7 @@ public class MaterialSetTag extends BaseTag<Material, MaterialSetTag> {
+ public MaterialSetTag addTags(@NotNull Tag<BlockType>...tags) {
+ for (Tag<BlockType> tag : tags) {
+ for (final BlockType<?> value : tag.getValues()) {
+- this.add(Bukkit.getUnsafe().toMaterial(value));
++ this.add(Bukkit.getUnsafe().blockTypeToMaterial(value));
+ }
+ }
+ return this;
+@@ -110,7 +110,7 @@ public class MaterialSetTag extends BaseTag<Material, MaterialSetTag> {
+ }
+
+ public boolean isTagged(@NotNull BlockType<?> itemType) {
+- return this.isTagged(Bukkit.getUnsafe().toMaterial(itemType));
++ return this.isTagged(Bukkit.getUnsafe().blockTypeToMaterial(itemType));
+ }
+
+ public boolean isTagged(@NotNull Material material) {
diff --git a/patches/api/0419-fixup-AnvilDamageEvent.patch b/patches/api/0419-fixup-AnvilDamageEvent.patch
new file mode 100644
index 0000000000..9f1ce71792
--- /dev/null
+++ b/patches/api/0419-fixup-AnvilDamageEvent.patch
@@ -0,0 +1,19 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Tue, 20 Jun 2023 09:38:01 -0700
+Subject: [PATCH] fixup! AnvilDamageEvent
+
+
+diff --git a/src/main/java/com/destroystokyo/paper/event/block/AnvilDamagedEvent.java b/src/main/java/com/destroystokyo/paper/event/block/AnvilDamagedEvent.java
+index 4b90dc67f75b05cb8a766025781b9eaa2fef2606..8174787e87433084035bb3cbc88e041937c56430 100644
+--- a/src/main/java/com/destroystokyo/paper/event/block/AnvilDamagedEvent.java
++++ b/src/main/java/com/destroystokyo/paper/event/block/AnvilDamagedEvent.java
+@@ -112,7 +112,7 @@ public class AnvilDamagedEvent extends InventoryEvent implements Cancellable {
+ */
+ @Deprecated
+ public @NotNull Material getMaterial() {
+- return Bukkit.getUnsafe().toMaterial(this.blockType);
++ return Bukkit.getUnsafe().blockTypeToMaterial(this.blockType);
+ }
+
+ /**