aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0173-Fix-Spigot-annotation-mistakes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/api/0173-Fix-Spigot-annotation-mistakes.patch')
-rw-r--r--patches/api/0173-Fix-Spigot-annotation-mistakes.patch1954
1 files changed, 1954 insertions, 0 deletions
diff --git a/patches/api/0173-Fix-Spigot-annotation-mistakes.patch b/patches/api/0173-Fix-Spigot-annotation-mistakes.patch
new file mode 100644
index 0000000000..277d463438
--- /dev/null
+++ b/patches/api/0173-Fix-Spigot-annotation-mistakes.patch
@@ -0,0 +1,1954 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Sun, 24 Mar 2019 18:39:01 -0400
+Subject: [PATCH] Fix Spigot annotation mistakes
+
+while some of these may of been true, they are extreme cases and cause
+a ton of noise to plugin developers.
+
+Use ApiStatus.Internal instead of Deprecated for actual internal API
+that continues to have use (internally).
+
+These do not help plugin developers if they bring moise noise than value.
+
+diff --git a/src/main/java/org/bukkit/Art.java b/src/main/java/org/bukkit/Art.java
+index ac420f0059fc50d3e1294f85df7515c9e17ff78f..24daba85ce4129fb0babe67570059ca8119360c0 100644
+--- a/src/main/java/org/bukkit/Art.java
++++ b/src/main/java/org/bukkit/Art.java
+@@ -75,9 +75,9 @@ public enum Art implements Keyed {
+ * Get the ID of this painting.
+ *
+ * @return The ID of this painting
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public int getId() {
+ return id;
+ }
+@@ -93,9 +93,9 @@ public enum Art implements Keyed {
+ *
+ * @param id The ID
+ * @return The painting
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Nullable
+ public static Art getById(int id) {
+ return BY_ID.get(id);
+diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
+index 40b4d6ee5ef1f6b88e0b85131be399526488cd9e..20e8bee8a686f8d37d770d8714c5c55af8491584 100644
+--- a/src/main/java/org/bukkit/Bukkit.java
++++ b/src/main/java/org/bukkit/Bukkit.java
+@@ -838,9 +838,8 @@ public final class Bukkit {
+ *
+ * @param id the id of the map to get
+ * @return a map view if it exists, or null otherwise
+- * @deprecated Magic value
+ */
+- @Deprecated
++ //@Deprecated // Paper - Not a magic value
+ @Nullable
+ public static MapView getMap(int id) {
+ return server.getMap(id);
+@@ -1307,10 +1306,8 @@ public final class Bukkit {
+ * @param name the name the player to retrieve
+ * @return an offline player
+ * @see #getOfflinePlayer(java.util.UUID)
+- * @deprecated Persistent storage of users should be by UUID as names are no longer
+- * unique past a single session.
+ */
+- @Deprecated
++ // @Deprecated // Paper
+ @NotNull
+ public static OfflinePlayer getOfflinePlayer(@NotNull String name) {
+ return server.getOfflinePlayer(name);
+@@ -1901,7 +1898,7 @@ public final class Bukkit {
+ *
+ * @return the scoreboard manager or null if no worlds are loaded.
+ */
+- @Nullable
++ @NotNull // Paper
+ public static ScoreboardManager getScoreboardManager() {
+ return server.getScoreboardManager();
+ }
+diff --git a/src/main/java/org/bukkit/CoalType.java b/src/main/java/org/bukkit/CoalType.java
+index c07499dbdd49d70717dbd674d97b6dbcfd7e9d5b..75e563d2a6d417b95c7f06a0636811aec8259672 100644
+--- a/src/main/java/org/bukkit/CoalType.java
++++ b/src/main/java/org/bukkit/CoalType.java
+@@ -7,6 +7,7 @@ import org.jetbrains.annotations.Nullable;
+ /**
+ * Represents the two types of coal
+ */
++@Deprecated // Paper
+ public enum CoalType {
+ COAL(0x0),
+ CHARCOAL(0x1);
+diff --git a/src/main/java/org/bukkit/CropState.java b/src/main/java/org/bukkit/CropState.java
+index fb4832fb796a38c0f5f51cf80a67259924f2c607..519deeeb86672fd75ae62026f956727d01f78fef 100644
+--- a/src/main/java/org/bukkit/CropState.java
++++ b/src/main/java/org/bukkit/CropState.java
+@@ -7,6 +7,7 @@ import org.jetbrains.annotations.Nullable;
+ /**
+ * Represents the different growth states of crops
+ */
++@Deprecated // Paper
+ public enum CropState {
+
+ /**
+diff --git a/src/main/java/org/bukkit/Difficulty.java b/src/main/java/org/bukkit/Difficulty.java
+index 3f6cbefc2b1414ba2dad709e79288013b3ef73be..f35801783538d3377b04131b8bf6effd7eb8e1a5 100644
+--- a/src/main/java/org/bukkit/Difficulty.java
++++ b/src/main/java/org/bukkit/Difficulty.java
+@@ -44,9 +44,9 @@ public enum Difficulty {
+ * Gets the difficulty value associated with this Difficulty.
+ *
+ * @return An integer value of this difficulty
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public int getValue() {
+ return value;
+ }
+@@ -57,9 +57,9 @@ public enum Difficulty {
+ * @param value Value to check
+ * @return Associative {@link Difficulty} with the given value, or null if
+ * it doesn't exist
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Nullable
+ public static Difficulty getByValue(final int value) {
+ return BY_ID.get(value);
+diff --git a/src/main/java/org/bukkit/DyeColor.java b/src/main/java/org/bukkit/DyeColor.java
+index bd213cabddd8752e609544f24cfba95405726155..47df858e095c4423c20e49e029d72f0f50d2c924 100644
+--- a/src/main/java/org/bukkit/DyeColor.java
++++ b/src/main/java/org/bukkit/DyeColor.java
+@@ -96,9 +96,9 @@ public enum DyeColor {
+ *
+ * @return A byte containing the wool data value of this color
+ * @see #getDyeData()
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public byte getWoolData() {
+ return woolData;
+ }
+@@ -142,9 +142,9 @@ public enum DyeColor {
+ * @return The {@link DyeColor} representing the given value, or null if
+ * it doesn't exist
+ * @see #getByDyeData(byte)
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Nullable
+ public static DyeColor getByWoolData(final byte data) {
+ int i = 0xff & data;
+@@ -202,9 +202,9 @@ public enum DyeColor {
+ *
+ * @param name dye name
+ * @return dye color
+- * @deprecated legacy use only
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @NotNull
+ public static DyeColor legacyValueOf(@Nullable String name) {
+ return "SILVER".equals(name) ? DyeColor.LIGHT_GRAY : DyeColor.valueOf(name);
+diff --git a/src/main/java/org/bukkit/Effect.java b/src/main/java/org/bukkit/Effect.java
+index 879d637691683ca862045402f74b751a892bf3ff..611b7df0e31de932f15c2f13bd8ed286e0b3b43f 100644
+--- a/src/main/java/org/bukkit/Effect.java
++++ b/src/main/java/org/bukkit/Effect.java
+@@ -358,9 +358,9 @@ public enum Effect {
+ * Gets the ID for this effect.
+ *
+ * @return ID of this effect
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public int getId() {
+ return this.id;
+ }
+@@ -387,9 +387,9 @@ public enum Effect {
+ *
+ * @param id ID of the Effect to return
+ * @return Effect with the given ID
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Nullable
+ public static Effect getById(int id) {
+ return BY_ID.get(id);
+diff --git a/src/main/java/org/bukkit/EntityEffect.java b/src/main/java/org/bukkit/EntityEffect.java
+index 1747b912dd08d82757687aaa7614d32d746fd6a1..7b6d9c2bbe1052371fdd4121f88e5009882a3d41 100644
+--- a/src/main/java/org/bukkit/EntityEffect.java
++++ b/src/main/java/org/bukkit/EntityEffect.java
+@@ -227,9 +227,9 @@ public enum EntityEffect {
+ * Gets the data value of this EntityEffect
+ *
+ * @return The data value
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public byte getData() {
+ return data;
+ }
+diff --git a/src/main/java/org/bukkit/GameMode.java b/src/main/java/org/bukkit/GameMode.java
+index 938c3217f92e6d3ef9a637269c469f8359af6347..81e45984a88fc84acd0f76d825abf4ddaed0ac3b 100644
+--- a/src/main/java/org/bukkit/GameMode.java
++++ b/src/main/java/org/bukkit/GameMode.java
+@@ -44,9 +44,9 @@ public enum GameMode {
+ * Gets the mode value associated with this GameMode
+ *
+ * @return An integer value of this gamemode
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public int getValue() {
+ return value;
+ }
+@@ -57,9 +57,9 @@ public enum GameMode {
+ * @param value Value to check
+ * @return Associative {@link GameMode} with the given value, or null if
+ * it doesn't exist
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Nullable
+ public static GameMode getByValue(final int value) {
+ return BY_ID.get(value);
+diff --git a/src/main/java/org/bukkit/GrassSpecies.java b/src/main/java/org/bukkit/GrassSpecies.java
+index f9c9ae463aacd593e3aa9caf037ea1e23d56c780..f8ae143acbf586d5279b44f7311ca97f3ae4ead2 100644
+--- a/src/main/java/org/bukkit/GrassSpecies.java
++++ b/src/main/java/org/bukkit/GrassSpecies.java
+@@ -6,7 +6,9 @@ import org.jetbrains.annotations.Nullable;
+
+ /**
+ * Represents the different types of grass.
++ * @deprecated use {@link org.bukkit.block.data.BlockData}
+ */
++@Deprecated // Paper
+ public enum GrassSpecies {
+
+ /**
+diff --git a/src/main/java/org/bukkit/Location.java b/src/main/java/org/bukkit/Location.java
+index 16df0568143a956309e6cab91a0818582fa4ed67..9e80988c71b77bbda1aca27a859537600a1439a6 100644
+--- a/src/main/java/org/bukkit/Location.java
++++ b/src/main/java/org/bukkit/Location.java
+@@ -46,7 +46,7 @@ public class Location implements Cloneable, ConfigurationSerializable, io.paperm
+ * @param y The y-coordinate of this new location
+ * @param z The z-coordinate of this new location
+ */
+- public Location(@Nullable final World world, final double x, final double y, final double z) {
++ public Location(@UndefinedNullability final World world, final double x, final double y, final double z) { // Paper
+ this(world, x, y, z, 0, 0);
+ }
+
+@@ -60,7 +60,7 @@ public class Location implements Cloneable, ConfigurationSerializable, io.paperm
+ * @param yaw The absolute rotation on the x-plane, in degrees
+ * @param pitch The absolute rotation on the y-plane, in degrees
+ */
+- public Location(@Nullable final World world, final double x, final double y, final double z, final float yaw, final float pitch) {
++ public Location(@UndefinedNullability final World world, final double x, final double y, final double z, final float yaw, final float pitch) { // Paper
+ if (world != null) {
+ this.world = new WeakReference<>(world);
+ }
+@@ -102,7 +102,7 @@ public class Location implements Cloneable, ConfigurationSerializable, io.paperm
+ * @throws IllegalArgumentException when world is unloaded
+ * @see #isWorldLoaded()
+ */
+- @Nullable
++ @UndefinedNullability // Paper
+ public World getWorld() {
+ 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 d56d899ca7737b537ea55c13a384888a873f5da3..55fc700d60051bb17469e0768db3c266ba18f17c 100644
+--- a/src/main/java/org/bukkit/Material.java
++++ b/src/main/java/org/bukkit/Material.java
+@@ -4459,20 +4459,20 @@ public enum Material implements Keyed, Translatable {
+ * Do not use for any reason.
+ *
+ * @return ID of this material
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public int getId() {
+ Preconditions.checkArgument(legacy, "Cannot get ID of Modern Material");
+ return id;
+ }
+
+ /**
+- * Do not use for any reason.
++ * Checks if this constant is a legacy material.
+ *
+ * @return legacy status
+ */
+- @Deprecated
++ // @Deprecated // Paper - this is useful, don't deprecate
+ public boolean isLegacy() {
+ return legacy;
+ }
+@@ -4543,8 +4543,10 @@ public enum Material implements Keyed, Translatable {
+ * Gets the MaterialData class associated with this Material
+ *
+ * @return MaterialData associated with this Material
++ * @deprecated use {@link #createBlockData()}
+ */
+ @NotNull
++ @Deprecated // Paper
+ public Class<? extends MaterialData> getData() {
+ Preconditions.checkArgument(legacy, "Cannot get data class of Modern Material");
+ return ctor.getDeclaringClass();
+@@ -8682,7 +8684,11 @@ public enum Material implements Keyed, Translatable {
+ * material.
+ *
+ * @return true if this material can be interacted with.
++ * @deprecated This method is not comprehensive and does not accurately reflect what block types are
++ * interactable. Many "interactions" are defined on the item not block, and many are conditional on some other world state
++ * checks being true.
+ */
++ @Deprecated // Paper
+ public boolean isInteractable() {
+ switch (this) {
+ // <editor-fold defaultstate="collapsed" desc="isInteractable">
+diff --git a/src/main/java/org/bukkit/NamespacedKey.java b/src/main/java/org/bukkit/NamespacedKey.java
+index 6fa219aef009f8dfb8a2b1e5ee0603b18cf3d0f5..8ac72cb0b05e2c493d98310f2e87c3714d15c5e3 100644
+--- a/src/main/java/org/bukkit/NamespacedKey.java
++++ b/src/main/java/org/bukkit/NamespacedKey.java
+@@ -74,12 +74,14 @@ public final class NamespacedKey implements net.kyori.adventure.key.Key, com.des
+
+ /**
+ * Create a key in a specific namespace.
++ * <p>
++ * For most plugin related code, you should prefer using the
++ * {@link NamespacedKey#NamespacedKey(Plugin, String)} constructor.
+ *
+ * @param namespace namespace
+ * @param key key
+- * @apiNote should never be used by plugins, for internal use only!!
++ * @see #NamespacedKey(Plugin, String)
+ */
+- @ApiStatus.Internal
+ public NamespacedKey(@NotNull String namespace, @NotNull String key) {
+ Preconditions.checkArgument(namespace != null && isValidNamespace(namespace), "Invalid namespace. Must be [a-z0-9._-]: %s", namespace);
+ Preconditions.checkArgument(key != null && isValidKey(key), "Invalid key. Must be [a-z0-9/._-]: %s", key);
+diff --git a/src/main/java/org/bukkit/NetherWartsState.java b/src/main/java/org/bukkit/NetherWartsState.java
+index f43209cf7b752c26718c303ca8c3e1c7d9912ad3..f0094e6fb05e526736629ad3181c8d2c16ba6ca4 100644
+--- a/src/main/java/org/bukkit/NetherWartsState.java
++++ b/src/main/java/org/bukkit/NetherWartsState.java
+@@ -1,5 +1,11 @@
+ package org.bukkit;
+
++// Paper start
++/**
++ * @deprecated use {@link org.bukkit.block.data.BlockData} and {@link org.bukkit.block.data.Ageable}
++ */
++@Deprecated
++// Paper end
+ public enum NetherWartsState {
+
+ /**
+diff --git a/src/main/java/org/bukkit/Note.java b/src/main/java/org/bukkit/Note.java
+index fc3da7ce6f7948aeab0962d9472e8f3a126834cf..bd713f9f7d125998d4bc01aaf11d1605ff64a970 100644
+--- a/src/main/java/org/bukkit/Note.java
++++ b/src/main/java/org/bukkit/Note.java
+@@ -39,9 +39,9 @@ public class Note {
+ * Returns the not sharped id of this tone.
+ *
+ * @return the not sharped id of this tone.
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public byte getId() {
+ return getId(false);
+ }
+@@ -53,9 +53,9 @@ public class Note {
+ *
+ * @param sharped Set to true to return the sharped id.
+ * @return the id of this tone.
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public byte getId(boolean sharped) {
+ byte id = (byte) (sharped && sharpable ? this.id + 1 : this.id);
+
+@@ -78,9 +78,9 @@ public class Note {
+ * @return if the tone id is the sharped id of the tone.
+ * @throws IllegalArgumentException if neither the tone nor the
+ * semitone have the id.
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public boolean isSharped(byte id) {
+ if (id == getId(false)) {
+ return false;
+@@ -97,9 +97,9 @@ public class Note {
+ *
+ * @param id the id of the tone.
+ * @return the tone to id.
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Nullable
+ public static Tone getById(byte id) {
+ return BY_DATA.get(id);
+@@ -214,9 +214,9 @@ public class Note {
+ * Returns the internal id of this note.
+ *
+ * @return the internal id of this note.
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public byte getId() {
+ return note;
+ }
+diff --git a/src/main/java/org/bukkit/Particle.java b/src/main/java/org/bukkit/Particle.java
+index 81bd12c8addcee754c71e5e030c729c7e096fb4c..6992600d6cff9ed0a30d37ac4dc5dc0e56ecb2c7 100644
+--- a/src/main/java/org/bukkit/Particle.java
++++ b/src/main/java/org/bukkit/Particle.java
+@@ -54,7 +54,9 @@ public enum Particle implements Keyed {
+ BLOCK_CRACK("block", BlockData.class),
+ /**
+ * Uses {@link BlockData} as DataType
++ * @deprecated use {@link #BLOCK_CRACK}
+ */
++ @Deprecated // Paper
+ BLOCK_DUST("block", BlockData.class, false),
+ WATER_DROP("rain"),
+ MOB_APPEARANCE("elder_guardian"),
+@@ -138,15 +140,21 @@ public enum Particle implements Keyed {
+ // ----- Legacy Separator -----
+ /**
+ * Uses {@link MaterialData} as DataType
++ * @deprecated {@link MaterialData} is deprecated API
+ */
++ @Deprecated // Paper
+ LEGACY_BLOCK_CRACK(null, MaterialData.class, false),
+ /**
+ * Uses {@link MaterialData} as DataType
++ * @deprecated {@link MaterialData} is deprecated API
+ */
++ @Deprecated // Paper
+ LEGACY_BLOCK_DUST(null, MaterialData.class, false),
+ /**
+ * Uses {@link MaterialData} as DataType
++ * @deprecated {@link MaterialData} is deprecated API
+ */
++ @Deprecated // Paper
+ LEGACY_FALLING_DUST(null, MaterialData.class, false);
+
+ private final NamespacedKey key;
+diff --git a/src/main/java/org/bukkit/Registry.java b/src/main/java/org/bukkit/Registry.java
+index c373614a865d6df8a2fe265497cf0b5f074490b0..8e0f985e8a6af728376a85eef998f7881e50786c 100644
+--- a/src/main/java/org/bukkit/Registry.java
++++ b/src/main/java/org/bukkit/Registry.java
+@@ -197,14 +197,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);
+ /**
+ * Trim patterns.
+ *
+ * @see TrimPattern
+ */
+- @ApiStatus.Experimental
++ //@ApiStatus.Experimental // Paper
+ Registry<TrimPattern> TRIM_PATTERN = Bukkit.getRegistry(TrimPattern.class);
+ /**
+ * Villager profession.
+@@ -286,8 +286,11 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
+ *
+ * @param input non-null input
+ * @return registered object or null if does not exist
++ * @deprecated this method's behavior is broken and not useful. If you want to get an object
++ * based on its vanilla name, or a key, wrap it in a {@link NamespacedKey} object and use {@link #get(NamespacedKey)}
+ */
+ @Nullable
++ @Deprecated(forRemoval = true) // Paper
+ default T match(@NotNull String input) {
+ Preconditions.checkArgument(input != null, "input must not be null");
+
+diff --git a/src/main/java/org/bukkit/SandstoneType.java b/src/main/java/org/bukkit/SandstoneType.java
+index 6277451c3c6c551078c237cd767b6d70c4f585ea..10f5cfb1885833a1d2c1027c03974da45ab28e2f 100644
+--- a/src/main/java/org/bukkit/SandstoneType.java
++++ b/src/main/java/org/bukkit/SandstoneType.java
+@@ -6,7 +6,9 @@ import org.jetbrains.annotations.Nullable;
+
+ /**
+ * Represents the three different types of Sandstone
++ * @deprecated use {@link org.bukkit.block.data.BlockData}
+ */
++@Deprecated // Paper
+ public enum SandstoneType {
+ CRACKED(0x0),
+ GLYPHED(0x1),
+diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
+index 7223bf91b369822afd355c600d834c30270197f4..ef71d6036d1df19c730b4d525862f11f3ee5ccb4 100644
+--- a/src/main/java/org/bukkit/Server.java
++++ b/src/main/java/org/bukkit/Server.java
+@@ -704,9 +704,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
+- * @deprecated Magic value
+ */
+- @Deprecated
++ //@Deprecated // Paper - Not a magic value
+ @Nullable
+ public MapView getMap(int id);
+
+@@ -1103,10 +1102,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)
+- * @deprecated Persistent storage of users should be by UUID as names are no longer
+- * unique past a single session.
+ */
+- @Deprecated
++ // @Deprecated // Paper
+ @NotNull
+ public OfflinePlayer getOfflinePlayer(@NotNull String name);
+
+@@ -1606,7 +1603,7 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+ *
+ * @return the scoreboard manager or null if no worlds are loaded.
+ */
+- @Nullable
++ @NotNull // Paper
+ ScoreboardManager getScoreboardManager();
+
+ /**
+diff --git a/src/main/java/org/bukkit/UndefinedNullability.java b/src/main/java/org/bukkit/UndefinedNullability.java
+index 4d4265c237179470e1fd017721a8dd595f114013..3babc9df26276300392d3f92ee6e317c33643b0b 100644
+--- a/src/main/java/org/bukkit/UndefinedNullability.java
++++ b/src/main/java/org/bukkit/UndefinedNullability.java
+@@ -14,6 +14,7 @@ import org.jetbrains.annotations.ApiStatus;
+ * suggests a bad API design.
+ */
+ @Retention(RetentionPolicy.CLASS)
+ @ApiStatus.Internal
+ @Deprecated
+ public @interface UndefinedNullability {
+diff --git a/src/main/java/org/bukkit/Vibration.java b/src/main/java/org/bukkit/Vibration.java
+index e455eb21abf121dc6ff10ff8a13dd06f67096a8f..bbc01e7c192ae6689c301670047ff114306c57cb 100644
+--- a/src/main/java/org/bukkit/Vibration.java
++++ b/src/main/java/org/bukkit/Vibration.java
+@@ -13,6 +13,14 @@ public class Vibration {
+ private final Destination destination;
+ private final int arrivalTime;
+
++ // Paper start
++ public Vibration(@NotNull Destination destination, @NotNull int arrivalTime) {
++ this.destination = destination;
++ this.arrivalTime = arrivalTime;
++ this.origin = new Location(null, 0, 0, 0); // Dummy origin because getter expects null
++ }
++
++ @Deprecated(forRemoval = true) // Paper end
+ public Vibration(@NotNull Location origin, @NotNull Destination destination, int arrivalTime) {
+ this.origin = origin;
+ this.destination = destination;
+@@ -22,9 +30,11 @@ public class Vibration {
+ /**
+ * Get the origin of the vibration.
+ *
++ * @deprecated unused as of 1.19
+ * @return origin
+ */
+ @NotNull
++ @Deprecated(forRemoval = true) // Paper
+ public Location getOrigin() {
+ return origin;
+ }
+diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
+index df511007ca4b3b5df04abfa6b7f1c4de636407fc..3f50a3c5af674fdb4c5adc64901d305753a0b5e9 100644
+--- a/src/main/java/org/bukkit/World.java
++++ b/src/main/java/org/bukkit/World.java
+@@ -416,9 +416,8 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+ * @param z Z-coordinate of the chunk
+ * @return Whether the chunk was actually refreshed
+ *
+- * @deprecated This method is not guaranteed to work suitably across all client implementations.
+ */
+- @Deprecated
++ //@Deprecated // Paper
+ public boolean refreshChunk(int x, int z);
+
+ /**
+@@ -3708,6 +3707,10 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+ // Paper end - view distance api
+
+ // Spigot start
++ /**
++ * @deprecated Unsupported api
++ */
++ @Deprecated // Paper
+ public class Spigot {
+
+ /**
+@@ -3716,8 +3719,12 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+ * @param loc The location to strike lightning
+ * @param isSilent Whether this strike makes no sound
+ * @return The lightning entity.
++ * @deprecated The lightning strike sound has been moved into the client and
++ * this doesn't prevent the sound being played. Use the regular (non spigot) methods instead
++ * for a consistent behavior.
+ */
+ @NotNull
++ @Deprecated // Paper
+ public LightningStrike strikeLightning(@NotNull Location loc, boolean isSilent) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+@@ -3728,14 +3735,22 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+ * @param loc The location to strike lightning
+ * @param isSilent Whether this strike makes no sound
+ * @return The lightning entity.
++ * @deprecated The lightning strike sound has been moved into the client and
++ * this doesn't prevent the sound being played. Use the regular (non spigot) methods instead
++ * for a consistent behavior.
+ */
+ @NotNull
++ @Deprecated // Paper
+ public LightningStrike strikeLightningEffect(@NotNull Location loc, boolean isSilent) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ }
+
++ /**
++ * @deprecated Unsupported api
++ */
+ @NotNull
++ @Deprecated // Paper
+ Spigot spigot();
+ // Spigot end
+
+@@ -3866,9 +3881,9 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+ * Gets the dimension ID of this environment
+ *
+ * @return dimension ID
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public int getId() {
+ return id;
+ }
+@@ -3878,9 +3893,9 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+ *
+ * @param id The ID of the environment
+ * @return The environment
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Nullable
+ public static Environment getEnvironment(int id) {
+ return lookup.get(id);
+diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
+index 78f6cc1a8a8de05aec6f551f8a5f425944f0ffa3..653a83b7ceb5cec1d92aed5250ae50e714fe5f9f 100644
+--- a/src/main/java/org/bukkit/block/Block.java
++++ b/src/main/java/org/bukkit/block/Block.java
+@@ -517,7 +517,7 @@ public interface Block extends Metadatable, Translatable {
+ * @return a list of dropped items for this type of block
+ */
+ @NotNull
+- Collection<ItemStack> getDrops(@NotNull ItemStack tool, @Nullable Entity entity);
++ Collection<ItemStack> getDrops(@Nullable ItemStack tool, @Nullable Entity entity); // Paper
+
+ /**
+ * Returns if the given item is a preferred choice to break this Block.
+diff --git a/src/main/java/org/bukkit/block/BlockState.java b/src/main/java/org/bukkit/block/BlockState.java
+index 7c5438fa92053cdbd7a01483a9baa4d48df07b24..a4f0a5270693e1c4af4fad827fa0a2ce753e07b5 100644
+--- a/src/main/java/org/bukkit/block/BlockState.java
++++ b/src/main/java/org/bukkit/block/BlockState.java
+@@ -36,8 +36,10 @@ public interface BlockState extends Metadatable {
+ * Gets the metadata for this block state.
+ *
+ * @return block specific metadata
++ * @deprecated use {@link #getBlockData()}
+ */
+ @NotNull
++ @Deprecated // Paper
+ MaterialData getData();
+
+ /**
+@@ -141,7 +143,9 @@ public interface BlockState extends Metadatable {
+ * Sets the metadata for this block state.
+ *
+ * @param data New block specific metadata
++ * @deprecated use {@link #setBlockData(BlockData)}
+ */
++ @Deprecated // Paper
+ void setData(@NotNull MaterialData data);
+
+ /**
+diff --git a/src/main/java/org/bukkit/block/BrushableBlock.java b/src/main/java/org/bukkit/block/BrushableBlock.java
+index 4bd127b3646307398e0c937c3e36ab671235b72b..f2557a87f468ee20c2d276dbfc0e9a976656c75c 100644
+--- a/src/main/java/org/bukkit/block/BrushableBlock.java
++++ b/src/main/java/org/bukkit/block/BrushableBlock.java
+@@ -15,7 +15,7 @@ public interface BrushableBlock extends Lootable, TileState {
+ *
+ * @return the item
+ */
+- @Nullable
++ @org.jetbrains.annotations.NotNull // Paper
+ public ItemStack getItem();
+
+ /**
+diff --git a/src/main/java/org/bukkit/block/PistonMoveReaction.java b/src/main/java/org/bukkit/block/PistonMoveReaction.java
+index b90f5dc345ad2cdd3ae353dc57f42a14c231d18a..a7b915ded9154d53ac8ca599119c1699cfca2265 100644
+--- a/src/main/java/org/bukkit/block/PistonMoveReaction.java
++++ b/src/main/java/org/bukkit/block/PistonMoveReaction.java
+@@ -48,9 +48,9 @@ public enum PistonMoveReaction {
+
+ /**
+ * @return The ID of the move reaction
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public int getId() {
+ return this.id;
+ }
+@@ -58,9 +58,9 @@ public enum PistonMoveReaction {
+ /**
+ * @param id An ID
+ * @return The move reaction with that ID
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Nullable
+ public static PistonMoveReaction getById(int id) {
+ return byId.get(id);
+diff --git a/src/main/java/org/bukkit/entity/Enderman.java b/src/main/java/org/bukkit/entity/Enderman.java
+index 605af1a9fc48602643aec57dd14e8c4ab657a0bc..b3085c7ff8b3e96083d209f6612c006578773c24 100644
+--- a/src/main/java/org/bukkit/entity/Enderman.java
++++ b/src/main/java/org/bukkit/entity/Enderman.java
+@@ -26,15 +26,19 @@ public interface Enderman extends Monster {
+ * Gets the id and data of the block that the Enderman is carrying.
+ *
+ * @return MaterialData containing the id and data of the block
++ * @deprecated use {@link #getCarriedBlock()}
+ */
+ @NotNull
++ @Deprecated // Paper
+ public MaterialData getCarriedMaterial();
+
+ /**
+ * Sets the id and data of the block that the Enderman is carrying.
+ *
+ * @param material data to set the carried block to
++ * @deprecated use {@link #setCarriedBlock(BlockData)}
+ */
++ @Deprecated // Paper
+ public void setCarriedMaterial(@NotNull MaterialData material);
+
+ /**
+diff --git a/src/main/java/org/bukkit/entity/EntityType.java b/src/main/java/org/bukkit/entity/EntityType.java
+index bb9ae81870a340c00d7480aff5106dc2c44dab8a..2522f7798962695577479a75f3095b72ee76e442 100644
+--- a/src/main/java/org/bukkit/entity/EntityType.java
++++ b/src/main/java/org/bukkit/entity/EntityType.java
+@@ -389,9 +389,9 @@ public enum EntityType implements Keyed, Translatable {
+ *
+ * @param name the entity type's name
+ * @return the matching entity type or null
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Contract("null -> null")
+ @Nullable
+ public static EntityType fromName(@Nullable String name) {
+diff --git a/src/main/java/org/bukkit/entity/LightningStrike.java b/src/main/java/org/bukkit/entity/LightningStrike.java
+index c49628f2638da68e1ec126e53c8b7c74b0d81b22..8dc433baba7060df5cfe6fc10210a5a27287987d 100644
+--- a/src/main/java/org/bukkit/entity/LightningStrike.java
++++ b/src/main/java/org/bukkit/entity/LightningStrike.java
+@@ -84,20 +84,31 @@ public interface LightningStrike extends Entity {
+ public void setCausingPlayer(@Nullable Player player);
+
+ // Spigot start
++ /**
++ * @deprecated Unsupported api
++ */
++ @Deprecated // Paper
+ public class Spigot extends Entity.Spigot {
+
+- /*
++ /**
+ * Returns whether the strike is silent.
+ *
+ * @return whether the strike is silent.
++ * @deprecated The lightning strike sound has been moved into the client and
++ * this can't predict if the sound will be played or not accurately.
+ */
++ @Deprecated // Paper
+ public boolean isSilent() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ }
+
++ /**
++ * @deprecated Unsupported api
++ */
+ @NotNull
+ @Override
++ @Deprecated // Paper
+ Spigot spigot();
+ // Spigot end
+ }
+diff --git a/src/main/java/org/bukkit/entity/LingeringPotion.java b/src/main/java/org/bukkit/entity/LingeringPotion.java
+index f124b35ec76e6cb6a1a0dc464005087043c3efd0..f50aaddf8582be55fd4860ad374d8f2206991897 100644
+--- a/src/main/java/org/bukkit/entity/LingeringPotion.java
++++ b/src/main/java/org/bukkit/entity/LingeringPotion.java
+@@ -3,6 +3,8 @@ package org.bukkit.entity;
+ /**
+ * Represents a thrown lingering potion bottle
+ *
+- * @deprecated lingering status depends on only on the potion item.
++ * @deprecated should not be used for anything, use {@link ThrownPotion} and
++ * set the potion via the methods there.
+ */
++@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 79fdb183887cb8153254f6ac84a981a7ffcb561c..373b3ad6b3f94655289155914aec8294cd4f2fb2 100644
+--- a/src/main/java/org/bukkit/entity/LivingEntity.java
++++ b/src/main/java/org/bukkit/entity/LivingEntity.java
+@@ -664,7 +664,9 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
+ * This may have unexpected results if the entity is not in water.
+ *
+ * @param swimming True if the entity is swimming.
++ * @deprecated This does nothing and is immediately reverted by the server, in the next tick <!-- Paper - future note: should wait a mojang input client/server side -->
+ */
++ @Deprecated // Paper
+ public void setSwimming(boolean swimming);
+
+ /**
+diff --git a/src/main/java/org/bukkit/entity/Minecart.java b/src/main/java/org/bukkit/entity/Minecart.java
+index 95c79c5fa0c4e30201f887da6467ce5f81c8a255..7f9c4d4b430a3f0276461346ff2621bacf864075 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 {
+ * Passing a null value will set the minecart to have no display block.
+ *
+ * @param material the material to set as display block.
++ * @deprecated use {@link #setDisplayBlockData(BlockData)}
+ */
++ @Deprecated // Paper
+ public void setDisplayBlock(@Nullable MaterialData material);
+
+ /**
+@@ -109,8 +111,10 @@ public interface Minecart extends Vehicle {
+ * This function will return the type AIR if none is set.
+ *
+ * @return the block displayed by this minecart.
++ * @deprecated use {@link #getDisplayBlockData()}
+ */
+ @NotNull
++ @Deprecated // Paper
+ public MaterialData getDisplayBlock();
+
+ /**
+diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
+index 9954fc11b2c2fe56c194d7d3ce878a343a9b2429..c3223873d1afe14cdc0a14f97b3aa98d013d6e90 100644
+--- a/src/main/java/org/bukkit/entity/Player.java
++++ b/src/main/java/org/bukkit/entity/Player.java
+@@ -1436,11 +1436,8 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+
+ /**
+ * Forces an update of the player's entire inventory.
+- *
+- * @apiNote It should not be necessary for plugins to use this method. If it
+- * is required for some reason, it is probably a bug.
+ */
+- @ApiStatus.Internal
++ // @ApiStatus.Internal // Paper - is valid API
+ public void updateInventory();
+
+ /**
+diff --git a/src/main/java/org/bukkit/entity/Projectile.java b/src/main/java/org/bukkit/entity/Projectile.java
+index 906b33b7569fff5dd78258f9765e879180a52834..06e3ad9cd8f39de0ef6ead794df1492415bc4302 100644
+--- a/src/main/java/org/bukkit/entity/Projectile.java
++++ b/src/main/java/org/bukkit/entity/Projectile.java
+@@ -29,7 +29,7 @@ public interface Projectile extends Entity {
+ * @return true if it should bounce.
+ * @deprecated does not do anything
+ */
+- @Deprecated
++ @Deprecated(forRemoval = true)
+ public boolean doesBounce();
+
+ /**
+@@ -39,6 +39,6 @@ public interface Projectile extends Entity {
+ * @param doesBounce whether or not it should bounce.
+ * @deprecated does not do anything
+ */
+- @Deprecated
++ @Deprecated(forRemoval = true)
+ public void setBounce(boolean doesBounce);
+ }
+diff --git a/src/main/java/org/bukkit/entity/SplashPotion.java b/src/main/java/org/bukkit/entity/SplashPotion.java
+index 9cb08fe7201a9f91e88c7b1ee22c17889a7bf1c3..c0fcfccdf476106b48e626a099658c04244ebff8 100644
+--- a/src/main/java/org/bukkit/entity/SplashPotion.java
++++ b/src/main/java/org/bukkit/entity/SplashPotion.java
+@@ -3,7 +3,8 @@ package org.bukkit.entity;
+ /**
+ * Represents a thrown splash potion bottle
+ *
+- * @deprecated splash status depends on only on the potion item.
++ * @deprecated should not be used for anything, use {@link ThrownPotion} and
++ * set the potion via the methods there.
+ */
+-@Deprecated
++@Deprecated(forRemoval = true) // Paper
+ public interface SplashPotion extends ThrownPotion { }
+diff --git a/src/main/java/org/bukkit/entity/TextDisplay.java b/src/main/java/org/bukkit/entity/TextDisplay.java
+index f101ffde9e7b3f6c3ab6f1cffb8d6f4e720634b2..8abc129f5953807e7a451166dabcf3e14e55483f 100644
+--- a/src/main/java/org/bukkit/entity/TextDisplay.java
++++ b/src/main/java/org/bukkit/entity/TextDisplay.java
+@@ -62,19 +62,17 @@ public interface TextDisplay extends Display {
+ * Gets the text background color.
+ *
+ * @return the background color
+- * @deprecated API subject to change
+ */
+ @Nullable
+- @Deprecated
++ // @Deprecated // Paper - is stable API
+ Color getBackgroundColor();
+
+ /**
+ * Sets the text background color.
+ *
+ * @param color new background color
+- * @deprecated API subject to change
+ */
+- @Deprecated
++ // @Deprecated // Paper - is stable API
+ void setBackgroundColor(@Nullable Color color);
+
+ /**
+diff --git a/src/main/java/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java b/src/main/java/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java
+index e9a6e5be5f33a342f7e5c496f0f1c64b2f302ace..f0db59a556deaefefbdaca121585c0fd199c13c2 100644
+--- a/src/main/java/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java
++++ b/src/main/java/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java
+@@ -23,7 +23,7 @@ public class PrepareItemEnchantEvent extends InventoryEvent implements Cancellab
+ private boolean cancelled;
+ private final Player enchanter;
+
+- public PrepareItemEnchantEvent(@NotNull final Player enchanter, @NotNull InventoryView view, @NotNull final Block table, @NotNull final ItemStack item, @NotNull final EnchantmentOffer[] offers, final int bonus) {
++ public PrepareItemEnchantEvent(@NotNull final Player enchanter, @NotNull InventoryView view, @NotNull final Block table, @NotNull final ItemStack item, @org.jetbrains.annotations.Nullable final EnchantmentOffer @NotNull [] offers, final int bonus) { // Paper - offers can contain null values
+ super(view);
+ this.enchanter = enchanter;
+ this.table = table;
+@@ -68,6 +68,7 @@ public class PrepareItemEnchantEvent extends InventoryEvent implements Cancellab
+ * @return experience level costs offered
+ * @deprecated Use {@link #getOffers()} instead of this method
+ */
++ @Deprecated // Paper
+ @NotNull
+ public int[] getExpLevelCostsOffered() {
+ int[] levelOffers = new int[offers.length];
+@@ -85,8 +86,7 @@ public class PrepareItemEnchantEvent extends InventoryEvent implements Cancellab
+ *
+ * @return list of available enchantment offers
+ */
+- @NotNull
+- public EnchantmentOffer[] getOffers() {
++ public @org.jetbrains.annotations.Nullable EnchantmentOffer @NotNull [] getOffers() { // Paper offers can contain null values
+ return offers;
+ }
+
+diff --git a/src/main/java/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java b/src/main/java/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java
+index 090ec6f96ca9b7f760389994da988c44c32b9976..e6b4d4c1722bf4a11744a421d09646b22745b138 100644
+--- a/src/main/java/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java
++++ b/src/main/java/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java
+@@ -10,7 +10,7 @@ import org.jetbrains.annotations.Nullable;
+ * LivingEntity's.
+ */
+ public class EntityTargetLivingEntityEvent extends EntityTargetEvent {
+- public EntityTargetLivingEntityEvent(@NotNull final Entity entity, @Nullable final LivingEntity target, @Nullable final TargetReason reason) {
++ public EntityTargetLivingEntityEvent(@NotNull final Entity entity, @Nullable final LivingEntity target, @NotNull final TargetReason reason) { // Paper
+ super(entity, target, reason);
+ }
+
+diff --git a/src/main/java/org/bukkit/event/entity/EntityToggleSwimEvent.java b/src/main/java/org/bukkit/event/entity/EntityToggleSwimEvent.java
+index e1123295b9511a2c610a1baf7195638f7f3e64c4..273ae8e5da0a858d3b82d1b0f5992318ff49f145 100644
+--- a/src/main/java/org/bukkit/event/entity/EntityToggleSwimEvent.java
++++ b/src/main/java/org/bukkit/event/entity/EntityToggleSwimEvent.java
+@@ -24,6 +24,14 @@ public class EntityToggleSwimEvent extends EntityEvent implements Cancellable {
+ return cancel;
+ }
+
++ /**
++ * @deprecated This does nothing, the server and the client doesn't work
++ * correctly when the server try to bypass this. A current workaround
++ * exists. If you want to cancel the switch from the ground state to the
++ * swimming state you need to disable the sprinting flag for the player after
++ * the cancel action.
++ */
++ @Deprecated // Paper
+ @Override
+ public void setCancelled(boolean cancel) {
+ this.cancel = cancel;
+diff --git a/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java b/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java
+index 775e3223aa5054f1883403e50c8f2241d97b1285..5d4817d2a3b709f1a1a1162309a1c923bd09cc1d 100644
+--- a/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java
++++ b/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java
+@@ -19,22 +19,27 @@ public class ProjectileHitEvent extends EntityEvent implements Cancellable {
+ private final BlockFace hitFace;
+ private boolean cancel = false;
+
++ @Deprecated @io.papermc.paper.annotation.DoNotUse // Paper
+ public ProjectileHitEvent(@NotNull final Projectile projectile) {
+- this(projectile, null, null);
++ this(projectile, null, null, null); // Paper
+ }
+
++ @Deprecated @io.papermc.paper.annotation.DoNotUse // Paper
+ public ProjectileHitEvent(@NotNull final Projectile projectile, @Nullable Entity hitEntity) {
+- this(projectile, hitEntity, null);
++ this(projectile, hitEntity, null, null); // Paper
+ }
+
++ @Deprecated @io.papermc.paper.annotation.DoNotUse // Paper
+ public ProjectileHitEvent(@NotNull final Projectile projectile, @Nullable Block hitBlock) {
+- this(projectile, null, hitBlock);
++ this(projectile, null, hitBlock, null); // Paper
+ }
+
++ @Deprecated @io.papermc.paper.annotation.DoNotUse // Paper
+ public ProjectileHitEvent(@NotNull final Projectile projectile, @Nullable Entity hitEntity, @Nullable Block hitBlock) {
+ this(projectile, hitEntity, hitBlock, null);
+ }
+
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public ProjectileHitEvent(@NotNull final Projectile projectile, @Nullable Entity hitEntity, @Nullable Block hitBlock, @Nullable BlockFace hitFace) {
+ super(projectile);
+ this.hitEntity = hitEntity;
+diff --git a/src/main/java/org/bukkit/event/entity/SpawnerSpawnEvent.java b/src/main/java/org/bukkit/event/entity/SpawnerSpawnEvent.java
+index 9353f0d09272404f42167ab8b7ad83a03620c436..f3ec8f67328b266defb31a44a36d31401d5e9371 100644
+--- a/src/main/java/org/bukkit/event/entity/SpawnerSpawnEvent.java
++++ b/src/main/java/org/bukkit/event/entity/SpawnerSpawnEvent.java
+@@ -12,12 +12,19 @@ import org.jetbrains.annotations.NotNull;
+ public class SpawnerSpawnEvent extends EntitySpawnEvent {
+ private final CreatureSpawner spawner;
+
+- public SpawnerSpawnEvent(@NotNull final Entity spawnee, @NotNull final CreatureSpawner spawner) {
++ public SpawnerSpawnEvent(@NotNull final Entity spawnee, @org.jetbrains.annotations.Nullable final CreatureSpawner spawner) { // Paper
+ super(spawnee);
+ this.spawner = spawner;
+ }
+
+- @NotNull
++ /**
++ * Gets the spawner tile state, or null
++ * when the entity is spawned from a minecart
++ * spawner.
++ *
++ * @return the spawner tile state
++ */
++ @org.jetbrains.annotations.Nullable // Paper
+ public CreatureSpawner getSpawner() {
+ return spawner;
+ }
+diff --git a/src/main/java/org/bukkit/event/hanging/HangingBreakByEntityEvent.java b/src/main/java/org/bukkit/event/hanging/HangingBreakByEntityEvent.java
+index 68517811f63838bdad41073ee26be82f95042a8e..454885e47611edd707358ddfe0a01b7acf9ad5c8 100644
+--- a/src/main/java/org/bukkit/event/hanging/HangingBreakByEntityEvent.java
++++ b/src/main/java/org/bukkit/event/hanging/HangingBreakByEntityEvent.java
+@@ -11,22 +11,21 @@ import org.jetbrains.annotations.Nullable;
+ public class HangingBreakByEntityEvent extends HangingBreakEvent {
+ private final Entity remover;
+
+- public HangingBreakByEntityEvent(@NotNull final Hanging hanging, @Nullable final Entity remover) {
++ public HangingBreakByEntityEvent(@NotNull final Hanging hanging, @NotNull final Entity remover) { // Paper
+ this(hanging, remover, HangingBreakEvent.RemoveCause.ENTITY);
+ }
+
+- public HangingBreakByEntityEvent(@NotNull final Hanging hanging, @Nullable final Entity remover, @NotNull final HangingBreakEvent.RemoveCause cause) {
++ public HangingBreakByEntityEvent(@NotNull final Hanging hanging, @NotNull final Entity remover, @NotNull final HangingBreakEvent.RemoveCause cause) { // Paper
+ super(hanging, cause);
+ this.remover = remover;
+ }
+
+ /**
+ * Gets the entity that removed the hanging entity.
+- * May be null, for example when broken by an explosion.
+ *
+ * @return the entity that removed the hanging entity
+ */
+- @Nullable
++ @NotNull // Paper
+ public Entity getRemover() {
+ return remover;
+ }
+diff --git a/src/main/java/org/bukkit/event/inventory/HopperInventorySearchEvent.java b/src/main/java/org/bukkit/event/inventory/HopperInventorySearchEvent.java
+index 80a0a4ad813d6453b30273d25942e6612bb05c1b..18bb808e73c7a78f367ccdb44d5fe12bc54672cb 100644
+--- a/src/main/java/org/bukkit/event/inventory/HopperInventorySearchEvent.java
++++ b/src/main/java/org/bukkit/event/inventory/HopperInventorySearchEvent.java
+@@ -34,7 +34,7 @@ public class HopperInventorySearchEvent extends BlockEvent {
+ DESTINATION;
+ }
+
+- public HopperInventorySearchEvent(@NotNull Inventory inventory, @NotNull ContainerType containerType, @NotNull Block hopper, @NotNull Block searchBlock) {
++ public HopperInventorySearchEvent(@Nullable Inventory inventory, @NotNull ContainerType containerType, @NotNull Block hopper, @NotNull Block searchBlock) { // Paper
+ super(hopper);
+ this.inventory = inventory;
+ this.containerType = containerType;
+diff --git a/src/main/java/org/bukkit/event/inventory/InventoryClickEvent.java b/src/main/java/org/bukkit/event/inventory/InventoryClickEvent.java
+index fe58058f9b5d29388d48115cc81dc48ab08c58c1..ac67a4e321f43d1ede09dafe2daa1f07de8a923f 100644
+--- a/src/main/java/org/bukkit/event/inventory/InventoryClickEvent.java
++++ b/src/main/java/org/bukkit/event/inventory/InventoryClickEvent.java
+@@ -85,7 +85,7 @@ public class InventoryClickEvent extends InventoryInteractEvent {
+ *
+ * @return the cursor ItemStack
+ */
+- @Nullable
++ @NotNull // Paper - fix nullability
+ public ItemStack getCursor() {
+ return getView().getCursor();
+ }
+diff --git a/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java b/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java
+index 1cb70b5c8776863f44f1c4cdde152c35cb51edb5..f09b378508fcc6299e7cb40f174028f6f88ba067 100644
+--- a/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java
++++ b/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java
+@@ -43,7 +43,10 @@ public class PlayerBedLeaveEvent extends PlayerEvent implements Cancellable {
+ * {@link Player#setBedSpawnLocation(Location)}.
+ *
+ * @return true if the spawn location will be changed
++ * @deprecated the respawn point is now set when the player enter the bed and
++ * this option doesn't work since MC 1.15.
+ */
++ @Deprecated(forRemoval = true) // Paper - Unused
+ public boolean shouldSetSpawnLocation() {
+ return setBedSpawn;
+ }
+@@ -59,7 +62,10 @@ public class PlayerBedLeaveEvent extends PlayerEvent implements Cancellable {
+ * {@link Player#setBedSpawnLocation(Location)}.
+ *
+ * @param setBedSpawn true to change the new spawn location
++ * @deprecated the respawn point is now set when the player enter the bed and
++ * this option doesn't work since MC 1.15.
+ */
++ @Deprecated(forRemoval = true) // Paper - Unused
+ public void setSpawnLocation(boolean setBedSpawn) {
+ this.setBedSpawn = setBedSpawn;
+ }
+diff --git a/src/main/java/org/bukkit/event/player/PlayerMoveEvent.java b/src/main/java/org/bukkit/event/player/PlayerMoveEvent.java
+index 1b2267f4e8ebded198773ec80e2bff2c861c7084..1a58734d919fae247eeb85dd785fd59990856505 100644
+--- a/src/main/java/org/bukkit/event/player/PlayerMoveEvent.java
++++ b/src/main/java/org/bukkit/event/player/PlayerMoveEvent.java
+@@ -78,7 +78,7 @@ public class PlayerMoveEvent extends PlayerEvent implements Cancellable {
+ *
+ * @return Location the player moved to
+ */
+- @Nullable
++ @NotNull // Paper
+ public Location getTo() {
+ return to;
+ }
+diff --git a/src/main/java/org/bukkit/event/raid/RaidSpawnWaveEvent.java b/src/main/java/org/bukkit/event/raid/RaidSpawnWaveEvent.java
+index cd58dd7de781823804701fc023706e805c0142a8..1b8bb5241efcf4a90fd098f2000f8394072dca4a 100644
+--- a/src/main/java/org/bukkit/event/raid/RaidSpawnWaveEvent.java
++++ b/src/main/java/org/bukkit/event/raid/RaidSpawnWaveEvent.java
+@@ -19,7 +19,7 @@ public class RaidSpawnWaveEvent extends RaidEvent {
+ private final List<Raider> raiders;
+ private final Raider leader;
+
+- public RaidSpawnWaveEvent(@NotNull Raid raid, @NotNull World world, @Nullable Raider leader, @NotNull List<Raider> raiders) {
++ public RaidSpawnWaveEvent(@NotNull Raid raid, @NotNull World world, @NotNull Raider leader, @NotNull List<Raider> raiders) { // Paper
+ super(raid, world);
+ this.raiders = raiders;
+ this.leader = leader;
+@@ -30,7 +30,7 @@ public class RaidSpawnWaveEvent extends RaidEvent {
+ *
+ * @return {@link Raider}
+ */
+- @Nullable
++ @NotNull // Paper
+ public Raider getPatrolLeader() {
+ return leader;
+ }
+diff --git a/src/main/java/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java b/src/main/java/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java
+index 6bafc62e2235a6b783cbf96f4dabeeaf02bd5178..50c762d777ac90a05772501a28cacff8fd3f5126 100644
+--- a/src/main/java/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java
++++ b/src/main/java/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java
+@@ -36,18 +36,22 @@ public class VehicleEntityCollisionEvent extends VehicleCollisionEvent implement
+ this.cancelled = cancel;
+ }
+
++ @Deprecated(forRemoval = true) // Paper - Unused
+ public boolean isPickupCancelled() {
+ return cancelledPickup;
+ }
+
++ @Deprecated(forRemoval = true) // Paper - Unused
+ public void setPickupCancelled(boolean cancel) {
+ cancelledPickup = cancel;
+ }
+
++ @Deprecated(forRemoval = true) // Paper - Unused
+ public boolean isCollisionCancelled() {
+ return cancelledCollision;
+ }
+
++ @Deprecated(forRemoval = true) // Paper - Unused
+ public void setCollisionCancelled(boolean cancel) {
+ 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
+--- 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 {
+ * @param y the y location in the chunk from minHeight (inclusive) - maxHeight (exclusive)
+ * @param z the z location in the chunk from 0-15 inclusive
+ * @param material the type to set the block to
++ * @deprecated use {@link #setBlock(int, int, int, BlockData)}
+ */
++ @Deprecated // Paper
+ public void setBlock(int x, int y, int z, @NotNull MaterialData material);
+
+ /**
+@@ -700,7 +702,9 @@ public abstract class ChunkGenerator {
+ * @param yMax maximum y location (exclusive) in the chunk to set
+ * @param zMax maximum z location (exclusive) in the chunk to set
+ * @param material the type to set the blocks to
++ * @deprecated use {@link #setRegion(int, int, int, int, int, int, BlockData)}
+ */
++ @Deprecated // Paper
+ public void setRegion(int xMin, int yMin, int zMin, int xMax, int yMax, int zMax, @NotNull MaterialData material);
+
+ /**
+@@ -741,8 +745,10 @@ public abstract class ChunkGenerator {
+ * @param y the y location in the chunk from minHeight (inclusive) - maxHeight (exclusive)
+ * @param z the z location in the chunk from 0-15 inclusive
+ * @return the type and data of the block or the MaterialData for air if x, y or z are outside the chunk's bounds
++ * @deprecated use {@link #getBlockData(int, int, int)}
+ */
+ @NotNull
++ @Deprecated // Paper
+ public MaterialData getTypeAndData(int x, int y, int z);
+
+ /**
+diff --git a/src/main/java/org/bukkit/inventory/CookingRecipe.java b/src/main/java/org/bukkit/inventory/CookingRecipe.java
+index 571652ba8843a9493f1843523e24145baa958637..f7fa79393aef40027446b78bac8e9490cfafd8bc 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.
+ *
+ * @return The input material.
++ * @deprecated Use {@link #getInputChoice()} instead for more complete data.
+ */
++ @Deprecated // Paper
+ @NotNull
+ public ItemStack getInput() {
+ return this.ingredient.getItemStack();
+diff --git a/src/main/java/org/bukkit/inventory/CraftingInventory.java b/src/main/java/org/bukkit/inventory/CraftingInventory.java
+index df81bac9ecff697f98941e5c8490e10391e90090..a32977ba3ba60a1c9aee6e469d5d6cd1887c55a2 100644
+--- a/src/main/java/org/bukkit/inventory/CraftingInventory.java
++++ b/src/main/java/org/bukkit/inventory/CraftingInventory.java
+@@ -21,8 +21,7 @@ public interface CraftingInventory extends Inventory {
+ *
+ * @return The contents. Individual entries may be null.
+ */
+- @NotNull
+- ItemStack[] getMatrix();
++ @Nullable ItemStack @NotNull [] getMatrix(); // Paper - make array elements nullable instead array
+
+ /**
+ * Set the item in the result slot of the crafting inventory.
+@@ -38,7 +37,7 @@ public interface CraftingInventory extends Inventory {
+ * @throws IllegalArgumentException if the length of contents is greater
+ * than the size of the crafting matrix.
+ */
+- void setMatrix(@NotNull ItemStack[] contents);
++ void setMatrix(@Nullable ItemStack @NotNull [] contents); // Paper - make array elements nullable instead array
+
+ /**
+ * Get the current recipe formed on the crafting inventory, if any.
+diff --git a/src/main/java/org/bukkit/inventory/EntityEquipment.java b/src/main/java/org/bukkit/inventory/EntityEquipment.java
+index c69904f3ee7f3a41d6cebcd401abf8385dfbf868..62c1c3f01fd58db39f635eee415fcbc19fb36ec9 100644
+--- a/src/main/java/org/bukkit/inventory/EntityEquipment.java
++++ b/src/main/java/org/bukkit/inventory/EntityEquipment.java
+@@ -511,6 +511,6 @@ public interface EntityEquipment {
+ *
+ * @return the entity this EntityEquipment belongs to
+ */
+- @Nullable
++ @NotNull // Paper
+ 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
+--- 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> {
+ *
+ * @param input The input material.
+ * @return The changed recipe, so you can chain calls.
++ * @deprecated use {@link #setInputChoice(RecipeChoice)}
+ */
+ @NotNull
++ @Deprecated
+ public FurnaceRecipe setInput(@NotNull MaterialData input) {
+ return setInput(input.getItemType(), input.getData());
+ }
+diff --git a/src/main/java/org/bukkit/inventory/Inventory.java b/src/main/java/org/bukkit/inventory/Inventory.java
+index f1a48eab1a357ae64545e1f1dc941c383cff8707..466d1bd7089b76f48f953e1a51c611ecd93dcd54 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> {
+ *
+ * @return An array of ItemStacks from the inventory. Individual items may be null.
+ */
+- @NotNull
+- public ItemStack[] getContents();
++ public @Nullable ItemStack @NotNull [] getContents(); // Paper - make array elements nullable instead array
+
+ /**
+ * Completely replaces the inventory's contents. Removes all existing
+@@ -173,7 +172,7 @@ public interface Inventory extends Iterable<ItemStack> {
+ * @throws IllegalArgumentException If the array has more items than the
+ * inventory.
+ */
+- public void setContents(@NotNull ItemStack[] items) throws IllegalArgumentException;
++ public void setContents(@Nullable ItemStack @NotNull [] items) throws IllegalArgumentException; // Paper - make array elements nullable instead array
+
+ /**
+ * Return the contents from the section of the inventory where items can
+@@ -186,8 +185,7 @@ public interface Inventory extends Iterable<ItemStack> {
+ *
+ * @return inventory storage contents. Individual items may be null.
+ */
+- @NotNull
+- public ItemStack[] getStorageContents();
++ public @Nullable ItemStack @NotNull [] getStorageContents(); // Paper - make array elements nullable instead array
+
+ /**
+ * Put the given ItemStacks into the storage slots
+@@ -196,7 +194,7 @@ public interface Inventory extends Iterable<ItemStack> {
+ * @throws IllegalArgumentException If the array has more items than the
+ * inventory.
+ */
+- public void setStorageContents(@NotNull ItemStack[] items) throws IllegalArgumentException;
++ public void setStorageContents(@Nullable ItemStack @NotNull [] items) throws IllegalArgumentException; // Paper - make array elements nullable instead array
+
+ /**
+ * Checks if the inventory contains any ItemStacks with the given
+diff --git a/src/main/java/org/bukkit/inventory/InventoryView.java b/src/main/java/org/bukkit/inventory/InventoryView.java
+index 002acfbdce1db10f7ba1b6a013e678f504ac6e69..8d14426eb1ebea27058d5f22ea652f22d00fccb9 100644
+--- a/src/main/java/org/bukkit/inventory/InventoryView.java
++++ b/src/main/java/org/bukkit/inventory/InventoryView.java
+@@ -126,9 +126,9 @@ public abstract class InventoryView {
+ * Gets the id of this view.
+ *
+ * @return the id of this view
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public int getId() {
+ return id;
+ }
+@@ -210,10 +210,10 @@ public abstract class InventoryView {
+ /**
+ * Get the item on the cursor of one of the viewing players.
+ *
+- * @return The item on the player's cursor, or null if they aren't holding
+- * one.
++ * @return The item on the player's cursor, or an empty stack
++ * if they aren't holding one.
+ */
+- @Nullable
++ @NotNull // Paper - fix nullability
+ public final ItemStack getCursor() {
+ return getPlayer().getItemOnCursor();
+ }
+diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
+index 246b58f52e914c45f357240b155c826b1d40b202..53457348eaf2e1ef2e844eae87ac94f701525c92 100644
+--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
++++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
+@@ -30,7 +30,7 @@ public interface ItemFactory {
+ * @return a new ItemMeta that could be applied to an item stack of the
+ * specified material
+ */
+- @Nullable
++ @org.bukkit.UndefinedNullability // Paper
+ ItemMeta getItemMeta(@NotNull final Material material);
+
+ /**
+diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
+index 83a0631a80db156ace1d977df71d5fc653b70bb6..60a25898fb17c467ffae05039fcd4d3b154a99ff 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;
+ import org.bukkit.Bukkit;
+ import org.bukkit.Material;
+ import org.bukkit.Translatable;
++import org.bukkit.UndefinedNullability;
+ 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
+ * 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)}
+ */
+ @Nullable
++ @Deprecated // Paper
+ public MaterialData getData() {
+ Material mat = Bukkit.getUnsafe().toLegacy(getType());
+ if (data == null && mat != null && mat.getData() != null) {
+@@ -184,7 +188,9 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+ * Sets the MaterialData for this stack of items
+ *
+ * @param data New MaterialData for this item
++ * @deprecated cast to {@link org.bukkit.inventory.meta.BlockDataMeta} and use {@link org.bukkit.inventory.meta.BlockDataMeta#setBlockData(org.bukkit.block.data.BlockData)}
+ */
++ @Deprecated // Paper
+ public void setData(@Nullable MaterialData data) {
+ if (data == null) {
+ this.data = data;
+@@ -546,7 +552,7 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+ *
+ * @return a copy of the current ItemStack's ItemData
+ */
+- @Nullable
++ @UndefinedNullability // Paper
+ public ItemMeta getItemMeta() {
+ return this.meta == null ? Bukkit.getItemFactory().getItemMeta(this.type) : this.meta.clone();
+ }
+diff --git a/src/main/java/org/bukkit/inventory/PlayerInventory.java b/src/main/java/org/bukkit/inventory/PlayerInventory.java
+index 5461f7fa75f5a065bb333b4a113640b5fe1e3825..c4d657727e508cb941320730a9d3aa5486712ef3 100644
+--- a/src/main/java/org/bukkit/inventory/PlayerInventory.java
++++ b/src/main/java/org/bukkit/inventory/PlayerInventory.java
+@@ -14,8 +14,7 @@ public interface PlayerInventory extends Inventory {
+ *
+ * @return All the ItemStacks from the armor slots. Individual items can be null.
+ */
+- @NotNull
+- public ItemStack[] getArmorContents();
++ public @Nullable ItemStack @NotNull [] getArmorContents(); // Paper - make array elements nullable instead array
+
+ /**
+ * Get all additional ItemStacks stored in this inventory.
+@@ -26,8 +25,7 @@ public interface PlayerInventory extends Inventory {
+ *
+ * @return All additional ItemStacks. Individual items can be null.
+ */
+- @NotNull
+- public ItemStack[] getExtraContents();
++ public @Nullable ItemStack @NotNull [] getExtraContents(); // Paper - make array elements nullable instead array
+
+ /**
+ * Return the ItemStack from the helmet slot
+@@ -104,9 +102,9 @@ public interface PlayerInventory extends Inventory {
+ *
+ * @param slot the slot to get the ItemStack
+ *
+- * @return the ItemStack in the given slot or null if there is not one
++ * @return the ItemStack in the given slot
+ */
+- @Nullable
++ @NotNull // Paper
+ public ItemStack getItem(@NotNull EquipmentSlot slot);
+
+ /**
+diff --git a/src/main/java/org/bukkit/inventory/ShapedRecipe.java b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
+index 97d5d9c6347bc401e3f4ab7c0ba1391ad5b0449a..da878c6d4928ddbc16b50ace86d992685a2b7873 100644
+--- a/src/main/java/org/bukkit/inventory/ShapedRecipe.java
++++ b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
+@@ -100,8 +100,10 @@ public class ShapedRecipe extends CraftingRecipe {
+ * @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.
++ * @deprecated use {@link #setIngredient(char, RecipeChoice)}
+ */
+ @NotNull
++ @Deprecated // Paper
+ public ShapedRecipe setIngredient(char key, @NotNull MaterialData ingredient) {
+ return setIngredient(key, ingredient.getItemType(), ingredient.getData());
+ }
+@@ -179,7 +181,9 @@ public class ShapedRecipe extends CraftingRecipe {
+ * Get a copy of the ingredients map.
+ *
+ * @return The mapping of character to ingredients.
++ * @deprecated Use {@link #getChoiceMap()} instead for more complete data.
+ */
++ @Deprecated // Paper
+ @NotNull
+ 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 b8ac602cd2718d615ec243ce648951a1a46c26ec..beb798482479c58a8628c314b510ab6349576ce8 100644
+--- a/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
++++ b/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
+@@ -43,8 +43,10 @@ public class ShapelessRecipe extends CraftingRecipe {
+ *
+ * @param ingredient The ingredient to add.
+ * @return The changed recipe, so you can chain calls.
++ * @deprecated use {@link #addIngredient(RecipeChoice)}
+ */
+ @NotNull
++ @Deprecated
+ public ShapelessRecipe addIngredient(@NotNull MaterialData ingredient) {
+ return addIngredient(1, ingredient);
+ }
+@@ -80,8 +82,10 @@ public class ShapelessRecipe extends CraftingRecipe {
+ * @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.
++ * @deprecated use {@link #addIngredient(int, Material)}
+ */
+ @NotNull
++ @Deprecated // Paper
+ public ShapelessRecipe addIngredient(int count, @NotNull MaterialData ingredient) {
+ return addIngredient(count, ingredient.getItemType(), ingredient.getData());
+ }
+@@ -198,8 +202,10 @@ public class ShapelessRecipe extends CraftingRecipe {
+ *
+ * @param ingredient The ingredient to remove
+ * @return The changed recipe.
++ * @deprecated use {@link #removeIngredient(Material)}
+ */
+ @NotNull
++ @Deprecated // Paper
+ public ShapelessRecipe removeIngredient(@NotNull MaterialData ingredient) {
+ return removeIngredient(ingredient.getItemType(), ingredient.getData());
+ }
+@@ -226,8 +232,10 @@ public class ShapelessRecipe extends CraftingRecipe {
+ * @param count The number of copies to remove.
+ * @param ingredient The ingredient to remove.
+ * @return The changed recipe.
++ * @deprecated use {@link #removeIngredient(int, Material)}
+ */
+ @NotNull
++ @Deprecated // Paper
+ public ShapelessRecipe removeIngredient(int count, @NotNull MaterialData ingredient) {
+ return removeIngredient(count, ingredient.getItemType(), ingredient.getData());
+ }
+@@ -277,7 +285,9 @@ public class ShapelessRecipe extends CraftingRecipe {
+ * Get the list of ingredients used for this recipe.
+ *
+ * @return The input list
++ * @deprecated Use {@link #getChoiceList()} instead for more complete data.
+ */
++ @Deprecated // Paper
+ @NotNull
+ 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
+--- 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.
+ *
+ * @return The input material.
++ * @deprecated Use {@link #getInputChoice()} instead for more complete data.
+ */
++ @Deprecated // Paper
+ @NotNull
+ public ItemStack getInput() {
+ return this.ingredient.getItemStack();
+diff --git a/src/main/java/org/bukkit/inventory/meta/ColorableArmorMeta.java b/src/main/java/org/bukkit/inventory/meta/ColorableArmorMeta.java
+index 5ccae862dbac393805a47fe26c18a2f33f1e140d..72281899817c5c140cdca2afff75fbcebd942532 100644
+--- a/src/main/java/org/bukkit/inventory/meta/ColorableArmorMeta.java
++++ b/src/main/java/org/bukkit/inventory/meta/ColorableArmorMeta.java
+@@ -6,7 +6,7 @@ import org.jetbrains.annotations.NotNull;
+ /**
+ * Represents armor that an entity can equip and can also be colored.
+ */
++//@ApiStatus.Experimental // Paper
+ public interface ColorableArmorMeta extends ArmorMeta, LeatherArmorMeta {
+
+ @Override
+diff --git a/src/main/java/org/bukkit/inventory/meta/ItemMeta.java b/src/main/java/org/bukkit/inventory/meta/ItemMeta.java
+index 46ac120ed51274a2084719387e35e517981bbf4b..420a91a834016d3af95efd79ca92ae45c4f081c4 100644
+--- a/src/main/java/org/bukkit/inventory/meta/ItemMeta.java
++++ b/src/main/java/org/bukkit/inventory/meta/ItemMeta.java
+@@ -75,8 +75,10 @@ public interface ItemMeta extends Cloneable, ConfigurationSerializable, Persiste
+ /**
+ * Checks for existence of a localized name.
+ *
++ * @deprecated Use {@link ItemMeta#displayName()} and check if it is instanceof a {@link net.kyori.adventure.text.TranslatableComponent}.
+ * @return true if this has a localized name
+ */
++ @Deprecated // Paper - Deprecate old localized API
+ boolean hasLocalizedName();
+
+ /**
+@@ -85,16 +87,20 @@ public interface ItemMeta extends Cloneable, ConfigurationSerializable, Persiste
+ * Plugins should check that hasLocalizedName() returns <code>true</code>
+ * before calling this method.
+ *
++ * @deprecated Use {@link ItemMeta#displayName()} and cast it to a {@link net.kyori.adventure.text.TranslatableComponent}. No longer used by the client.
+ * @return the localized name that is set
+ */
++ @Deprecated // Paper - Deprecate old localized API
+ @NotNull
+ String getLocalizedName();
+
+ /**
+ * Sets the localized name.
+ *
++ * @deprecated Use {@link ItemMeta#displayName(Component)} with a {@link net.kyori.adventure.text.TranslatableComponent}. No longer used by the client.
+ * @param name the name to set
+ */
++ @Deprecated // Paper - Deprecate old localized API
+ void setLocalizedName(@Nullable String name);
+
+ /**
+diff --git a/src/main/java/org/bukkit/inventory/meta/MapMeta.java b/src/main/java/org/bukkit/inventory/meta/MapMeta.java
+index 32055a8890425e0b819930f3059da5ea9dfca553..26a336dade83baee97d20eb39a058925659f5777 100644
+--- a/src/main/java/org/bukkit/inventory/meta/MapMeta.java
++++ b/src/main/java/org/bukkit/inventory/meta/MapMeta.java
+@@ -16,13 +16,8 @@ public interface MapMeta extends ItemMeta {
+ *
+ * @return true if this has a map ID number.
+ * @see #hasMapView()
+- * @deprecated These methods are poor API: They rely on the caller to pass
+- * in an only an integer property, and have poorly defined implementation
+- * behavior if that integer is not a valid map (the current implementation
+- * for example will generate a new map with a different ID). The xxxMapView
+- * family of methods should be used instead.
+ */
+- @Deprecated
++ //@Deprecated // Paper
+ boolean hasMapId();
+
+ /**
+@@ -34,13 +29,8 @@ public interface MapMeta extends ItemMeta {
+ *
+ * @return the map ID that is set
+ * @see #getMapView()
+- * @deprecated These methods are poor API: They rely on the caller to pass
+- * in an only an integer property, and have poorly defined implementation
+- * behavior if that integer is not a valid map (the current implementation
+- * for example will generate a new map with a different ID). The xxxMapView
+- * family of methods should be used instead.
+ */
+- @Deprecated
++ //@Deprecated // Paper
+ int getMapId();
+
+ /**
+diff --git a/src/main/java/org/bukkit/map/MapCanvas.java b/src/main/java/org/bukkit/map/MapCanvas.java
+index 00437719722830c087ff925015086c29bbb04497..ae9bcc8262dbf6eb8673ca82395d09169db38f9d 100644
+--- a/src/main/java/org/bukkit/map/MapCanvas.java
++++ b/src/main/java/org/bukkit/map/MapCanvas.java
+@@ -94,9 +94,9 @@ public interface MapCanvas {
+ * @param x The x coordinate, from 0 to 127.
+ * @param y The y coordinate, from 0 to 127.
+ * @return The color. See {@link MapPalette}.
+- * @deprecated Magic value, use {@link #getPixelColor(int, int)}
++ * @deprecated use {@link #getPixelColor(int, int)}
+ */
+- @Deprecated
++ @Deprecated(forRemoval = true, since = "1.20.2") // Paper
+ public byte getPixel(int x, int y);
+
+ /**
+@@ -105,9 +105,9 @@ public interface MapCanvas {
+ * @param x The x coordinate, from 0 to 127.
+ * @param y The y coordinate, from 0 to 127.
+ * @return The color. See {@link MapPalette}.
+- * @deprecated Magic value, use {@link #getBasePixelColor(int, int)}
++ * @deprecated use {@link #getBasePixelColor(int, int)}
+ */
+- @Deprecated
++ @Deprecated(forRemoval = true, since = "1.20.2") // Paper
+ public byte getBasePixel(int x, int y);
+
+ /**
+diff --git a/src/main/java/org/bukkit/map/MapCursor.java b/src/main/java/org/bukkit/map/MapCursor.java
+index 7d4f4970dae6fe4eeea6b6b6810dcecfe20d6e51..599399e4d8ca7c46747439ad2dd0186d0a289a19 100644
+--- a/src/main/java/org/bukkit/map/MapCursor.java
++++ b/src/main/java/org/bukkit/map/MapCursor.java
+@@ -156,9 +156,9 @@ public final class MapCursor {
+ * Get the type of this cursor.
+ *
+ * @return The type (color/style) of the map cursor.
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public byte getRawType() {
+ return type;
+ }
+@@ -215,9 +215,9 @@ public final class MapCursor {
+ * Set the type of this cursor.
+ *
+ * @param type The type (color/style) of the map cursor.
+- * @deprecated Magic value
++ * @deprecated use {@link #setType(Type)}
+ */
+- @Deprecated
++ @Deprecated(forRemoval = true, since = "1.20.2") // Paper
+ public void setRawType(byte type) {
+ if (type < 0 || type > 26) {
+ throw new IllegalArgumentException("Type must be in the range 0-26");
+@@ -328,9 +328,9 @@ public final class MapCursor {
+ * Gets the internal value of the cursor.
+ *
+ * @return the value
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public byte getValue() {
+ return value;
+ }
+@@ -340,9 +340,9 @@ public final class MapCursor {
+ *
+ * @param value the value
+ * @return the matching type
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Nullable
+ public static Type byValue(byte value) {
+ for (Type t : values()) {
+diff --git a/src/main/java/org/bukkit/map/MapPalette.java b/src/main/java/org/bukkit/map/MapPalette.java
+index 3a9aaca2e76411a9c27f9f5e0f22d060d5a66d06..c80faa079eca1564847070f0338fc98024639829 100644
+--- a/src/main/java/org/bukkit/map/MapPalette.java
++++ b/src/main/java/org/bukkit/map/MapPalette.java
+@@ -197,9 +197,9 @@ public final class MapPalette {
+ *
+ * @param image The image to convert.
+ * @return A byte[] containing the pixels of the image.
+- * @deprecated Magic value
++ * @deprecated use color-related methods
+ */
+- @Deprecated
++ @Deprecated(forRemoval = true, since = "1.20.2") // Paper
+ @NotNull
+ public static byte[] imageToBytes(@NotNull Image image) {
+ BufferedImage temp = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
+@@ -225,9 +225,9 @@ public final class MapPalette {
+ * @param b The blue component of the color.
+ * @param g The green component of the color.
+ * @return The index in the palette.
+- * @deprecated Magic value
++ * @deprecated use color-related methods
+ */
+- @Deprecated
++ @Deprecated(forRemoval = true, since = "1.20.2") // Paper
+ public static byte matchColor(int r, int g, int b) {
+ return matchColor(new Color(r, g, b));
+ }
+@@ -238,9 +238,9 @@ public final class MapPalette {
+ *
+ * @param color The Color to match.
+ * @return The index in the palette.
+- * @deprecated Magic value
++ * @deprecated use color-related methods
+ */
+- @Deprecated
++ @Deprecated(forRemoval = true, since = "1.20.2") // Paper
+ public static byte matchColor(@NotNull Color color) {
+ if (color.getAlpha() < 128) return 0;
+
+@@ -268,9 +268,9 @@ public final class MapPalette {
+ *
+ * @param index The index in the palette.
+ * @return The Color of the palette entry.
+- * @deprecated Magic value
++ * @deprecated use color directly
+ */
+- @Deprecated
++ @Deprecated(forRemoval = true, since = "1.20.2") // Paper
+ @NotNull
+ public static Color getColor(byte index) {
+ // Minecraft has 143 colors, some of which have negative byte representations
+@@ -311,9 +311,9 @@ public final class MapPalette {
+ * @param color The Color to match.
+ * @return The index in the palette.
+ * @throws IllegalStateException if {@link #isCached()} returns false
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ byte matchColor(@NotNull Color color);
+ }
+ }
+diff --git a/src/main/java/org/bukkit/map/MapView.java b/src/main/java/org/bukkit/map/MapView.java
+index 9b8b68b66dc15b06800251702c2722623c8462a0..e998c5d871e02564c24260a8205dcfafb6e703d9 100644
+--- a/src/main/java/org/bukkit/map/MapView.java
++++ b/src/main/java/org/bukkit/map/MapView.java
+@@ -32,9 +32,9 @@ public interface MapView {
+ *
+ * @param value The raw scale
+ * @return The enum scale, or null for an invalid input
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Nullable
+ public static Scale valueOf(byte value) {
+ switch (value) {
+@@ -51,9 +51,9 @@ public interface MapView {
+ * Get the raw value of this scale level.
+ *
+ * @return The scale value
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ public byte getValue() {
+ return value;
+ }
+diff --git a/src/main/java/org/bukkit/material/Openable.java b/src/main/java/org/bukkit/material/Openable.java
+index 0ae54f973d11df74abb3105cf9226afb130b4f33..597036bad6bc61b4aa63a61b45e886dd74a0b7f6 100644
+--- a/src/main/java/org/bukkit/material/Openable.java
++++ b/src/main/java/org/bukkit/material/Openable.java
+@@ -1,5 +1,6 @@
+ package org.bukkit.material;
+
++@Deprecated // Paper
+ public interface Openable {
+
+ /**
+diff --git a/src/main/java/org/bukkit/material/Redstone.java b/src/main/java/org/bukkit/material/Redstone.java
+index 3e46603f8cd38041394e0e1baf788d9009b3ffc7..b15c141f1db07296bb349f11c6f39b0fbe53e7b1 100644
+--- a/src/main/java/org/bukkit/material/Redstone.java
++++ b/src/main/java/org/bukkit/material/Redstone.java
+@@ -3,6 +3,7 @@ package org.bukkit.material;
+ /**
+ * Indicated a Material that may carry or create a Redstone current
+ */
++@Deprecated // Paper
+ public interface Redstone {
+
+ /**
+diff --git a/src/main/java/org/bukkit/material/Step.java b/src/main/java/org/bukkit/material/Step.java
+index 9f502e7ee05d0512e190a1722cc112ece068c4e2..10c0465cf58d680bfa9a0f9233f94e8b6d5a9b93 100644
+--- a/src/main/java/org/bukkit/material/Step.java
++++ b/src/main/java/org/bukkit/material/Step.java
+@@ -78,6 +78,7 @@ public class Step extends TexturedMaterial {
+ *
+ * @deprecated Magic value
+ */
++ @Deprecated // Paper
+ @Override
+ protected int getTextureIndex() {
+ return getData() & 0x7;
+diff --git a/src/main/java/org/bukkit/material/types/MushroomBlockTexture.java b/src/main/java/org/bukkit/material/types/MushroomBlockTexture.java
+index 0ea9c6b2420a0f990bd1fdf50fc015e37a7060d8..e99644eae1c662b117aa19060d2484aca19fe0a4 100644
+--- a/src/main/java/org/bukkit/material/types/MushroomBlockTexture.java
++++ b/src/main/java/org/bukkit/material/types/MushroomBlockTexture.java
+@@ -7,7 +7,9 @@ import org.jetbrains.annotations.Nullable;
+
+ /**
+ * Represents the different textured blocks of mushroom.
++ * @deprecated use BlockData
+ */
++@Deprecated // Paper
+ public enum MushroomBlockTexture {
+
+ /**
+diff --git a/src/main/java/org/bukkit/potion/PotionEffectType.java b/src/main/java/org/bukkit/potion/PotionEffectType.java
+index 5f3aa6fd18d57055a6d8494938dff149d51b2803..ceba656b25f74d4bb2eadb9a7eca184b069b4909 100644
+--- a/src/main/java/org/bukkit/potion/PotionEffectType.java
++++ b/src/main/java/org/bukkit/potion/PotionEffectType.java
+@@ -220,9 +220,9 @@ public abstract class PotionEffectType implements Keyed {
+ * Returns the unique ID of this type.
+ *
+ * @return Unique ID
+- * @deprecated Magic value
++ * @deprecated use {@link #key()}
+ */
+- @Deprecated
++ @Deprecated(forRemoval = true, since = "1.20.2") // Paper
+ public int getId() {
+ return id;
+ }
+@@ -304,9 +304,9 @@ public abstract class PotionEffectType implements Keyed {
+ *
+ * @param id Unique ID to fetch
+ * @return Resulting type, or null if not found.
+- * @deprecated Magic value
++ * @apiNote Internal Use Only
+ */
+- @Deprecated
++ @org.jetbrains.annotations.ApiStatus.Internal // Paper
+ @Nullable
+ public static PotionEffectType getById(int id) {
+ if (id >= byId.length || id < 0)
+diff --git a/src/test/java/org/bukkit/materials/MaterialDataTest.java b/src/test/java/org/bukkit/materials/MaterialDataTest.java
+index 8d78435cc42a9e668b2d4d674b79b4094c3bd1b1..24a8ce4387b897c717b55405f363ffafff45894d 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;
+ import org.junit.jupiter.api.Test;
+
++@Deprecated // Paper
+ public class MaterialDataTest {
+
+ @Test