From a333232d8557fc4da0c647596f89652134ed851a Mon Sep 17 00:00:00 2001 From: Josiah Glosson Date: Tue, 6 Feb 2024 02:32:35 -0600 Subject: [PATCH] [ci skip] Add defaultId to RegistrarBuilder (#474) * Add defaultId to RegistrarBuilder * Make the default key an registrar option --------- Co-authored-by: shedaniel --- .../options/DefaultIdRegistrarOption.java | 25 +++++++++++++++++++ .../registries/fabric/RegistriesImpl.java | 24 +++++++++++++----- .../registries/forge/RegistriesImpl.java | 3 +++ 3 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 common/src/main/java/dev/architectury/registry/registries/options/DefaultIdRegistrarOption.java diff --git a/common/src/main/java/dev/architectury/registry/registries/options/DefaultIdRegistrarOption.java b/common/src/main/java/dev/architectury/registry/registries/options/DefaultIdRegistrarOption.java new file mode 100644 index 00000000..9add28ec --- /dev/null +++ b/common/src/main/java/dev/architectury/registry/registries/options/DefaultIdRegistrarOption.java @@ -0,0 +1,25 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package dev.architectury.registry.registries.options; + +import net.minecraft.resources.ResourceLocation; + +public record DefaultIdRegistrarOption(ResourceLocation defaultId) implements RegistrarOption { +} diff --git a/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java b/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java index 46c9caba..c9c3b971 100644 --- a/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java +++ b/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java @@ -28,6 +28,7 @@ import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.RegistrarBuilder; import dev.architectury.registry.registries.Registries; import dev.architectury.registry.registries.RegistrySupplier; +import dev.architectury.registry.registries.options.DefaultIdRegistrarOption; import dev.architectury.registry.registries.options.RegistrarOption; import dev.architectury.registry.registries.options.StandardRegistrarOption; import net.fabricmc.fabric.api.event.registry.FabricRegistryBuilder; @@ -91,7 +92,7 @@ public class RegistriesImpl { @Override public RegistrarBuilder builder(Class type, ResourceLocation registryId) { - return new RegistrarBuilderWrapper<>(modId, FabricRegistryBuilder.createSimple(type, registryId)); + return new RegistrarBuilderWrapper<>(modId, type, registryId); } } @@ -120,24 +121,35 @@ public class RegistriesImpl { public static class RegistrarBuilderWrapper implements RegistrarBuilder { private final String modId; - private FabricRegistryBuilder> builder; + private final Class type; + private final ResourceLocation registryId; + private final List>>> apply = new ArrayList<>(); + @Nullable + private ResourceLocation defaultId; - public RegistrarBuilderWrapper(String modId, FabricRegistryBuilder> builder) { + public RegistrarBuilderWrapper(String modId, Class type, ResourceLocation registryId) { this.modId = modId; - this.builder = builder; + this.type = type; + this.registryId = registryId; } @Override public Registrar build() { + final var builder = defaultId == null + ? FabricRegistryBuilder.createSimple(type, registryId) + : FabricRegistryBuilder.createDefaulted(type, registryId, defaultId); + apply.forEach(consumer -> consumer.accept(builder)); return Registries.get(modId).get(builder.buildAndRegister()); } @Override public RegistrarBuilder option(RegistrarOption option) { if (option == StandardRegistrarOption.SAVE_TO_DISC) { - this.builder.attribute(RegistryAttribute.PERSISTED); + this.apply.add(builder -> builder.attribute(RegistryAttribute.PERSISTED)); } else if (option == StandardRegistrarOption.SYNC_TO_CLIENTS) { - this.builder.attribute(RegistryAttribute.SYNCED); + this.apply.add(builder -> builder.attribute(RegistryAttribute.SYNCED)); + } else if (option instanceof DefaultIdRegistrarOption opt) { + this.defaultId = opt.defaultId(); } return this; } diff --git a/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java b/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java index 174fc538..59d084df 100644 --- a/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java +++ b/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java @@ -28,6 +28,7 @@ import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.RegistrarBuilder; import dev.architectury.registry.registries.Registries; import dev.architectury.registry.registries.RegistrySupplier; +import dev.architectury.registry.registries.options.DefaultIdRegistrarOption; import dev.architectury.registry.registries.options.RegistrarOption; import dev.architectury.registry.registries.options.StandardRegistrarOption; import net.minecraft.core.Registry; @@ -306,6 +307,8 @@ public class RegistriesImpl { this.saveToDisk = true; } else if (option == StandardRegistrarOption.SYNC_TO_CLIENTS) { this.syncToClients = true; + } else if (option instanceof DefaultIdRegistrarOption opt) { + this.builder.setDefaultKey(opt.defaultId()); } return this; }