From 721d391e74e8f7a6118c83f253ac02370bc1127d Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Sat, 21 Mar 2026 22:52:10 +0100 Subject: [PATCH] Reduce usable tile area Fix DynamicRegionVisualizer throwing exceptions --- .../bausystem/region/DynamicRegionSystem.java | 11 +++++++- .../region/DynamicRegionVisualizer.java | 28 ++++++++++++------- .../bausystem/region/dynamic/Tile.java | 2 +- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionSystem.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionSystem.java index 16393b68..1521969e 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionSystem.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionSystem.java @@ -88,6 +88,14 @@ public class DynamicRegionSystem implements RegionSystem { .collect(Collectors.toUnmodifiableMap(entry -> entry.getValue().identifier(), Map.Entry::getKey)); DynamicRegionRepository.loadRegions(); + // [STDOUT] PATH 239 + // [STDOUT] DRY 4 + // [STDOUT] DRY_SPECIAL 18 + // [STDOUT] WET 2 + // [STDOUT] WET_SPECIAL 9 + regionTypeMap.forEach((type, regions) -> { + System.out.println(type + " " + regions.size()); + }); new DynamicRegionCommand(); new WireframeCommand(); } @@ -109,9 +117,10 @@ public class DynamicRegionSystem implements RegionSystem { Set tiles = new HashSet<>(); for (int x = minPoint.getX(); x < maxPoint.getX(); x += Tile.tileSize) { for (int z = minPoint.getZ(); z < maxPoint.getZ(); z += Tile.tileSize) { - tiles.add(Tile.fromXZ(x, z).orElseThrow()); + tiles.add(Tile.fromXZ(x, z).orElse(null)); } } + tiles.remove(null); return Collections.unmodifiableSet(tiles); } diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionVisualizer.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionVisualizer.java index 0d0dea21..281d9aa4 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionVisualizer.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionVisualizer.java @@ -89,7 +89,7 @@ public class DynamicRegionVisualizer implements SWPlayer.Component, Listener { Set tileSet = entityServer.getEntitiesByType(CTile.class) .stream() .filter(cTile -> { - if (Math.abs(cTile.tile.getTileX() - dx) > 20 || Math.abs(cTile.tile.getTileZ() - dz) > 20) { + if (Math.abs(cTile.tile.getTileX() - dx) > 40 || Math.abs(cTile.tile.getTileZ() - dz) > 40) { cTile.die(); return false; } else { @@ -99,8 +99,8 @@ public class DynamicRegionVisualizer implements SWPlayer.Component, Listener { .map(cTile -> cTile.tile) .collect(Collectors.toSet()); - for (int x = dx - 10; x <= dx + 10; x++) { - for (int z = dz - 10; z <= dz + 10; z++) { + for (int x = dx - 20; x <= dx + 20; x++) { + for (int z = dz - 20; z <= dz + 20; z++) { Tile tile = sourceTile.add(x, z).orElse(null); if (tile == null || tileSet.contains(tile)) continue; new CTile(entityServer, tile); @@ -214,12 +214,14 @@ public class DynamicRegionVisualizer implements SWPlayer.Component, Listener { private boolean valid = false; private Location getMinLocation() { - Tile tile = sourceTile.add(-DynamicRegionVisualizer.this.sourceTile.getTileX(), -DynamicRegionVisualizer.this.sourceTile.getTileZ()).orElseThrow(); + Tile tile = sourceTile.add(-DynamicRegionVisualizer.this.sourceTile.getTileX(), -DynamicRegionVisualizer.this.sourceTile.getTileZ()).orElse(null); + if (tile == null) tile = Tile.ZERO; return sourceLocation.clone().add(tile.getTileX(), 0, tile.getTileZ()); } private Location getMaxLocation() { - Tile tile = sourceTile.add(-DynamicRegionVisualizer.this.sourceTile.getTileX(), -DynamicRegionVisualizer.this.sourceTile.getTileZ()).orElseThrow(); + Tile tile = sourceTile.add(-DynamicRegionVisualizer.this.sourceTile.getTileX(), -DynamicRegionVisualizer.this.sourceTile.getTileZ()).orElse(null); + if (tile == null) tile = Tile.ZERO; return sourceLocation.clone().add(tile.getTileX(), 0, tile.getTileZ()).add(dx, 0, dz); } @@ -243,7 +245,8 @@ public class DynamicRegionVisualizer implements SWPlayer.Component, Listener { wireframe.setPos1And2(getMinLocation(), getMaxLocation()); for (int x = 0; x <= dx; x++) { for (int z = 0; z <= dz; z++) { - if (!DynamicRegionSystem.INSTANCE.get(sourceTile.add(x, z).orElseThrow()).getType().isGlobal()) { + Tile tile = sourceTile.add(x, z).orElse(null); + if (tile == null || !DynamicRegionSystem.INSTANCE.get(tile).getType().isGlobal()) { wireframe.setBlock(Material.RED_CONCRETE.createBlockData()); valid = false; return; @@ -282,19 +285,23 @@ public class DynamicRegionVisualizer implements SWPlayer.Component, Listener { Set tiles = new HashSet<>(); for (int x = 0; x <= dx; x++) { for (int z = 0; z <= dz; z++) { - tiles.add(Tile.fromTile(x + sourceTile.getTileX(), z + sourceTile.getTileZ()).orElseThrow()); + tiles.add(Tile.fromTile(x + sourceTile.getTileX(), z + sourceTile.getTileZ()).orElse(null)); } } + tiles.remove(null); Tile selected = tiles.stream().min(Comparator.comparing(current -> { int dx = current.getTileX() - tile.getTileX(); int dz = current.getTileZ() - tile.getTileZ(); return dx * dx + dz * dz; })) - .orElseThrow(); + .orElse(null); + if (selected == null) return; int dx = tile.getTileX() - selected.getTileX(); int dz = tile.getTileZ() - selected.getTileZ(); - sourceTile = sourceTile.add(dx, dz).orElseThrow(); + Tile newSourceTile = sourceTile.add(dx, dz).orElse(null); + if (newSourceTile == null) return; + sourceTile = newSourceTile; check(); } @@ -313,9 +320,10 @@ public class DynamicRegionVisualizer implements SWPlayer.Component, Listener { Set tiles = new HashSet<>(); for (int x = 0; x <= dx; x++) { for (int z = 0; z <= dz; z++) { - tiles.add(Tile.fromTile(x + sourceTile.getTileX(), z + sourceTile.getTileZ()).orElseThrow()); + tiles.add(Tile.fromTile(x + sourceTile.getTileX(), z + sourceTile.getTileZ()).orElse(null)); } } + tiles.remove(null); SWPlayer.allWithSingleComponent(DynamicRegionVisualizer.class) .forEach(pair -> pair.getComponent().resetTiles(tiles)); } diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/Tile.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/Tile.java index b3a6e3b2..ba703ec3 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/Tile.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/Tile.java @@ -34,7 +34,7 @@ public class Tile { public static final int tileSize = 21; public static final int tileOffset = tileSize / 2; - public static final int maxTile = 1023; + public static final int maxTile = 255; public static final int minTile = -maxTile; public static final int tilesPerAxis = maxTile * 2 + 1;