mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2025-07-05 04:26:42 +00:00
Improve performance of various commands/actions
- Add chunk preloading to RegionVisitor if supplied with a suitable Extent - Where extents are used in masks, set EditSession as the extent as they are otherwise initialised with WorldWrapper that is very slow - Fixes #1073
This commit is contained in:
@ -177,7 +177,9 @@ public class BiomeCommands {
|
||||
if (mask != null) {
|
||||
replace = new RegionMaskingFilter(editSession, mask, replace);
|
||||
}
|
||||
RegionVisitor visitor = new RegionVisitor(region, replace);
|
||||
//FAWE start > add extent to RegionVisitor to allow chunk preloading
|
||||
RegionVisitor visitor = new RegionVisitor(region, replace, editSession);
|
||||
//FAWE end
|
||||
Operations.completeLegacy(visitor);
|
||||
|
||||
player.print(Caption.of(
|
||||
|
@ -35,6 +35,7 @@ import com.sk89q.worldedit.command.util.annotation.Confirm;
|
||||
import com.sk89q.worldedit.entity.Player;
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.fastasyncworldedit.core.function.generator.CavesGen;
|
||||
import com.sk89q.worldedit.function.mask.AbstractExtentMask;
|
||||
import com.sk89q.worldedit.function.mask.Mask;
|
||||
import com.sk89q.worldedit.function.operation.Operations;
|
||||
import com.sk89q.worldedit.function.pattern.Pattern;
|
||||
@ -467,6 +468,9 @@ public class GenerationCommands {
|
||||
@Logging(PLACEMENT)
|
||||
@Confirm(Confirm.Processor.REGION)
|
||||
public void ores(Actor actor, LocalSession session, EditSession editSession, @Selection Region region, @Arg(desc = "Mask") Mask mask) throws WorldEditException {
|
||||
if (mask instanceof AbstractExtentMask) {
|
||||
((AbstractExtentMask) mask).setExtent(editSession);
|
||||
}
|
||||
editSession.addOres(region, mask);
|
||||
actor.print(Caption.of("fawe.worldedit.visitor.visitor.block", editSession.getBlockChangeCount()));
|
||||
}
|
||||
@ -516,7 +520,7 @@ public class GenerationCommands {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}, editSession);
|
||||
Operations.completeBlindly(visitor);
|
||||
actor.print(Caption.of("fawe.worldedit.visitor.visitor.block", editSession.getBlockChangeCount()));
|
||||
}
|
||||
@ -536,6 +540,9 @@ public class GenerationCommands {
|
||||
@Arg(desc = "Ore vein rarity (% chance each attempt is placed)", def = "100") @Range(from = 0, to = 100) int rarity,
|
||||
@Arg(desc = "Ore vein min y", def = "0") @Range(from = 0, to = 255) int minY,
|
||||
@Arg(desc = "Ore vein max y", def = "63") @Range(from = 0, to = 255) int maxY) throws WorldEditException {
|
||||
if (mask instanceof AbstractExtentMask) {
|
||||
((AbstractExtentMask) mask).setExtent(editSession);
|
||||
}
|
||||
editSession.addOre(region, mask, material, size, freq, rarity, minY, maxY);
|
||||
actor.print(Caption.of("fawe.worldedit.visitor.visitor.block", editSession.getBlockChangeCount()));
|
||||
}
|
||||
|
@ -299,6 +299,10 @@ public class RegionCommands {
|
||||
Pattern to) throws WorldEditException {
|
||||
if (from == null) {
|
||||
from = new ExistingBlockMask(editSession);
|
||||
//FAWE start > the mask will have been initialised with a WorldWrapper extent (very bad/slow
|
||||
} else if (from instanceof AbstractExtentMask) {
|
||||
((AbstractExtentMask) from).setExtent(editSession);
|
||||
//FAWE end
|
||||
}
|
||||
if (from instanceof AbstractExtentMask) {
|
||||
((AbstractExtentMask) from).setExtent(editSession);
|
||||
@ -422,6 +426,11 @@ public class RegionCommands {
|
||||
Mask mask,
|
||||
@Switch(name = 's', desc = "The flag makes it only consider snow")
|
||||
boolean snow) throws WorldEditException {
|
||||
//FAWE start > the mask will have been initialised with a WorldWrapper extent (very bad/slow)
|
||||
if (mask instanceof AbstractExtentMask) {
|
||||
((AbstractExtentMask) mask).setExtent(editSession);
|
||||
}
|
||||
//FAWE end
|
||||
BlockVector3 min = region.getMinimumPoint();
|
||||
BlockVector3 max = region.getMaximumPoint();
|
||||
long volume = (((long) max.getX() - (long) min.getX() + 1) * ((long) max.getY() - (long) min.getY() + 1) * ((long) max.getZ() - (long) min.getZ() + 1));
|
||||
@ -502,7 +511,11 @@ public class RegionCommands {
|
||||
@ArgFlag(name = 'm', desc = "Set the include mask, non-matching blocks become air")
|
||||
Mask mask) throws WorldEditException {
|
||||
checkCommandArgument(count >= 1, "Count must be >= 1");
|
||||
|
||||
//FAWE start > the mask will have been initialised with a WorldWrapper extent (very bad/slow)
|
||||
if (mask instanceof AbstractExtentMask) {
|
||||
((AbstractExtentMask) mask).setExtent(editSession);
|
||||
}
|
||||
//FAWE end
|
||||
Mask combinedMask;
|
||||
if (ignoreAirBlocks) {
|
||||
if (mask == null) {
|
||||
@ -573,7 +586,11 @@ public class RegionCommands {
|
||||
boolean copyBiomes,
|
||||
@ArgFlag(name = 'm', desc = "Set the include mask, non-matching blocks become air")
|
||||
Mask mask) throws WorldEditException {
|
||||
|
||||
//FAWE start > the mask will have been initialised with a WorldWrapper extent (very bad/slow)
|
||||
if (mask instanceof AbstractExtentMask) {
|
||||
((AbstractExtentMask) mask).setExtent(editSession);
|
||||
}
|
||||
//FAWE end
|
||||
Mask combinedMask;
|
||||
if (ignoreAirBlocks) {
|
||||
if (mask == null) {
|
||||
@ -731,7 +748,18 @@ public class RegionCommands {
|
||||
@ArgFlag(name = 'm', desc = "Mask to hollow with")
|
||||
Mask mask) throws WorldEditException {
|
||||
checkCommandArgument(thickness >= 0, "Thickness must be >= 0");
|
||||
Mask finalMask = mask == null ? new SolidBlockMask(editSession) : mask;
|
||||
|
||||
//FAWE start > the mask will have been initialised with a WorldWrapper extent (very bad/slow)
|
||||
Mask finalMask;
|
||||
if (mask != null) {
|
||||
if (mask instanceof AbstractExtentMask) {
|
||||
((AbstractExtentMask) mask).setExtent(editSession);
|
||||
}
|
||||
finalMask = mask;
|
||||
} else {
|
||||
finalMask = new SolidBlockMask(editSession);
|
||||
}
|
||||
//FAWE end
|
||||
|
||||
int affected = editSession.hollowOutRegion(region, thickness, pattern, finalMask);
|
||||
actor.print(Caption.of("worldedit.hollow.changed", TextComponent.of(affected)));
|
||||
|
@ -42,6 +42,7 @@ import com.sk89q.worldedit.extension.platform.Locatable;
|
||||
import com.sk89q.worldedit.extension.platform.permission.ActorSelectorLimits;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.function.block.BlockDistributionCounter;
|
||||
import com.sk89q.worldedit.function.mask.AbstractExtentMask;
|
||||
import com.sk89q.worldedit.function.mask.Mask;
|
||||
import com.sk89q.worldedit.function.operation.Operations;
|
||||
import com.sk89q.worldedit.function.visitor.RegionVisitor;
|
||||
@ -534,6 +535,11 @@ public class SelectionCommands {
|
||||
public int count(Actor actor, World world, LocalSession session, EditSession editSession,
|
||||
@Arg(desc = "The mask of blocks to match")
|
||||
Mask mask) throws WorldEditException {
|
||||
//FAWE start > the mask will have been initialised with a WorldWrapper extent (very bad/slow)
|
||||
if (mask instanceof AbstractExtentMask) {
|
||||
((AbstractExtentMask) mask).setExtent(editSession);
|
||||
}
|
||||
//FAWE end
|
||||
int count = editSession.countBlocks(session.getSelection(world), mask);
|
||||
actor.print(Caption.of("worldedit.count.counted", TextComponent.of(count)));
|
||||
return count;
|
||||
@ -545,6 +551,9 @@ public class SelectionCommands {
|
||||
)
|
||||
@CommandPermissions("worldedit.analysis.distr")
|
||||
public void distr(Actor actor, World world, LocalSession session,
|
||||
//FAWE start > add extent to RegionVisitor to allow chunk preloading
|
||||
EditSession editSession,
|
||||
//FAWE end
|
||||
@Switch(name = 'c', desc = "Get the distribution of the clipboard instead")
|
||||
boolean clipboardDistr,
|
||||
@Switch(name = 'd', desc = "Separate blocks by state")
|
||||
@ -557,13 +566,13 @@ public class SelectionCommands {
|
||||
if (clipboardDistr) {
|
||||
Clipboard clipboard = session.getClipboard().getClipboard(); // throws if missing
|
||||
BlockDistributionCounter count = new BlockDistributionCounter(clipboard, separateStates);
|
||||
RegionVisitor visitor = new RegionVisitor(clipboard.getRegion(), count);
|
||||
//FAWE start > add extent to RegionVisitor to allow chunk preloading
|
||||
RegionVisitor visitor = new RegionVisitor(clipboard.getRegion(), count, editSession);
|
||||
//FAWE end
|
||||
Operations.completeBlindly(visitor);
|
||||
distribution = count.getDistribution();
|
||||
} else {
|
||||
try (EditSession editSession = session.createEditSession(actor)) {
|
||||
distribution = editSession.getBlockDistribution(session.getSelection(world), separateStates);
|
||||
}
|
||||
}
|
||||
session.setLastDistribution(distribution);
|
||||
page = 1;
|
||||
|
@ -49,6 +49,7 @@ import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
|
||||
import com.sk89q.worldedit.function.EntityFunction;
|
||||
import com.sk89q.worldedit.function.mask.AbstractExtentMask;
|
||||
import com.sk89q.worldedit.function.mask.BlockTypeMask;
|
||||
import com.sk89q.worldedit.function.mask.ExistingBlockMask;
|
||||
import com.sk89q.worldedit.function.mask.Mask;
|
||||
@ -424,6 +425,11 @@ public class UtilityCommands {
|
||||
Mask mask,
|
||||
@Arg(desc = "The radius of the square to remove from", def = "50")
|
||||
int radius) throws WorldEditException {
|
||||
//FAWE start > the mask will have been initialised with a WorldWrapper extent (very bad/slow)
|
||||
if (mask instanceof AbstractExtentMask) {
|
||||
((AbstractExtentMask) mask).setExtent(editSession);
|
||||
}
|
||||
//FAWE end
|
||||
radius = Math.max(1, radius);
|
||||
we.checkMaxRadius(radius);
|
||||
|
||||
@ -446,6 +452,11 @@ public class UtilityCommands {
|
||||
Mask from,
|
||||
@Arg(desc = "The pattern of blocks to replace with")
|
||||
Pattern to) throws WorldEditException {
|
||||
//FAWE start > the mask will have been initialised with a WorldWrapper extent (very bad/slow)
|
||||
if (from instanceof AbstractExtentMask) {
|
||||
((AbstractExtentMask) from).setExtent(editSession);
|
||||
}
|
||||
//FAWE end
|
||||
radius = Math.max(1, radius);
|
||||
we.checkMaxRadius(radius);
|
||||
|
||||
|
Reference in New Issue
Block a user