This commit is contained in:
dordsor21 2023-07-11 16:39:53 +01:00
parent c0e20a6fe5
commit 0a19f643b6
No known key found for this signature in database
GPG Key ID: 1E53E88969FFCF0B
3 changed files with 71 additions and 4 deletions

View File

@ -23,9 +23,11 @@ import com.sk89q.worldedit.world.World;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import javax.annotation.Nonnull;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -192,6 +194,10 @@ public class PlotSquaredFeature extends FaweMaskManager {
maskedRegion = new RegionIntersection(world, weRegions); maskedRegion = new RegionIntersection(world, weRegions);
} }
if (plot == null) {
return new FaweMask(maskedRegion);
}
return new PlotSquaredMask(maskedRegion, finalPlot); return new PlotSquaredMask(maskedRegion, finalPlot);
} }
@ -201,9 +207,9 @@ public class PlotSquaredFeature extends FaweMaskManager {
private final WeakReference<Set<Plot>> connectedPlots; private final WeakReference<Set<Plot>> connectedPlots;
private final boolean singlePlot; private final boolean singlePlot;
private PlotSquaredMask(Region region, Plot plot) { private PlotSquaredMask(@Nonnull Region region, @Nonnull Plot plot) {
super(region); super(region);
this.plot = plot; this.plot = Objects.requireNonNull(plot);
Set<Plot> connected = plot.getConnectedPlots(); Set<Plot> connected = plot.getConnectedPlots();
connectedPlots = new WeakReference<>(connected); connectedPlots = new WeakReference<>(connected);
singlePlot = connected.size() == 1; singlePlot = connected.size() == 1;

View File

@ -4,12 +4,15 @@ import com.fastasyncworldedit.core.extent.processor.ProcessorScope;
import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.Region;
import javax.annotation.Nonnull;
import java.util.Objects;
public class FaweMask implements IDelegateRegion { public class FaweMask implements IDelegateRegion {
private final Region region; private final Region region;
public FaweMask(Region region) { public FaweMask(@Nonnull Region region) {
this.region = region; this.region = Objects.requireNonNull(region);
} }
@Override @Override

View File

@ -50,12 +50,19 @@ import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
import com.sk89q.worldedit.function.EntityFunction; import com.sk89q.worldedit.function.EntityFunction;
import com.sk89q.worldedit.function.block.BlockReplace;
import com.sk89q.worldedit.function.mask.BlockTypeMask; import com.sk89q.worldedit.function.mask.BlockTypeMask;
import com.sk89q.worldedit.function.mask.BoundedHeightMask;
import com.sk89q.worldedit.function.mask.ExistingBlockMask; import com.sk89q.worldedit.function.mask.ExistingBlockMask;
import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.mask.Mask;
import com.sk89q.worldedit.function.mask.MaskIntersection;
import com.sk89q.worldedit.function.mask.Masks;
import com.sk89q.worldedit.function.mask.RegionMask;
import com.sk89q.worldedit.function.operation.Operations; import com.sk89q.worldedit.function.operation.Operations;
import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.function.visitor.DownwardVisitor;
import com.sk89q.worldedit.function.visitor.EntityVisitor; import com.sk89q.worldedit.function.visitor.EntityVisitor;
import com.sk89q.worldedit.function.visitor.RecursiveVisitor;
import com.sk89q.worldedit.internal.annotation.Direction; import com.sk89q.worldedit.internal.annotation.Direction;
import com.sk89q.worldedit.internal.annotation.VertHeight; import com.sk89q.worldedit.internal.annotation.VertHeight;
import com.sk89q.worldedit.internal.expression.EvaluationException; import com.sk89q.worldedit.internal.expression.EvaluationException;
@ -63,8 +70,10 @@ import com.sk89q.worldedit.internal.expression.Expression;
import com.sk89q.worldedit.internal.expression.ExpressionException; import com.sk89q.worldedit.internal.expression.ExpressionException;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.Vector2; import com.sk89q.worldedit.math.Vector2;
import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.regions.CylinderRegion; import com.sk89q.worldedit.regions.CylinderRegion;
import com.sk89q.worldedit.regions.EllipsoidRegion;
import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.util.formatting.component.SubtleFormat; import com.sk89q.worldedit.util.formatting.component.SubtleFormat;
import com.sk89q.worldedit.util.formatting.text.Component; import com.sk89q.worldedit.util.formatting.text.Component;
@ -836,6 +845,55 @@ public class UtilityCommands {
} }
} }
// @Command(
// name = "/hollowr",
// desc = "Hollow out a space recursively with a pattern"
// )
// @CommandPermissions("worldedit.hollowr")
// @Logging(PLACEMENT)
// public int hollowr(
// Actor actor,
// LocalSession session,
// EditSession editSession,
// @Arg(desc = "The radius to hollow out") Expression radiusExp,
// @ArgFlag(name = 'p', desc = "The blocks to fill with") Pattern pattern,
// @ArgFlag(name = 'm', desc = "The blocks remove", def = "") Mask mask
// ) throws WorldEditException {
// //FAWE start
// double radius = radiusExp.evaluate();
// //FAWE end
// radius = Math.max(1, radius);
// we.checkMaxRadius(radius);
// if (mask == null) {
// Mask mask = new MaskIntersection(
// new RegionMask(new EllipsoidRegion(null, origin, Vector3.at(radius, radius, radius))),
// new BoundedHeightMask(
// Math.max(lowerBound, minY),
// Math.min(maxY, origin.getBlockY())
// ),
// Masks.negate(new ExistingBlockMask(this))
// );
// }
//
// // Want to replace blocks
// BlockReplace replace = new BlockReplace(this, pattern);
//
// // Pick how we're going to visit blocks
// RecursiveVisitor visitor;
// //FAWE start - provide extent for preloading, min/max y
// if (recursive) {
// visitor = new RecursiveVisitor(mask, replace, (int) (radius * 2 + 1), minY, maxY, this);
// } else {
// visitor = new DownwardVisitor(mask, replace, origin.getBlockY(), (int) (radius * 2 + 1), minY, maxY, this);
// }
// //FAWE end
//
// BlockVector3 pos = session.getPlacementPosition(actor);
// int affected = editSession.res(pos, pattern, radius, depth, true);
// actor.print(Caption.of("worldedit.fillr.created", TextComponent.of(affected)));
// return affected;
// }
public static List<Map.Entry<URI, String>> filesToEntry(final File root, final List<File> files, final UUID uuid) { public static List<Map.Entry<URI, String>> filesToEntry(final File root, final List<File> files, final UUID uuid) {
return files.stream() return files.stream()
.map(input -> { // Keep this functional, as transform is evaluated lazily .map(input -> { // Keep this functional, as transform is evaluated lazily