diff --git a/README.md b/README.md index c80dd9e..75aa90b 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Hydraulic is a companion to Geyser which allows for Bedrock players to join modd Hydraulic is an open collaboration project by [CubeCraft Games](https://cubecraft.net). ## What is Hydraulic? -Hydraulic is a server-side mod, which allows for Bedrock players to join modded Minecraft: Java Edition servers. This project works alongside [Geyser](https://github.com/GeyserMC/Geyser) to make this possible. +Hydraulic is a server-side mod, which allows for Bedrock players to join modded Minecraft: Java Edition servers. This project works alongside [Geyser](https://github.com/GeyserMC/Geyser) to make this possible. (This fork of Hydraulic fixes the crash when ForgeConfigAPI is installed.) ### This project is still in very early development and should not be used on production setups! You can get [Hydraulic](https://geysermc.org/download?project=other-projects&hydraulic=expanded) from the GeyserMC website. diff --git a/build.gradle.kts b/build.gradle.kts index 7d4ba41..f9ab217 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,6 +2,8 @@ plugins { id("hydraulic.build-logic") } +defaultTasks(":fabric:build") + val platforms = setOf( projects.fabric, // projects.neoforge, diff --git a/fabric/src/main/java/org/geysermc/hydraulic/fabric/FabricUtil.java b/fabric/src/main/java/org/geysermc/hydraulic/fabric/FabricUtil.java index 6be1a58..c81dd4e 100644 --- a/fabric/src/main/java/org/geysermc/hydraulic/fabric/FabricUtil.java +++ b/fabric/src/main/java/org/geysermc/hydraulic/fabric/FabricUtil.java @@ -1,6 +1,8 @@ package org.geysermc.hydraulic.fabric; import com.google.common.collect.ImmutableList; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -54,7 +56,8 @@ public static void resolveJiJ(Collection roots, Consumer output) final JsonObject fmj; try (Reader reader = Files.newBufferedReader(fmjPath)) { - fmj = GsonHelper.parse(reader); + Gson lenientGson = new GsonBuilder().setLenient().create(); + fmj = lenientGson.fromJson(reader, JsonObject.class); } catch (IOException ignored) { return; } diff --git a/shared/src/main/java/org/geysermc/hydraulic/pack/PackManager.java b/shared/src/main/java/org/geysermc/hydraulic/pack/PackManager.java index 9e9ebcd..0388622 100644 --- a/shared/src/main/java/org/geysermc/hydraulic/pack/PackManager.java +++ b/shared/src/main/java/org/geysermc/hydraulic/pack/PackManager.java @@ -55,6 +55,7 @@ public class PackManager { // Fabric "geyser-fabric", "fabric-permissions-api-v0", + "forgeconfigapiport", // NeoForge "geyser-neoforge", @@ -92,13 +93,25 @@ public void initialize() { final Collection mods = this.hydraulic.mods(); final Map> modPacks = Maps.newHashMapWithExpectedSize(mods.size()); for (final ModInfo mod : mods) { - modPacks.put( - mod.id(), - mod.roots() - .stream() - .map(path -> MinecraftResourcePackReader.minecraft().read(NioDirectoryFileTreeReader.read(path))) - .toList() - ); + try { + modPacks.put( + mod.id(), + mod.roots() + .stream() + .map(path -> { + try { + return MinecraftResourcePackReader.minecraft().read(NioDirectoryFileTreeReader.read(path)); + } catch (Exception e) { + LOGGER.error("Failed to read resource pack from mod {} at path {}: {}", mod.id(), path, e.getMessage()); + return null; + } + }) + .filter(pack -> pack != null) + .toList() + ); + } catch (Exception e) { + LOGGER.error("Failed to process mod {}: {}", mod.id(), e.getMessage(), e); + } } try { diff --git a/shared/src/main/java/org/geysermc/hydraulic/pack/modules/MetadataPackModule.java b/shared/src/main/java/org/geysermc/hydraulic/pack/modules/MetadataPackModule.java index 8ffaa42..7383c6e 100644 --- a/shared/src/main/java/org/geysermc/hydraulic/pack/modules/MetadataPackModule.java +++ b/shared/src/main/java/org/geysermc/hydraulic/pack/modules/MetadataPackModule.java @@ -39,7 +39,7 @@ public Collection extract(ResourcePack pack, ExtractionContext context) @Override public @Nullable Manifest convert(ModInfo mod, ConversionContext context) throws Exception { Manifest manifest = PackManifestConverter.INSTANCE.convert( - PackMeta.of(PackFormat.format(FormatVersion.of(0)), Component.text(mod.name().trim() + " " + mod.version() + " - Generated by " + Constants.MOD_NAME)), + PackMeta.of(PackFormat.format(FormatVersion.of(101)), Component.text(mod.name().trim() + " " + mod.version() + " - Generated by " + Constants.MOD_NAME)), new ConversionContext(mod.name().trim() + " Resource Pack", context.logListener()) );