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 87e7e320..4b1e1456 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionSystem.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionSystem.java @@ -23,17 +23,16 @@ import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.features.region.WireframeCommand; import de.steamwar.bausystem.region.dynamic.*; import de.steamwar.bausystem.region.dynamic.global.GlobalRegion; -import de.steamwar.bausystem.region.dynamic.path.PathRegion; import de.steamwar.bausystem.shared.Pair; -import de.steamwar.bausystem.utils.PasteBuilder; import lombok.NonNull; +import lombok.RequiredArgsConstructor; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; import java.io.BufferedReader; -import java.io.File; import java.io.InputStreamReader; import java.util.*; import java.util.function.Function; @@ -162,6 +161,36 @@ public class DynamicRegionSystem implements RegionSystem { return regionTypeMap.getOrDefault(type, Collections.emptySet()).stream(); } + @RequiredArgsConstructor + public static class Neighbour { + public final T region; + public final Tile tile; + public final NeighbourDirection direction; + + public Neighbour as(Class clazz) { + if (!clazz.isInstance(region)) { + return null; + } else { + return (Neighbour) this; + } + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof Neighbour neighbour)) return false; + return Objects.equals(tile, neighbour.tile) && direction == neighbour.direction; + } + + @Override + public int hashCode() { + return Objects.hash(tile, direction); + } + } + + private Stream> getNeighbours2(Region region, boolean noCorners, boolean fastCache, Collection regions) { + throw new UnsupportedOperationException(); + } + private Stream> getNeighbours(Region region, boolean noCorners, boolean fastCache, Collection regions) { Point minPoint = region.getArea().getMinPoint(false).subtract(TILE_SIZE_ADJUSTED, 0, TILE_SIZE_ADJUSTED); Point maxPoint = region.getArea().getMaxPoint(false).add(Tile.tileSize, 0, Tile.tileSize);