From 89f606649e88d0b4fad9905faaf4d2097a53a880 Mon Sep 17 00:00:00 2001 From: BloodWorkXGaming Date: Thu, 2 Aug 2018 15:19:20 +0200 Subject: [PATCH 1/9] start on JSON stuff --- .gitignore | 1 + .../base/configs/ConfigHandler.java | 77 +++++++++++++++---- .../parsers/CustomGeneralLockTypeJson.java | 40 ++++++++++ .../json/parsers/CustomLockTypeJson.java | 25 ++++++ .../configs/json/types/BaseLockTypeJson.java | 16 ++++ .../json/types/LockTypeGeneralJson.java | 17 ++++ .../base/configs/json/types/LockTypeItem.java | 16 ++++ .../json/types/LockTypeJsonFactory.java | 46 +++++++++++ 8 files changed, 222 insertions(+), 16 deletions(-) create mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomGeneralLockTypeJson.java create mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java create mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/types/BaseLockTypeJson.java create mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeGeneralJson.java create mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeItem.java create mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeJsonFactory.java diff --git a/.gitignore b/.gitignore index 84cfec0c..db4a5cb2 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,4 @@ Icon Network Trash Folder Temporary Items .apdisk +/classes/ diff --git a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java index 9f979afd..8eeae54a 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java @@ -1,45 +1,52 @@ package codersafterdark.reskillable.base.configs; import codersafterdark.reskillable.base.LevelLockHandler; +import codersafterdark.reskillable.base.configs.json.parsers.CustomGeneralLockTypeJson; +import codersafterdark.reskillable.base.configs.json.parsers.CustomLockTypeJson; +import codersafterdark.reskillable.base.configs.json.types.BaseLockTypeJson; +import codersafterdark.reskillable.base.configs.json.types.LockTypeGeneralJson; +import codersafterdark.reskillable.base.configs.json.types.LockTypeJsonFactory; import codersafterdark.reskillable.lib.LibMisc; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.Configuration; import java.io.File; import java.util.HashMap; +import java.util.List; import java.util.Map; import static codersafterdark.reskillable.base.configs.ConfigUtilities.loadPropBool; public class ConfigHandler { - ///////////////// - // Directories // - ///////////////// - private static File configDir; - private static File jsonDir; - - ///////////// // Configs // ///////////// public static Configuration mainConfig; - public static Gson locks; + public static Gson gson = new GsonBuilder() + .setPrettyPrinting() + .registerTypeAdapter(BaseLockTypeJson.class, new CustomLockTypeJson()) + .registerTypeAdapter(LockTypeGeneralJson.class, new CustomGeneralLockTypeJson()) + .create(); + /// Main Config /// + public static boolean disableSheepWool = true; + public static boolean enforceFakePlayers = true; //////////////////// // Default Values // //////////////////// - - /// Main Config /// - public static boolean disableSheepWool = true; - public static boolean enforceFakePlayers = true; public static boolean enableTabs = true; public static boolean enableLevelUp = true; public static boolean hideRequirements = true; - public static Map cachedConfigs = new HashMap<>(); + ///////////////// + // Directories // + ///////////////// + private static File configDir; + private static File jsonDir; public static void init(File file) { generateFolder(file); @@ -81,9 +88,9 @@ public static void loadData() { } } - public static void loadJSONLocks(){ + public static void loadJSONLocks() { File mainLocks = new File(jsonDir, "defaultLocks.json"); - String json = locks.toJson(LevelLockHandler.DEFAULT_SKILL_LOCKS); + String json = gson.toJson(LevelLockHandler.DEFAULT_SKILL_LOCKS); ConfigUtilities.writeStringToFile(json, mainLocks); } @@ -99,6 +106,44 @@ public static void generateFolder(File file) { } configDir = dir; jsonDir = dir2; - locks = new GsonBuilder().setPrettyPrinting().create(); + } + + public static void main(String[] args) { + String s = "[{\n" + + "\t\t\"type\": \"modid\",\n" + + "\t\t\"modid\": \"modid\",\n" + + "\t\t\"ntb\": \"string\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"string\",\n" + + "\t\t\t\"string2\",\n" + + "\t\t\t\"string3\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"mod:stack:2\",\n" + + "\t\t\"ntb\": \"string\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"string\",\n" + + "\t\t\t\"string2\",\n" + + "\t\t\t\"string3\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"locktype\",\n" + + "\t\t\"target\": \"target\",\n" + + "\t\t\"additionalparam\": \"primitiveType\",\n" + + "\t\t\"additionalparams2\": \"primitiveType2\",\n" + + "\t\t\"additionalparams3\": \"primitiveType3\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"string\",\n" + + "\t\t\t\"string2\",\n" + + "\t\t\t\"string3\"\n" + + "\t\t]\n" + + "\t}\n" + + "]"; + + List obj = LockTypeJsonFactory.constructGSON().fromJson(s, new TypeToken>() {}.getType()); + System.out.println("obj = " + obj); } } diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomGeneralLockTypeJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomGeneralLockTypeJson.java new file mode 100644 index 00000000..452bd3c9 --- /dev/null +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomGeneralLockTypeJson.java @@ -0,0 +1,40 @@ +package codersafterdark.reskillable.base.configs.json.parsers; + +import codersafterdark.reskillable.base.configs.json.types.LockTypeGeneralJson; +import com.google.gson.*; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Map; + +public class CustomGeneralLockTypeJson implements JsonDeserializer/*, JsonSerializer*/ { + @Override + public LockTypeGeneralJson deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + LockTypeGeneralJson lock = new LockTypeGeneralJson(); + lock.requirements = new ArrayList<>(); + + for (Map.Entry stringJsonElementEntry : json.getAsJsonObject().entrySet()) { + switch (stringJsonElementEntry.getKey()) { + case "type": + lock.type = stringJsonElementEntry.getValue().getAsString(); + break; + case "requirements": + stringJsonElementEntry.getValue().getAsJsonArray().forEach(it -> lock.requirements.add(it.getAsString())); + break; + default: + lock.params.put(stringJsonElementEntry.getKey(), + context.deserialize(stringJsonElementEntry.getValue(), Object.class)); + } + } + + return lock; + } + + /* + Not needed for now + @Override + public JsonElement serialize(BaseLockTypeJson src, Type typeOfSrc, JsonSerializationContext context) { + return null; + } + */ +} diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java new file mode 100644 index 00000000..8d0d32ec --- /dev/null +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java @@ -0,0 +1,25 @@ +package codersafterdark.reskillable.base.configs.json.parsers; + +import codersafterdark.reskillable.base.configs.json.types.BaseLockTypeJson; +import codersafterdark.reskillable.base.configs.json.types.LockTypeJsonFactory; +import com.google.gson.*; + +import java.lang.reflect.Type; + +public class CustomLockTypeJson implements JsonDeserializer/*, JsonSerializer*/ { + @Override + public BaseLockTypeJson deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + String s = json.getAsJsonObject().get("type").getAsString(); + + return context.deserialize(json, LockTypeJsonFactory.getLockType(s)); + } + + /* + Not needed for now + @Override + public JsonElement serialize(BaseLockTypeJson src, Type typeOfSrc, JsonSerializationContext context) { + return null; + } + */ +} + diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/types/BaseLockTypeJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/types/BaseLockTypeJson.java new file mode 100644 index 00000000..fb2fd106 --- /dev/null +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/types/BaseLockTypeJson.java @@ -0,0 +1,16 @@ +package codersafterdark.reskillable.base.configs.json.types; + +import java.util.List; + +public abstract class BaseLockTypeJson { + public List requirements; + public String type; + + @Override + public String toString() { + return "BaseLockTypeJson{" + + "requirements=" + requirements + + ", type='" + type + '\'' + + '}'; + } +} diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeGeneralJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeGeneralJson.java new file mode 100644 index 00000000..f018ac12 --- /dev/null +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeGeneralJson.java @@ -0,0 +1,17 @@ +package codersafterdark.reskillable.base.configs.json.types; + +import java.util.HashMap; +import java.util.Map; + +public class LockTypeGeneralJson extends BaseLockTypeJson { + public Map params = new HashMap<>(); + + @Override + public String toString() { + return "LockTypeGeneralJson{" + + "params=" + params + + ", requirements=" + requirements + + ", type='" + type + '\'' + + '}'; + } +} diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeItem.java b/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeItem.java new file mode 100644 index 00000000..2007387f --- /dev/null +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeItem.java @@ -0,0 +1,16 @@ +package codersafterdark.reskillable.base.configs.json.types; + +public class LockTypeItem extends BaseLockTypeJson { + String nbt; + String itemstack; + + @Override + public String toString() { + return "LockTypeItem{" + + "nbt='" + nbt + '\'' + + ", itemstack='" + itemstack + '\'' + + ", requirements=" + requirements + + ", type='" + type + '\'' + + '}'; + } +} diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeJsonFactory.java b/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeJsonFactory.java new file mode 100644 index 00000000..12c52df7 --- /dev/null +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeJsonFactory.java @@ -0,0 +1,46 @@ +package codersafterdark.reskillable.base.configs.json.types; + +import codersafterdark.reskillable.base.configs.json.parsers.CustomGeneralLockTypeJson; +import codersafterdark.reskillable.base.configs.json.parsers.CustomLockTypeJson; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializer; + +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.Map; + +public class LockTypeJsonFactory { + private static Map types = new HashMap<>(); + private static Map deserializerMap = new HashMap<>(); + + static { + registerType("itemstack", LockTypeItem.class); + } + + public static Type getLockType(String string) { + return types.getOrDefault(string, LockTypeGeneralJson.class); + } + + public static void registerType(String name, Type type) { + registerType(name, type, null); + } + + public static void registerType(String name, Type type, JsonDeserializer deserializer) { + types.put(name, type); + if (deserializer != null) { + deserializerMap.put(type, deserializer); + } + } + + public static Gson constructGSON() { + GsonBuilder builder = new GsonBuilder() + .setPrettyPrinting() + .registerTypeAdapter(BaseLockTypeJson.class, new CustomLockTypeJson()) + .registerTypeAdapter(LockTypeGeneralJson.class, new CustomGeneralLockTypeJson()); + + deserializerMap.forEach(builder::registerTypeAdapter); + + return builder.create(); + } +} From 5bbab8e4ec73f0abeb0656cbaea1643721720a02 Mon Sep 17 00:00:00 2001 From: BloodWorkXGaming Date: Thu, 2 Aug 2018 15:36:36 +0200 Subject: [PATCH 2/9] commit before breaking everything --- .../reskillable/base/configs/ConfigHandler.java | 7 ++++++- .../configs/json/{types => }/LockTypeJsonFactory.java | 9 ++++++++- .../base/configs/json/parsers/CustomLockTypeJson.java | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) rename src/main/java/codersafterdark/reskillable/base/configs/json/{types => }/LockTypeJsonFactory.java (77%) diff --git a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java index 8eeae54a..b6e83b8b 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java @@ -1,11 +1,12 @@ package codersafterdark.reskillable.base.configs; +import codersafterdark.reskillable.api.data.LockKey; import codersafterdark.reskillable.base.LevelLockHandler; import codersafterdark.reskillable.base.configs.json.parsers.CustomGeneralLockTypeJson; import codersafterdark.reskillable.base.configs.json.parsers.CustomLockTypeJson; import codersafterdark.reskillable.base.configs.json.types.BaseLockTypeJson; import codersafterdark.reskillable.base.configs.json.types.LockTypeGeneralJson; -import codersafterdark.reskillable.base.configs.json.types.LockTypeJsonFactory; +import codersafterdark.reskillable.base.configs.json.LockTypeJsonFactory; import codersafterdark.reskillable.lib.LibMisc; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -144,6 +145,10 @@ public static void main(String[] args) { "]"; List obj = LockTypeJsonFactory.constructGSON().fromJson(s, new TypeToken>() {}.getType()); + + for (BaseLockTypeJson baseLockTypeJson : obj) { + LevelLockHandler.addLockByKey(LockKey); + } System.out.println("obj = " + obj); } } diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeJsonFactory.java b/src/main/java/codersafterdark/reskillable/base/configs/json/LockTypeJsonFactory.java similarity index 77% rename from src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeJsonFactory.java rename to src/main/java/codersafterdark/reskillable/base/configs/json/LockTypeJsonFactory.java index 12c52df7..4c2d9ee8 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeJsonFactory.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/LockTypeJsonFactory.java @@ -1,7 +1,10 @@ -package codersafterdark.reskillable.base.configs.json.types; +package codersafterdark.reskillable.base.configs.json; import codersafterdark.reskillable.base.configs.json.parsers.CustomGeneralLockTypeJson; import codersafterdark.reskillable.base.configs.json.parsers.CustomLockTypeJson; +import codersafterdark.reskillable.base.configs.json.types.BaseLockTypeJson; +import codersafterdark.reskillable.base.configs.json.types.LockTypeGeneralJson; +import codersafterdark.reskillable.base.configs.json.types.LockTypeItem; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializer; @@ -33,6 +36,10 @@ public static void registerType(String name, Type type, JsonDeserializer deseria } } + public static void registerDeserializer(Type type, JsonDeserializer deserializer) { + deserializerMap.put(type, deserializer); + } + public static Gson constructGSON() { GsonBuilder builder = new GsonBuilder() .setPrettyPrinting() diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java index 8d0d32ec..f411df95 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java @@ -1,7 +1,7 @@ package codersafterdark.reskillable.base.configs.json.parsers; import codersafterdark.reskillable.base.configs.json.types.BaseLockTypeJson; -import codersafterdark.reskillable.base.configs.json.types.LockTypeJsonFactory; +import codersafterdark.reskillable.base.configs.json.LockTypeJsonFactory; import com.google.gson.*; import java.lang.reflect.Type; From cfc5090365bdce73bc8225de744b2daec276abd9 Mon Sep 17 00:00:00 2001 From: BloodWorkXGaming Date: Thu, 2 Aug 2018 19:40:53 +0200 Subject: [PATCH 3/9] completely changed the json stuff --- .../reskillable/base/LevelLockHandler.java | 24 ++ .../base/configs/ConfigHandler.java | 394 +++++++++++++++++- .../base/configs/json/CustomItemJson.java | 16 + .../base/configs/json/CustomLockJson.java | 43 ++ .../base/configs/json/LockJson.java | 30 ++ .../configs/json/LockTypeJsonFactory.java | 29 +- .../parsers/CustomGeneralLockTypeJson.java | 40 -- .../json/parsers/CustomLockTypeJson.java | 25 -- .../configs/json/types/BaseLockTypeJson.java | 16 - .../json/types/LockTypeGeneralJson.java | 17 - .../base/configs/json/types/LockTypeItem.java | 16 - 11 files changed, 498 insertions(+), 152 deletions(-) create mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/CustomItemJson.java create mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/CustomLockJson.java create mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/LockJson.java delete mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomGeneralLockTypeJson.java delete mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java delete mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/types/BaseLockTypeJson.java delete mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeGeneralJson.java delete mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeItem.java diff --git a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java index 44955bdd..a4c05ef2 100644 --- a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java @@ -42,11 +42,18 @@ public class LevelLockHandler { private static Map, List>> lockTypesMap = new HashMap<>(); private static Map> fuzzyLockInfo = new HashMap<>(); private static String[] configLocks; + private static Map> lockNameMap = new HashMap<>(); public static void loadFromConfig(String[] configValues) { configLocks = configValues; } + static { + registerLockKeyName("itemstack", ItemInfo.class); + registerLockKeyName("mod", ModLockKey.class); + registerLockKeyName("nbt", GenericNBTLockKey.class); + } + public static void setupLocks() { registerDefaultLockKeys(); if (configLocks != null) { @@ -109,6 +116,23 @@ public static void registerLockKey(Class lockTypeClass, Class lockClass) { + lockNameMap.put(name, lockClass); + } + + public static Class getLockKeyClass(String name) { + Class key = lockNameMap.get(name); + if (key == null) { + try { + key = (Class) Class.forName(name); + } catch (ClassNotFoundException | ClassCastException e) { + System.out.println("Failed to load LockKeyClass: " + e.getMessage()); + } + } + + return key; + } + /** * Adds locks to the given key. * diff --git a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java index b6e83b8b..8230ceb4 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java @@ -1,11 +1,7 @@ package codersafterdark.reskillable.base.configs; -import codersafterdark.reskillable.api.data.LockKey; import codersafterdark.reskillable.base.LevelLockHandler; -import codersafterdark.reskillable.base.configs.json.parsers.CustomGeneralLockTypeJson; -import codersafterdark.reskillable.base.configs.json.parsers.CustomLockTypeJson; -import codersafterdark.reskillable.base.configs.json.types.BaseLockTypeJson; -import codersafterdark.reskillable.base.configs.json.types.LockTypeGeneralJson; +import codersafterdark.reskillable.base.configs.json.LockJson; import codersafterdark.reskillable.base.configs.json.LockTypeJsonFactory; import codersafterdark.reskillable.lib.LibMisc; import com.google.gson.Gson; @@ -29,8 +25,6 @@ public class ConfigHandler { public static Configuration mainConfig; public static Gson gson = new GsonBuilder() .setPrettyPrinting() - .registerTypeAdapter(BaseLockTypeJson.class, new CustomLockTypeJson()) - .registerTypeAdapter(LockTypeGeneralJson.class, new CustomGeneralLockTypeJson()) .create(); /// Main Config /// public static boolean disableSheepWool = true; @@ -90,9 +84,11 @@ public static void loadData() { } public static void loadJSONLocks() { - File mainLocks = new File(jsonDir, "defaultLocks.json"); + /*File mainLocks = new File(jsonDir, "defaultLocks.json"); String json = gson.toJson(LevelLockHandler.DEFAULT_SKILL_LOCKS); - ConfigUtilities.writeStringToFile(json, mainLocks); + ConfigUtilities.writeStringToFile(json, mainLocks);*/ + + main(null); } @@ -144,11 +140,383 @@ public static void main(String[] args) { "\t}\n" + "]"; - List obj = LockTypeJsonFactory.constructGSON().fromJson(s, new TypeToken>() {}.getType()); + String s2 = "[{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:iron_shovel\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:gathering|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:iron_axe\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:gathering|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:iron_sword\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:attack|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:iron_pickaxe\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:mining|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:iron_hoe\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:farming|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:iron_helmet\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:iron_chestplate\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:iron_leggings\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:iron_boots\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:golden_shovel\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:gathering|5\",\n" + + "\t\t\t\"reskillable:magic|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:golden_axe\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:gathering|5\",\n" + + "\t\t\t\"reskillable:magic|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:golden_sword\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:attack|5\",\n" + + "\t\t\t\"reskillable:magic|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:golden_pickaxe\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:mining|5\",\n" + + "\t\t\t\"reskillable:magic|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:golden_hoe\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:farming|5\",\n" + + "\t\t\t\"reskillable:magic|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:golden_helmet\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|5\",\n" + + "\t\t\t\"reskillable:magic|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:golden_chestplate\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|5\",\n" + + "\t\t\t\"reskillable:magic|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:golden_leggings\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|5\",\n" + + "\t\t\t\"reskillable:magic|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:golden_boots\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|5\",\n" + + "\t\t\t\"reskillable:magic|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:diamond_shovel\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:gathering|16\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:diamond_axe\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:gathering|16\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:diamond_sword\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:attack|16\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:diamond_pickaxe\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:mining|16\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:diamond_hoe\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:farming|16\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:diamond_helmet\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|16\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:diamond_chestplate\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|16\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:diamond_leggings\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|16\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:diamond_boots\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|16\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:shears\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:farming|5\",\n" + + "\t\t\t\"reskillable:gathering|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:fishing_rod\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:gathering|8\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:shield\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|8\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:bow\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:attack|8\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:ender_pearl\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:magic|8\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:ender_eye\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:magic|16\",\n" + + "\t\t\t\"reskillable:building|8\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:elytra\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|16\",\n" + + "\t\t\t\"reskillable:agility|24\",\n" + + "\t\t\t\"reskillable:magic|16\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:lead\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:farming|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:end_crystal\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:building|24\",\n" + + "\t\t\t\"reskillable:magic|32\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:iron_horse_armor\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|5\",\n" + + "\t\t\t\"reskillable:agility|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:golden_horse_armor\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|5\",\n" + + "\t\t\t\"reskillable:magic|5\",\n" + + "\t\t\t\"reskillable:agility|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:diamond_horse_armor\",\n" + + "\t\t\"meta\": \"*\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:defense|16\",\n" + + "\t\t\t\"reskillable:agility|16\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:fireworks\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:agility|24\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:dye\",\n" + + "\t\t\"meta\": \"15\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:farming|12\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:saddle\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:agility|12\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:redstone\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:building|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:redstone_torch\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:building|5\"\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\t\"type\": \"itemstack\",\n" + + "\t\t\"stack\": \"minecraft:skull\",\n" + + "\t\t\"meta\": \"1\",\n" + + "\t\t\"requirements\": [\n" + + "\t\t\t\"reskillable:building|20\",\n" + + "\t\t\t\"reskillable:attack|20\",\n" + + "\t\t\t\"reskillable:defense|20\"\n" + + "\t\t]\n" + + "\t}\n" + + "]"; + + List obj = LockTypeJsonFactory.constructGSON().fromJson(s2, new TypeToken>() { + }.getType()); - for (BaseLockTypeJson baseLockTypeJson : obj) { - LevelLockHandler.addLockByKey(LockKey); - } System.out.println("obj = " + obj); } } diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/CustomItemJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/CustomItemJson.java new file mode 100644 index 00000000..59164fba --- /dev/null +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/CustomItemJson.java @@ -0,0 +1,16 @@ +package codersafterdark.reskillable.base.configs.json; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import net.minecraft.item.Item; + +import java.lang.reflect.Type; + +public class CustomItemJson implements JsonDeserializer { + @Override + public Item deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + return Item.getByNameOrId(json.getAsString()); + } +} diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/CustomLockJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/CustomLockJson.java new file mode 100644 index 00000000..b1de8676 --- /dev/null +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/CustomLockJson.java @@ -0,0 +1,43 @@ +package codersafterdark.reskillable.base.configs.json; + +import codersafterdark.reskillable.api.data.LockKey; +import codersafterdark.reskillable.api.data.RequirementHolder; +import codersafterdark.reskillable.base.LevelLockHandler; +import com.google.gson.*; + +import java.lang.reflect.Type; + +public class CustomLockJson implements JsonDeserializer/*, JsonSerializer*/ { + @Override + public LockJson deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + JsonObject obj = json.getAsJsonObject(); + String type = obj.get("type").getAsString(); + Class clazz = LevelLockHandler.getLockKeyClass(type); + + + // Construct the holder + JsonArray array = obj.getAsJsonArray("requirements"); + String[] stringArray = new String[array.size()]; + for (int i = 0; i < array.size(); i++) { + stringArray[i] = array.get(i).getAsString(); + } + + RequirementHolder holder = RequirementHolder.fromStringList(stringArray); + + // Construct the LockKey + obj.remove("type"); + obj.remove("requirements"); + + LockKey key = context.deserialize(obj, clazz); + + return new LockJson(holder, key); + } + + /* + Not needed for now + @Override + public JsonElement serialize(BaseLockTypeJson src, Type typeOfSrc, JsonSerializationContext context) { + return null; + } + */ +} diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/LockJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/LockJson.java new file mode 100644 index 00000000..1a7d9f82 --- /dev/null +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/LockJson.java @@ -0,0 +1,30 @@ +package codersafterdark.reskillable.base.configs.json; + +import codersafterdark.reskillable.api.data.LockKey; +import codersafterdark.reskillable.api.data.RequirementHolder; + +public class LockJson { + private RequirementHolder requirements; + private LockKey modLockKey; + + public LockJson(RequirementHolder requirements, LockKey modLockKey) { + this.requirements = requirements; + this.modLockKey = modLockKey; + } + + public RequirementHolder getRequirements() { + return requirements; + } + + public LockKey getModLockKey() { + return modLockKey; + } + + @Override + public String toString() { + return "LockJson{" + + "requirements=" + requirements + + ", modLockKey=" + modLockKey + + '}'; + } +} diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/LockTypeJsonFactory.java b/src/main/java/codersafterdark/reskillable/base/configs/json/LockTypeJsonFactory.java index 4c2d9ee8..5fa49f32 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/LockTypeJsonFactory.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/LockTypeJsonFactory.java @@ -1,39 +1,20 @@ package codersafterdark.reskillable.base.configs.json; -import codersafterdark.reskillable.base.configs.json.parsers.CustomGeneralLockTypeJson; -import codersafterdark.reskillable.base.configs.json.parsers.CustomLockTypeJson; -import codersafterdark.reskillable.base.configs.json.types.BaseLockTypeJson; -import codersafterdark.reskillable.base.configs.json.types.LockTypeGeneralJson; -import codersafterdark.reskillable.base.configs.json.types.LockTypeItem; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializer; +import net.minecraft.item.Item; import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; public class LockTypeJsonFactory { - private static Map types = new HashMap<>(); private static Map deserializerMap = new HashMap<>(); static { - registerType("itemstack", LockTypeItem.class); - } - - public static Type getLockType(String string) { - return types.getOrDefault(string, LockTypeGeneralJson.class); - } - - public static void registerType(String name, Type type) { - registerType(name, type, null); - } - - public static void registerType(String name, Type type, JsonDeserializer deserializer) { - types.put(name, type); - if (deserializer != null) { - deserializerMap.put(type, deserializer); - } + registerDeserializer(LockJson.class, new CustomLockJson()); + registerDeserializer(Item.class, new CustomItemJson()); } public static void registerDeserializer(Type type, JsonDeserializer deserializer) { @@ -42,9 +23,7 @@ public static void registerDeserializer(Type type, JsonDeserializer deserializer public static Gson constructGSON() { GsonBuilder builder = new GsonBuilder() - .setPrettyPrinting() - .registerTypeAdapter(BaseLockTypeJson.class, new CustomLockTypeJson()) - .registerTypeAdapter(LockTypeGeneralJson.class, new CustomGeneralLockTypeJson()); + .setPrettyPrinting(); deserializerMap.forEach(builder::registerTypeAdapter); diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomGeneralLockTypeJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomGeneralLockTypeJson.java deleted file mode 100644 index 452bd3c9..00000000 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomGeneralLockTypeJson.java +++ /dev/null @@ -1,40 +0,0 @@ -package codersafterdark.reskillable.base.configs.json.parsers; - -import codersafterdark.reskillable.base.configs.json.types.LockTypeGeneralJson; -import com.google.gson.*; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Map; - -public class CustomGeneralLockTypeJson implements JsonDeserializer/*, JsonSerializer*/ { - @Override - public LockTypeGeneralJson deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - LockTypeGeneralJson lock = new LockTypeGeneralJson(); - lock.requirements = new ArrayList<>(); - - for (Map.Entry stringJsonElementEntry : json.getAsJsonObject().entrySet()) { - switch (stringJsonElementEntry.getKey()) { - case "type": - lock.type = stringJsonElementEntry.getValue().getAsString(); - break; - case "requirements": - stringJsonElementEntry.getValue().getAsJsonArray().forEach(it -> lock.requirements.add(it.getAsString())); - break; - default: - lock.params.put(stringJsonElementEntry.getKey(), - context.deserialize(stringJsonElementEntry.getValue(), Object.class)); - } - } - - return lock; - } - - /* - Not needed for now - @Override - public JsonElement serialize(BaseLockTypeJson src, Type typeOfSrc, JsonSerializationContext context) { - return null; - } - */ -} diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java deleted file mode 100644 index f411df95..00000000 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockTypeJson.java +++ /dev/null @@ -1,25 +0,0 @@ -package codersafterdark.reskillable.base.configs.json.parsers; - -import codersafterdark.reskillable.base.configs.json.types.BaseLockTypeJson; -import codersafterdark.reskillable.base.configs.json.LockTypeJsonFactory; -import com.google.gson.*; - -import java.lang.reflect.Type; - -public class CustomLockTypeJson implements JsonDeserializer/*, JsonSerializer*/ { - @Override - public BaseLockTypeJson deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - String s = json.getAsJsonObject().get("type").getAsString(); - - return context.deserialize(json, LockTypeJsonFactory.getLockType(s)); - } - - /* - Not needed for now - @Override - public JsonElement serialize(BaseLockTypeJson src, Type typeOfSrc, JsonSerializationContext context) { - return null; - } - */ -} - diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/types/BaseLockTypeJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/types/BaseLockTypeJson.java deleted file mode 100644 index fb2fd106..00000000 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/types/BaseLockTypeJson.java +++ /dev/null @@ -1,16 +0,0 @@ -package codersafterdark.reskillable.base.configs.json.types; - -import java.util.List; - -public abstract class BaseLockTypeJson { - public List requirements; - public String type; - - @Override - public String toString() { - return "BaseLockTypeJson{" + - "requirements=" + requirements + - ", type='" + type + '\'' + - '}'; - } -} diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeGeneralJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeGeneralJson.java deleted file mode 100644 index f018ac12..00000000 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeGeneralJson.java +++ /dev/null @@ -1,17 +0,0 @@ -package codersafterdark.reskillable.base.configs.json.types; - -import java.util.HashMap; -import java.util.Map; - -public class LockTypeGeneralJson extends BaseLockTypeJson { - public Map params = new HashMap<>(); - - @Override - public String toString() { - return "LockTypeGeneralJson{" + - "params=" + params + - ", requirements=" + requirements + - ", type='" + type + '\'' + - '}'; - } -} diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeItem.java b/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeItem.java deleted file mode 100644 index 2007387f..00000000 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/types/LockTypeItem.java +++ /dev/null @@ -1,16 +0,0 @@ -package codersafterdark.reskillable.base.configs.json.types; - -public class LockTypeItem extends BaseLockTypeJson { - String nbt; - String itemstack; - - @Override - public String toString() { - return "LockTypeItem{" + - "nbt='" + nbt + '\'' + - ", itemstack='" + itemstack + '\'' + - ", requirements=" + requirements + - ", type='" + type + '\'' + - '}'; - } -} From 0cdef44a5f5cbe25e2532679ba9a2ca3480e322d Mon Sep 17 00:00:00 2001 From: BloodWorkXGaming Date: Thu, 2 Aug 2018 20:29:02 +0200 Subject: [PATCH 4/9] json working for basic stuff --- .../reskillable/api/data/ItemInfo.java | 9 +++++++ .../reskillable/base/LevelLockHandler.java | 7 +++-- .../base/configs/ConfigHandler.java | 25 ++++++++++++++---- .../configs/json/LockTypeJsonFactory.java | 8 ++++++ .../json/parsers/CustomItemInfoJson.java | 26 +++++++++++++++++++ .../json/{ => parsers}/CustomItemJson.java | 2 +- .../json/{ => parsers}/CustomLockJson.java | 3 ++- .../configs/json/parsers/CustomNBTJson.java | 24 +++++++++++++++++ 8 files changed, 95 insertions(+), 9 deletions(-) create mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemInfoJson.java rename src/main/java/codersafterdark/reskillable/base/configs/json/{ => parsers}/CustomItemJson.java (88%) rename src/main/java/codersafterdark/reskillable/base/configs/json/{ => parsers}/CustomLockJson.java (91%) create mode 100644 src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomNBTJson.java diff --git a/src/main/java/codersafterdark/reskillable/api/data/ItemInfo.java b/src/main/java/codersafterdark/reskillable/api/data/ItemInfo.java index 4902b720..c852592f 100644 --- a/src/main/java/codersafterdark/reskillable/api/data/ItemInfo.java +++ b/src/main/java/codersafterdark/reskillable/api/data/ItemInfo.java @@ -60,4 +60,13 @@ public Item getItem() { public int getMetadata() { return metadata; } + + @Override + public String toString() { + return "ItemInfo{" + + "metadata=" + metadata + + ", item=" + item + + ", tag=" + tag + + '}'; + } } diff --git a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java index a4c05ef2..a1c951da 100644 --- a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java @@ -56,7 +56,7 @@ public static void loadFromConfig(String[] configValues) { public static void setupLocks() { registerDefaultLockKeys(); - if (configLocks != null) { + /*if (configLocks != null) { for (String s : configLocks) { String[] tokens = s.split("="); if (tokens.length == 2) { @@ -86,7 +86,10 @@ public static void setupLocks() { } } } - } + }*/ + + ConfigHandler.loadJSONLocks(); + } private static void registerDefaultLockKeys() { diff --git a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java index 8230ceb4..646f97cf 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java @@ -11,6 +11,8 @@ import net.minecraftforge.common.config.Configuration; import java.io.File; +import java.io.FileReader; +import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -48,7 +50,7 @@ public static void init(File file) { mainConfig = new Configuration(new File(configDir.getPath(), "reskillable.cfg")); mainConfig.load(); loadData(); - loadJSONLocks(); + // loadJSONLocks(); cachedConfigs.put(LibMisc.MOD_ID, mainConfig); MinecraftForge.EVENT_BUS.register(ConfigListener.class); } @@ -84,11 +86,24 @@ public static void loadData() { } public static void loadJSONLocks() { - /*File mainLocks = new File(jsonDir, "defaultLocks.json"); - String json = gson.toJson(LevelLockHandler.DEFAULT_SKILL_LOCKS); - ConfigUtilities.writeStringToFile(json, mainLocks);*/ + System.out.println("Starting to load json"); - main(null); + File mainLocks = new File(jsonDir, "defaultLocks.json"); + // String json = gson.toJson(LevelLockHandler.DEFAULT_SKILL_LOCKS); + // ConfigUtilities.writeStringToFile(json, mainLocks); + try (FileReader reader = new FileReader(mainLocks)) { + List obj = LockTypeJsonFactory.constructGSON().fromJson(reader, new TypeToken>() { + }.getType()); + + System.out.println("obj = " + obj); + + for (LockJson lockJson : obj) { + LevelLockHandler.addLockByKey(lockJson.getModLockKey(), lockJson.getRequirements()); + } + + } catch (IOException e) { + e.printStackTrace(); + } } diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/LockTypeJsonFactory.java b/src/main/java/codersafterdark/reskillable/base/configs/json/LockTypeJsonFactory.java index 5fa49f32..15ec5df7 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/LockTypeJsonFactory.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/LockTypeJsonFactory.java @@ -1,9 +1,15 @@ package codersafterdark.reskillable.base.configs.json; +import codersafterdark.reskillable.api.data.ItemInfo; +import codersafterdark.reskillable.base.configs.json.parsers.CustomItemInfoJson; +import codersafterdark.reskillable.base.configs.json.parsers.CustomItemJson; +import codersafterdark.reskillable.base.configs.json.parsers.CustomLockJson; +import codersafterdark.reskillable.base.configs.json.parsers.CustomNBTJson; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializer; import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; import java.lang.reflect.Type; import java.util.HashMap; @@ -15,6 +21,8 @@ public class LockTypeJsonFactory { static { registerDeserializer(LockJson.class, new CustomLockJson()); registerDeserializer(Item.class, new CustomItemJson()); + registerDeserializer(ItemInfo.class, new CustomItemInfoJson()); + registerDeserializer(NBTTagCompound.class, new CustomNBTJson()); } public static void registerDeserializer(Type type, JsonDeserializer deserializer) { diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemInfoJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemInfoJson.java new file mode 100644 index 00000000..22d2ecfc --- /dev/null +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemInfoJson.java @@ -0,0 +1,26 @@ +package codersafterdark.reskillable.base.configs.json.parsers; + +import codersafterdark.reskillable.api.data.ItemInfo; +import com.google.gson.*; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.oredict.OreDictionary; + +import java.lang.reflect.Type; + +public class CustomItemInfoJson implements JsonDeserializer { + @Override + public ItemInfo deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + JsonObject obj = json.getAsJsonObject(); + + Item item = context.deserialize(obj.get("item"), Item.class); + int meta = !obj.has("metadata") ? 0 : obj.get("metadata").getAsString().equals("*") ? OreDictionary.WILDCARD_VALUE : obj.get("metadata").getAsInt(); + JsonElement nbtJson = obj.get("nbt"); + NBTTagCompound tagCompound = null; + if (nbtJson != null) { + tagCompound = context.deserialize(nbtJson, NBTTagCompound.class); + } + + return new ItemInfo(item, meta, tagCompound); + } +} diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/CustomItemJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemJson.java similarity index 88% rename from src/main/java/codersafterdark/reskillable/base/configs/json/CustomItemJson.java rename to src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemJson.java index 59164fba..e6baa0a0 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/CustomItemJson.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemJson.java @@ -1,4 +1,4 @@ -package codersafterdark.reskillable.base.configs.json; +package codersafterdark.reskillable.base.configs.json.parsers; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/CustomLockJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockJson.java similarity index 91% rename from src/main/java/codersafterdark/reskillable/base/configs/json/CustomLockJson.java rename to src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockJson.java index b1de8676..fe338d25 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/CustomLockJson.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockJson.java @@ -1,8 +1,9 @@ -package codersafterdark.reskillable.base.configs.json; +package codersafterdark.reskillable.base.configs.json.parsers; import codersafterdark.reskillable.api.data.LockKey; import codersafterdark.reskillable.api.data.RequirementHolder; import codersafterdark.reskillable.base.LevelLockHandler; +import codersafterdark.reskillable.base.configs.json.LockJson; import com.google.gson.*; import java.lang.reflect.Type; diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomNBTJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomNBTJson.java new file mode 100644 index 00000000..7bea87bf --- /dev/null +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomNBTJson.java @@ -0,0 +1,24 @@ +package codersafterdark.reskillable.base.configs.json.parsers; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; + +import java.lang.reflect.Type; + +public class CustomNBTJson implements JsonDeserializer { + @Override + public NBTTagCompound deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + try { + return JsonToNBT.getTagFromJson(json.toString()); + } catch (NBTException e) { + e.printStackTrace(); + } + + return null; + } +} From 97f621af2e627b19b2c45c8f9bfe9a3e14dbeb21 Mon Sep 17 00:00:00 2001 From: BloodWorkXGaming Date: Sat, 11 Aug 2018 14:56:40 +0200 Subject: [PATCH 5/9] Added defaults and better loading --- .../reskillable/base/LevelLockHandler.java | 7 +- .../base/configs/ConfigHandler.java | 52 ++- src/main/resources/defaultLocks.json | 374 ++++++++++++++++++ 3 files changed, 417 insertions(+), 16 deletions(-) create mode 100644 src/main/resources/defaultLocks.json diff --git a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java index a1c951da..87742504 100644 --- a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java @@ -32,6 +32,7 @@ import net.minecraftforge.oredict.OreDictionary; import org.apache.logging.log4j.Level; +import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.*; @@ -88,7 +89,11 @@ public static void setupLocks() { } }*/ - ConfigHandler.loadJSONLocks(); + try { + ConfigHandler.loadJSONLocks(); + } catch (IOException e) { + e.printStackTrace(); + } } diff --git a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java index 646f97cf..bca11cf6 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java @@ -1,11 +1,13 @@ package codersafterdark.reskillable.base.configs; +import codersafterdark.reskillable.Reskillable; import codersafterdark.reskillable.base.LevelLockHandler; import codersafterdark.reskillable.base.configs.json.LockJson; import codersafterdark.reskillable.base.configs.json.LockTypeJsonFactory; import codersafterdark.reskillable.lib.LibMisc; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.JsonParseException; import com.google.gson.reflect.TypeToken; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.Configuration; @@ -13,6 +15,8 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -85,25 +89,43 @@ public static void loadData() { } } - public static void loadJSONLocks() { - System.out.println("Starting to load json"); + public static void loadJSONLocks() throws IOException { + Reskillable.logger.info("Starting to load json"); + if (!jsonDir.exists() && jsonDir.mkdir()) { + Reskillable.logger.warn("Couldn't create json lock file directory"); + } - File mainLocks = new File(jsonDir, "defaultLocks.json"); - // String json = gson.toJson(LevelLockHandler.DEFAULT_SKILL_LOCKS); - // ConfigUtilities.writeStringToFile(json, mainLocks); - try (FileReader reader = new FileReader(mainLocks)) { - List obj = LockTypeJsonFactory.constructGSON().fromJson(reader, new TypeToken>() { - }.getType()); + File[] list = jsonDir.listFiles(); + if (list != null && list.length == 0) { + Files.copy(ConfigHandler.class.getResourceAsStream("/defaultLocks.json"), Paths.get(jsonDir.getAbsolutePath(), "defaultLocks.json")); + } - System.out.println("obj = " + obj); + Files.walk(jsonDir.toPath()) + .filter(Files::isRegularFile) + .filter(path -> path.toString().endsWith(".json")) + .sorted() + .forEachOrdered(path -> { + Reskillable.logger.info("Starting to load from file " + path); - for (LockJson lockJson : obj) { - LevelLockHandler.addLockByKey(lockJson.getModLockKey(), lockJson.getRequirements()); - } + try (FileReader reader = new FileReader(path.toFile())) { + List obj = LockTypeJsonFactory.constructGSON().fromJson(reader, new TypeToken>() { + }.getType()); + Reskillable.logger.info("Locks loaded " + obj.size() + ": " + obj); + + for (LockJson lockJson : obj) { + LevelLockHandler.addLockByKey(lockJson.getModLockKey(), lockJson.getRequirements()); + } + + } catch (IOException | JsonParseException e) { + Reskillable.logger.error("Couldn't load json from " + path, e); + } + }); + + + // File mainLocks = new File(jsonDir, "defaultLocks.json"); + // String json = gson.toJson(LevelLockHandler.DEFAULT_SKILL_LOCKS); + // ConfigUtilities.writeStringToFile(json, mainLocks); - } catch (IOException e) { - e.printStackTrace(); - } } diff --git a/src/main/resources/defaultLocks.json b/src/main/resources/defaultLocks.json new file mode 100644 index 00000000..e97f3934 --- /dev/null +++ b/src/main/resources/defaultLocks.json @@ -0,0 +1,374 @@ +[ + { + "type": "itemstack", + "item": "minecraft:iron_shovel", + "metadata": "*", + "requirements": [ + "reskillable:gathering|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:iron_axe", + "metadata": "*", + "requirements": [ + "reskillable:gathering|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:iron_sword", + "metadata": "*", + "requirements": [ + "reskillable:attack|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:iron_pickaxe", + "metadata": "*", + "requirements": [ + "reskillable:mining|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:iron_hoe", + "metadata": "*", + "requirements": [ + "reskillable:farming|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:iron_helmet", + "metadata": "*", + "requirements": [ + "reskillable:defense|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:iron_chestplate", + "metadata": "*", + "requirements": [ + "reskillable:defense|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:iron_leggings", + "metadata": "*", + "requirements": [ + "reskillable:defense|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:iron_boots", + "metadata": "*", + "requirements": [ + "reskillable:defense|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:golden_shovel", + "metadata": "*", + "requirements": [ + "reskillable:gathering|5", + "reskillable:magic|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:golden_axe", + "metadata": "*", + "requirements": [ + "reskillable:gathering|5", + "reskillable:magic|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:golden_sword", + "metadata": "*", + "requirements": [ + "reskillable:attack|5", + "reskillable:magic|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:golden_pickaxe", + "metadata": "*", + "requirements": [ + "reskillable:mining|5", + "reskillable:magic|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:golden_hoe", + "metadata": "*", + "requirements": [ + "reskillable:farming|5", + "reskillable:magic|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:golden_helmet", + "metadata": "*", + "requirements": [ + "reskillable:defense|5", + "reskillable:magic|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:golden_chestplate", + "metadata": "*", + "requirements": [ + "reskillable:defense|5", + "reskillable:magic|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:golden_leggings", + "metadata": "*", + "requirements": [ + "reskillable:defense|5", + "reskillable:magic|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:golden_boots", + "metadata": "*", + "requirements": [ + "reskillable:defense|5", + "reskillable:magic|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:diamond_shovel", + "metadata": "*", + "requirements": [ + "reskillable:gathering|16" + ] + }, + { + "type": "itemstack", + "item": "minecraft:diamond_axe", + "metadata": "*", + "requirements": [ + "reskillable:gathering|16" + ] + }, + { + "type": "itemstack", + "item": "minecraft:diamond_sword", + "metadata": "*", + "requirements": [ + "reskillable:attack|16" + ] + }, + { + "type": "itemstack", + "item": "minecraft:diamond_pickaxe", + "metadata": "*", + "requirements": [ + "reskillable:mining|16" + ] + }, + { + "type": "itemstack", + "item": "minecraft:diamond_hoe", + "metadata": "*", + "requirements": [ + "reskillable:farming|16" + ] + }, + { + "type": "itemstack", + "item": "minecraft:diamond_helmet", + "metadata": "*", + "requirements": [ + "reskillable:defense|16" + ] + }, + { + "type": "itemstack", + "item": "minecraft:diamond_chestplate", + "metadata": "*", + "requirements": [ + "reskillable:defense|16" + ] + }, + { + "type": "itemstack", + "item": "minecraft:diamond_leggings", + "metadata": "*", + "requirements": [ + "reskillable:defense|16" + ] + }, + { + "type": "itemstack", + "item": "minecraft:diamond_boots", + "metadata": "*", + "requirements": [ + "reskillable:defense|16" + ] + }, + { + "type": "itemstack", + "item": "minecraft:shears", + "metadata": "*", + "requirements": [ + "reskillable:farming|5", + "reskillable:gathering|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:fishing_rod", + "metadata": "*", + "requirements": [ + "reskillable:gathering|8" + ] + }, + { + "type": "itemstack", + "item": "minecraft:shield", + "metadata": "*", + "requirements": [ + "reskillable:defense|8" + ] + }, + { + "type": "itemstack", + "item": "minecraft:bow", + "metadata": "*", + "requirements": [ + "reskillable:attack|8" + ] + }, + { + "type": "itemstack", + "item": "minecraft:ender_pearl", + "requirements": [ + "reskillable:magic|8" + ] + }, + { + "type": "itemstack", + "item": "minecraft:ender_eye", + "requirements": [ + "reskillable:magic|16", + "reskillable:building|8" + ] + }, + { + "type": "itemstack", + "item": "minecraft:elytra", + "metadata": "*", + "requirements": [ + "reskillable:defense|16", + "reskillable:agility|24", + "reskillable:magic|16" + ] + }, + { + "type": "itemstack", + "item": "minecraft:lead", + "requirements": [ + "reskillable:farming|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:end_crystal", + "requirements": [ + "reskillable:building|24", + "reskillable:magic|32" + ] + }, + { + "type": "itemstack", + "item": "minecraft:iron_horse_armor", + "metadata": "*", + "requirements": [ + "reskillable:defense|5", + "reskillable:agility|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:golden_horse_armor", + "metadata": "*", + "requirements": [ + "reskillable:defense|5", + "reskillable:magic|5", + "reskillable:agility|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:diamond_horse_armor", + "metadata": "*", + "requirements": [ + "reskillable:defense|16", + "reskillable:agility|16" + ] + }, + { + "type": "itemstack", + "item": "minecraft:fireworks", + "requirements": [ + "reskillable:agility|24" + ] + }, + { + "type": "itemstack", + "item": "minecraft:dye", + "metadata": "15", + "requirements": [ + "reskillable:farming|12" + ] + }, + { + "type": "itemstack", + "item": "minecraft:saddle", + "requirements": [ + "reskillable:agility|12" + ] + }, + { + "type": "itemstack", + "item": "minecraft:redstone", + "requirements": [ + "reskillable:building|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:redstone_torch", + "requirements": [ + "reskillable:building|5" + ] + }, + { + "type": "itemstack", + "item": "minecraft:skull", + "metadata": "1", + "requirements": [ + "reskillable:building|20", + "reskillable:attack|20", + "reskillable:defense|20" + ] + } +] \ No newline at end of file From bb61932307e366e95457692efdf3b2f04d0292ee Mon Sep 17 00:00:00 2001 From: BloodWorkXGaming Date: Sat, 11 Aug 2018 15:00:15 +0200 Subject: [PATCH 6/9] cleanup --- .../reskillable/base/LevelLockHandler.java | 43 +- .../base/configs/ConfigHandler.java | 425 +----------------- 2 files changed, 7 insertions(+), 461 deletions(-) diff --git a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java index 87742504..692b3b40 100644 --- a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java @@ -1,5 +1,6 @@ package codersafterdark.reskillable.base; +import codersafterdark.reskillable.Reskillable; import codersafterdark.reskillable.api.ReskillableAPI; import codersafterdark.reskillable.api.data.*; import codersafterdark.reskillable.base.configs.ConfigHandler; @@ -29,7 +30,6 @@ import net.minecraftforge.event.world.BlockEvent.BreakEvent; import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.oredict.OreDictionary; import org.apache.logging.log4j.Level; import java.io.IOException; @@ -45,54 +45,23 @@ public class LevelLockHandler { private static String[] configLocks; private static Map> lockNameMap = new HashMap<>(); - public static void loadFromConfig(String[] configValues) { - configLocks = configValues; - } - static { registerLockKeyName("itemstack", ItemInfo.class); registerLockKeyName("mod", ModLockKey.class); registerLockKeyName("nbt", GenericNBTLockKey.class); } + public static void loadFromConfig(String[] configValues) { + configLocks = configValues; + } + public static void setupLocks() { registerDefaultLockKeys(); - /*if (configLocks != null) { - for (String s : configLocks) { - String[] tokens = s.split("="); - if (tokens.length == 2) { - String itemName = tokens[0].toLowerCase(); - String[] itemParts = itemName.split(":"); - if (itemParts.length == 1) { - addModLock(itemName, RequirementHolder.fromString(tokens[1])); //itemName is really the mod name - continue; - } - int metadata = 0; - if (itemParts.length > 2) { - String meta = itemParts[2]; - try { - if (meta.equals("*")) { - metadata = OreDictionary.WILDCARD_VALUE; - } else { - metadata = Integer.parseInt(meta); - } - itemName = itemParts[0] + ':' + itemParts[1]; - } catch (NumberFormatException ignored) { - //Do nothing if the meta is not a valid number or wildcard (Maybe it somehow is part of the item name) - } - } - Item item = Item.getByNameOrId(itemName); - if (item != null) { - addLock(new ItemStack(item, 1, metadata), RequirementHolder.fromString(tokens[1])); - } - } - } - }*/ try { ConfigHandler.loadJSONLocks(); } catch (IOException e) { - e.printStackTrace(); + Reskillable.logger.error("Failed to load jsons", e); } } diff --git a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java index bca11cf6..7b86ab1e 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java @@ -29,9 +29,7 @@ public class ConfigHandler { // Configs // ///////////// public static Configuration mainConfig; - public static Gson gson = new GsonBuilder() - .setPrettyPrinting() - .create(); + /// Main Config /// public static boolean disableSheepWool = true; public static boolean enforceFakePlayers = true; @@ -120,12 +118,6 @@ public static void loadJSONLocks() throws IOException { Reskillable.logger.error("Couldn't load json from " + path, e); } }); - - - // File mainLocks = new File(jsonDir, "defaultLocks.json"); - // String json = gson.toJson(LevelLockHandler.DEFAULT_SKILL_LOCKS); - // ConfigUtilities.writeStringToFile(json, mainLocks); - } @@ -141,419 +133,4 @@ public static void generateFolder(File file) { configDir = dir; jsonDir = dir2; } - - public static void main(String[] args) { - String s = "[{\n" + - "\t\t\"type\": \"modid\",\n" + - "\t\t\"modid\": \"modid\",\n" + - "\t\t\"ntb\": \"string\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"string\",\n" + - "\t\t\t\"string2\",\n" + - "\t\t\t\"string3\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"mod:stack:2\",\n" + - "\t\t\"ntb\": \"string\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"string\",\n" + - "\t\t\t\"string2\",\n" + - "\t\t\t\"string3\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"locktype\",\n" + - "\t\t\"target\": \"target\",\n" + - "\t\t\"additionalparam\": \"primitiveType\",\n" + - "\t\t\"additionalparams2\": \"primitiveType2\",\n" + - "\t\t\"additionalparams3\": \"primitiveType3\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"string\",\n" + - "\t\t\t\"string2\",\n" + - "\t\t\t\"string3\"\n" + - "\t\t]\n" + - "\t}\n" + - "]"; - - String s2 = "[{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:iron_shovel\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:gathering|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:iron_axe\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:gathering|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:iron_sword\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:attack|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:iron_pickaxe\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:mining|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:iron_hoe\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:farming|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:iron_helmet\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:iron_chestplate\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:iron_leggings\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:iron_boots\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:golden_shovel\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:gathering|5\",\n" + - "\t\t\t\"reskillable:magic|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:golden_axe\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:gathering|5\",\n" + - "\t\t\t\"reskillable:magic|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:golden_sword\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:attack|5\",\n" + - "\t\t\t\"reskillable:magic|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:golden_pickaxe\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:mining|5\",\n" + - "\t\t\t\"reskillable:magic|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:golden_hoe\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:farming|5\",\n" + - "\t\t\t\"reskillable:magic|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:golden_helmet\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|5\",\n" + - "\t\t\t\"reskillable:magic|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:golden_chestplate\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|5\",\n" + - "\t\t\t\"reskillable:magic|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:golden_leggings\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|5\",\n" + - "\t\t\t\"reskillable:magic|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:golden_boots\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|5\",\n" + - "\t\t\t\"reskillable:magic|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:diamond_shovel\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:gathering|16\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:diamond_axe\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:gathering|16\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:diamond_sword\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:attack|16\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:diamond_pickaxe\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:mining|16\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:diamond_hoe\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:farming|16\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:diamond_helmet\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|16\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:diamond_chestplate\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|16\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:diamond_leggings\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|16\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:diamond_boots\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|16\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:shears\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:farming|5\",\n" + - "\t\t\t\"reskillable:gathering|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:fishing_rod\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:gathering|8\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:shield\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|8\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:bow\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:attack|8\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:ender_pearl\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:magic|8\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:ender_eye\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:magic|16\",\n" + - "\t\t\t\"reskillable:building|8\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:elytra\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|16\",\n" + - "\t\t\t\"reskillable:agility|24\",\n" + - "\t\t\t\"reskillable:magic|16\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:lead\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:farming|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:end_crystal\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:building|24\",\n" + - "\t\t\t\"reskillable:magic|32\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:iron_horse_armor\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|5\",\n" + - "\t\t\t\"reskillable:agility|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:golden_horse_armor\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|5\",\n" + - "\t\t\t\"reskillable:magic|5\",\n" + - "\t\t\t\"reskillable:agility|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:diamond_horse_armor\",\n" + - "\t\t\"meta\": \"*\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:defense|16\",\n" + - "\t\t\t\"reskillable:agility|16\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:fireworks\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:agility|24\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:dye\",\n" + - "\t\t\"meta\": \"15\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:farming|12\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:saddle\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:agility|12\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:redstone\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:building|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:redstone_torch\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:building|5\"\n" + - "\t\t]\n" + - "\t},\n" + - "\t{\n" + - "\t\t\"type\": \"itemstack\",\n" + - "\t\t\"stack\": \"minecraft:skull\",\n" + - "\t\t\"meta\": \"1\",\n" + - "\t\t\"requirements\": [\n" + - "\t\t\t\"reskillable:building|20\",\n" + - "\t\t\t\"reskillable:attack|20\",\n" + - "\t\t\t\"reskillable:defense|20\"\n" + - "\t\t]\n" + - "\t}\n" + - "]"; - - List obj = LockTypeJsonFactory.constructGSON().fromJson(s2, new TypeToken>() { - }.getType()); - - System.out.println("obj = " + obj); - } } From 393463085a094f7bf9643f79b96032b1fa5807ab Mon Sep 17 00:00:00 2001 From: BloodWorkXGaming Date: Sun, 12 Aug 2018 12:47:53 +0200 Subject: [PATCH 7/9] small logging change --- .../java/codersafterdark/reskillable/base/LevelLockHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java index 692b3b40..e501a38f 100644 --- a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java @@ -103,7 +103,7 @@ public static Class getLockKeyClass(String name) { try { key = (Class) Class.forName(name); } catch (ClassNotFoundException | ClassCastException e) { - System.out.println("Failed to load LockKeyClass: " + e.getMessage()); + Reskillable.logger.error("Failed to load LockKeyClass: ", e); } } From 1ddcec7b0abc62ed99dea1be4159fb6afa4e9495 Mon Sep 17 00:00:00 2001 From: BloodWorkXGaming Date: Sat, 20 Oct 2018 20:25:01 +0200 Subject: [PATCH 8/9] made lockkey name more clear --- .../reskillable/base/configs/ConfigHandler.java | 4 +--- .../reskillable/base/configs/json/LockJson.java | 12 ++++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java index 7b86ab1e..d33b0b90 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java @@ -5,8 +5,6 @@ import codersafterdark.reskillable.base.configs.json.LockJson; import codersafterdark.reskillable.base.configs.json.LockTypeJsonFactory; import codersafterdark.reskillable.lib.LibMisc; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import com.google.gson.JsonParseException; import com.google.gson.reflect.TypeToken; import net.minecraftforge.common.MinecraftForge; @@ -111,7 +109,7 @@ public static void loadJSONLocks() throws IOException { Reskillable.logger.info("Locks loaded " + obj.size() + ": " + obj); for (LockJson lockJson : obj) { - LevelLockHandler.addLockByKey(lockJson.getModLockKey(), lockJson.getRequirements()); + LevelLockHandler.addLockByKey(lockJson.getLockKey(), lockJson.getRequirements()); } } catch (IOException | JsonParseException e) { diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/LockJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/LockJson.java index 1a7d9f82..da0bc416 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/LockJson.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/LockJson.java @@ -5,26 +5,26 @@ public class LockJson { private RequirementHolder requirements; - private LockKey modLockKey; + private LockKey lockKey; - public LockJson(RequirementHolder requirements, LockKey modLockKey) { + public LockJson(RequirementHolder requirements, LockKey lockKey) { this.requirements = requirements; - this.modLockKey = modLockKey; + this.lockKey = lockKey; } public RequirementHolder getRequirements() { return requirements; } - public LockKey getModLockKey() { - return modLockKey; + public LockKey getLockKey() { + return lockKey; } @Override public String toString() { return "LockJson{" + "requirements=" + requirements + - ", modLockKey=" + modLockKey + + ", lockKey=" + lockKey + '}'; } } From b88c2350ac9ed4081ff0b65e8c356d2e9e70dccd Mon Sep 17 00:00:00 2001 From: BloodWorkXGaming Date: Tue, 30 Oct 2018 16:24:58 +0100 Subject: [PATCH 9/9] requested changes --- .../reskillable/base/LevelLockHandler.java | 6 ------ .../base/configs/ConfigHandler.java | 19 ------------------- .../json/parsers/CustomItemInfoJson.java | 6 +++++- .../configs/json/parsers/CustomItemJson.java | 4 +++- .../configs/json/parsers/CustomLockJson.java | 10 +--------- .../configs/json/parsers/CustomNBTJson.java | 4 +--- 6 files changed, 10 insertions(+), 39 deletions(-) diff --git a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java index e501a38f..d25a4da7 100644 --- a/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/LevelLockHandler.java @@ -37,12 +37,10 @@ import java.util.*; public class LevelLockHandler { - public static final String[] DEFAULT_SKILL_LOCKS = new String[]{"minecraft:iron_shovel:*=reskillable:gathering|5", "minecraft:iron_axe:*=reskillable:gathering|5", "minecraft:iron_sword:*=reskillable:attack|5", "minecraft:iron_pickaxe:*=reskillable:mining|5", "minecraft:iron_hoe:*=reskillable:farming|5", "minecraft:iron_helmet:*=reskillable:defense|5", "minecraft:iron_chestplate:*=reskillable:defense|5", "minecraft:iron_leggings:*=reskillable:defense|5", "minecraft:iron_boots:*=reskillable:defense|5", "minecraft:golden_shovel:*=reskillable:gathering|5,reskillable:magic|5", "minecraft:golden_axe:*=reskillable:gathering|5,reskillable:magic|5", "minecraft:golden_sword:*=reskillable:attack|5,reskillable:magic|5", "minecraft:golden_pickaxe:*=reskillable:mining|5,reskillable:magic|5", "minecraft:golden_hoe:*=reskillable:farming|5,reskillable:magic|5", "minecraft:golden_helmet:*=reskillable:defense|5,reskillable:magic|5", "minecraft:golden_chestplate:*=reskillable:defense|5,reskillable:magic|5", "minecraft:golden_leggings:*=reskillable:defense|5,reskillable:magic|5", "minecraft:golden_boots:*=reskillable:defense|5,reskillable:magic|5", "minecraft:diamond_shovel:*=reskillable:gathering|16", "minecraft:diamond_axe:*=reskillable:gathering|16", "minecraft:diamond_sword:*=reskillable:attack|16", "minecraft:diamond_pickaxe:*=reskillable:mining|16", "minecraft:diamond_hoe:*=reskillable:farming|16", "minecraft:diamond_helmet:*=reskillable:defense|16", "minecraft:diamond_chestplate:*=reskillable:defense|16", "minecraft:diamond_leggings:*=reskillable:defense|16", "minecraft:diamond_boots:*=reskillable:defense|16", "minecraft:shears:*=reskillable:farming|5,reskillable:gathering|5", "minecraft:fishing_rod:*=reskillable:gathering|8", "minecraft:shield:*=reskillable:defense|8", "minecraft:bow:*=reskillable:attack|8", "minecraft:ender_pearl=reskillable:magic|8", "minecraft:ender_eye=reskillable:magic|16,reskillable:building|8", "minecraft:elytra:*=reskillable:defense|16,reskillable:agility|24,reskillable:magic|16", "minecraft:lead=reskillable:farming|5", "minecraft:end_crystal=reskillable:building|24,reskillable:magic|32", "minecraft:iron_horse_armor:*=reskillable:defense|5,reskillable:agility|5", "minecraft:golden_horse_armor:*=reskillable:defense|5,reskillable:magic|5,reskillable:agility|5", "minecraft:diamond_horse_armor:*=reskillable:defense|16,reskillable:agility|16", "minecraft:fireworks=reskillable:agility|24", "minecraft:dye:15=reskillable:farming|12", "minecraft:saddle=reskillable:agility|12", "minecraft:redstone=reskillable:building|5", "minecraft:redstone_torch=reskillable:building|5", "minecraft:skull:1=reskillable:building|20,reskillable:attack|20,reskillable:defense|20"}; private static final Map locks = new HashMap<>(); //This should stay private to ensure that it is added to correctly public static RequirementHolder EMPTY_LOCK = new RequirementHolder(); private static Map, List>> lockTypesMap = new HashMap<>(); private static Map> fuzzyLockInfo = new HashMap<>(); - private static String[] configLocks; private static Map> lockNameMap = new HashMap<>(); static { @@ -51,10 +49,6 @@ public class LevelLockHandler { registerLockKeyName("nbt", GenericNBTLockKey.class); } - public static void loadFromConfig(String[] configValues) { - configLocks = configValues; - } - public static void setupLocks() { registerDefaultLockKeys(); diff --git a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java index d33b0b90..dae2f1ef 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/ConfigHandler.java @@ -50,7 +50,6 @@ public static void init(File file) { mainConfig = new Configuration(new File(configDir.getPath(), "reskillable.cfg")); mainConfig.load(); loadData(); - // loadJSONLocks(); cachedConfigs.put(LibMisc.MOD_ID, mainConfig); MinecraftForge.EVENT_BUS.register(ConfigListener.class); } @@ -62,24 +61,6 @@ public static void loadData() { enableLevelUp = loadPropBool(mainConfig, "Enable Level-Up Button", "Set this to false to remove the level-up button if you don't want to use another means to leveling-up skills!", true); hideRequirements = loadPropBool(mainConfig, "Hide Requirements", "Set this to false to not require holding down the shift key to view requirements!", true); - String desc = "Set requirements for items in this list. Each entry is composed of the item key and the requirements\n" - + "The item key is in the simple mod:item_id format. Optionally, it can be in mod:item_id:metadata, if you want to match metadata.\n" - + "The requirements are in a comma separated list, each in a key|value format. For example, to make an iron pickaxe require 5 mining\n" - + "and 5 building, you'd use the following string:\n" - + "\"minecraft:iron_pickaxe=mining|5,building|5\"\n\n" - + "Item usage can also be locked behind an advancement, by using adv|id. For example, to make the elytra require the \"Acquire Hardware.\" advancement\n" - + "you'd use the following string:\n" - + "\"minecraft:elytra=adv|minecraft:story/smelt_iron\"\n\n" - + "Skill requirements and advancements can be mixed and matched, so you can make an item require both, if you want.\n" - + "You can also lock placed blocks from being used or broken, in the same manner.\n\n" - + "Locks defined here apply to all the following cases: Right clicking an item, placing a block, breaking a block, using a block that's placed,\n" - + "left clicking an item, using an item to break any block, and equipping an armor item.\n\n" - + "You can lock entire mods by just using their name as the left argument. You can then specify specific items to not be locked,\n" - + "by defining their lock in the normal way. If you want an item to not be locked in this way, use \"none\" after the ="; - String[] locks = mainConfig.getStringList("Skill Locks", Configuration.CATEGORY_GENERAL, LevelLockHandler.DEFAULT_SKILL_LOCKS, desc); - - LevelLockHandler.loadFromConfig(locks); - if (mainConfig.hasChanged()) { mainConfig.save(); } diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemInfoJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemInfoJson.java index 22d2ecfc..714c9701 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemInfoJson.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemInfoJson.java @@ -12,8 +12,12 @@ public class CustomItemInfoJson implements JsonDeserializer { @Override public ItemInfo deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { JsonObject obj = json.getAsJsonObject(); + JsonElement itemElem = obj.get("item"); - Item item = context.deserialize(obj.get("item"), Item.class); + if (itemElem == null) + throw new JsonParseException("No key 'item' given in ItemInfo json."); + + Item item = context.deserialize(itemElem, Item.class); int meta = !obj.has("metadata") ? 0 : obj.get("metadata").getAsString().equals("*") ? OreDictionary.WILDCARD_VALUE : obj.get("metadata").getAsInt(); JsonElement nbtJson = obj.get("nbt"); NBTTagCompound tagCompound = null; diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemJson.java index e6baa0a0..da4da5f5 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemJson.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomItemJson.java @@ -5,12 +5,14 @@ import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.registry.ForgeRegistries; import java.lang.reflect.Type; public class CustomItemJson implements JsonDeserializer { @Override public Item deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - return Item.getByNameOrId(json.getAsString()); + return ForgeRegistries.ITEMS.getValue(new ResourceLocation(json.getAsString())); } } diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockJson.java index fe338d25..c48abf85 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockJson.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomLockJson.java @@ -8,7 +8,7 @@ import java.lang.reflect.Type; -public class CustomLockJson implements JsonDeserializer/*, JsonSerializer*/ { +public class CustomLockJson implements JsonDeserializer { @Override public LockJson deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { JsonObject obj = json.getAsJsonObject(); @@ -33,12 +33,4 @@ public LockJson deserialize(JsonElement json, Type typeOfT, JsonDeserializationC return new LockJson(holder, key); } - - /* - Not needed for now - @Override - public JsonElement serialize(BaseLockTypeJson src, Type typeOfSrc, JsonSerializationContext context) { - return null; - } - */ } diff --git a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomNBTJson.java b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomNBTJson.java index 7bea87bf..9ffc8de0 100644 --- a/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomNBTJson.java +++ b/src/main/java/codersafterdark/reskillable/base/configs/json/parsers/CustomNBTJson.java @@ -16,9 +16,7 @@ public NBTTagCompound deserialize(JsonElement json, Type typeOfT, JsonDeserializ try { return JsonToNBT.getTagFromJson(json.toString()); } catch (NBTException e) { - e.printStackTrace(); + throw new JsonParseException("Failed to read nbt from: " + json.toString(), e); } - - return null; } }