Skip to content

Commit 89059c2

Browse files
committed
Add RegistryRetriever for future use in registry API
1 parent 2f1c6f3 commit 89059c2

27 files changed

+197
-181
lines changed
Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
package io.papermc.paper.registry.event;
22

33
import io.papermc.paper.registry.RegistryBuilder;
4-
import io.papermc.paper.registry.tag.Tag;
5-
import io.papermc.paper.registry.tag.TagKey;
6-
import org.bukkit.Keyed;
74
import org.jetbrains.annotations.ApiStatus;
8-
import org.jspecify.annotations.NullMarked;
5+
import org.jetbrains.annotations.Contract;
96

107
/**
118
* Event object for {@link RegistryEventProvider#compose()}. This
@@ -16,7 +13,6 @@
1613
* @param <B> registry entry builder type
1714
*/
1815
@ApiStatus.Experimental
19-
@NullMarked
2016
@ApiStatus.NonExtendable
2117
public interface RegistryComposeEvent<T, B extends RegistryBuilder<T>> extends RegistryEvent<T> {
2218

@@ -28,13 +24,11 @@ public interface RegistryComposeEvent<T, B extends RegistryBuilder<T>> extends R
2824
WritableRegistry<T, B> registry();
2925

3026
/**
31-
* Gets or creates a tag for the given tag key. This tag
32-
* is then required to be filled either from the built-in or
33-
* custom datapack.
27+
* Gets the registry retriever, which can be used to retrieve or create
28+
* entries in the registry.
3429
*
35-
* @param tagKey the tag key
36-
* @return the tag
37-
* @param <V> the tag value type
30+
* @return the registry retriever
3831
*/
39-
<V extends Keyed> Tag<V> getOrCreateTag(TagKey<V> tagKey);
32+
@Contract(pure = true)
33+
RegistryRetriever retriever();
4034
}

paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEvent.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import io.papermc.paper.registry.tag.TagKey;
77
import org.bukkit.Keyed;
88
import org.jetbrains.annotations.ApiStatus;
9-
import org.jspecify.annotations.NullMarked;
9+
import org.jetbrains.annotations.Contract;
1010

1111
/**
1212
* Event object for {@link RegistryEventProvider#entryAdd()}. This
@@ -16,8 +16,6 @@
1616
* @param <T> registry entry type
1717
* @param <B> registry entry builder type
1818
*/
19-
@ApiStatus.Experimental
20-
@NullMarked
2119
@ApiStatus.NonExtendable
2220
public interface RegistryEntryAddEvent<T, B extends RegistryBuilder<T>> extends RegistryEvent<T> {
2321

@@ -43,6 +41,19 @@ public interface RegistryEntryAddEvent<T, B extends RegistryBuilder<T>> extends
4341
* @param tagKey the tag key
4442
* @return the tag
4543
* @param <V> the tag value type
44+
* @deprecated use {@link #retriever()}
4645
*/
47-
<V extends Keyed> Tag<V> getOrCreateTag(TagKey<V> tagKey);
46+
@Deprecated(forRemoval = true)
47+
default <V extends Keyed> Tag<V> getOrCreateTag(final TagKey<V> tagKey) {
48+
return this.retriever().getOrCreateTag(tagKey);
49+
}
50+
51+
/**
52+
* Gets the registry retriever, which can be used to retrieve or create
53+
* entries in the registry.
54+
*
55+
* @return the registry retriever
56+
*/
57+
@Contract(pure = true)
58+
RegistryRetriever retriever();
4859
}

paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEvent.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,12 @@
33
import io.papermc.paper.plugin.lifecycle.event.LifecycleEvent;
44
import io.papermc.paper.registry.RegistryKey;
55
import org.jetbrains.annotations.ApiStatus;
6-
import org.jspecify.annotations.NullMarked;
76

87
/**
98
* Base type for all registry events.
109
*
1110
* @param <T> registry entry type
1211
*/
13-
@ApiStatus.Experimental
14-
@NullMarked
1512
@ApiStatus.NonExtendable
1613
public interface RegistryEvent<T> extends LifecycleEvent {
1714

paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventProvider.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import io.papermc.paper.registry.RegistryKey;
88
import io.papermc.paper.registry.event.type.RegistryEntryAddEventType;
99
import org.jetbrains.annotations.ApiStatus;
10-
import org.jspecify.annotations.NullMarked;
1110

1211
/**
1312
* Provider for registry events for a specific registry.
@@ -21,8 +20,6 @@
2120
* @param <T> registry entry type
2221
* @param <B> registry entry builder type
2322
*/
24-
@ApiStatus.Experimental
25-
@NullMarked
2623
@ApiStatus.NonExtendable
2724
public interface RegistryEventProvider<T, B extends RegistryBuilder<T>> {
2825

paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventProviderImpl.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66
import io.papermc.paper.registry.RegistryKey;
77
import io.papermc.paper.registry.event.type.RegistryEntryAddEventType;
88
import org.jetbrains.annotations.ApiStatus;
9-
import org.jspecify.annotations.NullMarked;
109

1110
@ApiStatus.Internal
12-
@NullMarked
1311
record RegistryEventProviderImpl<T, B extends RegistryBuilder<T>>(RegistryKey<T> registryKey) implements RegistryEventProvider<T, B> {
1412

1513
static <T, B extends RegistryBuilder<T>> RegistryEventProvider<T, B> create(final RegistryKey<T> registryKey) {

paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,13 @@
2323
import org.bukkit.entity.Frog;
2424
import org.bukkit.entity.Pig;
2525
import org.bukkit.entity.Wolf;
26-
import org.jetbrains.annotations.ApiStatus;
27-
import org.jspecify.annotations.NullMarked;
2826

2927
import static io.papermc.paper.registry.event.RegistryEventProviderImpl.create;
3028

3129
/**
3230
* Holds providers for {@link RegistryEntryAddEvent} and {@link RegistryComposeEvent}
3331
* handlers for each applicable registry.
3432
*/
35-
@ApiStatus.Experimental
36-
@NullMarked
3733
public final class RegistryEvents {
3834

3935
// Start generate - RegistryEvents

paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFreezeEvent.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package io.papermc.paper.registry.event;
22

33
import io.papermc.paper.registry.RegistryBuilder;
4+
import io.papermc.paper.registry.tag.Tag;
5+
import io.papermc.paper.registry.tag.TagKey;
6+
import org.bukkit.Keyed;
47
import org.jetbrains.annotations.ApiStatus;
5-
import org.jspecify.annotations.NullMarked;
68

79
/**
810
* Event object for {@link RegistryEventProvider#freeze()}. This
@@ -15,7 +17,21 @@
1517
*/
1618
@ApiStatus.ScheduledForRemoval(inVersion = "1.21.7 or 1.22, whichever comes first")
1719
@Deprecated(since = "1.21.6", forRemoval = true)
18-
@NullMarked
1920
@ApiStatus.NonExtendable
2021
public interface RegistryFreezeEvent<T, B extends RegistryBuilder<T>> extends RegistryComposeEvent<T, B> {
22+
23+
/**
24+
* Gets or creates a tag for the given tag key. This tag
25+
* is then required to be filled either from the built-in or
26+
* custom datapack.
27+
*
28+
* @param tagKey the tag key
29+
* @param <V> the tag value type
30+
* @return the tag
31+
* @deprecated Use {@link #retriever()}
32+
*/
33+
@Deprecated(forRemoval = true)
34+
default <V extends Keyed> Tag<V> getOrCreateTag(final TagKey<V> tagKey) {
35+
return this.retriever().getOrCreateTag(tagKey);
36+
}
2137
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package io.papermc.paper.registry.event;
2+
3+
import io.papermc.paper.registry.TypedKey;
4+
import io.papermc.paper.registry.tag.Tag;
5+
import io.papermc.paper.registry.tag.TagKey;
6+
import org.bukkit.Keyed;
7+
import org.jetbrains.annotations.ApiStatus;
8+
9+
@ApiStatus.NonExtendable
10+
public interface RegistryRetriever {
11+
12+
/**
13+
* Gets or creates a tag for the given tag key. This tag
14+
* is then required to be filled either from the built-in or
15+
* custom datapack.
16+
*
17+
* @param tagKey the tag key
18+
* @param <V> the tag value type
19+
* @return the tag
20+
*/
21+
<V extends Keyed> Tag<V> getOrCreateTag(TagKey<V> tagKey); // TODO remove Keyed
22+
23+
/**
24+
* Gets or creates an empty instance of the given {@link TypedKey}.
25+
* <br>
26+
* Can only create instances if the applicable registry still supports adding
27+
* new references. If the registry doesn't, this method will throw an exception.
28+
*
29+
* @param key the key to get or create an instance for
30+
* @param <V> the type of the value associated with the key
31+
* @return an instance of the given key, or a new instance if it does not exist
32+
* @throws IllegalStateException if this registry does not support adding new references and the key does not exist
33+
*/
34+
<V extends Keyed> V getOrCreate(TypedKey<V> key); // TODO remove Keyed
35+
}

paper-api/src/main/java/io/papermc/paper/registry/event/WritableRegistry.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,13 @@
55
import io.papermc.paper.registry.TypedKey;
66
import java.util.function.Consumer;
77
import org.jetbrains.annotations.ApiStatus;
8-
import org.jspecify.annotations.NullMarked;
98

109
/**
1110
* A registry which supports registering new objects.
1211
*
1312
* @param <T> registry entry type
1413
* @param <B> registry entry builder type
1514
*/
16-
@ApiStatus.Experimental
17-
@NullMarked
1815
@ApiStatus.NonExtendable
1916
public interface WritableRegistry<T, B extends RegistryBuilder<T>> {
2017

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* This package contains events related to the Paper registry system.
3+
*/
4+
@ApiStatus.Experimental
5+
@NullMarked
6+
package io.papermc.paper.registry.event;
7+
8+
import org.jetbrains.annotations.ApiStatus;
9+
import org.jspecify.annotations.NullMarked;

0 commit comments

Comments
 (0)