From b5ac020a568d2b3de7e4031d51d929c1da01cf13 Mon Sep 17 00:00:00 2001 From: Michele0303 <31160531+Michele0303@users.noreply.github.com> Date: Tue, 2 Aug 2022 19:32:21 +0200 Subject: [PATCH 1/6] Update MySQL_markers.php cross-site scripting reflected fixed --- .../main/resources/extracted/web/standalone/MySQL_markers.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynmapCore/src/main/resources/extracted/web/standalone/MySQL_markers.php b/DynmapCore/src/main/resources/extracted/web/standalone/MySQL_markers.php index 688ebe6d..cfa55921 100644 --- a/DynmapCore/src/main/resources/extracted/web/standalone/MySQL_markers.php +++ b/DynmapCore/src/main/resources/extracted/web/standalone/MySQL_markers.php @@ -19,7 +19,7 @@ if (strcmp($userid, '-guest-')) { $loggedin = true; } -$path = $_REQUEST['marker']; +$path = htmlspecialchars($_REQUEST['marker']); if ((!isset($path)) || strstr($path, "..")) { header('HTTP/1.0 500 Error'); echo "

500 Error

"; From 8909fea4b13db74f2daffc32d7973db73ab977e3 Mon Sep 17 00:00:00 2001 From: Michele0303 <31160531+Michele0303@users.noreply.github.com> Date: Tue, 2 Aug 2022 19:55:09 +0200 Subject: [PATCH 2/6] multiple cross-site scripting reflected fixed --- .../src/main/resources/extracted/web/standalone/MySQL_tiles.php | 2 +- .../resources/extracted/web/standalone/PostgreSQL_markers.php | 2 +- .../resources/extracted/web/standalone/PostgreSQL_tiles.php | 2 +- .../main/resources/extracted/web/standalone/SQLite_markers.php | 2 +- .../main/resources/extracted/web/standalone/SQLite_tiles.php | 2 +- .../src/main/resources/extracted/web/standalone/markers.php | 2 +- .../src/main/resources/extracted/web/standalone/tiles.php | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/DynmapCore/src/main/resources/extracted/web/standalone/MySQL_tiles.php b/DynmapCore/src/main/resources/extracted/web/standalone/MySQL_tiles.php index 51699bc1..00c3af2b 100644 --- a/DynmapCore/src/main/resources/extracted/web/standalone/MySQL_tiles.php +++ b/DynmapCore/src/main/resources/extracted/web/standalone/MySQL_tiles.php @@ -19,7 +19,7 @@ if (strcmp($userid, '-guest-')) { $loggedin = true; } -$path = $_REQUEST['tile']; +$path = htmlspecialchars($_REQUEST['tile']); if ((!isset($path)) || strstr($path, "..")) { header('HTTP/1.0 500 Error'); echo "

500 Error

"; diff --git a/DynmapCore/src/main/resources/extracted/web/standalone/PostgreSQL_markers.php b/DynmapCore/src/main/resources/extracted/web/standalone/PostgreSQL_markers.php index 76beb457..98fc1cb3 100644 --- a/DynmapCore/src/main/resources/extracted/web/standalone/PostgreSQL_markers.php +++ b/DynmapCore/src/main/resources/extracted/web/standalone/PostgreSQL_markers.php @@ -19,7 +19,7 @@ if (strcmp($userid, '-guest-')) { $loggedin = true; } -$path = $_REQUEST['marker']; +$path = htmlspecialchars($_REQUEST['marker']); if ((!isset($path)) || strstr($path, "..")) { header('HTTP/1.0 500 Error'); echo "

500 Error

"; diff --git a/DynmapCore/src/main/resources/extracted/web/standalone/PostgreSQL_tiles.php b/DynmapCore/src/main/resources/extracted/web/standalone/PostgreSQL_tiles.php index b95d00cd..c2e1fb65 100644 --- a/DynmapCore/src/main/resources/extracted/web/standalone/PostgreSQL_tiles.php +++ b/DynmapCore/src/main/resources/extracted/web/standalone/PostgreSQL_tiles.php @@ -19,7 +19,7 @@ if (strcmp($userid, '-guest-')) { $loggedin = true; } -$path = $_REQUEST['tile']; +$path = htmlspecialchars($_REQUEST['tile']); if ((!isset($path)) || strstr($path, "..")) { header('HTTP/1.0 500 Error'); echo "

500 Error

"; diff --git a/DynmapCore/src/main/resources/extracted/web/standalone/SQLite_markers.php b/DynmapCore/src/main/resources/extracted/web/standalone/SQLite_markers.php index 769f2562..7707bc9a 100644 --- a/DynmapCore/src/main/resources/extracted/web/standalone/SQLite_markers.php +++ b/DynmapCore/src/main/resources/extracted/web/standalone/SQLite_markers.php @@ -17,7 +17,7 @@ if (strcmp($userid, '-guest-')) { $loggedin = true; } -$path = $_REQUEST['marker']; +$path = htmlspecialchars($_REQUEST['marker']); if ((!isset($path)) || strstr($path, "..")) { header('HTTP/1.0 500 Error'); echo "

500 Error

"; diff --git a/DynmapCore/src/main/resources/extracted/web/standalone/SQLite_tiles.php b/DynmapCore/src/main/resources/extracted/web/standalone/SQLite_tiles.php index 83cfaf29..9feea7fb 100644 --- a/DynmapCore/src/main/resources/extracted/web/standalone/SQLite_tiles.php +++ b/DynmapCore/src/main/resources/extracted/web/standalone/SQLite_tiles.php @@ -17,7 +17,7 @@ if (strcmp($userid, '-guest-')) { $loggedin = true; } -$path = $_REQUEST['tile']; +$path = htmlspecialchars($_REQUEST['tile']); if ((!isset($path)) || strstr($path, "..")) { header('HTTP/1.0 500 Error'); echo "

500 Error

"; diff --git a/DynmapCore/src/main/resources/extracted/web/standalone/markers.php b/DynmapCore/src/main/resources/extracted/web/standalone/markers.php index 795ef8de..541e0ebc 100644 --- a/DynmapCore/src/main/resources/extracted/web/standalone/markers.php +++ b/DynmapCore/src/main/resources/extracted/web/standalone/markers.php @@ -24,7 +24,7 @@ if (strcmp($userid, '-guest-')) { $loggedin = true; } -$path = $_REQUEST['marker']; +$path = htmlspecialchars($_REQUEST['marker']); if ((!isset($path)) || strstr($path, "..")) { header('HTTP/1.0 500 Error'); echo "

500 Error

"; diff --git a/DynmapCore/src/main/resources/extracted/web/standalone/tiles.php b/DynmapCore/src/main/resources/extracted/web/standalone/tiles.php index fdcf8c6d..11e46df4 100644 --- a/DynmapCore/src/main/resources/extracted/web/standalone/tiles.php +++ b/DynmapCore/src/main/resources/extracted/web/standalone/tiles.php @@ -24,7 +24,7 @@ if (strcmp($userid, '-guest-')) { $loggedin = true; } -$path = $_REQUEST['tile']; +$path = htmlspecialchars($_REQUEST['tile']); if ((!isset($path)) || strstr($path, "..")) { header('HTTP/1.0 500 Error'); echo "

500 Error

"; From d0e9b66d4ac52ba0aaf2a6a665bb796d7a4daef2 Mon Sep 17 00:00:00 2001 From: mastermc05 Date: Mon, 8 Aug 2022 11:00:32 +0300 Subject: [PATCH 3/6] Try to fix https://github.com/webbukkit/dynmap/issues/3819 --- .../dynmap/bukkit/helper/v118_2/AsyncChunkProvider118_2.java | 2 ++ .../org/dynmap/bukkit/helper/v119/AsyncChunkProvider119.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/AsyncChunkProvider118_2.java b/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/AsyncChunkProvider118_2.java index 745527e6..947b4424 100644 --- a/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/AsyncChunkProvider118_2.java +++ b/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/AsyncChunkProvider118_2.java @@ -96,6 +96,8 @@ public class AsyncChunkProvider118_2 { try { return getAsyncSaveData.invoke(null, world.getHandle(), c); } catch (IllegalAccessException | InvocationTargetException e) { + //Save as from main thread + if (((CraftServer) Bukkit.getServer()).getServer().hasStopped()) return null; throw new RuntimeException(e); } }, ((CraftServer) Bukkit.getServer()).getServer()); diff --git a/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/AsyncChunkProvider119.java b/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/AsyncChunkProvider119.java index ac93ee97..bbd907ed 100644 --- a/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/AsyncChunkProvider119.java +++ b/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/AsyncChunkProvider119.java @@ -95,6 +95,8 @@ public class AsyncChunkProvider119 { try { return getAsyncSaveData.invoke(null, world.getHandle(), c); } catch (ReflectiveOperationException e) { + //Save as from main thread + if (((CraftServer) Bukkit.getServer()).getServer().hasStopped()) return null; throw new RuntimeException(e); } }, ((CraftServer) Bukkit.getServer()).getServer()); From 0eb2dffac24cf50c9179b35194cc4afcd4b6ee3f Mon Sep 17 00:00:00 2001 From: stepech <29132060+stepech@users.noreply.github.com> Date: Mon, 8 Aug 2022 22:40:27 +0200 Subject: [PATCH 4/6] Update minimum spigot api, improve armor points counting --- bukkit-helper/build.gradle | 2 +- spigot/build.gradle | 4 +- .../main/java/org/dynmap/bukkit/Armor.java | 43 ------------------- .../java/org/dynmap/bukkit/DynmapPlugin.java | 3 +- 4 files changed, 5 insertions(+), 47 deletions(-) delete mode 100644 spigot/src/main/java/org/dynmap/bukkit/Armor.java diff --git a/bukkit-helper/build.gradle b/bukkit-helper/build.gradle index 83ece802..cece8590 100644 --- a/bukkit-helper/build.gradle +++ b/bukkit-helper/build.gradle @@ -11,6 +11,6 @@ description = 'bukkit-helper' dependencies { implementation project(':dynmap-api') implementation project(path: ':DynmapCore', configuration: 'shadow') - implementation group: 'org.bukkit', name: 'bukkit', version:'1.7.10-R0.1-SNAPSHOT' + implementation group: 'org.bukkit', name: 'bukkit', version:'1.10.2-R0.1-SNAPSHOT' implementation group: 'com.google.code.gson', name: 'gson', version:'2.8.9' } diff --git a/spigot/build.gradle b/spigot/build.gradle index b84c5169..8f1da35a 100644 --- a/spigot/build.gradle +++ b/spigot/build.gradle @@ -17,12 +17,12 @@ repositories { } dependencies { - implementation group: 'org.bukkit', name: 'bukkit', version: '1.7.10-R0.1-SNAPSHOT' + implementation group: 'org.bukkit', name: 'bukkit', version: '1.10.2-R0.1-SNAPSHOT' implementation 'com.nijikokun.bukkit:Permissions:3.1.6' implementation 'me.lucko.luckperms:luckperms-api:4.3' implementation 'net.luckperms:api:5.0' implementation('com.github.MilkBowl:VaultAPI:1.7') { transitive = false } - compileOnly 'net.skinsrestorer:skinsrestorer-api:14.1.+' + compileOnly 'net.skinsrestorer:skinsrestorer-api:14.2.+' implementation project(":dynmap-api") implementation project(path: ":DynmapCore", configuration: "shadow") implementation group: 'ru.tehkode', name: 'PermissionsEx', version: '1.19.1' diff --git a/spigot/src/main/java/org/dynmap/bukkit/Armor.java b/spigot/src/main/java/org/dynmap/bukkit/Armor.java deleted file mode 100644 index edd4bd3c..00000000 --- a/spigot/src/main/java/org/dynmap/bukkit/Armor.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.dynmap.bukkit; - -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; - -public class Armor { - /** - * http://www.minecraftwiki.net/wiki/Item_Durability#Armor_durability - * We rely on getArmorContents() to return 4 armor pieces in the order - * of: boots, pants, chest, helmet - */ - private static final int armorPoints[] = {3, 6, 8, 3}; - - public static final int getArmorPoints(Player player) { - int currentDurability = 0; - int baseDurability = 0; - int baseArmorPoints = 0; - ItemStack[] itm = new ItemStack[4]; - PlayerInventory inv = player.getInventory(); - itm[0] = inv.getBoots(); - itm[1]= inv.getLeggings(); - itm[2] = inv.getChestplate(); - itm[3] = inv.getHelmet(); - for(int i = 0; i < 4; i++) { - if(itm[i] == null) continue; - int dur = itm[i].getDurability(); - int max = itm[i].getType().getMaxDurability(); - if(max <= 0) continue; - if(i == 2) - max = max + 1; /* Always 1 too low for chestplate */ - else - max = max - 3; /* Always 3 too high, versus how client calculates it */ - baseDurability += max; - currentDurability += max - dur; - baseArmorPoints += armorPoints[i]; - } - int ap = 0; - if(baseDurability > 0) - ap = ((baseArmorPoints - 1) * currentDurability) / baseDurability + 1; - return ap; - } -} diff --git a/spigot/src/main/java/org/dynmap/bukkit/DynmapPlugin.java b/spigot/src/main/java/org/dynmap/bukkit/DynmapPlugin.java index a426a840..c4f6c3cf 100644 --- a/spigot/src/main/java/org/dynmap/bukkit/DynmapPlugin.java +++ b/spigot/src/main/java/org/dynmap/bukkit/DynmapPlugin.java @@ -30,6 +30,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.World; +import org.bukkit.attribute.Attribute; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; @@ -728,7 +729,7 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI { @Override public int getArmorPoints() { if(player != null) - return Armor.getArmorPoints(player); + return (int) player.getAttribute(Attribute.GENERIC_ARMOR).getValue(); else return 0; } From 36924b494287bdd2da1b074b676ac5f4161953a2 Mon Sep 17 00:00:00 2001 From: mastermc05 Date: Thu, 11 Aug 2022 11:36:27 +0300 Subject: [PATCH 5/6] Clear scary stacktraces --- .../v118_2/AsyncChunkProvider118_2.java | 21 ++++++++++++------- .../helper/v118_2/MapChunkCache118_2.java | 11 ++++++++-- .../helper/v119/AsyncChunkProvider119.java | 21 ++++++++++++------- .../bukkit/helper/v119/MapChunkCache119.java | 10 ++++++++- 4 files changed, 46 insertions(+), 17 deletions(-) diff --git a/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/AsyncChunkProvider118_2.java b/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/AsyncChunkProvider118_2.java index 947b4424..03e831f7 100644 --- a/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/AsyncChunkProvider118_2.java +++ b/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/AsyncChunkProvider118_2.java @@ -93,11 +93,12 @@ public class AsyncChunkProvider118_2 { } //prepare data synchronously CompletableFuture future = CompletableFuture.supplyAsync(() -> { + //Null will mean that we save with spigot methods, which may be risky on async + //Since we're not in main thread, it now refuses new tasks because of shutdown, the risk is lower + if (!Bukkit.isPrimaryThread()) return null; try { return getAsyncSaveData.invoke(null, world.getHandle(), c); } catch (IllegalAccessException | InvocationTargetException e) { - //Save as from main thread - if (((CraftServer) Bukkit.getServer()).getServer().hasStopped()) return null; throw new RuntimeException(e); } }, ((CraftServer) Bukkit.getServer()).getServer()); @@ -105,15 +106,21 @@ public class AsyncChunkProvider118_2 { if (++currChunks > MapManager.mapman.getMaxChunkLoadsPerTick()) { try { Thread.sleep(25); //hold the lock so other threads also won't stress main thread - } catch (InterruptedException e) { - throw new RuntimeException(e); - } + } catch (InterruptedException ignored) {} } //save data asynchronously return () -> { + Object o = null; try { - return (NBTTagCompound) save.invoke(null, world.getHandle(), c, future.get()); - } catch (ReflectiveOperationException | ExecutionException | InterruptedException e) { + o = future.get(); + return (NBTTagCompound) save.invoke(null, world.getHandle(), c, o); + } catch (InterruptedException e) { + return null; + } catch (InvocationTargetException e) { + //We tried to use simple spigot methods at shutdown and failed, hopes for reading from disk + if (o == null) return null; + throw new RuntimeException(e); + } catch (ReflectiveOperationException | ExecutionException e) { throw new RuntimeException(e); } }; diff --git a/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/MapChunkCache118_2.java b/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/MapChunkCache118_2.java index c96b6670..21b94ea3 100644 --- a/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/MapChunkCache118_2.java +++ b/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/MapChunkCache118_2.java @@ -22,7 +22,7 @@ import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.ExecutionException; import java.util.function.Supplier; /** @@ -61,7 +61,14 @@ public class MapChunkCache118_2 extends GenericMapChunkCache { try { CompletableFuture nbt = provider.getChunk(((CraftWorld) w).getHandle(), chunk.x, chunk.z); return () -> { - NBTTagCompound compound = nbt.join(); + NBTTagCompound compound; + try { + compound = nbt.get(); + } catch (InterruptedException e) { + return null; + } catch (ExecutionException e) { + throw new RuntimeException(e); + } return compound == null ? null : parseChunkFromNBT(new NBT.NBTCompound(compound)); }; } catch (InvocationTargetException | IllegalAccessException ignored) { diff --git a/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/AsyncChunkProvider119.java b/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/AsyncChunkProvider119.java index bbd907ed..eef534b0 100644 --- a/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/AsyncChunkProvider119.java +++ b/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/AsyncChunkProvider119.java @@ -92,11 +92,12 @@ public class AsyncChunkProvider119 { } //prepare data synchronously CompletableFuture future = CompletableFuture.supplyAsync(() -> { + //Null will mean that we save with spigot methods, which may be risky on async + //Since we're not in main thread, it now refuses new tasks because of shutdown, the risk is lower + if (!Bukkit.isPrimaryThread()) return null; try { return getAsyncSaveData.invoke(null, world.getHandle(), c); } catch (ReflectiveOperationException e) { - //Save as from main thread - if (((CraftServer) Bukkit.getServer()).getServer().hasStopped()) return null; throw new RuntimeException(e); } }, ((CraftServer) Bukkit.getServer()).getServer()); @@ -104,15 +105,21 @@ public class AsyncChunkProvider119 { if (++currChunks > MapManager.mapman.getMaxChunkLoadsPerTick()) { try { Thread.sleep(25); //hold the lock so other threads also won't stress main thread - } catch (InterruptedException e) { - throw new RuntimeException(e); - } + } catch (InterruptedException ignored) {} } //save data asynchronously return () -> { + Object o = null; try { - return (NBTTagCompound) save.invoke(null, world.getHandle(), c, future.get()); - } catch (ReflectiveOperationException | ExecutionException | InterruptedException e) { + o = future.get(); + return (NBTTagCompound) save.invoke(null, world.getHandle(), c, o); + } catch (InterruptedException e) { + return null; + } catch (InvocationTargetException e) { + //We tried to use simple spigot methods at shutdown and failed, hopes for reading from disk + if (o == null) return null; + throw new RuntimeException(e); + } catch (ReflectiveOperationException | ExecutionException e) { throw new RuntimeException(e); } }; diff --git a/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/MapChunkCache119.java b/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/MapChunkCache119.java index a94c0898..5ecbc277 100644 --- a/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/MapChunkCache119.java +++ b/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/MapChunkCache119.java @@ -19,6 +19,7 @@ import java.util.List; import java.util.NoSuchElementException; import java.util.concurrent.CancellationException; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.function.Supplier; /** @@ -58,7 +59,14 @@ public class MapChunkCache119 extends GenericMapChunkCache { try { CompletableFuture nbt = provider.getChunk(((CraftWorld) w).getHandle(), chunk.x, chunk.z); return () -> { - NBTTagCompound compound = nbt.join(); + NBTTagCompound compound; + try { + compound = nbt.get(); + } catch (InterruptedException e) { + return null; + } catch (ExecutionException e) { + throw new RuntimeException(e); + } return compound == null ? null : parseChunkFromNBT(new NBT.NBTCompound(compound)); }; } catch (InvocationTargetException | IllegalAccessException ignored) { From 058599be7751624329129e485fa1e4742594c6af Mon Sep 17 00:00:00 2001 From: Kosma Moczek Date: Thu, 11 Aug 2022 20:13:17 +0200 Subject: [PATCH 6/6] fabric: version-lock fabric.mod.json This is intended to reduce user errors where e.g. someone uses the 1.19 jar on 1.19.2. Previously this would lead to unspecific mixin errors; with this change, a helpful message is shown: Mod 'Dynmap' (dynmap) 3.4-SNAPSHOT requires version 1.19 of 'Minecraft' (minecraft), but only the wrong version is present: 1.19.2! --- fabric-1.16.4/src/main/resources/fabric.mod.json | 2 +- fabric-1.18.2/src/main/resources/fabric.mod.json | 2 +- fabric-1.19.1/src/main/resources/fabric.mod.json | 2 +- fabric-1.19/src/main/resources/fabric.mod.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fabric-1.16.4/src/main/resources/fabric.mod.json b/fabric-1.16.4/src/main/resources/fabric.mod.json index 24d80f15..2a6863f6 100644 --- a/fabric-1.16.4/src/main/resources/fabric.mod.json +++ b/fabric-1.16.4/src/main/resources/fabric.mod.json @@ -28,6 +28,6 @@ "depends": { "fabricloader": ">=0.12.12", "fabric": ">=0.17.0", - "minecraft": "1.16.x" + "minecraft": ["1.16.4", "1.16.5"] } } diff --git a/fabric-1.18.2/src/main/resources/fabric.mod.json b/fabric-1.18.2/src/main/resources/fabric.mod.json index 3abb52b0..3ccd3cfb 100644 --- a/fabric-1.18.2/src/main/resources/fabric.mod.json +++ b/fabric-1.18.2/src/main/resources/fabric.mod.json @@ -28,6 +28,6 @@ "depends": { "fabricloader": ">=0.13.3", "fabric": ">=0.47.8", - "minecraft": ">=1.18.2" + "minecraft": "1.18.2" } } diff --git a/fabric-1.19.1/src/main/resources/fabric.mod.json b/fabric-1.19.1/src/main/resources/fabric.mod.json index 5aa6d270..67bb8404 100644 --- a/fabric-1.19.1/src/main/resources/fabric.mod.json +++ b/fabric-1.19.1/src/main/resources/fabric.mod.json @@ -28,6 +28,6 @@ "depends": { "fabricloader": ">=0.14.8", "fabric": ">=0.58.5", - "minecraft": ">=1.19.1" + "minecraft": ["1.19.1", "1.19.2"] } } diff --git a/fabric-1.19/src/main/resources/fabric.mod.json b/fabric-1.19/src/main/resources/fabric.mod.json index 83e56af5..074ab540 100644 --- a/fabric-1.19/src/main/resources/fabric.mod.json +++ b/fabric-1.19/src/main/resources/fabric.mod.json @@ -28,6 +28,6 @@ "depends": { "fabricloader": ">=0.14.6", "fabric": ">=0.55.2", - "minecraft": "1.19.x" + "minecraft": "1.19" } }