Skip to content

Commit 7880668

Browse files
committed
generate unregistered tags
1 parent 979ad1f commit 7880668

17 files changed

Lines changed: 63 additions & 34 deletions

File tree

paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/DamageTypeTagKeys.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,13 @@ public final class DamageTypeTagKeys {
8181
*/
8282
public static final TagKey<DamageType> BYPASSES_ARMOR = create(key("bypasses_armor"));
8383

84+
/**
85+
* {@code #minecraft:bypasses_cooldown}
86+
*
87+
* @apiNote This field is version-dependant and may be removed in future Minecraft versions
88+
*/
89+
public static final TagKey<DamageType> BYPASSES_COOLDOWN = create(key("bypasses_cooldown"));
90+
8491
/**
8592
* {@code #minecraft:bypasses_effects}
8693
*

paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,21 @@
66
import org.jspecify.annotations.NullMarked;
77

88
/**
9-
* An element in a registry which might be tied into it.
9+
* An element of a registry which might or might not be registered.
1010
* <p>
11-
* For key-less element all the methods in this interface will return {@code false}
11+
* For unregistered element, the equality methods exposed here will return {@code false}
12+
* as there's no way to identify them with a key.
13+
*
14+
* @see RegistryKey
15+
* @see org.bukkit.Registry
16+
* @see org.bukkit.Registry#getKey(Keyed)
1217
*/
1318
@NullMarked
1419
public interface RegistryElement<T> {
1520

1621
/**
17-
* Checks whether this element is equivalent to the
18-
* given key extracted from this keyed type.
22+
* Checks whether this element is identified by the
23+
* given key extracted from this keyed.
1924
*
2025
* @param type the keyed to extract the key from
2126
* @return the result
@@ -25,8 +30,7 @@ default boolean is(Keyed type) {
2530
}
2631

2732
/**
28-
* Checks whether this element is equivalent to the
29-
* given key type.
33+
* Checks whether this element is identified by the given key.
3034
*
3135
* @param type the key
3236
* @return the result

paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ static <T> RegistryValueSet<T> valueSet(final RegistryKey<T> registryKey, final
4141
/**
4242
* Creates a {@link RegistryKeySet} from registry-backed values.
4343
* <p>All values provided <b>must</b> have keys in the given registry.
44-
* <!--For anonymous values, use {@link #valueSet(RegistryKey, Iterable)}--></p>
44+
* For anonymous values, use {@link #valueSet(RegistryKey, Iterable)}.</p>
4545
* <p>If references to actual objects are not available yet, use {@link #keySet(RegistryKey, Iterable)} to
4646
* create an equivalent {@link RegistryKeySet} using just {@link TypedKey TypedKeys}.</p>
4747
*

paper-api/src/main/java/org/bukkit/GameEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.bukkit;
22

3-
import java.util.Collection;
43
import io.papermc.paper.registry.RegistryElement;
4+
import java.util.Collection;
55
import net.kyori.adventure.key.Key;
66
import net.kyori.adventure.key.KeyPattern;
77
import org.jetbrains.annotations.NotNull;

paper-api/src/main/java/org/bukkit/block/BlockType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package org.bukkit.block;
22

3+
import io.papermc.paper.registry.RegistryElement;
34
import java.util.Collection;
45
import java.util.function.Consumer;
5-
import io.papermc.paper.registry.RegistryElement;
66
import net.kyori.adventure.key.Key;
77
import net.kyori.adventure.key.KeyPattern;
88
import org.bukkit.Keyed;

paper-api/src/main/java/org/bukkit/entity/EntityType.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
import org.jetbrains.annotations.NotNull;
4242
import org.jetbrains.annotations.Nullable;
4343

44-
// todo RegistryElement
4544
public enum EntityType implements Keyed, Translatable, net.kyori.adventure.translation.Translatable, io.papermc.paper.world.flag.FeatureDependant { // Paper - translatable
4645

4746
// Start generate - EntityType

paper-api/src/main/java/org/bukkit/entity/Villager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package org.bukkit.entity;
22

33
import com.google.common.base.Preconditions;
4-
import java.util.Locale;
5-
import java.util.Map; // Paper
6-
import java.util.UUID; // Paper
74
import io.papermc.paper.registry.RegistryElement;
5+
import java.util.Locale;
6+
import java.util.Map;
7+
import java.util.UUID;
88
import net.kyori.adventure.key.Key;
99
import net.kyori.adventure.key.KeyPattern;
1010
import org.bukkit.Keyed;

paper-generator/src/main/java/io/papermc/generator/registry/RegistryBootstrapper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ public static void bootstrap(List<SourceGenerator> generators) {
2222
RegistryEntries.forEach(entry -> {
2323
generators.add(new GeneratedKeyType<>(PAPER_REGISTRY_PACKAGE + ".keys", entry));
2424
if (entry.registry().listTags().findAny().isPresent()) {
25-
generators.add(new GeneratedTagKeyType(entry, PAPER_REGISTRY_PACKAGE + ".keys.tags"));
25+
generators.add(new GeneratedTagKeyType<>(entry, PAPER_REGISTRY_PACKAGE + ".keys.tags"));
2626
}
2727
});
2828

2929
// todo remove once entity type and potion are both a registry
30-
generators.add(new GeneratedTagKeyType(RegistryEntries.byRegistryKey(Registries.ENTITY_TYPE), PAPER_REGISTRY_PACKAGE + ".keys.tags"));
31-
generators.add(new GeneratedTagKeyType(RegistryEntries.byRegistryKey(Registries.POTION), PAPER_REGISTRY_PACKAGE + ".keys.tags"));
30+
generators.add(new GeneratedTagKeyType<>(RegistryEntries.byRegistryKey(Registries.ENTITY_TYPE), PAPER_REGISTRY_PACKAGE + ".keys.tags"));
31+
generators.add(new GeneratedTagKeyType<>(RegistryEntries.byRegistryKey(Registries.POTION), PAPER_REGISTRY_PACKAGE + ".keys.tags"));
3232
}
3333

3434
public static void bootstrap(PatternSourceSetRewriter apiSourceSet, PatternSourceSetRewriter serverSourceSet) {

paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntries.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import net.minecraft.resources.ResourceKey;
4141
import net.minecraft.server.dialog.Dialogs;
4242
import net.minecraft.sounds.SoundEvents;
43+
import net.minecraft.tags.DamageTypeTags;
4344
import net.minecraft.world.damagesource.DamageTypes;
4445
import net.minecraft.world.effect.MobEffects;
4546
import net.minecraft.world.entity.ai.attributes.Attributes;
@@ -185,7 +186,7 @@ private static <T> RegistryEntry<T> inconsistentEntry(ResourceKey<? extends Regi
185186
entry(Registries.STRUCTURE, BuiltinStructures.class, Structure.class).delayed(),
186187
entry(Registries.TRIM_MATERIAL, TrimMaterials.class, TrimMaterial.class).allowDirect().delayed(),
187188
entry(Registries.TRIM_PATTERN, TrimPatterns.class, TrimPattern.class).allowDirect().delayed(),
188-
entry(Registries.DAMAGE_TYPE, DamageTypes.class, DamageType.class).writableApiRegistryBuilder(DamageTypeRegistryEntry.Builder.class, "PaperDamageTypeRegistryEntry.PaperBuilder").delayed(),
189+
entry(Registries.DAMAGE_TYPE, DamageTypes.class, DamageType.class).writableApiRegistryBuilder(DamageTypeRegistryEntry.Builder.class, "PaperDamageTypeRegistryEntry.PaperBuilder").unregisteredTags(List.of(DamageTypeTags.BYPASSES_COOLDOWN)).delayed(),
189190
entry(Registries.WOLF_VARIANT, WolfVariants.class, Wolf.Variant.class).writableApiRegistryBuilder(WolfVariantRegistryEntry.Builder.class, "PaperWolfVariantRegistryEntry.PaperBuilder").delayed(),
190191
entry(Registries.WOLF_SOUND_VARIANT, WolfSoundVariants.class, Wolf.SoundVariant.class),
191192
entry(Registries.ENCHANTMENT, Enchantments.class, Enchantment.class).writableApiRegistryBuilder(EnchantmentRegistryEntry.Builder.class, "PaperEnchantmentRegistryEntry.PaperBuilder").serializationUpdater("ENCHANTMENT_RENAME").delayed(),

paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntry.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,17 @@
99
import java.lang.reflect.ParameterizedType;
1010
import java.util.Collections;
1111
import java.util.IdentityHashMap;
12+
import java.util.List;
1213
import java.util.Map;
1314
import java.util.Optional;
15+
import java.util.function.Consumer;
1416
import java.util.function.Function;
17+
import java.util.stream.Stream;
1518
import javax.lang.model.SourceVersion;
1619
import net.minecraft.core.Holder;
1720
import net.minecraft.core.Registry;
1821
import net.minecraft.resources.ResourceKey;
22+
import net.minecraft.tags.TagKey;
1923
import org.bukkit.Keyed;
2024
import org.jspecify.annotations.NullMarked;
2125
import org.jspecify.annotations.Nullable;
@@ -42,6 +46,7 @@ public final class RegistryEntry<T> {
4246
private String apiAccessName = ConstantDescs.INIT_NAME;
4347
private Optional<String> apiRegistryField = Optional.empty();
4448
private int genericArgCount = 0;
49+
private @Nullable List<TagKey<T>> unregisteredTags;
4550

4651
private @Nullable Map<ResourceKey<T>, String> fieldNames;
4752

@@ -111,6 +116,11 @@ public RegistryEntry<T> serializationUpdater(String fieldName) {
111116
return this;
112117
}
113118

119+
public RegistryEntry<T> unregisteredTags(List<TagKey<T>> keys) {
120+
this.unregisteredTags = keys;
121+
return this;
122+
}
123+
114124
public boolean canAllowDirect() {
115125
return this.allowDirect;
116126
}
@@ -131,6 +141,23 @@ public Class<?> preloadClass() {
131141
return this.fieldRename;
132142
}
133143

144+
public void lookupTagKeys(Consumer<TagKey<T>> callback) {
145+
this.registry().listTagIds().forEach(callback);
146+
147+
if (this.unregisteredTags != null) {
148+
this.unregisteredTags.forEach(callback);
149+
}
150+
}
151+
152+
public Stream<TagKey<T>> tagKeys() {
153+
Stream<TagKey<T>> keys = this.registry().listTagIds();
154+
155+
if (this.unregisteredTags != null) {
156+
keys = Stream.concat(keys, this.unregisteredTags.stream());
157+
}
158+
return keys;
159+
}
160+
134161
public @Nullable Class<?> apiRegistryBuilder() {
135162
return this.apiRegistryBuilder;
136163
}

0 commit comments

Comments
 (0)