Skip to content

Commit 97db45b

Browse files
committed
Add RegistryRetriever for future use in registry API
1 parent 2ba1675 commit 97db45b

26 files changed

+187
-172
lines changed

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 RegistryFreezeEvent}
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: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import io.papermc.paper.registry.tag.TagKey;
66
import org.bukkit.Keyed;
77
import org.jetbrains.annotations.ApiStatus;
8-
import org.jspecify.annotations.NullMarked;
8+
import org.jetbrains.annotations.Contract;
99

1010
/**
1111
* Event object for {@link RegistryEventProvider#freeze()}. This
@@ -15,8 +15,6 @@
1515
* @param <T> registry entry type
1616
* @param <B> registry entry builder type
1717
*/
18-
@ApiStatus.Experimental
19-
@NullMarked
2018
@ApiStatus.NonExtendable
2119
public interface RegistryFreezeEvent<T, B extends RegistryBuilder<T>> extends RegistryEvent<T> {
2220

@@ -33,8 +31,21 @@ public interface RegistryFreezeEvent<T, B extends RegistryBuilder<T>> extends Re
3331
* custom datapack.
3432
*
3533
* @param tagKey the tag key
36-
* @return the tag
3734
* @param <V> the tag value type
35+
* @return the tag
36+
* @deprecated Use {@link #retriever()}
37+
*/
38+
@Deprecated(forRemoval = true)
39+
default <V extends Keyed> Tag<V> getOrCreateTag(final TagKey<V> tagKey) {
40+
return this.retriever().getOrCreateTag(tagKey);
41+
}
42+
43+
/**
44+
* Gets the registry retriever, which can be used to retrieve or create
45+
* entries in the registry.
46+
*
47+
* @return the registry retriever
3848
*/
39-
<V extends Keyed> Tag<V> getOrCreateTag(TagKey<V> tagKey);
49+
@Contract(pure = true)
50+
RegistryRetriever retriever();
4051
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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+
8+
public interface RegistryRetriever {
9+
10+
/**
11+
* Gets or creates a tag for the given tag key. This tag
12+
* is then required to be filled either from the built-in or
13+
* custom datapack.
14+
*
15+
* @param tagKey the tag key
16+
* @param <V> the tag value type
17+
* @return the tag
18+
*/
19+
<V extends Keyed> Tag<V> getOrCreateTag(TagKey<V> tagKey); // TODO remove Keyed
20+
21+
/**
22+
* Gets or creates an empty instance of the given {@link TypedKey}.
23+
* <br>
24+
* Can only create instances if the applicable registry still supports adding
25+
* new references. If the registry doesn't, this method will throw an exception.
26+
*
27+
* @param key the key to get or create an instance for
28+
* @param <V> the type of the value associated with the key
29+
* @return an instance of the given key, or a new instance if it does not exist
30+
* @throws IllegalStateException if this registry does not support adding new references and the key does not exist
31+
*/
32+
<V extends Keyed> V getOrCreate(TypedKey<V> key); // TODO remove Keyed
33+
}

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;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
import io.papermc.paper.plugin.lifecycle.event.handler.configuration.PrioritizedLifecycleEventHandlerConfiguration;
55
import io.papermc.paper.registry.TypedKey;
66
import java.util.function.Predicate;
7+
import org.jetbrains.annotations.ApiStatus;
78
import org.jetbrains.annotations.Contract;
8-
import org.jspecify.annotations.NullMarked;
99

1010
/**
1111
* Specific configuration for {@link io.papermc.paper.registry.event.RegistryEntryAddEvent}s.
1212
*
1313
* @param <T> registry entry type
1414
*/
15-
@NullMarked
15+
@ApiStatus.NonExtendable
1616
public interface RegistryEntryAddConfiguration<T> extends PrioritizedLifecycleEventHandlerConfiguration<BootstrapContext> {
1717

1818
/**

0 commit comments

Comments
 (0)