mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-24 08:06:41 +01:00
dd11ef8441
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: 3a3bea52 SPIGOT-7829: Increase maximum outgoing plugin message size to match Vanilla intention 5cd1c8cb SPIGOT-7831: Add CreatureSpawnEvent.SpawnReason#POTION_EFFECT a8e278f0 SPIGOT-7827: Sync EntityPortalEvent with PlayerPortalEvent since non-players can now create portals 53729d12 Remove spurious ApiStatus.Internal annotation b9f57486 SPIGOT-7799, PR-1039: Expose explosion world interaction in EntityExplodeEvent and BlockExplodeEvent 7983b966 PR-1029: Trial changing a small number of inner enums to classes/interfaces to better support custom values CraftBukkit Changes: 403accd56 SPIGOT-7831: Add CreatureSpawnEvent.SpawnReason#POTION_EFFECT 812761660 Increase outdated build delay bed1e3ff6 SPIGOT-7827: Sync EntityPortalEvent with PlayerPortalEvent since non-players can now create portals 2444c8b23 SPIGOT-7823: Suspicious sand and gravel material are not marked as having gravity correctly aceddcd0b SPIGOT-7820: Enum changes - duplicate method name a0d2d6a84 SPIGOT-7813: Material#isInteractable() always returns false 8fd64b091 SPIGOT-7806: Handle both loot and inventory item drop behaviour in PlayerDeathEvent a4ee40b74 SPIGOT-7799, PR-1436: Expose explosion world interaction in EntityExplodeEvent and BlockExplodeEvent 082aa51c5 PR-1424: Trial changing a small number of inner enums to classes/interfaces to better support custom values 66e78a96b SPIGOT-7815: Consider EntityDamageEvent status for Wolf armor damage Spigot Changes: 5bbef5ad SPIGOT-7834: Modify max value for generic.max_absorption
203 lines
8.5 KiB
Diff
203 lines
8.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Wed, 20 Dec 2023 02:03:10 -0800
|
|
Subject: [PATCH] Improve Registry
|
|
|
|
Adds Registry#getKey(Object) which should be the
|
|
primary way people get the key for an object. Registry
|
|
items need to exist without having a key and so
|
|
getKey() methods on Keyed objects that have a registry
|
|
are marked as Deprecated or Obsolete.
|
|
|
|
diff --git a/src/main/java/org/bukkit/MusicInstrument.java b/src/main/java/org/bukkit/MusicInstrument.java
|
|
index 62d2b3f950860dee0898d77b0a29635c3f9a7e23..704dba92f9246ef398ed8d162ebee3cf305960e1 100644
|
|
--- a/src/main/java/org/bukkit/MusicInstrument.java
|
|
+++ b/src/main/java/org/bukkit/MusicInstrument.java
|
|
@@ -53,6 +53,16 @@ public abstract class MusicInstrument implements Keyed, net.kyori.adventure.tran
|
|
return instrument;
|
|
}
|
|
|
|
+ // Paper start - deprecate getKey
|
|
+ /**
|
|
+ * @deprecated use {@link Registry#getKey(Keyed)} and {@link Registry#INSTRUMENT}. MusicInstruments
|
|
+ * can exist without a key.
|
|
+ */
|
|
+ @Deprecated
|
|
+ @Override
|
|
+ public abstract @NotNull NamespacedKey getKey();
|
|
+ // Paper end - deprecate getKey
|
|
+
|
|
// Paper start - translation key
|
|
@Override
|
|
public @NotNull String translationKey() {
|
|
diff --git a/src/main/java/org/bukkit/Registry.java b/src/main/java/org/bukkit/Registry.java
|
|
index 4d3e0b90579b33ff93fc565e8ee99a01b690c62b..36a8f6082f111a1cbb25e0ff3c968a89f02611a0 100644
|
|
--- a/src/main/java/org/bukkit/Registry.java
|
|
+++ b/src/main/java/org/bukkit/Registry.java
|
|
@@ -357,6 +357,79 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
|
|
@Nullable
|
|
T get(@NotNull NamespacedKey key);
|
|
|
|
+ // Paper start - improve Registry
|
|
+ /**
|
|
+ * Gets the object by its key or throws if it doesn't exist.
|
|
+ *
|
|
+ * @param key the key to get the object of in this registry
|
|
+ * @return the object for the key
|
|
+ * @throws java.util.NoSuchElementException if the key doesn't point to an object in the registry
|
|
+ */
|
|
+ default @NotNull T getOrThrow(final net.kyori.adventure.key.@NotNull Key key) {
|
|
+ final T value = this.get(key);
|
|
+ if (value == null) {
|
|
+ throw new java.util.NoSuchElementException("No value for " + key + " in " + this);
|
|
+ }
|
|
+ return value;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the object by its key or throws if it doesn't exist.
|
|
+ *
|
|
+ * @param key the key to get the object of in this registry
|
|
+ * @return the object for the key
|
|
+ * @throws java.util.NoSuchElementException if the key doesn't point to an object in the registry
|
|
+ */
|
|
+ default @NotNull T getOrThrow(final io.papermc.paper.registry.@NotNull TypedKey<T> key) {
|
|
+ final T value = this.get(key);
|
|
+ if (value == null) {
|
|
+ throw new java.util.NoSuchElementException("No value for " + key + " in " + this);
|
|
+ }
|
|
+ return value;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the key for this object or throws if it doesn't exist.
|
|
+ * <p>
|
|
+ * Some types can exist without being in a registry
|
|
+ * and such will have no key associated with them. This
|
|
+ * method throw an exception if it isn't in this registry.
|
|
+ *
|
|
+ * @param value the value to get the key of in this registry
|
|
+ * @return the key for the value
|
|
+ * @throws java.util.NoSuchElementException if the value doesn't exist in this registry
|
|
+ * @see #getKey(Keyed)
|
|
+ */
|
|
+ default @NotNull NamespacedKey getKeyOrThrow(final @NotNull T value) {
|
|
+ Preconditions.checkArgument(value != null, "value cannot be null");
|
|
+ final NamespacedKey key = this.getKey(value);
|
|
+ if (key == null) {
|
|
+ throw new java.util.NoSuchElementException(value + " has no key in " + this);
|
|
+ }
|
|
+ return key;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Get the key for this object.
|
|
+ * <p>
|
|
+ * Some types can exist without being in a registry
|
|
+ * and such will have no key associated with them. This
|
|
+ * method will return null.
|
|
+ *
|
|
+ * @param value the value to get the key of in this registry
|
|
+ * @return the key for the value or null if not in the registry
|
|
+ * @see #getKeyOrThrow(Keyed)
|
|
+ */
|
|
+ default @Nullable NamespacedKey getKey(final @NotNull T value) {
|
|
+ Preconditions.checkArgument(value != null, "value cannot be null");
|
|
+ //noinspection ConstantValue (it might not be in the future...)
|
|
+ if (value instanceof Keyed) {
|
|
+ return value.getKey();
|
|
+ }
|
|
+ return null;
|
|
+ }
|
|
+ // Paper end - improve Registry
|
|
+
|
|
/**
|
|
* Returns a new stream, which contains all registry items, which are registered to the registry.
|
|
*
|
|
@@ -431,5 +504,12 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
|
|
public Class<T> getType() {
|
|
return this.type;
|
|
}
|
|
+
|
|
+ // Paper start - improve Registry
|
|
+ @Override
|
|
+ public @NotNull NamespacedKey getKey(final @NotNull T value) {
|
|
+ return value.getKey();
|
|
+ }
|
|
+ // Paper end - improve Registry
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/block/banner/PatternType.java b/src/main/java/org/bukkit/block/banner/PatternType.java
|
|
index 6a6be0287255cf38a735bfc83ec91644dc96b903..1883183157c875d87656fdc86a589e9b95dc4895 100644
|
|
--- a/src/main/java/org/bukkit/block/banner/PatternType.java
|
|
+++ b/src/main/java/org/bukkit/block/banner/PatternType.java
|
|
@@ -69,6 +69,13 @@ public enum PatternType implements Keyed {
|
|
this.key = NamespacedKey.minecraft(key);
|
|
}
|
|
|
|
+ // Paper start - deprecate getKey
|
|
+ /**
|
|
+ * @deprecated use {@link Registry#getKey(Keyed)} and {@link Registry#BANNER_PATTERN}. PatternTypes
|
|
+ * can exist without a key.
|
|
+ */
|
|
+ @Deprecated
|
|
+ // Paper end - deprecate getKey
|
|
@Override
|
|
@NotNull
|
|
public NamespacedKey getKey() {
|
|
diff --git a/src/main/java/org/bukkit/generator/structure/Structure.java b/src/main/java/org/bukkit/generator/structure/Structure.java
|
|
index 1a766e68713d4014783b3224b9395644116784fa..978054ee364f9a3330525b9b50da5325ebb6ef57 100644
|
|
--- a/src/main/java/org/bukkit/generator/structure/Structure.java
|
|
+++ b/src/main/java/org/bukkit/generator/structure/Structure.java
|
|
@@ -60,4 +60,13 @@ public abstract class Structure implements Keyed {
|
|
*/
|
|
@NotNull
|
|
public abstract StructureType getStructureType();
|
|
+ // Paper start - deprecate getKey
|
|
+ /**
|
|
+ * @deprecated use {@link Registry#getKey(Keyed)} and {@link Registry#STRUCTURE}. Structures
|
|
+ * can exist without a key.
|
|
+ */
|
|
+ @Override
|
|
+ @Deprecated(since = "1.20.4")
|
|
+ public abstract @NotNull NamespacedKey getKey();
|
|
+ // Paper end - deprecate getKey
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java b/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java
|
|
index 941fac4eee338870d8c30cb1f64cab572cf54548..74816d6da4d7c8d2fa8a7b93fdc4bf29c8d12803 100644
|
|
--- a/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java
|
|
+++ b/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java
|
|
@@ -68,4 +68,14 @@ public interface TrimMaterial extends Keyed, Translatable {
|
|
@Deprecated(forRemoval = true)
|
|
@org.jetbrains.annotations.NotNull String getTranslationKey();
|
|
// Paper end - adventure
|
|
+
|
|
+ // Paper start - Registry#getKey
|
|
+ /**
|
|
+ * @deprecated use {@link Registry#getKey(Keyed)} and {@link Registry#TRIM_MATERIAL}. TrimMaterials
|
|
+ * can exist without a key.
|
|
+ */
|
|
+ @Deprecated(forRemoval = true, since = "1.20.4")
|
|
+ @Override
|
|
+ org.bukkit.@org.jetbrains.annotations.NotNull NamespacedKey getKey();
|
|
+ // Paper end - Registry#getKey
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java b/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java
|
|
index f2242ddc4085f7e7cdd748d860857822e3d9b007..087e99ed281c0b282d91345067bfca80762faa0b 100644
|
|
--- a/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java
|
|
+++ b/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java
|
|
@@ -100,4 +100,14 @@ public interface TrimPattern extends Keyed, Translatable {
|
|
@Deprecated(forRemoval = true)
|
|
@org.jetbrains.annotations.NotNull String getTranslationKey();
|
|
// Paper end - adventure
|
|
+
|
|
+ // Paper start - Registry#getKey
|
|
+ /**
|
|
+ * @deprecated use {@link Registry#getKey(Keyed)} and {@link Registry#TRIM_PATTERN}. TrimPatterns
|
|
+ * can exist without a key.
|
|
+ */
|
|
+ @Deprecated(forRemoval = true, since = "1.20.4")
|
|
+ @Override
|
|
+ org.bukkit.@org.jetbrains.annotations.NotNull NamespacedKey getKey();
|
|
+ // Paper end - Registry#getKey
|
|
}
|