diff --git a/.github/workflows/fabric-1.20.1.yml b/.github/workflows/fabric-1.20.1.yml index fa0da218..283db46b 100644 --- a/.github/workflows/fabric-1.20.1.yml +++ b/.github/workflows/fabric-1.20.1.yml @@ -5,8 +5,8 @@ on: branches: - "fabric-1.20.1" env: - WORLDMAP_VERSION: "1.35.0" - MINIMAP_VERSION: "23.8.3" + WORLDMAP_VERSION: "1.36.0" + MINIMAP_VERSION: "23.8.4" MINECRAFT_VERSION: "1.20.1" MINECRAFT_VERSION_SHORT: "1.20" MOD_LOADER: "Fabric" diff --git a/build.gradle b/build.gradle index 0e4c40a2..2ba906c6 100644 --- a/build.gradle +++ b/build.gradle @@ -51,9 +51,9 @@ dependencies { jarLibs "com.github.collarmc:pounce:0e8492b68e" jarLibs 'org.xerial:sqlite-jdbc:3.43.0.0' - modImplementation "maven.modrinth:xaeros-world-map:1.35.0_Fabric_1.20" - modImplementation "maven.modrinth:xaeros-minimap:23.8.3_Fabric_1.20" - modCompileOnly files("libs/BetterPvP_23.8.3_Fabric_1.20.jar") + modImplementation "maven.modrinth:xaeros-world-map:1.36.0_Fabric_1.20" + modImplementation "maven.modrinth:xaeros-minimap:23.8.4_Fabric_1.20" + modCompileOnly files("libs/BetterPvP_23.8.4_Fabric_1.20.jar") modImplementation files("libs/baritone-api-fabric-1.20.1-elytra-beta-v1.jar") modCompileOnly "maven.modrinth:waystones:14.0.2+fabric-1.20" modCompileOnly "maven.modrinth:balm:7.1.4+fabric-1.20.1" diff --git a/libs/BetterPvP_23.8.3_Fabric_1.20.jar b/libs/BetterPvP_23.8.4_Fabric_1.20.jar similarity index 85% rename from libs/BetterPvP_23.8.3_Fabric_1.20.jar rename to libs/BetterPvP_23.8.4_Fabric_1.20.jar index 8c1ab47f..9d8e4200 100644 Binary files a/libs/BetterPvP_23.8.3_Fabric_1.20.jar and b/libs/BetterPvP_23.8.4_Fabric_1.20.jar differ diff --git a/src/main/java/xaeroplus/XaeroPlus.java b/src/main/java/xaeroplus/XaeroPlus.java index 3f8f3582..67c466be 100644 --- a/src/main/java/xaeroplus/XaeroPlus.java +++ b/src/main/java/xaeroplus/XaeroPlus.java @@ -21,7 +21,7 @@ public class XaeroPlus implements ClientModInitializer { public static final Logger LOGGER = LoggerFactory.getLogger("XaeroPlus"); public static final EventBus EVENT_BUS = new EventBus(Runnable::run); public static AtomicBoolean initialized = new AtomicBoolean(false); - private static final String compatibleMinimapVersion = "23.8.3"; + private static final String compatibleMinimapVersion = "23.8.4"; public static void initialize() { if (initialized.compareAndSet(false, true)) { diff --git a/src/main/java/xaeroplus/mixin/client/MixinGuiMap.java b/src/main/java/xaeroplus/mixin/client/MixinGuiMap.java index 0820ec3a..c26ccc07 100644 --- a/src/main/java/xaeroplus/mixin/client/MixinGuiMap.java +++ b/src/main/java/xaeroplus/mixin/client/MixinGuiMap.java @@ -92,7 +92,9 @@ public abstract class MixinGuiMap extends ScreenBase implements IRightClickableE ButtonWidget switchToNetherButton; ButtonWidget switchToOverworldButton; ButtonWidget switchToEndButton; - + @Final + @Shadow + private static Text FULL_RELOAD_IN_PROGRESS = Text.translatable("gui.xaero_full_reload_in_progress"); @Final @Shadow private static final double ZOOM_STEP = 1.2; @@ -894,15 +896,8 @@ public void render(DrawContext guiGraphics, int scaledMouseX, int scaledMouseY, region.getParent().setShouldCheckForUpdatesRecursive(true); } - if (!region.recacheHasBeenRequested() - && !region.reloadHasBeenRequested() - && !region.isRefreshing() - && ( - region.getLoadState() == 4 - || region.getLoadState() == 2 && region.isBeingWritten() - || region.getLoadState() == 0 - ) - && ( + if (region.canRequestReload_unsynced() + && ( reloadEverything && region.getReloadVersion() != globalReloadVersion || region.getCacheHashCode() != globalRegionCacheHashCode || region.caveStartOutdated(globalCaveStart, globalCaveDepth) @@ -1218,13 +1213,7 @@ public void render(DrawContext guiGraphics, int scaledMouseX, int scaledMouseY, LeveledRegion nextToLoad = this.mapProcessor.getMapSaveLoad().getNextToLoadByViewing(); boolean shouldRequest = false; if (nextToLoad != null) { - synchronized(nextToLoad) { - if (!nextToLoad.reloadHasBeenRequested() - && !nextToLoad.hasRemovableSourceData() - && (!(nextToLoad instanceof MapRegion) || !((MapRegion)nextToLoad).isRefreshing())) { - shouldRequest = true; - } - } + shouldRequest = nextToLoad.shouldAllowAnotherRegionToLoad(); } else { shouldRequest = true; } @@ -1256,10 +1245,7 @@ public void render(DrawContext guiGraphics, int scaledMouseX, int scaledMouseY, MapRegion region = this.regionBuffer.get(i); if (region != nextToLoad || this.regionBuffer.size() <= 1) { synchronized(region) { - if (!region.reloadHasBeenRequested() - && !region.recacheHasBeenRequested() - && (!(region instanceof MapRegion) || !region.isRefreshing()) - && (region.getLoadState() == 0 || region.getLoadState() == 4 || region.getLoadState() == 2 && region.isBeingWritten())) { + if (region.canRequestReload_unsynced()) { if (region.getLoadState() == 2) { region.requestRefresh(this.mapProcessor); } else { @@ -1707,6 +1693,23 @@ public void render(DrawContext guiGraphics, int scaledMouseX, int scaledMouseY, ); } + if (this.dimension.getFullReloader() != null && !mc.options.hudHidden) { + subtleTooltipOffset += 12; + MapRenderHelper.drawCenteredStringWithBackground( + guiGraphics, + mc.textRenderer, + FULL_RELOAD_IN_PROGRESS, + this.width / 2, + this.height - subtleTooltipOffset, + -1, + 0.0F, + 0.0F, + 0.0F, + 0.4F, + backgroundVertexBuffer + ); + } + if (WorldMap.settings.displayCaveModeStart && !mc.options.hudHidden) { subtleTooltipOffset += 12; if (globalCaveStart != Integer.MAX_VALUE && globalCaveStart != Integer.MIN_VALUE) { diff --git a/src/main/java/xaeroplus/mixin/client/MixinMapProcessor.java b/src/main/java/xaeroplus/mixin/client/MixinMapProcessor.java index daf03760..278d7896 100644 --- a/src/main/java/xaeroplus/mixin/client/MixinMapProcessor.java +++ b/src/main/java/xaeroplus/mixin/client/MixinMapProcessor.java @@ -539,8 +539,8 @@ public MapRegion getMapRegionCustomDimension(int caveLayer, int regX, int regZ, if (regionDetection != null) { regionDetection.transferInfoTo(region); mapLayer.removeRegionDetection(regX, regZ); - } else if (!region.isNormalMapData() && mapDimension.getWorldSaveRegionDetection(regX, regZ) == null) { - RegionDetection worldSaveRegionDetection = new RegionDetection( + } else if (mapLayer.getCompleteRegionDetection(regX, regZ) == null) { + RegionDetection perpetualRegionDetection = new RegionDetection( region.getWorldId(), region.getDimId(), region.getMwId(), @@ -550,8 +550,10 @@ public MapRegion getMapRegionCustomDimension(int caveLayer, int regX, int regZ, this.getGlobalVersion(), true ); - mapDimension.addWorldSaveRegionDetection(worldSaveRegionDetection); - mapLayer.removeRegionDetection(regX, regZ); + mapLayer.tryAddingToCompleteRegionDetection(perpetualRegionDetection); + if (!region.isNormalMapData()) { + mapLayer.removeRegionDetection(regX, regZ); + } } if (!region.hasHadTerrain()) { diff --git a/src/main/java/xaeroplus/mixin/client/MixinMapSaveLoad.java b/src/main/java/xaeroplus/mixin/client/MixinMapSaveLoad.java index 874ffb47..9e46eb90 100644 --- a/src/main/java/xaeroplus/mixin/client/MixinMapSaveLoad.java +++ b/src/main/java/xaeroplus/mixin/client/MixinMapSaveLoad.java @@ -57,7 +57,8 @@ public abstract class MixinMapSaveLoad implements CustomDimensionMapSaveLoad { private HashMap, Integer> regionSaveBiomePalette; @Shadow public abstract File getFile(MapRegion region); - + @Shadow + public abstract File getNormalFile(MapRegion region); @Shadow public abstract void backupFile(File file, int saveVersion); @Shadow @@ -410,131 +411,135 @@ public boolean saveRegion(MapRegion region, int extraAttempts) { } return region.countChunks() > 0; - } else if (!region.isNormalMapData()) { + } else if (!region.isResaving() && !region.isNormalMapData()) { if (WorldMap.settings.debug) { WorldMap.LOGGER.info("Save not required for world save map: " + region + " " + region.getWorldId() + " " + region.getDimId()); } return region.countChunks() > 0; } else { - File permFile = this.getFile(region); - File file = this.getTempFile(permFile); - if (file == null) { - return true; + File permFile = this.getNormalFile(region); + if (!permFile.toPath().startsWith(WorldMap.saveFolder.toPath())) { + throw new IllegalArgumentException(); } else { - if (!file.exists()) { - file.createNewFile(); - } - - boolean hasAnything = false; - boolean regionWasSavedEmpty = true; - ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); // does not need to be closed - - try(DataOutputStream out = new DataOutputStream(byteOut); - ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(Files.newOutputStream(file.toPath())))) { - //zip fast - ZipEntry e = new ZipEntry("region.xaero"); - zipOut.putNextEntry(e); - int fullVersion = 393224; - out.write(255); - out.writeInt(fullVersion); - this.regionSavePalette.clear(); - this.regionSaveBiomePalette.clear(); - Registry biomeRegistry = region.getBiomeRegistry(); + File file = this.getTempFile(permFile); + if (file == null) { + return true; + } else { + if (!file.exists()) { + file.createNewFile(); + } - for(int o = 0; o < 8; ++o) { - for(int p = 0; p < 8; ++p) { - MapTileChunk chunk = region.getChunk(o, p); - if (chunk != null) { - hasAnything = true; - if (!chunk.includeInSave()) { - if (!chunk.hasHighlightsIfUndiscovered()) { - region.uncountTextureBiomes(chunk.getLeafTexture()); - region.setChunk(o, p, null); - synchronized(chunk) { - chunk.getLeafTexture().deleteTexturesAndBuffers(); + boolean hasAnything = false; + boolean regionWasSavedEmpty = true; + ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); // does not need to be closed + + try(DataOutputStream out = new DataOutputStream(byteOut); + ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(Files.newOutputStream(file.toPath())))) { + //zip fast + ZipEntry e = new ZipEntry("region.xaero"); + zipOut.putNextEntry(e); + int fullVersion = 393224; + out.write(255); + out.writeInt(fullVersion); + this.regionSavePalette.clear(); + this.regionSaveBiomePalette.clear(); + Registry biomeRegistry = region.getBiomeRegistry(); + + for(int o = 0; o < 8; ++o) { + for(int p = 0; p < 8; ++p) { + MapTileChunk chunk = region.getChunk(o, p); + if (chunk != null) { + hasAnything = true; + if (!chunk.includeInSave()) { + if (!chunk.hasHighlightsIfUndiscovered()) { + region.uncountTextureBiomes(chunk.getLeafTexture()); + region.setChunk(o, p, null); + synchronized(chunk) { + chunk.getLeafTexture().deleteTexturesAndBuffers(); + } } - } - - BranchLeveledRegion parentRegion = region.getParent(); - if (parentRegion != null) { - parentRegion.setShouldCheckForUpdatesRecursive(true); - } - } else { - out.write(o << 4 | p); - boolean chunkIsEmpty = true; - for(int i = 0; i < 4; ++i) { - for(int j = 0; j < 4; ++j) { - MapTile tile = chunk.getTile(i, j); - if (tile != null && tile.isLoaded()) { - chunkIsEmpty = false; - - for(int x = 0; x < 16; ++x) { - MapBlock[] c = tile.getBlockColumn(x); - - for(int z = 0; z < 16; ++z) { - this.savePixel(c[z], out, biomeRegistry); + BranchLeveledRegion parentRegion = region.getParent(); + if (parentRegion != null) { + parentRegion.setShouldCheckForUpdatesRecursive(true); + } + } else { + out.write(o << 4 | p); + boolean chunkIsEmpty = true; + + for(int i = 0; i < 4; ++i) { + for(int j = 0; j < 4; ++j) { + MapTile tile = chunk.getTile(i, j); + if (tile != null && tile.isLoaded()) { + chunkIsEmpty = false; + + for(int x = 0; x < 16; ++x) { + MapBlock[] c = tile.getBlockColumn(x); + + for(int z = 0; z < 16; ++z) { + this.savePixel(c[z], out, biomeRegistry); + } } - } - out.write(tile.getWorldInterpretationVersion()); - out.writeInt(tile.getWrittenCaveStart()); - out.write(tile.getWrittenCaveDepth()); - } else { - out.writeInt(-1); + out.write(tile.getWorldInterpretationVersion()); + out.writeInt(tile.getWrittenCaveStart()); + out.write(tile.getWrittenCaveDepth()); + } else { + out.writeInt(-1); + } } } - } - if (!chunkIsEmpty) { - regionWasSavedEmpty = false; + if (!chunkIsEmpty) { + regionWasSavedEmpty = false; + } } } } } + zipOut.write(byteOut.toByteArray()); + zipOut.closeEntry(); } - zipOut.write(byteOut.toByteArray()); - zipOut.closeEntry(); - } - if (regionWasSavedEmpty) { - this.safeDelete(permFile.toPath(), ".zip"); - this.safeDelete(file.toPath(), ".temp"); - if (WorldMap.settings.debug) { - WorldMap.LOGGER + if (regionWasSavedEmpty) { + this.safeDelete(permFile.toPath(), ".zip"); + this.safeDelete(file.toPath(), ".temp"); + if (WorldMap.settings.debug) { + WorldMap.LOGGER .info( - "Save cancelled because the region would be saved empty: " - + region - + " " - + region.getWorldId() - + " " - + region.getDimId() - + " " - + region.getMwId() + "Save cancelled because the region would be saved empty: " + + region + + " " + + region.getWorldId() + + " " + + region.getDimId() + + " " + + region.getMwId() ); - } + } - return hasAnything; - } else { - this.safeMoveAndReplace(file.toPath(), permFile.toPath(), ".temp", ".zip"); - if (WorldMap.settings.debug) { - WorldMap.LOGGER + return hasAnything; + } else { + this.safeMoveAndReplace(file.toPath(), permFile.toPath(), ".temp", ".zip"); + if (WorldMap.settings.debug) { + WorldMap.LOGGER .info( - "Region saved: " - + region - + " " - + region.getWorldId() - + " " - + region.getDimId() - + " " - + region.getMwId() - + ", " - + this.mapProcessor.getMapWriter().getUpdateCounter() + "Region saved: " + + region + + " " + + region.getWorldId() + + " " + + region.getDimId() + + " " + + region.getMwId() + + ", " + + this.mapProcessor.getMapWriter().getUpdateCounter() ); - } + } - return true; + return true; + } } } } diff --git a/src/main/java/xaeroplus/mixin/client/MixinMapWriter.java b/src/main/java/xaeroplus/mixin/client/MixinMapWriter.java index ad7f3287..30a54ea1 100644 --- a/src/main/java/xaeroplus/mixin/client/MixinMapWriter.java +++ b/src/main/java/xaeroplus/mixin/client/MixinMapWriter.java @@ -572,13 +572,7 @@ public void onRender(BiomeColorCalculator biomeColorCalculator, OverlayManager o boolean shouldRequestLoading = false; LeveledRegion nextToLoad = this.mapProcessor.getMapSaveLoad().getNextToLoadByViewing(); if (nextToLoad != null) { - synchronized (nextToLoad) { - if (!nextToLoad.reloadHasBeenRequested() - && !nextToLoad.hasRemovableSourceData() - && (!(nextToLoad instanceof MapRegion) || !((MapRegion) nextToLoad).isRefreshing())) { - shouldRequestLoading = true; - } - } + shouldRequestLoading = nextToLoad.shouldAllowAnotherRegionToLoad(); } else { shouldRequestLoading = true; } @@ -597,9 +591,8 @@ public void onRender(BiomeColorCalculator biomeColorCalculator, OverlayManager o synchronized (visitRegion) { if (visitRegion.isResting() && shouldRequestLoading - && !visitRegion.reloadHasBeenRequested() - && !visitRegion.recacheHasBeenRequested() - && (visitRegion.getLoadState() == 0 || visitRegion.getLoadState() == 4)) { + && visitRegion.canRequestReload_unsynced() + && visitRegion.getLoadState() != 2) { visitRegion.calculateSortingChunkDistance(); Misc.addToListOfSmallest(10, this.regionBuffer, visitRegion); } @@ -614,9 +607,7 @@ public void onRender(BiomeColorCalculator biomeColorCalculator, OverlayManager o MapRegion region = this.regionBuffer.get(i); if (region != nextToLoad || this.regionBuffer.size() <= 1) { synchronized (region) { - if (!region.reloadHasBeenRequested() - && !region.recacheHasBeenRequested() - && (region.getLoadState() == 0 || region.getLoadState() == 4)) { + if (region.canRequestReload_unsynced() && region.getLoadState() != 2) { region.setBeingWritten(true); this.mapProcessor.getMapSaveLoad().requestLoad(region, "writing"); if (counter == 0) { diff --git a/src/main/java/xaeroplus/mixin/client/MixinSupportXaeroWorldmap.java b/src/main/java/xaeroplus/mixin/client/MixinSupportXaeroWorldmap.java index 1ec7f52f..dfde976e 100644 --- a/src/main/java/xaeroplus/mixin/client/MixinSupportXaeroWorldmap.java +++ b/src/main/java/xaeroplus/mixin/client/MixinSupportXaeroWorldmap.java @@ -134,6 +134,7 @@ public void drawMinimapWithDrawContext( int maxX = (mapX >> 2) + scaledSize; int minZ = (mapZ >> 2) - scaledSize; int maxZ = (mapZ >> 2) + scaledSize; + boolean wmHasFullReload = compatibilityVersion >= 23; int globalRegionCacheHashCode = WorldMap.settings.getRegionCacheHashCode(); boolean reloadEverything = WorldMap.settings.reloadEverything; int globalReloadVersion = WorldMap.settings.reloadVersion; @@ -155,7 +156,11 @@ public void drawMinimapWithDrawContext( shouldRequestLoading = false; LeveledRegion nextToLoad = mapProcessor.getMapSaveLoad().getNextToLoadByViewing(); Object var76 = nextToLoad; - if (nextToLoad != null) { + if (nextToLoad == null) { + shouldRequestLoading = true; + } else if (wmHasFullReload) { + shouldRequestLoading = nextToLoad.shouldAllowAnotherRegionToLoad(); + } else { synchronized(nextToLoad) { if (!nextToLoad.reloadHasBeenRequested() && !nextToLoad.hasRemovableSourceData() @@ -163,8 +168,6 @@ public void drawMinimapWithDrawContext( shouldRequestLoading = true; } } - } else { - shouldRequestLoading = true; } this.regionBuffer.clear(); @@ -246,23 +249,26 @@ public void drawMinimapWithDrawContext( MapRegion region = (MapRegion)this.regionBuffer.get(i); if (region != var76 || this.regionBuffer.size() <= 1) { synchronized(region) { - if (!region.reloadHasBeenRequested() - && !region.recacheHasBeenRequested() - && (!(region instanceof MapRegion) || !region.isRefreshing()) - && (region.getLoadState() == 0 || region.getLoadState() == 4 || region.getLoadState() == 2 && region.isBeingWritten())) { - if (region.getLoadState() == 2) { - region.requestRefresh(mapProcessor); - } else { - mapProcessor.getMapSaveLoad().requestLoad(region, "Minimap sorted", false); - } + if (!wmHasFullReload || region.canRequestReload_unsynced()) { + if (wmHasFullReload + || !region.reloadHasBeenRequested() + && !region.recacheHasBeenRequested() + && (!(region instanceof MapRegion) || !region.isRefreshing()) + && (region.getLoadState() == 0 || region.getLoadState() == 4 || region.getLoadState() == 2 && region.isBeingWritten())) { + if (region.getLoadState() == 2) { + region.requestRefresh(mapProcessor); + } else { + mapProcessor.getMapSaveLoad().requestLoad(region, "Minimap sorted", false); + } - if (counter == 0) { - mapProcessor.getMapSaveLoad().setNextToLoadByViewing(region); - } + if (counter == 0) { + mapProcessor.getMapSaveLoad().setNextToLoadByViewing(region); + } - ++counter; - if (region.getLoadState() == 4) { - break; + ++counter; + if (region.getLoadState() == 4) { + break; + } } } } @@ -315,6 +321,7 @@ public void renderChunksWithDrawContext( if (XaeroPlusSettingRegistry.transparentMinimapBackground.getValue()) bgBufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); Matrix4f matrix = matrixStack.peek().getPositionMatrix(); + boolean wmHasFullReload = this.compatibilityVersion >= 23; for(int i = minX; i <= maxX; ++i) { for(int j = minZ; j <= maxZ; ++j) { @@ -330,9 +337,13 @@ public void renderChunksWithDrawContext( int regionHashCode = region.getCacheHashCode(); int regionReloadVersion = region.getReloadVersion(); if (shouldRequestLoading - && !region.recacheHasBeenRequested() - && !region.reloadHasBeenRequested() - && (!(region instanceof MapRegion) || !region.isRefreshing()) + && ( + wmHasFullReload && region.canRequestReload_unsynced() + || !wmHasFullReload + && !region.recacheHasBeenRequested() + && !region.reloadHasBeenRequested() + && (!(region instanceof MapRegion) || !region.isRefreshing()) + ) && ( region.getLoadState() == 0 || (region.getLoadState() == 4 || region.getLoadState() == 2 && region.isBeingWritten()) diff --git a/src/main/java/xaeroplus/mixin/client/MixinWaypointsIngameRenderer.java b/src/main/java/xaeroplus/mixin/client/MixinWaypointsIngameRenderer.java index 318eab69..11744f3c 100644 --- a/src/main/java/xaeroplus/mixin/client/MixinWaypointsIngameRenderer.java +++ b/src/main/java/xaeroplus/mixin/client/MixinWaypointsIngameRenderer.java @@ -57,7 +57,9 @@ public boolean test(final Waypoint w) { && (w.getWaypointType() != 1 && w.getWaypointType() != 2 || deathpoints)) { double offX = (double)w.getX(filterParams.dimDiv) - filterParams.cameraX + 0.5; double offZ = (double)w.getZ(filterParams.dimDiv) - filterParams.cameraZ + 0.5; - double distance2D = Math.sqrt(offX * offX + offZ * offZ); + double distanceScale = filterParams.dimensionScaleDistance ? MinecraftClient.getInstance().world.getDimension().coordinateScale() : 1.0; + double unscaledDistance2D = Math.sqrt(offX * offX + offZ * offZ); + double distance2D = unscaledDistance2D * distanceScale; double waypointsDistance = filterParams.waypointsDistance; double waypointsDistanceMin = filterParams.waypointsDistanceMin; return w.isOneoffDestination() @@ -68,7 +70,7 @@ public boolean test(final Waypoint w) { || waypointsDistance == 0.0 || !(distance2D > waypointsDistance) ) - && (waypointsDistanceMin == 0.0 || !(distance2D < waypointsDistanceMin)); + && (waypointsDistanceMin == 0.0 || !(unscaledDistance2D < waypointsDistanceMin)); } else { return false; } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 4c782497..0ee9d1a6 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -27,6 +27,6 @@ "minecraft": "~1.20", "java": ">=17", "fabric-api": "*", - "xaeroworldmap": "1.35.0" + "xaeroworldmap": "1.36.0" } }