Fix PathAreaTile

This commit is contained in:
2025-08-04 10:43:04 +02:00
parent 018b152013
commit 9b113334f6

View File

@ -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<RegionType.ConnectionType, File> function = connectionType -> {
return new File(PATH_DIR, "Path" + name() + connectionType.name() + ".schem");
private final int rotate;
private static final Function<RegionType.ConnectionType, File> 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<RegionType.ConnectionType, RegionType.ConnectionType, RegionType.ConnectionType, File> 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<RegionType.ConnectionType, RegionType.ConnectionType, RegionType.ConnectionType, File> function = (connectionType1, connectionType2, connectionTypeCorner) -> {
return new File(PATH_DIR, "PathCorner" + connectionType1.name() + connectionType2.name() + connectionTypeCorner.name() + ".schem");
};
private interface TriFunction<T, U, V, W> {
@ -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));
}
}