diff --git a/src/main/java/emu/grasscutter/data/server/Grid.java b/src/main/java/emu/grasscutter/data/server/Grid.java index 5c4ede451..fe42129f4 100644 --- a/src/main/java/emu/grasscutter/data/server/Grid.java +++ b/src/main/java/emu/grasscutter/data/server/Grid.java @@ -3,12 +3,31 @@ package emu.grasscutter.data.server; import emu.grasscutter.Grasscutter; import emu.grasscutter.utils.GridPosition; import emu.grasscutter.utils.Position; + import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; public class Grid { - public Map> grid; + public Map> grid; + public Map> gridMap + = new LinkedHashMap<>(); + + /** + * Loads the correct grid map. + */ + public void load() { + this.grid.forEach((position, groups) -> + this.gridMap.put(new GridPosition(position), groups)); + } + + /** + * @return The correctly loaded grid map. + */ + public Map> getGrid() { + return this.gridMap; + } public Set getNearbyGroups(int vision_level, Position position) { int width = Grasscutter.getConfig().server.game.visionOptions[vision_level].gridWidth; @@ -22,10 +41,10 @@ public class Grid { // should not affect much the loading for (int x = 0; x < vision_range_grid + 1; x++) { for (int z = 0; z < vision_range_grid + 1; z++) { - nearbyGroups.addAll(grid.getOrDefault(pos.addClone(x, z), new HashSet<>())); - nearbyGroups.addAll(grid.getOrDefault(pos.addClone(-x, z), new HashSet<>())); - nearbyGroups.addAll(grid.getOrDefault(pos.addClone(x, -z), new HashSet<>())); - nearbyGroups.addAll(grid.getOrDefault(pos.addClone(-x, -z), new HashSet<>())); + nearbyGroups.addAll(gridMap.getOrDefault(pos.addClone(x, z), new HashSet<>())); + nearbyGroups.addAll(gridMap.getOrDefault(pos.addClone(-x, z), new HashSet<>())); + nearbyGroups.addAll(gridMap.getOrDefault(pos.addClone(x, -z), new HashSet<>())); + nearbyGroups.addAll(gridMap.getOrDefault(pos.addClone(-x, -z), new HashSet<>())); } } diff --git a/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java b/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java index bb5bd689f..555fb7ab1 100644 --- a/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java +++ b/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java @@ -427,6 +427,7 @@ public class SceneScriptManager { try { this.groupGrids = JsonUtils.loadToList(path, Grid.class); + this.groupGrids.forEach(Grid::load); } catch (IOException ignored) { Grasscutter.getLogger().error("Scene {} unable to load grid file.", getScene().getId()); } catch (Exception e) { @@ -552,7 +553,7 @@ public class SceneScriptManager { this.groupGrids = new ArrayList<>(); for (int i = 0; i < 6; i++) { this.groupGrids.add(new Grid()); - this.groupGrids.get(i).grid = groupPositions.get(i); + this.groupGrids.get(i).gridMap = groupPositions.get(i); } try (FileWriter file = new FileWriter(path.toFile())) { diff --git a/src/main/java/emu/grasscutter/utils/GridPosition.java b/src/main/java/emu/grasscutter/utils/GridPosition.java index d7f650a32..3f7996b9e 100644 --- a/src/main/java/emu/grasscutter/utils/GridPosition.java +++ b/src/main/java/emu/grasscutter/utils/GridPosition.java @@ -6,6 +6,7 @@ import java.io.Serializable; import java.util.List; import lombok.Getter; import lombok.Setter; +import lombok.SneakyThrows; @Entity public class GridPosition implements Serializable { @@ -37,7 +38,8 @@ public class GridPosition implements Serializable { this.x = xzwidth.get(0); } - public GridPosition(String str) throws IOException { + @SneakyThrows + public GridPosition(String str) { String[] listOfParams = str.replace(" ", "").replace("(", "").replace(")", "").split(","); if (listOfParams.length != 3) throw new IOException("invalid size on GridPosition definition - ");