refactor registry entry to detach 'delayed' from other meta

Also fixes an issue with direct holders
This commit is contained in:
Jake Potrebic
2024-12-22 21:17:16 -08:00
parent 188124bcc3
commit a0b3326609
19 changed files with 220 additions and 357 deletions

View File

@@ -2,8 +2,7 @@ package io.papermc.paper.registry;
import io.papermc.paper.registry.data.util.Conversions;
import io.papermc.paper.registry.entry.RegistryEntry;
import io.papermc.paper.registry.entry.RegistryEntryInfo;
import io.papermc.paper.registry.legacy.DelayedRegistryEntry;
import io.papermc.paper.registry.entry.RegistryEntryMeta;
import java.util.Map;
import java.util.stream.Stream;
import net.minecraft.core.Registry;
@@ -23,21 +22,17 @@ class RegistryBuilderTest {
static Stream<Arguments> registries() {
return PaperRegistries.REGISTRY_ENTRIES.stream()
.map(RegistryBuilderTest::possiblyUnwrap)
.filter(RegistryEntry.BuilderHolder.class::isInstance)
.map(RegistryEntry::meta)
.filter(RegistryEntryMeta.Buildable.class::isInstance)
.map(Arguments::arguments);
}
private static <M, B extends Keyed> RegistryEntryInfo<M, B> possiblyUnwrap(final RegistryEntryInfo<M, B> entry) {
return entry instanceof final DelayedRegistryEntry<M, B> delayed ? delayed.delegate() : entry;
}
@ParameterizedTest
@MethodSource("registries")
<M, T> void testEquality(final RegistryEntry.BuilderHolder<M, T, ?> registryEntry) {
<M, T extends Keyed> void testEquality(final RegistryEntryMeta.Buildable<M, T, ?> registryEntry) { // TODO remove Keyed
final Registry<M> registry = RegistryHelper.getRegistry().lookupOrThrow(registryEntry.mcKey());
for (final Map.Entry<ResourceKey<M>, M> entry : registry.entrySet()) {
final M built = registryEntry.fillBuilder(new Conversions(new RegistryOps.HolderLookupAdapter(RegistryHelper.getRegistry())), entry.getValue()).build();
final M built = registryEntry.builderFiller().fill(new Conversions(new RegistryOps.HolderLookupAdapter(RegistryHelper.getRegistry())), entry.getValue()).build();
assertEquals(entry.getValue(), built);
}
}