Skip to content

Commit 860d948

Browse files
Support tags for more SimpleRegistry (#11607)
1 parent f241260 commit 860d948

8 files changed

+173
-93
lines changed

patches/api/0236-Add-RegistryAccess-for-managing-registries.patch

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,45 @@ index 3470755c65a2db38e679adc35d3d43f7fef5468d..1fe3a5e2f5c15fddfbcd503a061ebf75
206206
public static <T extends Keyed> Registry<T> getRegistry(@NotNull Class<T> tClass) {
207207
return server.getRegistry(tClass);
208208
}
209+
diff --git a/src/main/java/org/bukkit/Particle.java b/src/main/java/org/bukkit/Particle.java
210+
index 37e7862be843da4f48ac061fb1625854fd671b2a..cdc09d18088af3100cb731702edb7e6bffdeb502 100644
211+
--- a/src/main/java/org/bukkit/Particle.java
212+
+++ b/src/main/java/org/bukkit/Particle.java
213+
@@ -162,28 +162,23 @@ public enum Particle implements Keyed {
214+
215+
private final NamespacedKey key;
216+
private final Class<?> dataType;
217+
- final boolean register;
218+
+ // Paper - all particles are registered
219+
220+
Particle(String key) {
221+
this(key, Void.class);
222+
}
223+
224+
- Particle(String key, boolean register) {
225+
- this(key, Void.class, register);
226+
- }
227+
+ // Paper - all particles are registered
228+
229+
Particle(String key, /*@NotNull*/ Class<?> data) {
230+
- this(key, data, true);
231+
- }
232+
-
233+
- Particle(String key, /*@NotNull*/ Class<?> data, boolean register) {
234+
+ // Paper - all particles are registered
235+
if (key != null) {
236+
this.key = NamespacedKey.minecraft(key);
237+
} else {
238+
this.key = null;
239+
}
240+
dataType = data;
241+
- this.register = register;
242+
+ // Paper - all particles are registered
243+
}
244+
245+
/**
209246
diff --git a/src/main/java/org/bukkit/Registry.java b/src/main/java/org/bukkit/Registry.java
210-
index b4f297f90e3c1deaa1fc3f4418418588ab19b6c5..46dce7c2a543f6b165975565ea9d40654a132b9b 100644
247+
index b4f297f90e3c1deaa1fc3f4418418588ab19b6c5..d03bdf6617ce66950e335f0afb52c19b2e2a14e2 100644
211248
--- a/src/main/java/org/bukkit/Registry.java
212249
+++ b/src/main/java/org/bukkit/Registry.java
213250
@@ -86,26 +86,32 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
@@ -256,7 +293,7 @@ index b4f297f90e3c1deaa1fc3f4418418588ab19b6c5..46dce7c2a543f6b165975565ea9d4065
256293
/**
257294
* Custom boss bars.
258295
*
259-
@@ -155,13 +161,15 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
296+
@@ -155,25 +161,29 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
260297
*
261298
* @see Cat.Type
262299
*/
@@ -274,7 +311,11 @@ index b4f297f90e3c1deaa1fc3f4418418588ab19b6c5..46dce7c2a543f6b165975565ea9d4065
274311
/**
275312
* Server entity types.
276313
*
277-
@@ -172,8 +180,10 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
314+
* @see EntityType
315+
*/
316+
- Registry<EntityType> ENTITY_TYPE = new SimpleRegistry<>(EntityType.class, (entity) -> entity != EntityType.UNKNOWN);
317+
+ Registry<EntityType> ENTITY_TYPE = io.papermc.paper.registry.RegistryAccess.registryAccess().getRegistry(io.papermc.paper.registry.RegistryKey.ENTITY_TYPE); // Paper
318+
/**
278319
* Server instruments.
279320
*
280321
* @see MusicInstrument
@@ -295,7 +336,7 @@ index b4f297f90e3c1deaa1fc3f4418418588ab19b6c5..46dce7c2a543f6b165975565ea9d4065
295336
/**
296337
* Default server loot tables.
297338
*
298-
@@ -200,13 +210,13 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
339+
@@ -200,25 +210,25 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
299340
* @see MenuType
300341
*/
301342
@ApiStatus.Experimental
@@ -311,6 +352,20 @@ index b4f297f90e3c1deaa1fc3f4418418588ab19b6c5..46dce7c2a543f6b165975565ea9d4065
311352
/**
312353
* Server particles.
313354
*
355+
* @see Particle
356+
*/
357+
- Registry<Particle> PARTICLE_TYPE = new SimpleRegistry<>(Particle.class, (par) -> par.register);
358+
+ Registry<Particle> PARTICLE_TYPE = io.papermc.paper.registry.RegistryAccess.registryAccess().getRegistry(io.papermc.paper.registry.RegistryKey.PARTICLE_TYPE); // Paper
359+
/**
360+
* Server potions.
361+
*
362+
* @see PotionType
363+
*/
364+
- Registry<PotionType> POTION = new SimpleRegistry<>(PotionType.class);
365+
+ Registry<PotionType> POTION = io.papermc.paper.registry.RegistryAccess.registryAccess().getRegistry(io.papermc.paper.registry.RegistryKey.POTION); // Paper
366+
/**
367+
* Server statistics.
368+
*
314369
@@ -229,58 +239,67 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
315370
* Server structures.
316371
*
@@ -428,6 +483,15 @@ index b4f297f90e3c1deaa1fc3f4418418588ab19b6c5..46dce7c2a543f6b165975565ea9d4065
428483
/**
429484
* Get the object by its key.
430485
*
486+
@@ -396,7 +417,7 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
487+
return (namespacedKey != null) ? get(namespacedKey) : null;
488+
}
489+
490+
- static final class SimpleRegistry<T extends Enum<T> & Keyed> implements Registry<T> {
491+
+ class SimpleRegistry<T extends Enum<T> & Keyed> implements Registry<T> { // Paper - remove final
492+
493+
private final Class<T> type;
494+
private final Map<NamespacedKey, T> map;
431495
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
432496
index 6bc43f3a5748a1b83aa4c4d462df3cbc9220c267..cad9c18dbe56ffcef377f0b1162bc880fc56aa6c 100644
433497
--- a/src/main/java/org/bukkit/Server.java

patches/api/0471-Registry-Modification-API.patch

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -809,7 +809,7 @@ index 0000000000000000000000000000000000000000..bf49125acc8a0508bf59674bba3ed350
809809
+ }
810810
+}
811811
diff --git a/src/main/java/org/bukkit/Registry.java b/src/main/java/org/bukkit/Registry.java
812-
index 67b9ab322baecf5b2453df4795106514cb073108..7cf7c6d05aa6cbf3f0c8612831404552c6a7b84a 100644
812+
index c3d49f9c640eb390f507f9521a389cb7c172983a..87907918c42b11780b285b6d82e7297628a07376 100644
813813
--- a/src/main/java/org/bukkit/Registry.java
814814
+++ b/src/main/java/org/bukkit/Registry.java
815815
@@ -384,6 +384,27 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
@@ -875,38 +875,3 @@ index 67b9ab322baecf5b2453df4795106514cb073108..7cf7c6d05aa6cbf3f0c8612831404552
875875
/**
876876
* Get the object by its key.
877877
*
878-
@@ -561,5 +610,23 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
879-
return value.getKey();
880-
}
881-
// Paper end - improve Registry
882-
+
883-
+ // Paper start - RegistrySet API
884-
+ @SuppressWarnings("deprecation")
885-
+ @Override
886-
+ public boolean hasTag(final io.papermc.paper.registry.tag.@NotNull TagKey<T> key) {
887-
+ return Bukkit.getUnsafe().getTag(key) != null;
888-
+ }
889-
+
890-
+ @SuppressWarnings("deprecation")
891-
+ @Override
892-
+ public io.papermc.paper.registry.tag.@NotNull Tag<T> getTag(final io.papermc.paper.registry.tag.@NotNull TagKey<T> key) {
893-
+ final io.papermc.paper.registry.tag.Tag<T> tag = Bukkit.getUnsafe().getTag(key);
894-
+ if (tag == null) {
895-
+ throw new java.util.NoSuchElementException("No tag " + key + " found");
896-
+ }
897-
+ return tag;
898-
+ }
899-
+ // Paper end - RegistrySet API
900-
}
901-
}
902-
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
903-
index b503b5e13c51580367d53939ad4c19a7718c22ce..5b13617e497e847ef66214f9140aea0cd41f4c4f 100644
904-
--- a/src/main/java/org/bukkit/UnsafeValues.java
905-
+++ b/src/main/java/org/bukkit/UnsafeValues.java
906-
@@ -281,4 +281,6 @@ public interface UnsafeValues {
907-
// Paper end - lifecycle event API
908-
909-
@NotNull java.util.List<net.kyori.adventure.text.Component> computeTooltipLines(@NotNull ItemStack itemStack, @NotNull io.papermc.paper.inventory.tooltip.TooltipContext tooltipContext, @Nullable org.bukkit.entity.Player player); // Paper - expose itemstack tooltip lines
910-
+
911-
+ <A extends Keyed, M> io.papermc.paper.registry.tag.@Nullable Tag<A> getTag(io.papermc.paper.registry.tag.@NotNull TagKey<A> tagKey); // Paper - hack to get tags for non-server backed registries
912-
}

patches/api/0473-Proxy-ItemStack-to-CraftItemStack.patch

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ Subject: [PATCH] Proxy ItemStack to CraftItemStack
55

66

77
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
8-
index 5b13617e497e847ef66214f9140aea0cd41f4c4f..56d16c887b7663aab7db2f7be532d9912aeb3570 100644
8+
index b503b5e13c51580367d53939ad4c19a7718c22ce..307439827b401acb96f0df1cf4ef31835bd1d513 100644
99
--- a/src/main/java/org/bukkit/UnsafeValues.java
1010
+++ b/src/main/java/org/bukkit/UnsafeValues.java
11-
@@ -283,4 +283,6 @@ public interface UnsafeValues {
12-
@NotNull java.util.List<net.kyori.adventure.text.Component> computeTooltipLines(@NotNull ItemStack itemStack, @NotNull io.papermc.paper.inventory.tooltip.TooltipContext tooltipContext, @Nullable org.bukkit.entity.Player player); // Paper - expose itemstack tooltip lines
11+
@@ -281,4 +281,6 @@ public interface UnsafeValues {
12+
// Paper end - lifecycle event API
1313

14-
<A extends Keyed, M> io.papermc.paper.registry.tag.@Nullable Tag<A> getTag(io.papermc.paper.registry.tag.@NotNull TagKey<A> tagKey); // Paper - hack to get tags for non-server backed registries
14+
@NotNull java.util.List<net.kyori.adventure.text.Component> computeTooltipLines(@NotNull ItemStack itemStack, @NotNull io.papermc.paper.inventory.tooltip.TooltipContext tooltipContext, @Nullable org.bukkit.entity.Player player); // Paper - expose itemstack tooltip lines
1515
+
1616
+ ItemStack createEmptyStack(); // Paper - proxy ItemStack
1717
}

patches/server/0466-Add-RegistryAccess-for-managing-Registries.patch

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ public net.minecraft.server.RegistryLayer STATIC_ACCESS
1212

1313
diff --git a/src/main/java/io/papermc/paper/registry/PaperRegistries.java b/src/main/java/io/papermc/paper/registry/PaperRegistries.java
1414
new file mode 100644
15-
index 0000000000000000000000000000000000000000..c6969f968b45eff2aeb44e647712abda10c7c113
15+
index 0000000000000000000000000000000000000000..2f22f46f80b80be43a2cc1cd8afb51f4d1fd0e91
1616
--- /dev/null
1717
+++ b/src/main/java/io/papermc/paper/registry/PaperRegistries.java
18-
@@ -0,0 +1,156 @@
18+
@@ -0,0 +1,157 @@
1919
+package io.papermc.paper.registry;
2020
+
21+
+import com.google.common.base.Preconditions;
2122
+import io.papermc.paper.adventure.PaperAdventure;
2223
+import io.papermc.paper.registry.entry.RegistryEntry;
2324
+import java.util.Collections;
@@ -125,16 +126,16 @@ index 0000000000000000000000000000000000000000..c6969f968b45eff2aeb44e647712abda
125126
+ entry(Registries.INSTRUMENT, RegistryKey.INSTRUMENT, MusicInstrument.class, CraftMusicInstrument::new).delayed(),
126127
+
127128
+ // api-only
128-
+ apiOnly(Registries.ENTITY_TYPE, RegistryKey.ENTITY_TYPE, () -> org.bukkit.Registry.ENTITY_TYPE),
129-
+ apiOnly(Registries.PARTICLE_TYPE, RegistryKey.PARTICLE_TYPE, () -> org.bukkit.Registry.PARTICLE_TYPE),
130-
+ apiOnly(Registries.POTION, RegistryKey.POTION, () -> org.bukkit.Registry.POTION),
129+
+ apiOnly(Registries.ENTITY_TYPE, RegistryKey.ENTITY_TYPE, PaperSimpleRegistry::entityType),
130+
+ apiOnly(Registries.PARTICLE_TYPE, RegistryKey.PARTICLE_TYPE, PaperSimpleRegistry::particleType),
131+
+ apiOnly(Registries.POTION, RegistryKey.POTION, PaperSimpleRegistry::potion),
131132
+ apiOnly(Registries.MEMORY_MODULE_TYPE, RegistryKey.MEMORY_MODULE_TYPE, () -> (org.bukkit.Registry<MemoryKey<?>>) (org.bukkit.Registry) org.bukkit.Registry.MEMORY_MODULE_TYPE)
132133
+ );
133134
+ final Map<RegistryKey<?>, RegistryEntry<?, ?>> byRegistryKey = new IdentityHashMap<>(REGISTRY_ENTRIES.size());
134135
+ final Map<ResourceKey<?>, RegistryEntry<?, ?>> byResourceKey = new IdentityHashMap<>(REGISTRY_ENTRIES.size());
135136
+ for (final RegistryEntry<?, ?> entry : REGISTRY_ENTRIES) {
136-
+ byRegistryKey.put(entry.apiKey(), entry);
137-
+ byResourceKey.put(entry.mcKey(), entry);
137+
+ Preconditions.checkState(byRegistryKey.put(entry.apiKey(), entry) == null, "Duplicate api registry key: %s", entry.apiKey());
138+
+ Preconditions.checkState(byResourceKey.put(entry.mcKey(), entry) == null, "Duplicate mc registry key: %s", entry.mcKey());
138139
+ }
139140
+ BY_REGISTRY_KEY = Collections.unmodifiableMap(byRegistryKey);
140141
+ BY_RESOURCE_KEY = Collections.unmodifiableMap(byResourceKey);
@@ -305,6 +306,50 @@ index 0000000000000000000000000000000000000000..35b6a7c5bac9640332a833bd3627f2bc
305306
+ return (RegistryKey<T>) LegacyRegistryIdentifiers.CLASS_TO_KEY_MAP.get(type);
306307
+ }
307308
+}
309+
diff --git a/src/main/java/io/papermc/paper/registry/PaperSimpleRegistry.java b/src/main/java/io/papermc/paper/registry/PaperSimpleRegistry.java
310+
new file mode 100644
311+
index 0000000000000000000000000000000000000000..6d134ace042758da722960cbcb48e52508dafd61
312+
--- /dev/null
313+
+++ b/src/main/java/io/papermc/paper/registry/PaperSimpleRegistry.java
314+
@@ -0,0 +1,38 @@
315+
+package io.papermc.paper.registry;
316+
+
317+
+import java.util.function.Predicate;
318+
+import net.minecraft.core.registries.BuiltInRegistries;
319+
+import org.bukkit.Keyed;
320+
+import org.bukkit.Particle;
321+
+import org.bukkit.Registry;
322+
+import org.bukkit.entity.EntityType;
323+
+import org.bukkit.potion.PotionType;
324+
+import org.jspecify.annotations.NullMarked;
325+
+
326+
+@NullMarked
327+
+public class PaperSimpleRegistry<T extends Enum<T> & Keyed, M> extends Registry.SimpleRegistry<T> {
328+
+
329+
+ static Registry<EntityType> entityType() {
330+
+ return new PaperSimpleRegistry<>(EntityType.class, entity -> entity != EntityType.UNKNOWN, BuiltInRegistries.ENTITY_TYPE);
331+
+ }
332+
+
333+
+ static Registry<Particle> particleType() {
334+
+ return new PaperSimpleRegistry<>(Particle.class, BuiltInRegistries.PARTICLE_TYPE);
335+
+ }
336+
+
337+
+ static Registry<PotionType> potion() {
338+
+ return new PaperSimpleRegistry<>(PotionType.class, BuiltInRegistries.POTION);
339+
+ }
340+
+
341+
+ private final net.minecraft.core.Registry<M> nmsRegistry;
342+
+
343+
+ protected PaperSimpleRegistry(final Class<T> type, final net.minecraft.core.Registry<M> nmsRegistry) {
344+
+ super(type);
345+
+ this.nmsRegistry = nmsRegistry;
346+
+ }
347+
+
348+
+ public PaperSimpleRegistry(final Class<T> type, final Predicate<T> predicate, final net.minecraft.core.Registry<M> nmsRegistry) {
349+
+ super(type, predicate);
350+
+ this.nmsRegistry = nmsRegistry;
351+
+ }
352+
+}
308353
diff --git a/src/main/java/io/papermc/paper/registry/RegistryHolder.java b/src/main/java/io/papermc/paper/registry/RegistryHolder.java
309354
new file mode 100644
310355
index 0000000000000000000000000000000000000000..a31bdd9f02fe75a87fceb2ebe8c36b3232a561cc

patches/server/0992-Registry-Modification-API.patch

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,23 @@ diff --git a/src/main/java/io/papermc/paper/registry/PaperRegistries.java b/src/
1414
index c6969f968b45eff2aeb44e647712abda10c7c113..d34ffad8a36abbb215491d74ae8d9b490a0bc64f 100644
1515
--- a/src/main/java/io/papermc/paper/registry/PaperRegistries.java
1616
+++ b/src/main/java/io/papermc/paper/registry/PaperRegistries.java
17-
@@ -2,6 +2,7 @@ package io.papermc.paper.registry;
18-
17+
@@ -3,6 +3,7 @@ package io.papermc.paper.registry;
18+
import com.google.common.base.Preconditions;
1919
import io.papermc.paper.adventure.PaperAdventure;
2020
import io.papermc.paper.registry.entry.RegistryEntry;
2121
+import io.papermc.paper.registry.tag.TagKey;
2222
import java.util.Collections;
2323
import java.util.IdentityHashMap;
2424
import java.util.List;
25-
@@ -68,6 +69,7 @@ import org.checkerframework.framework.qual.DefaultQualifier;
25+
@@ -69,6 +70,7 @@ import org.checkerframework.framework.qual.DefaultQualifier;
2626

2727
import static io.papermc.paper.registry.entry.RegistryEntry.apiOnly;
2828
import static io.papermc.paper.registry.entry.RegistryEntry.entry;
2929
+import static io.papermc.paper.registry.entry.RegistryEntry.writable;
3030

3131
@DefaultQualifier(NonNull.class)
3232
public final class PaperRegistries {
33-
@@ -151,6 +153,15 @@ public final class PaperRegistries {
33+
@@ -152,6 +154,15 @@ public final class PaperRegistries {
3434
return ResourceKey.create((ResourceKey<? extends Registry<M>>) PaperRegistries.registryToNms(typedKey.registryKey()), PaperAdventure.asVanilla(typedKey.key()));
3535
}
3636

@@ -286,6 +286,38 @@ index 0000000000000000000000000000000000000000..69e946173407eb05b18a2b19b0d45cbb
286286
+ return this.freezeEventTypes.getOrCreate(type.registryKey(), RegistryLifecycleEventType::new);
287287
+ }
288288
+}
289+
diff --git a/src/main/java/io/papermc/paper/registry/PaperSimpleRegistry.java b/src/main/java/io/papermc/paper/registry/PaperSimpleRegistry.java
290+
index 6d134ace042758da722960cbcb48e52508dafd61..cc39bc68d29055ef6429f08f975412bd9fe68dbc 100644
291+
--- a/src/main/java/io/papermc/paper/registry/PaperSimpleRegistry.java
292+
+++ b/src/main/java/io/papermc/paper/registry/PaperSimpleRegistry.java
293+
@@ -1,6 +1,10 @@
294+
package io.papermc.paper.registry;
295+
296+
+import io.papermc.paper.registry.set.NamedRegistryKeySetImpl;
297+
+import io.papermc.paper.registry.tag.Tag;
298+
+import io.papermc.paper.registry.tag.TagKey;
299+
import java.util.function.Predicate;
300+
+import net.minecraft.core.HolderSet;
301+
import net.minecraft.core.registries.BuiltInRegistries;
302+
import org.bukkit.Keyed;
303+
import org.bukkit.Particle;
304+
@@ -35,4 +39,16 @@ public class PaperSimpleRegistry<T extends Enum<T> & Keyed, M> extends Registry.
305+
super(type, predicate);
306+
this.nmsRegistry = nmsRegistry;
307+
}
308+
+
309+
+ @Override
310+
+ public boolean hasTag(final TagKey<T> key) {
311+
+ final net.minecraft.tags.TagKey<M> nmsKey = PaperRegistries.toNms(key);
312+
+ return this.nmsRegistry.get(nmsKey).isPresent();
313+
+ }
314+
+
315+
+ @Override
316+
+ public Tag<T> getTag(final TagKey<T> key) {
317+
+ final HolderSet.Named<M> namedHolderSet = this.nmsRegistry.get(PaperRegistries.toNms(key)).orElseThrow();
318+
+ return new NamedRegistryKeySetImpl<>(key, namedHolderSet);
319+
+ }
320+
}
289321
diff --git a/src/main/java/io/papermc/paper/registry/WritableCraftRegistry.java b/src/main/java/io/papermc/paper/registry/WritableCraftRegistry.java
290322
new file mode 100644
291323
index 0000000000000000000000000000000000000000..78317c7ab42a666f19634593a8f3b696700764c8
@@ -1365,32 +1397,6 @@ index 45c78c113e881b277e1216293ad918ee40b44325..8314059455d91f01b986c5c0a239f418
13651397
+ }
13661398
+ // Paper end - RegistrySet API
13671399
}
1368-
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
1369-
index f0556a207f6d9d1766ef0d9753355f7fa5052dc1..f55733b7a56ac21cb297971b9e854ef54001ca26 100644
1370-
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
1371-
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
1372-
@@ -666,6 +666,21 @@ public final class CraftMagicNumbers implements UnsafeValues {
1373-
}
1374-
// Paper end - lifecycle event API
1375-
1376-
+ // Paper start - hack to get tags for non server-backed registries
1377-
+ @Override
1378-
+ public <A extends Keyed, M> io.papermc.paper.registry.tag.Tag<A> getTag(final io.papermc.paper.registry.tag.TagKey<A> tagKey) { // TODO remove Keyed
1379-
+ if (tagKey.registryKey() != io.papermc.paper.registry.RegistryKey.ENTITY_TYPE && tagKey.registryKey() != io.papermc.paper.registry.RegistryKey.FLUID) {
1380-
+ throw new UnsupportedOperationException(tagKey.registryKey() + " doesn't have tags");
1381-
+ }
1382-
+ final net.minecraft.resources.ResourceKey<? extends net.minecraft.core.Registry<M>> nmsKey = io.papermc.paper.registry.PaperRegistries.registryToNms(tagKey.registryKey());
1383-
+ final net.minecraft.core.Registry<M> nmsRegistry = org.bukkit.craftbukkit.CraftRegistry.getMinecraftRegistry().lookupOrThrow(nmsKey);
1384-
+ return nmsRegistry
1385-
+ .get(io.papermc.paper.registry.PaperRegistries.toNms(tagKey))
1386-
+ .map(named -> new io.papermc.paper.registry.set.NamedRegistryKeySetImpl<>(tagKey, named))
1387-
+ .orElse(null);
1388-
+ }
1389-
+ // Paper end - hack to get tags for non server-backed registries
1390-
+
1391-
/**
1392-
* This helper class represents the different NBT Tags.
1393-
* <p>
13941400
diff --git a/src/main/resources/META-INF/services/io.papermc.paper.registry.event.RegistryEventTypeProvider b/src/main/resources/META-INF/services/io.papermc.paper.registry.event.RegistryEventTypeProvider
13951401
new file mode 100644
13961402
index 0000000000000000000000000000000000000000..8bee1a5ed877a04e4d027593df1f42cefdd824e7

0 commit comments

Comments
 (0)