more JSON tomfuckery

This commit is contained in:
Boblet 2025-04-11 13:17:56 +02:00
parent 345d6e8710
commit 16f9c4ad16

View File

@ -1,6 +1,8 @@
package com.hbm.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
@ -9,6 +11,9 @@ import java.util.List;
import java.util.Map.Entry;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.stream.JsonWriter;
import com.hbm.items.ModItems;
import com.hbm.main.MainRegistry;
@ -59,20 +64,26 @@ public class DamageResistanceHandler {
File config = new File(folder.getAbsolutePath() + File.separatorChar + "hbmArmor.json");
File template = new File(folder.getAbsolutePath() + File.separatorChar + "_hbmArmor.json");
clearSystem();
if(!config.exists()) {
initDefaults();
writeDefault(template);
} else {
readConfig(config);
}
}
private static void clearSystem() {
itemStats.clear();
setStats.clear();
entityStats.clear();
itemInfoSet.clear();
if(!config.exists()) {
initDefaults();
//writeDefault(template);
} else {
///
}
}
private static void writeDefault(File file) {
MainRegistry.logger.info("No armor file found, registering defaults for " + file.getName());
try {
JsonWriter writer = new JsonWriter(new FileWriter(file));
@ -89,6 +100,21 @@ public class DamageResistanceHandler {
}
}
private static void readConfig(File file) {
MainRegistry.logger.info("Reading armor file " + file.getName());
try {
JsonObject json = gson.fromJson(new FileReader(file), JsonObject.class);
deserialize(json);
} catch(FileNotFoundException ex) {
clearSystem();
initDefaults();
ex.printStackTrace();
}
}
public static void initDefaults() {
entityStats.put(EntityCreeper.class, new ResistanceStats().addCategory(CATEGORY_EXPLOSION, 2F, 0.25F));
@ -153,7 +179,7 @@ public class DamageResistanceHandler {
.addCategory(CATEGORY_PROJECTILE, 25F, 0.65F)
.addCategory(CATEGORY_FIRE, 10F, 0.9F)
.addCategory(CATEGORY_EXPLOSION, 15F, 0.25F)
.addExact(DamageClass.LASER.name(), 25F, 0.75F)
.addCategory(CATEGORY_ENERGY, 25F, 0.75F)
.addExact(DamageSource.fall.damageType, 0F, 1F)
.setOther(15F, 0.3F));
ResistanceStats bj = new ResistanceStats()
@ -219,10 +245,10 @@ public class DamageResistanceHandler {
public static void registerSet(Item helmet, Item plate, Item legs, Item boots, ResistanceStats stats) {
Quartet set = new Quartet(helmet, plate, legs, boots);
setStats.put(set, stats);
addToListInHashMap(helmet, itemInfoSet, set);
addToListInHashMap(plate, itemInfoSet, set);
addToListInHashMap(legs, itemInfoSet, set);
addToListInHashMap(boots, itemInfoSet, set);
if(helmet != null) addToListInHashMap(helmet, itemInfoSet, set);
if(plate != null) addToListInHashMap(plate, itemInfoSet, set);
if(legs != null) addToListInHashMap(legs, itemInfoSet, set);
if(boots != null) addToListInHashMap(boots, itemInfoSet, set);
}
public static void addToListInHashMap(Object key, HashMap map, Object listElement) {
@ -330,6 +356,40 @@ public class DamageResistanceHandler {
writer.endArray();
}
public static void deserialize(JsonObject json) {
/// ITEMS ///
JsonArray itemStatsArray = json.get("itemStats").getAsJsonArray();
for(JsonElement element : itemStatsArray) {
JsonArray statArray = element.getAsJsonArray();
Item item = (Item) Item.itemRegistry.getObject(statArray.get(0).getAsString());
JsonObject stats = statArray.get(1).getAsJsonObject();
itemStats.put(item, ResistanceStats.deserialize(stats));
}
/// SETS ///
JsonArray setStatsArray = json.get("setStats").getAsJsonArray();
for(JsonElement element : setStatsArray) {
JsonArray statArray = element.getAsJsonArray();
Item helmet = statArray.get(0).isJsonNull() ? null : (Item) Item.itemRegistry.getObject(statArray.get(0).getAsString());
Item plate = statArray.get(1).isJsonNull() ? null : (Item) Item.itemRegistry.getObject(statArray.get(1).getAsString());
Item legs = statArray.get(2).isJsonNull() ? null : (Item) Item.itemRegistry.getObject(statArray.get(2).getAsString());
Item boots = statArray.get(3).isJsonNull() ? null : (Item) Item.itemRegistry.getObject(statArray.get(3).getAsString());
JsonObject stats = statArray.get(4).getAsJsonObject();
registerSet(helmet, plate, legs, boots, ResistanceStats.deserialize(stats));
}
/// ENTITIES ///
JsonArray entityStatsArray = json.get("entityStats").getAsJsonArray();
for(JsonElement element : entityStatsArray) {
JsonArray statArray = element.getAsJsonArray();
try {
Class clazz = Class.forName(statArray.get(0).getAsString());
JsonObject stats = statArray.get(1).getAsJsonObject();
entityStats.put(clazz, ResistanceStats.deserialize(stats));
} catch(ClassNotFoundException e) { }
}
}
public static enum DamageClass {
PHYSICAL,
FIRE,
@ -499,6 +559,33 @@ public class DamageResistanceHandler {
writer.value(otherResistance.threshold).value(otherResistance.resistance).endArray().setIndent(" ");
}
}
public static ResistanceStats deserialize(JsonObject json) {
ResistanceStats stats = new ResistanceStats();
if(json.has("exact")) {
JsonArray exact = json.get("exact").getAsJsonArray();
for(JsonElement element : exact) {
JsonArray array = element.getAsJsonArray();
stats.exactResistances.put(array.get(0).getAsString(), new Resistance(array.get(1).getAsFloat(), array.get(2).getAsFloat()));
}
}
if(json.has("category")) {
JsonArray category = json.get("category").getAsJsonArray();
for(JsonElement element : category) {
JsonArray array = element.getAsJsonArray();
stats.categoryResistances.put(array.get(0).getAsString(), new Resistance(array.get(1).getAsFloat(), array.get(2).getAsFloat()));
}
}
if(json.has("other")) {
JsonArray other = json.get("other").getAsJsonArray();
stats.otherResistance = new Resistance(other.get(0).getAsFloat(), other.get(1).getAsFloat());
}
return stats;
}
}
public static class Resistance {