mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-04-08 00:36:15 +00:00
use TypeToken for registries
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user