optimize by name lookup of properties
This commit is contained in:
parent
b71207d07a
commit
b7a8776162
2 changed files with 11 additions and 17 deletions
|
@ -9,16 +9,7 @@ public class EntityPropertyImpl<T> implements EntityProperty<T> {
|
||||||
private final Class<T> clazz;
|
private final Class<T> clazz;
|
||||||
private final PropertySerializer<T> serializer;
|
private final PropertySerializer<T> serializer;
|
||||||
|
|
||||||
protected EntityPropertyImpl(String name, Class<T> type, PropertySerializer<T> serializer) {
|
protected EntityPropertyImpl(String name, T defaultValue, Class<T> clazz, PropertySerializer<T> serializer) {
|
||||||
this(name, null, type, serializer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
protected EntityPropertyImpl(String name, T defaultValue, PropertySerializer<T> serializer) {
|
|
||||||
this(name, defaultValue, (Class<T>) defaultValue.getClass(), serializer);
|
|
||||||
}
|
|
||||||
|
|
||||||
private EntityPropertyImpl(String name, T defaultValue, Class<T> clazz, PropertySerializer<T> serializer) {
|
|
||||||
this.name = name.toLowerCase();
|
this.name = name.toLowerCase();
|
||||||
this.defaultValue = defaultValue;
|
this.defaultValue = defaultValue;
|
||||||
this.clazz = clazz;
|
this.clazz = clazz;
|
||||||
|
|
|
@ -10,15 +10,13 @@ import lol.pyr.znpcsplus.skin.cache.SkinCache;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
||||||
private final Map<Class<?>, PropertySerializer<?>> serializerMap = new HashMap<>();
|
private final Map<Class<?>, PropertySerializer<?>> serializerMap = new HashMap<>();
|
||||||
private final List<EntityPropertyImpl<?>> properties = new ArrayList<>();
|
private final Map<String, EntityPropertyImpl<?>> byName = new HashMap<>();
|
||||||
|
|
||||||
public EntityPropertyRegistryImpl(SkinCache skinCache) {
|
public EntityPropertyRegistryImpl(SkinCache skinCache) {
|
||||||
registerSerializer(new BooleanPropertySerializer());
|
registerSerializer(new BooleanPropertySerializer());
|
||||||
|
@ -33,6 +31,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
||||||
registerType("silent", false);
|
registerType("silent", false);
|
||||||
registerType("skin", SkinDescriptor.class);
|
registerType("skin", SkinDescriptor.class);
|
||||||
registerType("name", Component.class);
|
registerType("name", Component.class);
|
||||||
|
registerType("look", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerSerializer(PropertySerializer<?> serializer) {
|
private void registerSerializer(PropertySerializer<?> serializer) {
|
||||||
|
@ -40,11 +39,16 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> void registerType(String name, Class<T> type) {
|
private <T> void registerType(String name, Class<T> type) {
|
||||||
properties.add(new EntityPropertyImpl<>(name, type, (PropertySerializer<T>) serializerMap.get(type)));
|
registerType(name, null, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> void registerType(String name, T defaultValue) {
|
private <T> void registerType(String name, T defaultValue) {
|
||||||
properties.add(new EntityPropertyImpl<>(name, defaultValue, (PropertySerializer<T>) serializerMap.get(defaultValue.getClass())));
|
registerType(name, defaultValue, (Class<T>) defaultValue.getClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> void registerType(String name, T defaultValue, Class<T> clazz) {
|
||||||
|
EntityPropertyImpl<T> property = new EntityPropertyImpl<>(name, defaultValue, clazz, (PropertySerializer<T>) serializerMap.get(clazz));
|
||||||
|
byName.put(name.toLowerCase(), property);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> EntityPropertyImpl<T> getByName(String name, Class<T> type) {
|
public <T> EntityPropertyImpl<T> getByName(String name, Class<T> type) {
|
||||||
|
@ -52,7 +56,6 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
||||||
}
|
}
|
||||||
|
|
||||||
public EntityPropertyImpl<?> getByName(String name) {
|
public EntityPropertyImpl<?> getByName(String name) {
|
||||||
for (EntityPropertyImpl<?> property : properties) if (property.getName().equalsIgnoreCase(name)) return property;
|
return byName.get(name.toLowerCase());
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue