From ef55ccb9b284f4db693da1f81ad7d3817e9ea94e Mon Sep 17 00:00:00 2001 From: JFronny Date: Tue, 24 Aug 2021 13:57:42 +0200 Subject: [PATCH] Add support for data packs. Closes #6 --- .gitignore | 5 ++++ build.gradle | 8 +++---- gradle.properties | 4 ++-- .../data/batty/functions/main.mcfunction | 20 ++++++++++++++++ .../data/minecraft/tags/functions/load.json | 3 +++ .../data/minecraft/tags/functions/tick.json | 3 +++ .../minecraft/tags/functions/tick.json.rpo | 5 ++++ .../data/respackopts/conf.json | 7 ++++++ .../datapacks/battys-coordinates/pack.mcmeta | 6 +++++ .../data/MetadataLocateResult.java | 7 ++++++ .../integration/ModMenuCompat.java | 6 +++++ .../mixin/ResourcePackEntryMixin.java | 2 +- .../mixin/ResourcePackManagerMixin.java | 23 ++++++++++++------- 13 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 run/saves/New World/datapacks/battys-coordinates/data/batty/functions/main.mcfunction create mode 100644 run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/load.json create mode 100644 run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/tick.json create mode 100644 run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/tick.json.rpo create mode 100644 run/saves/New World/datapacks/battys-coordinates/data/respackopts/conf.json create mode 100644 run/saves/New World/datapacks/battys-coordinates/pack.mcmeta create mode 100644 src/main/java/io/gitlab/jfronny/respackopts/data/MetadataLocateResult.java diff --git a/.gitignore b/.gitignore index 64ad712..dd87e57 100644 --- a/.gitignore +++ b/.gitignore @@ -117,6 +117,11 @@ gradle-app.setting !/run/resourcepacks /run/resourcepacks/* !/run/resourcepacks/lumi +!/run/saves +/run/saves/* +!/run/saves/New World +/run/saves/New World/* +!/run/saves/New World/datapacks /test/ logs/ diff --git a/build.gradle b/build.gradle index 140c48e..60c17cb 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ apply from: "https://gitlab.com/-/snippets/2121059/raw/master/jfbase.gradle" repositories { - maven { url = "https://raw.githubusercontent.com/TerraformersMC/Archive/main/releases/"; name = "ModMenu" } + maven { url = "https://maven.terraformersmc.com/releases/"; name = "ModMenu" } maven { url = "https://maven.shedaniel.me/"; name = "Cloth Config" } maven { url = "https://maven.dblsaiko.net/"; name = "Canvas" } maven { url = 'https://server.bbkr.space/artifactory/libs-release'; name = "Required for canvas" } @@ -15,11 +15,11 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" // Fabric API. This is technically optional, but you probably want it anyway. - modImplementation "net.fabricmc.fabric-api:fabric-api:0.36.1+1.17" + modImplementation "net.fabricmc.fabric-api:fabric-api:0.38.2+1.17" - modImplementation "com.terraformersmc:modmenu:2.0.2" + modImplementation "com.terraformersmc:modmenu:2.0.5" - modApi("me.shedaniel.cloth:cloth-config-fabric:5.0.34") + modApi("me.shedaniel.cloth:cloth-config-fabric:5.0.38") modCompileOnly "grondag:frex-mc117:+" /*TODO re-enable after canvas works on 1.17.1 diff --git a/gradle.properties b/gradle.properties index bdae26c..33b7cd2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx1G # Fabric Properties -# check these on https://modmuss50.me/fabric.html +# check these on https://fabricmc.net/versions.html minecraft_version=1.17.1 -yarn_mappings=build.1 +yarn_mappings=build.43 loader_version=0.11.6 # Mod Properties mod_version=2.3.0 diff --git a/run/saves/New World/datapacks/battys-coordinates/data/batty/functions/main.mcfunction b/run/saves/New World/datapacks/battys-coordinates/data/batty/functions/main.mcfunction new file mode 100644 index 0000000..2e15fc6 --- /dev/null +++ b/run/saves/New World/datapacks/battys-coordinates/data/batty/functions/main.mcfunction @@ -0,0 +1,20 @@ +execute unless entity @a[tag=coords_run] run gamerule commandBlockOutput false +execute unless entity @a[tag=coords_run] run scoreboard objectives add x_coord dummy +execute unless entity @a[tag=coords_run] run scoreboard objectives add y_coord dummy +execute unless entity @a[tag=coords_run] run scoreboard objectives add z_coord dummy +execute unless entity @a[tag=coords_run] run scoreboard objectives add day_num dummy +tag @a[tag=!coords_run] add coords_run +execute as @a store result score @s x_coord run data get entity @s Pos[0] +execute as @a store result score @s y_coord run data get entity @s Pos[1] +execute as @a store result score @s z_coord run data get entity @s Pos[2] +execute as @a store result score @s day_num run time query day +title @a[y_rotation=23..67] actionbar ["",{"text":"x","color":"gold"},{"text":":","color":"gold"},{"text":"(-)","color":"white"},{"score":{"name":"*","objective":"x_coord"},"color":"aqua"},{"text":" "},{"text":"y","color":"gold"},{"text":":","color":"gold"},{"score":{"name":"*","objective":"y_coord"},"color":"aqua"},{"text":" "},{"text":"z","color":"gold"},{"text":":","color":"gold"},{"text":"(+)","color":"white"},{"score":{"name":"*","objective":"z_coord"},"color":"aqua"},{"text":" "},{"text":"dy ","color":"gold"},{"score":{"name":"*","objective":"day_num"},"color":"white"},{"text":" "},{"text":"SW","color":"gold"}] +title @a[y_rotation=68..112] actionbar ["",{"text":"x","color":"gold"},{"text":":","color":"gold"},{"text":"(-)","color":"white"},{"score":{"name":"*","objective":"x_coord"},"color":"aqua"},{"text":" "},{"text":"y","color":"gold"},{"text":":","color":"gold"},{"score":{"name":"*","objective":"y_coord"},"color":"aqua"},{"text":" "},{"text":"z","color":"gold"},{"text":":","color":"gold"},{"text":"(=)","color":"gray"},{"score":{"name":"*","objective":"z_coord"},"color":"aqua"},{"text":" "},{"text":"dy ","color":"gold"},{"score":{"name":"*","objective":"day_num"},"color":"white"},{"text":" "},{"text":"W ","color":"gold"}] +title @a[y_rotation=113..157] actionbar ["",{"text":"x","color":"gold"},{"text":":","color":"gold"},{"text":"(-)","color":"white"},{"score":{"name":"*","objective":"x_coord"},"color":"aqua"},{"text":" "},{"text":"y","color":"gold"},{"text":":","color":"gold"},{"score":{"name":"*","objective":"y_coord"},"color":"aqua"},{"text":" "},{"text":"z","color":"gold"},{"text":":","color":"gold"},{"text":"(-)","color":"white"},{"score":{"name":"*","objective":"z_coord"},"color":"aqua"},{"text":" "},{"text":"dy ","color":"gold"},{"score":{"name":"*","objective":"day_num"},"color":"white"},{"text":" "},{"text":"NW","color":"gold"}] +title @a[y_rotation=158..202] actionbar ["",{"text":"x","color":"gold"},{"text":":","color":"gold"},{"text":"(=)","color":"gray"},{"score":{"name":"*","objective":"x_coord"},"color":"aqua"},{"text":" "},{"text":"y","color":"gold"},{"text":":","color":"gold"},{"score":{"name":"*","objective":"y_coord"},"color":"aqua"},{"text":" "},{"text":"z","color":"gold"},{"text":":","color":"gold"},{"text":"(-)","color":"white"},{"score":{"name":"*","objective":"z_coord"},"color":"aqua"},{"text":" "},{"text":"dy ","color":"gold"},{"score":{"name":"*","objective":"day_num"},"color":"white"},{"text":" "},{"text":"N ","color":"gold"}] +title @a[y_rotation=203..247] actionbar ["",{"text":"x","color":"gold"},{"text":":","color":"gold"},{"text":"(+)","color":"white"},{"score":{"name":"*","objective":"x_coord"},"color":"aqua"},{"text":" "},{"text":"y","color":"gold"},{"text":":","color":"gold"},{"score":{"name":"*","objective":"y_coord"},"color":"aqua"},{"text":" "},{"text":"z","color":"gold"},{"text":":","color":"gold"},{"text":"(-)","color":"white"},{"score":{"name":"*","objective":"z_coord"},"color":"aqua"},{"text":" "},{"text":"dy ","color":"gold"},{"score":{"name":"*","objective":"day_num"},"color":"white"},{"text":" "},{"text":"NE","color":"gold"}] +title @a[y_rotation=248..292] actionbar ["",{"text":"x","color":"gold"},{"text":":","color":"gold"},{"text":"(+)","color":"white"},{"score":{"name":"*","objective":"x_coord"},"color":"aqua"},{"text":" "},{"text":"y","color":"gold"},{"text":":","color":"gold"},{"score":{"name":"*","objective":"y_coord"},"color":"aqua"},{"text":" "},{"text":"z","color":"gold"},{"text":":","color":"gold"},{"text":"(=)","color":"gray"},{"score":{"name":"*","objective":"z_coord"},"color":"aqua"},{"text":" "},{"text":"dy ","color":"gold"},{"score":{"name":"*","objective":"day_num"},"color":"white"},{"text":" "},{"text":"E ","color":"gold"}] +title @a[y_rotation=293..337] actionbar ["",{"text":"x","color":"gold"},{"text":":","color":"gold"},{"text":"(+)","color":"white"},{"score":{"name":"*","objective":"x_coord"},"color":"aqua"},{"text":" "},{"text":"y","color":"gold"},{"text":":","color":"gold"},{"score":{"name":"*","objective":"y_coord"},"color":"aqua"},{"text":" "},{"text":"z","color":"gold"},{"text":":","color":"gold"},{"text":"(+)","color":"white"},{"score":{"name":"*","objective":"z_coord"},"color":"aqua"},{"text":" "},{"text":"dy ","color":"gold"},{"score":{"name":"*","objective":"day_num"},"color":"white"},{"text":" "},{"text":"SE","color":"gold"}] +title @a[y_rotation=338..22] actionbar ["",{"text":"x","color":"gold"},{"text":":","color":"gold"},{"text":"(=)","color":"gray"},{"score":{"name":"*","objective":"x_coord"},"color":"aqua"},{"text":" "},{"text":"y","color":"gold"},{"text":":","color":"gold"},{"score":{"name":"*","objective":"y_coord"},"color":"aqua"},{"text":" "},{"text":"z","color":"gold"},{"text":":","color":"gold"},{"text":"(+)","color":"white"},{"score":{"name":"*","objective":"z_coord"},"color":"aqua"},{"text":" "},{"text":"dy ","color":"gold"},{"score":{"name":"*","objective":"day_num"},"color":"white"},{"text":" "},{"text":"S ","color":"gold"}] + + diff --git a/run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/load.json b/run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/load.json new file mode 100644 index 0000000..bb465aa --- /dev/null +++ b/run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/load.json @@ -0,0 +1,3 @@ +{ + "values": ["batty:main"] +} \ No newline at end of file diff --git a/run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/tick.json b/run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/tick.json new file mode 100644 index 0000000..bb465aa --- /dev/null +++ b/run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/tick.json @@ -0,0 +1,3 @@ +{ + "values": ["batty:main"] +} \ No newline at end of file diff --git a/run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/tick.json.rpo b/run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/tick.json.rpo new file mode 100644 index 0000000..71809b0 --- /dev/null +++ b/run/saves/New World/datapacks/battys-coordinates/data/minecraft/tags/functions/tick.json.rpo @@ -0,0 +1,5 @@ +{ + "conditions": [ + "battysCoords:india" + ] +} \ No newline at end of file diff --git a/run/saves/New World/datapacks/battys-coordinates/data/respackopts/conf.json b/run/saves/New World/datapacks/battys-coordinates/data/respackopts/conf.json new file mode 100644 index 0000000..e7c2bc5 --- /dev/null +++ b/run/saves/New World/datapacks/battys-coordinates/data/respackopts/conf.json @@ -0,0 +1,7 @@ +{ + "id": "battysCoords", + "version": 3, + "conf": { + "india": false + } +} diff --git a/run/saves/New World/datapacks/battys-coordinates/pack.mcmeta b/run/saves/New World/datapacks/battys-coordinates/pack.mcmeta new file mode 100644 index 0000000..b0b69ac --- /dev/null +++ b/run/saves/New World/datapacks/battys-coordinates/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "pack_format": 7, + "description": "BattyCoords" + } +} \ No newline at end of file diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/MetadataLocateResult.java b/src/main/java/io/gitlab/jfronny/respackopts/data/MetadataLocateResult.java new file mode 100644 index 0000000..a6bb11c --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/MetadataLocateResult.java @@ -0,0 +1,7 @@ +package io.gitlab.jfronny.respackopts.data; + +import net.minecraft.resource.ResourcePack; +import net.minecraft.resource.ResourceType; + +public record MetadataLocateResult(ResourcePack pack, boolean hasMeta, ResourceType type) { +} diff --git a/src/main/java/io/gitlab/jfronny/respackopts/integration/ModMenuCompat.java b/src/main/java/io/gitlab/jfronny/respackopts/integration/ModMenuCompat.java index 572cb42..db671f8 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/integration/ModMenuCompat.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/integration/ModMenuCompat.java @@ -8,6 +8,7 @@ import me.shedaniel.clothconfig2.api.ConfigCategory; import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.FatalErrorScreen; +import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.text.TranslatableText; import java.util.concurrent.atomic.AtomicBoolean; @@ -25,6 +26,11 @@ public class ModMenuCompat implements ModMenuApi { builder.setSavingRunnable(() -> { Respackopts.save(); MinecraftClient.getInstance().reloadResources(); + IntegratedServer is = MinecraftClient.getInstance().getServer(); + if (is != null) { + is.getDataPackManager().scanPacks(); + is.reloadResources(is.getDataPackManager().getEnabledNames()); + } }); AtomicBoolean categoryAdded = new AtomicBoolean(false); Respackopts.CONFIG_BRANCH.forEach((id, conf) -> { diff --git a/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackEntryMixin.java b/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackEntryMixin.java index 3589de3..f33fcfa 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackEntryMixin.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackEntryMixin.java @@ -45,7 +45,7 @@ public abstract class ResourcePackEntryMixin { k = Respackopts.NAME_LOOKUP.get(k); info.setReturnValue(true); MinecraftClient c = MinecraftClient.getInstance(); - c.openScreen(Respackopts.factory.buildGui(Respackopts.CONFIG_BRANCH.get(k), k, c.currentScreen, () -> Respackopts.forceRespackReload = true)); + c.setScreen(Respackopts.factory.buildGui(Respackopts.CONFIG_BRANCH.get(k), k, c.currentScreen, () -> Respackopts.forceRespackReload = true)); } } } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java b/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java index 7d9e92b..3cc76d6 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java @@ -1,11 +1,12 @@ package io.gitlab.jfronny.respackopts.mixin; -import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import io.gitlab.jfronny.respackopts.Respackopts; +import io.gitlab.jfronny.respackopts.data.MetadataLocateResult; import io.gitlab.jfronny.respackopts.data.Respackmeta; import io.gitlab.jfronny.respackopts.data.entry.SyncMode; +import net.minecraft.resource.ResourcePack; import net.minecraft.resource.ResourcePackManager; import net.minecraft.resource.ResourcePackProfile; import net.minecraft.resource.ResourceType; @@ -28,9 +29,10 @@ public class ResourcePackManagerMixin { private void scanPacks(CallbackInfo info) { Respackopts.NAME_LOOKUP.clear(); profiles.forEach((s, v) -> { - if (rpo$hasMetadata(v)) { + MetadataLocateResult scan = rpo$locateMetadata(v); + if (scan.hasMeta()) { try { - Respackmeta conf = Respackopts.GSON.fromJson(rpo$readMetadata(v, Respackopts.GSON), Respackmeta.class); + Respackmeta conf = Respackopts.GSON.fromJson(rpo$readMetadata(scan), Respackmeta.class); if (Respackopts.META_VERSION < conf.version) { Respackopts.LOGGER.error(s + " was not loaded as it specifies a newer respackopts version than is installed"); return; @@ -52,18 +54,23 @@ public class ResourcePackManagerMixin { }); } - private boolean rpo$hasMetadata(ResourcePackProfile v) { - return v.createResourcePack().contains(ResourceType.CLIENT_RESOURCES, Respackopts.CONF_ID); + private MetadataLocateResult rpo$locateMetadata(ResourcePackProfile v) { + ResourcePack pack = v.createResourcePack(); + for (ResourceType type : ResourceType.values()) { + if (pack.contains(type, Respackopts.CONF_ID)) + return new MetadataLocateResult(pack, true, type); + } + return new MetadataLocateResult(pack, false, null); } - private JsonObject rpo$readMetadata(ResourcePackProfile v, Gson g) throws IOException { - InputStream is = v.createResourcePack().open(ResourceType.CLIENT_RESOURCES, Respackopts.CONF_ID); + private JsonObject rpo$readMetadata(MetadataLocateResult pack) throws IOException { + InputStream is = pack.pack().open(pack.type(), Respackopts.CONF_ID); ByteArrayOutputStream os = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) != -1) { os.write(buffer, 0, length); } - return g.fromJson(os.toString(), JsonElement.class).getAsJsonObject(); + return Respackopts.GSON.fromJson(os.toString(), JsonElement.class).getAsJsonObject(); } }