- 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:
parent
ae15c9bdd2
commit
1f1eedcf9c
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue