Skip to content

Commit eeb068d

Browse files
committed
fix npe when serializing null arrays
de/serialize numbers correctly
1 parent fd64222 commit eeb068d

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

src/main/java/gregtech/api/mui/serialize/JsonHandler.java

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
import com.google.gson.JsonDeserializationContext;
66
import com.google.gson.JsonDeserializer;
77
import com.google.gson.JsonElement;
8+
import com.google.gson.JsonObject;
89
import com.google.gson.JsonParseException;
910
import com.google.gson.JsonPrimitive;
1011
import com.google.gson.JsonSerializationContext;
1112
import com.google.gson.JsonSerializer;
13+
import org.apache.commons.lang3.ArrayUtils;
1214

1315
import java.lang.reflect.Type;
1416
import java.util.Arrays;
@@ -33,26 +35,47 @@ default T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext
3335

3436
default <R> JsonArray serializeArray(R[] objects, JsonSerializationContext context) {
3537
JsonArray array = new JsonArray();
38+
if (ArrayUtils.isEmpty(objects)) return array;
3639
Type arrayType = objects.getClass().getComponentType();
3740
for (R t : objects) {
38-
array.add(context.serialize(t, arrayType));
41+
JsonElement element = context.serialize(t, arrayType);
42+
if (element.isJsonPrimitive() && element.getAsJsonPrimitive().isNumber()) {
43+
JsonObject typed = new JsonObject();
44+
typed.addProperty("typed", t.getClass().getSimpleName());
45+
typed.add("element", element);
46+
array.add(typed);
47+
} else {
48+
array.add(element);
49+
}
3950
}
4051
return array;
4152
}
4253

43-
default <R> R[] deserializeArray(JsonArray jsonElements, JsonDeserializationContext context,
54+
default <R> R[] deserializeArray(JsonArray jsonArray, JsonDeserializationContext context,
4455
IntFunction<R[]> function) {
45-
if (jsonElements == null) return function.apply(0);
46-
R[] array2 = function.apply(jsonElements.size());
47-
Type arrayType = array2.getClass().getComponentType();
48-
Arrays.setAll(array2, i -> handleArg(jsonElements.get(i), context, arrayType));
49-
return array2;
56+
if (jsonArray == null || jsonArray.size() == 0) return function.apply(0);
57+
R[] array = function.apply(jsonArray.size());
58+
Type arrayType = array.getClass().getComponentType();
59+
Arrays.setAll(array, i -> handleArg(jsonArray.get(i), context, arrayType));
60+
return array;
5061
}
5162

5263
static Object handleArg(JsonElement element, JsonDeserializationContext context, Type arrayType) {
5364
// args can sometimes be keys
5465
if (element.isJsonObject()) {
55-
return context.deserialize(element.getAsJsonObject(), IDrawable.class);
66+
JsonObject object = element.getAsJsonObject();
67+
if (!object.has("typed"))
68+
return context.deserialize(object, IDrawable.class);
69+
70+
JsonElement value = object.get("element");
71+
return switch (object.get("typed").getAsString()) {
72+
case "Integer" -> value.getAsInt();
73+
case "Long" -> value.getAsLong();
74+
case "Double" -> value.getAsDouble();
75+
case "Float" -> value.getAsFloat();
76+
case "Byte" -> value.getAsByte();
77+
default -> value.getAsNumber();
78+
};
5679
} else if (element instanceof JsonPrimitive primitive && primitive.isNumber()) {
5780
return primitive.getAsNumber();
5881
} else {

src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityHPCA.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -469,17 +469,13 @@ protected void configureDisplayText(MultiblockUIFactory.Builder builder) {
469469
String voltageName = GTValues.VNF[GTUtility.getTierByVoltage(hpcaHandler.getMaxEUt())];
470470
richText.add(KeyUtil.lang(TextFormatting.GRAY,
471471
"gregtech.multiblock.hpca.energy",
472-
TextFormattingUtil.formatNumbers(hpcaHandler.cachedCWUt),
473-
TextFormattingUtil.formatNumbers(hpcaHandler.getMaxCWUt()),
472+
TextFormattingUtil.formatNumbers(hpcaHandler.cachedEUt),
473+
TextFormattingUtil.formatNumbers(hpcaHandler.getMaxEUt()),
474474
voltageName));
475475

476476
// Provided Computation
477-
IKey cwutInfo = KeyUtil.string(TextFormatting.AQUA,
478-
hpcaHandler.cachedCWUt + " / " + hpcaHandler.getMaxCWUt() + " CWU/t");
479-
480-
richText.add(KeyUtil.lang(TextFormatting.GRAY,
481-
"gregtech.multiblock.hpca.computation",
482-
cwutInfo));
477+
richText.add(KeyUtil.lang("gregtech.multiblock.hpca.computation",
478+
hpcaHandler.cachedCWUt, hpcaHandler.getMaxCWUt()));
483479
})
484480
.addWorkingStatusLine();
485481
}

0 commit comments

Comments
 (0)