diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path/PathAreaTile.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path/PathAreaTile.java index d3429400..246d3d98 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path/PathAreaTile.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path/PathAreaTile.java @@ -22,6 +22,7 @@ package de.steamwar.bausystem.region.dynamic.path; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.math.transform.AffineTransform; import de.steamwar.bausystem.region.Point; import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.RegionSystem; @@ -39,40 +40,44 @@ import java.util.function.Function; public class PathAreaTile implements Region.Area { - private static final File PATH_DIR = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/path"); + private static final File PATH_DIR = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/path_actual"); private static final File PATH_CENTER = new File(PATH_DIR, "PathCenter.schem"); @RequiredArgsConstructor private enum Path { - North(0, -18, 5, 0), - South(0, 19, 5, 14), - West(-18, 0, 0, 5), - East(19, 0, 14, 5), + North(0, -18, 5, 0, 0), + South(0, 19, 5, 0, 180), + West(-18, 0, 5, 0, 90), + East(19, 0, 5, 0, 270), ; private final int checkX; private final int checkZ; private final int pasteX; private final int pasteZ; - private final Function function = connectionType -> { - return new File(PATH_DIR, "Path" + name() + connectionType.name() + ".schem"); + private final int rotate; + + private static final Function function = connectionType -> { + return new File(PATH_DIR, "PathEdge" + connectionType.name() + ".schem"); }; } @RequiredArgsConstructor private enum PathCorner { - NorthEast(Path.North, Path.East, 14, 0), - EastSouth(Path.East, Path.South, 14, 14), - SouthWest(Path.South, Path.West, 0, 14), - WestNorth(Path.West, Path.North, 0, 0), + NorthEast(Path.North, Path.East, 14, 0, 0), + EastSouth(Path.East, Path.South, 14, 0, 270), + SouthWest(Path.South, Path.West, 14, 0, 180), + WestNorth(Path.West, Path.North, 14, 0, 90), ; private final Path check1; private final Path check2; private final int pasteX; private final int pasteZ; - private final TriFunction function = (connectionType1, connectionType2, connectionTypeCorner) -> { - return new File(PATH_DIR, "Path" + name() + connectionType1.name() + connectionType2.name() + connectionTypeCorner.name() + ".schem"); + private final int rotate; + + private static final TriFunction function = (connectionType1, connectionType2, connectionTypeCorner) -> { + return new File(PATH_DIR, "PathCorner" + connectionType1.name() + connectionType2.name() + connectionTypeCorner.name() + ".schem"); }; private interface TriFunction { @@ -116,20 +121,20 @@ public class PathAreaTile implements Region.Area { @Nullable @Override public File getResetFile() { - return null; // TODO: I know what I do! + return null; // I know what I do! } @Override public void reset(PasteBuilder pasteBuilder, boolean extension) { Point minPoint = getMinPoint(false); - paste(PATH_CENTER, minPoint.add(5, 0, 5)); + paste(PATH_CENTER, minPoint.add(5, 0, 5), 0); for (Path path : Path.values()) { RegionType.ConnectionType connectionType = RegionSystem.INSTANCE.get(minPoint.add(path.checkX, 0, path.checkZ).toLocation((World) null)).getType().getConnectionType(); File schem = path.function.apply(connectionType); if (schem.exists()) { - paste(schem, minPoint.add(path.pasteX, 0, path.pasteZ)); + paste(schem, minPoint.add(path.pasteX, 0, path.pasteZ), path.rotate); } } @@ -139,17 +144,19 @@ public class PathAreaTile implements Region.Area { RegionType.ConnectionType connectionTypeCorner = RegionSystem.INSTANCE.get(minPoint.add(corner.check1.checkX + corner.check2.checkX, 0, corner.check1.checkZ + corner.check2.checkZ).toLocation((World) null)).getType().getConnectionType(); File schem = corner.function.apply(connectionType1, connectionType2, connectionTypeCorner); if (schem.exists()) { - paste(schem, minPoint.add(corner.pasteX, 0, corner.pasteZ)); + System.out.println(connectionType1 + " " + connectionType2 + " " + connectionTypeCorner + " " + schem); + paste(schem, minPoint.add(corner.pasteX, 0, corner.pasteZ), corner.rotate); } else { - paste(new File(PATH_DIR, "PathCornerUnknown.schem"), minPoint.add(corner.pasteX, 0, corner.pasteZ)); + System.out.println(connectionType1 + " " + connectionType2 + " " + connectionTypeCorner + " " + PATH_DIR.getAbsolutePath() + "/PathCornerUnknown.schem"); + paste(new File(PATH_DIR, "PathCornerUnknown.schem"), minPoint.add(corner.pasteX, 0, corner.pasteZ), corner.rotate); } } } - private void paste(File file, Point minPoint) { + private void paste(File file, Point minPoint, int rotate) { Clipboard clipboard = FlatteningWrapper.impl.loadSchematic(file); BlockVector3 offset = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin()); BlockVector3 to = minPoint.toBlockVector3().subtract(offset); - clipboard.paste(BukkitAdapter.adapt(Bukkit.getWorlds().get(0)), to); + clipboard.paste(BukkitAdapter.adapt(Bukkit.getWorlds().get(0)), to, false, true, new AffineTransform().rotateY(rotate)); } }