Skip to content

Commit

Permalink
Rework object resolvers into registry resolvers
Browse files Browse the repository at this point in the history
Signed-off-by: TheSilkMiner <thesilkminer@outlook.com>
  • Loading branch information
TheSilkMiner committed Jun 21, 2022
1 parent 78b676b commit a984d3e
Show file tree
Hide file tree
Showing 12 changed files with 129 additions and 102 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@

import com.blamejared.contenttweaker.core.api.ApiBridge;
import com.blamejared.contenttweaker.core.api.object.ObjectType;
import com.blamejared.contenttweaker.core.api.object.RegistryResolver;
import com.blamejared.contenttweaker.core.api.registry.GameRegistry;
import com.blamejared.contenttweaker.core.api.registry.RegistryButler;
import com.blamejared.contenttweaker.core.api.resource.ResourceManager;
import net.minecraft.resources.ResourceLocation;
import com.blamejared.contenttweaker.core.service.ServiceManager;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey;

public final class ContentTweakerApiBridge implements ApiBridge {
@Override
Expand All @@ -18,7 +22,7 @@ public ResourceManager resourceManager() {
}

@Override
public <T> T resolve(final ObjectType<T> type, final ResourceLocation id) {
return ContentTweakerCore.core().metaRegistry().resolvers().findResolverFor(type).resolve(id);
public <T> RegistryResolver<T> findResolver(final ObjectType<T> type) {
return ContentTweakerCore.core().metaRegistry().registryResolvers().findResolverFor(type);
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package com.blamejared.contenttweaker.core.api;

import com.blamejared.contenttweaker.core.api.object.ObjectType;
import com.blamejared.contenttweaker.core.api.object.RegistryResolver;
import com.blamejared.contenttweaker.core.api.registry.GameRegistry;
import com.blamejared.contenttweaker.core.api.registry.RegistryButler;
import com.blamejared.contenttweaker.core.api.resource.ResourceManager;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey;

public interface ApiBridge {
RegistryButler registryButler();
ResourceManager resourceManager();

<T> T resolve(final ObjectType<T> type, final ResourceLocation id);
<T> RegistryResolver<T> findResolver(final ObjectType<T> type);
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package com.blamejared.contenttweaker.core.api.object;

import com.blamejared.contenttweaker.core.api.ContentTweakerApi;
import com.blamejared.contenttweaker.core.api.registry.GameRegistry;
import com.google.common.base.Suppliers;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;

import java.util.Objects;
import java.util.function.Function;
import java.util.function.Supplier;

public interface RegistryResolver<T> extends Function<ResourceLocation, T> {
static <T> RegistryResolver<T> of(final ObjectType<T> type) {
final ResourceKey<? extends Registry<T>> key = Objects.requireNonNull(Objects.requireNonNull(type).key());
return of(type, () -> GameRegistry.findFromKey(type, key));
}

static <T> RegistryResolver<T> of(final ObjectType<T> type, final Supplier<? extends GameRegistry<T>> registryResolver) {
Objects.requireNonNull(type);
Objects.requireNonNull(registryResolver);
final Supplier<? extends GameRegistry<T>> resolver = Suppliers.memoize(registryResolver::get);
return new RegistryResolver<>() {
@Override
public ObjectType<T> type() {
return type;
}

@Override
public GameRegistry<T> registry() {
return resolver.get();
}
};
}

static <T> RegistryResolver<T> find(final ObjectType<T> type) {
return ContentTweakerApi.get().findResolver(type);
}

ObjectType<T> type();
GameRegistry<T> registry();

default T resolve(final ResourceLocation id) {
return this.registry().get(Objects.requireNonNull(id));
}

default ResourceLocation nameOf(final T object) {
return this.registry().nameOf(Objects.requireNonNull(object));
}

default void enqueueRegistration(final ResourceLocation name, final Supplier<T> objectCreator) {
this.registry().enqueueRegistration(name, objectCreator);
}

default void enqueueRegistration(final ObjectHolder<T> holder) {
this.registry().enqueueRegistration(holder);
}

@Override
default T apply(final ResourceLocation location) {
return this.resolve(location);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ public interface ContentTweakerPluginProvider {
default void registerObjectTypes(final ObjectTypeRegistration registration) {}
default void registerFactoryMappings(final FactoryMappingRegistration registration) {}
default void registerReferenceFactories(final ReferenceFactoryRegistration registration) {}
default void registerResolvers(final ResolverRegistration registration) {}
default void registerResolvers(final RegistryResolverRegistration registration) {}
default void registerCustomBrackets(final CustomBracketRegistration registration) {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.blamejared.contenttweaker.core.api.plugin;

import com.blamejared.contenttweaker.core.api.object.RegistryResolver;
import com.blamejared.contenttweaker.core.api.object.ObjectType;

public interface RegistryResolverRegistration {
<T> void register(final ObjectType<T> type, final RegistryResolver<T> resolver);
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public void initializePlugins(final MetaRegistry metaRegistry) {
objectTypeRegistry.registerTypes(ObjectTypeRegistrationManager.get(this.each(ContentTweakerPluginProvider::registerObjectTypes)));
metaRegistry.factoryMappings().registerMappings(objectTypeRegistry, FactoryMappingRegistrationManager.get(this.each(ContentTweakerPluginProvider::registerFactoryMappings)));
metaRegistry.referenceFactories().registerFactories(objectTypeRegistry, ReferenceFactoryRegistrationManager.get(this.each(ContentTweakerPluginProvider::registerReferenceFactories)));
metaRegistry.resolvers().registerResolvers(objectTypeRegistry, ResolverRegistrationManager.get(this.each(ContentTweakerPluginProvider::registerResolvers)));
metaRegistry.registryResolvers().registerResolvers(objectTypeRegistry, RegistryResolverRegistrationManager.get(this.each(ContentTweakerPluginProvider::registerResolvers)));
}

public void registerPluginBrackets(final IBracketParserRegistrationHandler handler) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.blamejared.contenttweaker.core.plugin;

import com.blamejared.contenttweaker.core.api.object.RegistryResolver;
import com.blamejared.contenttweaker.core.api.object.ObjectType;
import com.blamejared.contenttweaker.core.api.plugin.RegistryResolverRegistration;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;

public final class RegistryResolverRegistrationManager implements RegistryResolverRegistration {
private final Map<ObjectType<?>, RegistryResolver<?>> resolvers;

private RegistryResolverRegistrationManager() {
this.resolvers = new HashMap<>();
}

public static Map<ObjectType<?>, RegistryResolver<?>> get(final Consumer<RegistryResolverRegistration> consumer) {
final RegistryResolverRegistrationManager registration = new RegistryResolverRegistrationManager();
consumer.accept(registration);
return Collections.unmodifiableMap(registration.resolvers);
}

@Override
public <T> void register(final ObjectType<T> type, final RegistryResolver<T> resolver) {
final RegistryResolver<?> previous = this.resolvers.get(type);
if (previous != null) {
throw new IllegalArgumentException("Attempted double resolvers for type " + type + " through " + previous + " and " + resolver);
}
this.resolvers.put(type, resolver);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ public final class MetaRegistry {
private final FactoryMappingsRegistry factoryMappings;
private final ObjectTypeRegistry objectTypes;
private final ReferenceFactoryRegistry referenceFactories;
private final ResolverRegistry resolverRegistry;
private final RegistryResolverRegistry registryResolverRegistry;

private MetaRegistry() {
this.factoryMappings = new FactoryMappingsRegistry();
this.objectTypes = new ObjectTypeRegistry();
this.referenceFactories = new ReferenceFactoryRegistry();
this.resolverRegistry = new ResolverRegistry();
this.registryResolverRegistry = new RegistryResolverRegistry();
}

public static MetaRegistry of() {
Expand All @@ -29,7 +29,7 @@ public ReferenceFactoryRegistry referenceFactories() {
return this.referenceFactories;
}

public ResolverRegistry resolvers() {
return this.resolverRegistry;
public RegistryResolverRegistry registryResolvers() {
return this.registryResolverRegistry;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.blamejared.contenttweaker.core.registry;

import com.blamejared.contenttweaker.core.api.object.ObjectResolver;
import com.blamejared.contenttweaker.core.api.object.RegistryResolver;
import com.blamejared.contenttweaker.core.api.object.ObjectType;
import com.blamejared.contenttweaker.core.util.FreezableMap;
import com.blamejared.crafttweaker.api.util.GenericUtil;
Expand All @@ -9,14 +9,14 @@
import java.util.Map;
import java.util.function.Predicate;

public final class ResolverRegistry {
private final FreezableMap<ObjectType<?>, ObjectResolver<?>> resolvers;
public final class RegistryResolverRegistry {
private final FreezableMap<ObjectType<?>, RegistryResolver<?>> resolvers;

ResolverRegistry() {
RegistryResolverRegistry() {
this.resolvers = FreezableMap.of();
}

public void registerResolvers(final ObjectTypeRegistry objectTypeRegistry, final Map<ObjectType<?>, ObjectResolver<?>> map) {
public void registerResolvers(final ObjectTypeRegistry objectTypeRegistry, final Map<ObjectType<?>, RegistryResolver<?>> map) {
final Collection<ObjectType<?>> objectTypes = objectTypeRegistry.allTypes();
final Collection<ObjectType<?>> unregisteredTypes = map.keySet()
.stream()
Expand All @@ -29,7 +29,7 @@ public void registerResolvers(final ObjectTypeRegistry objectTypeRegistry, final
this.resolvers.freeze();
}

public <T> ObjectResolver<T> findResolverFor(final ObjectType<T> type) {
public <T> RegistryResolver<T> findResolverFor(final ObjectType<T> type) {
return GenericUtil.uncheck(this.resolvers.get(type));
}
}

0 comments on commit a984d3e

Please sign in to comment.