use TypeToken for registries

This commit is contained in:
dfsek
2021-07-18 13:55:35 -07:00
parent ebc81b196a
commit d5601229ac
13 changed files with 43 additions and 26 deletions

View File

@@ -2,6 +2,7 @@ package com.dfsek.terra.api.config;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.registry.OpenRegistry;
import com.dfsek.terra.api.util.TypeToken;
import java.util.function.Supplier;
@@ -10,7 +11,7 @@ public interface ConfigType<T extends AbstractableTemplate, R> {
ConfigFactory<T, R> getFactory();
Class<R> getTypeClass();
TypeToken<R> getTypeClass();
Supplier<OpenRegistry<R>> registrySupplier();
}

View File

@@ -5,6 +5,7 @@ import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.config.ConfigType;
import com.dfsek.terra.api.event.events.PackEvent;
import com.dfsek.terra.api.util.ReflectionUtil;
import java.util.function.Consumer;
@@ -49,13 +50,13 @@ public class ConfigurationLoadEvent implements PackEvent {
}
public boolean is(Class<?> clazz) {
return clazz.isAssignableFrom(type.getTypeClass());
return clazz.isAssignableFrom(type.getTypeClass().getRawType());
}
@SuppressWarnings("unchecked")
public <T> T getLoadedObject(Class<T> clazz) {
if(!clazz.isAssignableFrom(type.getTypeClass()))
throw new ClassCastException("Cannot assign object from loader of type " + type.getTypeClass().getCanonicalName() + " to class " + clazz.getCanonicalName());
if(!clazz.isAssignableFrom(type.getTypeClass().getRawType()))
throw new ClassCastException("Cannot assign object from loader of type " + ReflectionUtil.typeToString(type.getTypeClass().getType()) + " to class " + clazz.getCanonicalName());
return (T) loaded;
}

View File

@@ -4,6 +4,7 @@ import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.config.ConfigType;
import com.dfsek.terra.api.event.events.PackEvent;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.util.ReflectionUtil;
public abstract class ConfigTypeLoadEvent implements PackEvent {
private final ConfigType<?, ?> type;
@@ -23,13 +24,13 @@ public abstract class ConfigTypeLoadEvent implements PackEvent {
}
public boolean is(Class<?> clazz) {
return clazz.isAssignableFrom(type.getTypeClass());
return clazz.isAssignableFrom(type.getTypeClass().getRawType());
}
@SuppressWarnings("unchecked")
public <T> CheckedRegistry<T> getRegistry(Class<T> clazz) {
if(!clazz.isAssignableFrom(type.getTypeClass()))
throw new ClassCastException("Cannot assign object from loader of type " + type.getTypeClass().getCanonicalName() + " to class " + clazz.getCanonicalName());
if(!clazz.isAssignableFrom(type.getTypeClass().getRawType()))
throw new ClassCastException("Cannot assign object from loader of type " + ReflectionUtil.typeToString(type.getTypeClass().getType()) + " to class " + clazz.getCanonicalName());
return (CheckedRegistry<T>) registry;
}
}