Co-authored-by: Bjarne Koll <git@lynxplay.dev> Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com> Co-authored-by: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Co-authored-by: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Co-authored-by: Noah van der Aa <ndvdaa@gmail.com> Co-authored-by: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
64 lines
2.4 KiB
Java
64 lines
2.4 KiB
Java
package io.papermc.paper.registry;
|
|
|
|
import com.mojang.serialization.Lifecycle;
|
|
import io.papermc.paper.registry.data.util.Conversions;
|
|
import io.papermc.paper.registry.entry.RegistryEntryMeta;
|
|
import io.papermc.paper.registry.event.WritableRegistry;
|
|
import java.util.Optional;
|
|
import java.util.function.Consumer;
|
|
import net.minecraft.core.MappedRegistry;
|
|
import net.minecraft.core.RegistrationInfo;
|
|
import net.minecraft.resources.ResourceKey;
|
|
import org.bukkit.Keyed;
|
|
import org.bukkit.craftbukkit.CraftRegistry;
|
|
|
|
public class WritableCraftRegistry<M, T extends Keyed, B extends PaperRegistryBuilder<M, T>> extends CraftRegistry<T, M> {
|
|
|
|
private static final RegistrationInfo FROM_PLUGIN = new RegistrationInfo(Optional.empty(), Lifecycle.experimental());
|
|
|
|
private final RegistryEntryMeta.Buildable<M, T, B> meta;
|
|
private final MappedRegistry<M> registry;
|
|
|
|
public WritableCraftRegistry(
|
|
final MappedRegistry<M> registry,
|
|
final RegistryEntryMeta.Buildable<M, T, B> meta
|
|
) {
|
|
super(meta, registry);
|
|
this.registry = registry;
|
|
this.meta = meta;
|
|
}
|
|
|
|
public void register(final TypedKey<T> key, final Consumer<RegistryBuilderFactory<T, B>> value, final Conversions conversions) {
|
|
final ResourceKey<M> resourceKey = PaperRegistries.toNms(key);
|
|
this.registry.validateWrite(resourceKey);
|
|
final PaperRegistryBuilderFactory<M, T, B> builderFactory = new PaperRegistryBuilderFactory<>(this.registry.key(), conversions, this.meta.builderFiller(), this.registry::getValueForCopying);
|
|
value.accept(builderFactory);
|
|
PaperRegistryListenerManager.INSTANCE.registerWithListeners(
|
|
this.registry,
|
|
this.meta,
|
|
resourceKey,
|
|
builderFactory.requireBuilder(),
|
|
FROM_PLUGIN,
|
|
conversions
|
|
);
|
|
}
|
|
|
|
public WritableRegistry<T, B> createApiWritableRegistry(final Conversions conversions) {
|
|
return new ApiWritableRegistry(conversions);
|
|
}
|
|
|
|
public class ApiWritableRegistry implements WritableRegistry<T, B> {
|
|
|
|
private final Conversions conversions;
|
|
|
|
public ApiWritableRegistry(final Conversions conversions) {
|
|
this.conversions = conversions;
|
|
}
|
|
|
|
@Override
|
|
public void registerWith(final TypedKey<T> key, final Consumer<RegistryBuilderFactory<T, B>> value) {
|
|
WritableCraftRegistry.this.register(key, value, this.conversions);
|
|
}
|
|
}
|
|
}
|