- added feature/structure options

- added gui pages for new options
- fix tooltip rendering on list items
- refined some biomehelper logic
This commit is contained in:
dags- 2020-02-24 12:30:13 +00:00
parent ae15c9bdd2
commit 1f1eedcf9c
3 changed files with 50 additions and 31 deletions

View File

@ -10,11 +10,12 @@ public class Deserializer {
public void deserialize(Reader reader, Object object) throws Throwable {
Class<?> type = object.getClass();
for (String name : reader.getKeys()) {
if (name.charAt(0) == '_') {
if (name.charAt(0) == '#') {
continue;
}
Reader child = reader.getChild(name);
Field field = type.getField(getName(name));
Field field = type.getField(name);
if (Serializer.isSerializable(field)) {
field.setAccessible(true);
fromValue(child, object, field);
@ -32,7 +33,7 @@ public class Deserializer {
return;
}
if (field.getType() == boolean.class) {
field.set(object, reader.getBool("value"));
field.set(object, reader.getString("value").equals("true"));
return;
}
if (field.getType() == String.class) {
@ -41,7 +42,7 @@ public class Deserializer {
}
if (field.getType().isEnum()) {
String name = reader.getString("value");
for (Enum e : field.getType().asSubclass(Enum.class).getEnumConstants()) {
for (Enum<?> e : field.getType().asSubclass(Enum.class).getEnumConstants()) {
if (e.name().equals(name)) {
field.set(object, e);
return;
@ -74,11 +75,12 @@ public class Deserializer {
StringBuilder sb = new StringBuilder(name.length());
for (int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
if (c == '_' && i + 1 < name.length()) {
sb.append(Character.toUpperCase(name.charAt(++i)));
} else {
sb.append(c);
if (i == 0) {
c = Character.toLowerCase(c);
} else if (c == ' ' && i + 1 < name.length()) {
c = Character.toUpperCase(name.charAt(++i));
}
sb.append(c);
}
return sb.toString();
}

View File

@ -35,7 +35,7 @@ public class Serializer {
private void write(Object object, Field field, int order, Writer writer) throws IllegalAccessException {
if (field.getType() == int.class) {
writer.name(getName(field));
writer.name(field.getName());
writer.beginObject();
writer.name("value").value((int) field.get(object));
writeMeta(field, order, writer);
@ -43,7 +43,7 @@ public class Serializer {
return;
}
if (field.getType() == float.class) {
writer.name(getName(field));
writer.name(field.getName());
writer.beginObject();
writer.name("value").value((float) field.get(object));
writeMeta(field, order, writer);
@ -51,24 +51,31 @@ public class Serializer {
return;
}
if (field.getType() == String.class) {
writer.name(getName(field));
writer.name(field.getName());
writer.beginObject();
writer.name("value").value((String) field.get(object));
writeMeta(field, order, writer);
writer.endObject();
return;
}
if (field.getType().isEnum()) {
writer.name(getName(field));
if (field.getType() == boolean.class) {
writer.name(field.getName());
writer.beginObject();
writer.name("value").value(((Enum) field.get(object)).name());
writer.name("value").value("" + (field.get(object)));
writeMeta(field, order, writer);
writer.endObject();
}
if (field.getType().isEnum()) {
writer.name(field.getName());
writer.beginObject();
writer.name("value").value(((Enum<?>) field.get(object)).name());
writeMeta(field, order, writer);
writer.endObject();
return;
}
if (field.getType().isArray()) {
if (field.getType().getComponentType().isAnnotationPresent(Serializable.class)) {
writer.name(getName(field));
writer.name(field.getName());
writer.beginObject();
writer.name("value");
serialize(field.get(object), writer);
@ -78,7 +85,7 @@ public class Serializer {
return;
}
if (field.getType().isAnnotationPresent(Serializable.class)) {
writer.name(getName(field));
writer.name(field.getName());
writer.beginObject();
writer.name("value");
serialize(field.get(object), writer);
@ -88,23 +95,23 @@ public class Serializer {
}
private void writeMeta(Field field, int order, Writer writer) {
writer.name("_name").value(getName(field));
writer.name("_order").value(order);
writer.name("#display").value(getName(field));
writer.name("#order").value(order);
Range range = field.getAnnotation(Range.class);
if (range != null) {
if (field.getType() == int.class) {
writer.name("_min").value((int) range.min());
writer.name("_max").value((int) range.max());
writer.name("#min").value((int) range.min());
writer.name("#max").value((int) range.max());
} else {
writer.name("_min").value(range.min());
writer.name("_max").value(range.max());
writer.name("#min").value(range.min());
writer.name("#max").value(range.max());
}
}
Comment comment = field.getAnnotation(Comment.class);
if (comment != null) {
writer.name("_comment");
writer.name("#comment");
writer.beginArray();
for (String line : comment.value()) {
writer.value(line);
@ -112,10 +119,18 @@ public class Serializer {
writer.endArray();
}
if (field.getType().isEnum()) {
writer.name("_options");
if (field.getType() == boolean.class) {
writer.name("#options");
writer.beginArray();
for (Enum o : field.getType().asSubclass(Enum.class).getEnumConstants()) {
writer.value("true");
writer.value("false");
writer.endArray();
}
if (field.getType().isEnum()) {
writer.name("#options");
writer.beginArray();
for (Enum<?> o : field.getType().asSubclass(Enum.class).getEnumConstants()) {
writer.value(o.name());
}
writer.endArray();
@ -127,11 +142,13 @@ public class Serializer {
StringBuilder sb = new StringBuilder(name.length() * 2);
for (int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
if (Character.isUpperCase(c)) {
sb.append('_').append(Character.toLowerCase(c));
} else {
sb.append(c);
if (i == 0) {
c = Character.toUpperCase(c);
} else if (Character.isUpperCase(c)) {
sb.append(' ');
}
sb.append(c);
}
return sb.toString();
}

@ -1 +1 @@
Subproject commit a406906308488a6d15e4cc17898c8a7d97173197
Subproject commit 421563d8871ce8aab09d80242c577ea904dd2eda