Compare commits

...

2 Commits

Author SHA1 Message Date
dordsor21
22974d6478 Further work 2025-08-23 16:37:56 +01:00
dordsor21
4924ffe03b fix: correct height that FAWE ends up using for schematics
- this did not end up having an impact on P2 code as it always used getMinBuildHeight when PASTE_ON_TOP was false anyway
 - there should not be any side effects to this as any uses this specific SCHEM_Y value are effectively normalised against it
2025-08-23 10:53:26 +01:00
3 changed files with 11 additions and 10 deletions

View File

@@ -164,6 +164,9 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld {
: getMinBuildHeight();
}
/**
* Get the lowest height of plot, road, and wall. Accounts for {@link Settings.Schematics#USE_WALL_IN_ROAD_SCHEM_HEIGHT}
*/
int schematicStartHeight() {
int plotRoadMin = Math.min(PLOT_HEIGHT, ROAD_HEIGHT);
if (!Settings.Schematics.USE_WALL_IN_ROAD_SCHEM_HEIGHT) {

View File

@@ -274,7 +274,8 @@ public class HybridPlotWorld extends ClassicPlotWorld {
SCHEM_Y = getMinGenHeight();
plotY = 0;
} else if (!Settings.Schematics.PASTE_ON_TOP) {
SCHEM_Y = getMinGenHeight();
// Schematics should generate/be pasted from build height
SCHEM_Y = getMinBuildHeight();
plotY = 0;
}
}
@@ -291,18 +292,14 @@ public class HybridPlotWorld extends ClassicPlotWorld {
roadY = 0; // Road is the lowest schematic
if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldGenHeight) {
// Road is the lowest schematic. Normalize plotY to it.
if (Settings.Schematics.PASTE_ON_TOP) {
plotY = PLOT_HEIGHT - getMinGenHeight();
}
plotY = (Settings.Schematics.PASTE_ON_TOP ? PLOT_HEIGHT : getMinBuildHeight()) - SCHEM_Y;
}
} else if (!Settings.Schematics.PASTE_ROAD_ON_TOP) {
roadY = 0;
SCHEM_Y = getMinGenHeight();
if (schematic3 != null) {
if (Settings.Schematics.PASTE_ON_TOP) {
// Road is the lowest schematic. Normalize plotY to it.
plotY = PLOT_HEIGHT - SCHEM_Y;
}
if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldGenHeight) {
// Road is the lowest schematic. Normalize plotY to it.
plotY = (Settings.Schematics.PASTE_ON_TOP ? PLOT_HEIGHT : getMinBuildHeight()) - SCHEM_Y;
}
} else {
roadY = minRoadWall - SCHEM_Y;

View File

@@ -68,6 +68,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -529,7 +530,7 @@ public class HybridUtils {
final QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(world));
Location bot = plot.getBottomAbs().subtract(1, 0, 1);
Location top = plot.getTopAbs();
final HybridPlotWorld plotworld = (HybridPlotWorld) plot.getArea();
final HybridPlotWorld plotworld = Objects.requireNonNull((HybridPlotWorld) plot.getArea());
// Do not use plotworld#schematicStartHeight() here as we want to restore the pre 6.1.4 way of doing it if
// USE_WALL_IN_ROAD_SCHEM_HEIGHT is false
int schemY = Settings.Schematics.USE_WALL_IN_ROAD_SCHEM_HEIGHT ?