diff options
author | msg-programs <msgdoesstuff@gmail.com> | 2023-08-15 21:32:50 +0200 |
---|---|---|
committer | msg-programs <msgdoesstuff@gmail.com> | 2023-08-15 21:32:50 +0200 |
commit | dc47feb2137d46bec72b60f3dc3ef9e90fb26a27 (patch) | |
tree | a58367c446455f572ae56126e1734311d8939c25 /src/main/java/me | |
parent | b1fc5db77f493b0fb2d09fc26b770f45fd354b89 (diff) | |
download | Skyblocker-dc47feb2137d46bec72b60f3dc3ef9e90fb26a27.tar.gz Skyblocker-dc47feb2137d46bec72b60f3dc3ef9e90fb26a27.tar.bz2 Skyblocker-dc47feb2137d46bec72b60f3dc3ef9e90fb26a27.zip |
Add format version file to resource pack for future breaking changes.
Diffstat (limited to 'src/main/java/me')
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java | 2 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java | 36 |
2 files changed, 33 insertions, 5 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java index feb351da..76b675ce 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java @@ -66,7 +66,7 @@ public class ScreenBuilder { } } catch (Exception ex) { // rethrow as unchecked exception so that I don't have to catch anything in the ScreenMaster - throw new IllegalStateException("Failed to load file " + ident + "Reason: " + ex.getMessage()); + throw new IllegalStateException("Failed to load file " + ident + ". Reason: " + ex.getMessage()); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java index 5c4351fd..165e875d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java @@ -1,17 +1,26 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder; +import java.io.BufferedReader; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.PipelineStage; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.fabricmc.fabric.api.resource.ResourcePackActivationType; import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener; import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.resource.Resource; import net.minecraft.resource.ResourceManager; @@ -22,6 +31,8 @@ public class ScreenMaster { private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker"); + private static final int VERSION = 1; + private static HashMap<String, ScreenBuilder> standardMap = new HashMap<>(); private static HashMap<String, ScreenBuilder> screenAMap = new HashMap<>(); private static HashMap<String, ScreenBuilder> screenBMap = new HashMap<>(); @@ -99,20 +110,37 @@ public class ScreenMaster { screenAMap.clear(); screenBMap.clear(); - int ex = 0; + int excnt = 0; + + for (Map.Entry<Identifier, Resource> entry : manager + .findResources("tabhud", path -> path.getPath().endsWith("version.json")) + .entrySet()) { + + try (BufferedReader reader = MinecraftClient.getInstance().getResourceManager() + .openAsReader(entry.getKey());) { + JsonObject json = JsonParser.parseReader(reader).getAsJsonObject(); + if (json.get("format_version").getAsInt() != VERSION) { + throw new IllegalStateException(String.format("Resource pack isn't compatible! Expected version %d, got %d", VERSION, json.get("format_version").getAsInt())); + } + + } catch (Exception ex) { + throw new IllegalStateException( + "Rejected this resource pack. Reason: " + ex.getMessage()); + } + } for (Map.Entry<Identifier, Resource> entry : manager - .findResources("tabhud", path -> path.getPath().endsWith(".json")) + .findResources("tabhud", path -> path.getPath().endsWith(".json") && !path.getPath().endsWith("version.json")) .entrySet()) { try { load(entry.getKey()); } catch (Exception e) { LOGGER.error(e.getMessage()); - ex++; + excnt++; } } - if (ex > 0) { + if (excnt > 0) { throw new IllegalStateException("This screen definition isn't valid, see above"); } } |