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 PropertySerializer<T> serializer;
|
||||
|
||||
protected EntityPropertyImpl(String name, Class<T> type, 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) {
|
||||
protected EntityPropertyImpl(String name, T defaultValue, Class<T> clazz, PropertySerializer<T> serializer) {
|
||||
this.name = name.toLowerCase();
|
||||
this.defaultValue = defaultValue;
|
||||
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.format.NamedTextColor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
||||
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) {
|
||||
registerSerializer(new BooleanPropertySerializer());
|
||||
|
@ -33,6 +31,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
registerType("silent", false);
|
||||
registerType("skin", SkinDescriptor.class);
|
||||
registerType("name", Component.class);
|
||||
registerType("look", false);
|
||||
}
|
||||
|
||||
private void registerSerializer(PropertySerializer<?> serializer) {
|
||||
|
@ -40,11 +39,16 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
}
|
||||
|
||||
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) {
|
||||
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) {
|
||||
|
@ -52,7 +56,6 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
}
|
||||
|
||||
public EntityPropertyImpl<?> getByName(String name) {
|
||||
for (EntityPropertyImpl<?> property : properties) if (property.getName().equalsIgnoreCase(name)) return property;
|
||||
return null;
|
||||
return byName.get(name.toLowerCase());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue