From fa2f50dea81813c92bccff558b7164edc5ebeaa1 Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Tue, 28 Sep 2021 14:39:14 +0100 Subject: [PATCH] Sometimes an overlay position may not be able to be found. Attempt to resolve or fail nicely. --- .../tool/brush/ScatterOverlayBrush.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/command/tool/brush/ScatterOverlayBrush.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/command/tool/brush/ScatterOverlayBrush.java index b12ea73de..cd7ce9aaa 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/command/tool/brush/ScatterOverlayBrush.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/command/tool/brush/ScatterOverlayBrush.java @@ -1,6 +1,7 @@ package com.fastasyncworldedit.core.command.tool.brush; import com.fastasyncworldedit.core.math.LocalBlockVectorSet; +import com.fastasyncworldedit.core.math.MutableBlockVector3; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.MaxChangedBlocksException; import com.sk89q.worldedit.function.pattern.Pattern; @@ -15,10 +16,27 @@ public class ScatterOverlayBrush extends ScatterBrush { @Override public void apply(EditSession editSession, LocalBlockVectorSet placed, BlockVector3 pt, Pattern p, double size) throws MaxChangedBlocksException { - int x = pt.getBlockX(); - int y = pt.getBlockY(); - int z = pt.getBlockZ(); + final int x = pt.getBlockX(); + final int y = pt.getBlockY(); + final int z = pt.getBlockZ(); BlockVector3 dir = getDirection(pt); + if (dir == null) { + getDir: + { + MutableBlockVector3 mut = new MutableBlockVector3(pt); + for (int yy = 0; yy < size; yy++) { + if ((dir = getDirection(mut.mutY(y + yy))) != null) { + break getDir; + } + } + for (int yy = 0; yy > -size; yy--) { + if ((dir = getDirection(mut.mutY(y - yy))) != null) { + break getDir; + } + } + return; + } + } editSession.setBlock(x + dir.getBlockX(), y + dir.getBlockY(), z + dir.getBlockZ(), p); }