geforkt von Mirrors/FastAsyncWorldEdit
Added //forest that generates a forest in a selection.
Fixes WORLDEDIT-2958.
Dieser Commit ist enthalten in:
Ursprung
9627d830d7
Commit
0e615e5bf7
@ -1,4 +1,5 @@
|
|||||||
5.6
|
5.6
|
||||||
|
- Added //forest that generates a forest in a selection.
|
||||||
- Added -s flag to //paste to select the pasted area.
|
- Added -s flag to //paste to select the pasted area.
|
||||||
- Added //line command and EditSession method.
|
- Added //line command and EditSession method.
|
||||||
- Added /curve.
|
- Added /curve.
|
||||||
|
@ -19,37 +19,27 @@
|
|||||||
|
|
||||||
package com.sk89q.worldedit.commands;
|
package com.sk89q.worldedit.commands;
|
||||||
|
|
||||||
import static com.sk89q.minecraft.util.commands.Logging.LogMode.ALL;
|
|
||||||
import static com.sk89q.minecraft.util.commands.Logging.LogMode.ORIENTATION_REGION;
|
|
||||||
import static com.sk89q.minecraft.util.commands.Logging.LogMode.REGION;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import com.sk89q.minecraft.util.commands.Command;
|
import com.sk89q.minecraft.util.commands.Command;
|
||||||
import com.sk89q.minecraft.util.commands.CommandContext;
|
import com.sk89q.minecraft.util.commands.CommandContext;
|
||||||
import com.sk89q.minecraft.util.commands.CommandPermissions;
|
import com.sk89q.minecraft.util.commands.CommandPermissions;
|
||||||
import com.sk89q.minecraft.util.commands.Logging;
|
import com.sk89q.minecraft.util.commands.Logging;
|
||||||
import com.sk89q.worldedit.EditSession;
|
import com.sk89q.worldedit.*;
|
||||||
import com.sk89q.worldedit.HeightMap;
|
|
||||||
import com.sk89q.worldedit.LocalPlayer;
|
|
||||||
import com.sk89q.worldedit.LocalSession;
|
|
||||||
import com.sk89q.worldedit.Vector;
|
|
||||||
import com.sk89q.worldedit.WorldEdit;
|
|
||||||
import com.sk89q.worldedit.WorldEditException;
|
|
||||||
import com.sk89q.worldedit.blocks.BaseBlock;
|
import com.sk89q.worldedit.blocks.BaseBlock;
|
||||||
import com.sk89q.worldedit.blocks.BlockID;
|
import com.sk89q.worldedit.blocks.BlockID;
|
||||||
import com.sk89q.worldedit.expression.ExpressionException;
|
import com.sk89q.worldedit.expression.ExpressionException;
|
||||||
import com.sk89q.worldedit.filtering.GaussianKernel;
|
import com.sk89q.worldedit.filtering.GaussianKernel;
|
||||||
import com.sk89q.worldedit.filtering.HeightMapFilter;
|
import com.sk89q.worldedit.filtering.HeightMapFilter;
|
||||||
import com.sk89q.worldedit.masks.Mask;
|
import com.sk89q.worldedit.masks.Mask;
|
||||||
import com.sk89q.worldedit.patterns.Pattern;
|
import com.sk89q.worldedit.patterns.Pattern;
|
||||||
import com.sk89q.worldedit.patterns.SingleBlockPattern;
|
import com.sk89q.worldedit.patterns.SingleBlockPattern;
|
||||||
import com.sk89q.worldedit.regions.ConvexPolyhedralRegion;
|
import com.sk89q.worldedit.regions.*;
|
||||||
import com.sk89q.worldedit.regions.CuboidRegion;
|
import com.sk89q.worldedit.util.TreeGenerator;
|
||||||
import com.sk89q.worldedit.regions.Region;
|
|
||||||
import com.sk89q.worldedit.regions.RegionOperationException;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static com.sk89q.minecraft.util.commands.Logging.LogMode.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Region related commands.
|
* Region related commands.
|
||||||
@ -88,80 +78,80 @@ public class RegionCommands {
|
|||||||
|
|
||||||
player.print(affected + " block(s) have been changed.");
|
player.print(affected + " block(s) have been changed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Command(
|
@Command(
|
||||||
aliases = { "/line" },
|
aliases = { "/line" },
|
||||||
usage = "<block> [thickness]",
|
usage = "<block> [thickness]",
|
||||||
desc = "Draws a line segment between cuboid selection corners",
|
desc = "Draws a line segment between cuboid selection corners",
|
||||||
help =
|
help =
|
||||||
"Draws a line segment between cuboid selection corners.\n" +
|
"Draws a line segment between cuboid selection corners.\n" +
|
||||||
"Can only be used with cuboid selections.\n" +
|
"Can only be used with cuboid selections.\n" +
|
||||||
"Flags:\n" +
|
"Flags:\n" +
|
||||||
" -h generates only a shell",
|
" -h generates only a shell",
|
||||||
flags = "h",
|
flags = "h",
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 2
|
max = 2
|
||||||
)
|
)
|
||||||
@CommandPermissions("worldedit.region.line")
|
@CommandPermissions("worldedit.region.line")
|
||||||
@Logging(REGION)
|
@Logging(REGION)
|
||||||
public void line(CommandContext args, LocalSession session, LocalPlayer player,
|
public void line(CommandContext args, LocalSession session, LocalPlayer player,
|
||||||
EditSession editSession) throws WorldEditException {
|
EditSession editSession) throws WorldEditException {
|
||||||
|
|
||||||
Region region = session.getSelection(session.getSelectionWorld());
|
Region region = session.getSelection(session.getSelectionWorld());
|
||||||
if (!(region instanceof CuboidRegion)) {
|
if (!(region instanceof CuboidRegion)) {
|
||||||
player.printError("Invalid region type");
|
player.printError("Invalid region type");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.argsLength() < 2 ? false : args.getDouble(1) < 0) {
|
if (args.argsLength() < 2 ? false : args.getDouble(1) < 0) {
|
||||||
player.printError("Invalid thickness. Must not be negative");
|
player.printError("Invalid thickness. Must not be negative");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Pattern pattern = we.getBlockPattern(player, args.getString(0));
|
Pattern pattern = we.getBlockPattern(player, args.getString(0));
|
||||||
CuboidRegion cuboidregion = (CuboidRegion) region;
|
CuboidRegion cuboidregion = (CuboidRegion) region;
|
||||||
Vector pos1 = cuboidregion.getPos1();
|
Vector pos1 = cuboidregion.getPos1();
|
||||||
Vector pos2 = cuboidregion.getPos2();
|
Vector pos2 = cuboidregion.getPos2();
|
||||||
int blocksChanged = editSession.drawLine(pattern, pos1, pos2, args.argsLength() < 2 ? 0 : args.getDouble(1), !args.hasFlag('h'));
|
int blocksChanged = editSession.drawLine(pattern, pos1, pos2, args.argsLength() < 2 ? 0 : args.getDouble(1), !args.hasFlag('h'));
|
||||||
|
|
||||||
player.print(blocksChanged + " block(s) have been changed.");
|
player.print(blocksChanged + " block(s) have been changed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Command(
|
@Command(
|
||||||
aliases = { "/curve" },
|
aliases = { "/curve" },
|
||||||
usage = "<block> [thickness]",
|
usage = "<block> [thickness]",
|
||||||
desc = "Draws a spline through selected points",
|
desc = "Draws a spline through selected points",
|
||||||
help =
|
help =
|
||||||
"Draws a spline through selected points.\n" +
|
"Draws a spline through selected points.\n" +
|
||||||
"Can only be uesd with convex polyhedral selections.\n" +
|
"Can only be uesd with convex polyhedral selections.\n" +
|
||||||
"Flags:\n" +
|
"Flags:\n" +
|
||||||
" -h generates only a shell",
|
" -h generates only a shell",
|
||||||
flags = "h",
|
flags = "h",
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 2
|
max = 2
|
||||||
)
|
)
|
||||||
@CommandPermissions("worldedit.region.curve")
|
@CommandPermissions("worldedit.region.curve")
|
||||||
@Logging(REGION)
|
@Logging(REGION)
|
||||||
public void curve(CommandContext args, LocalSession session, LocalPlayer player,
|
public void curve(CommandContext args, LocalSession session, LocalPlayer player,
|
||||||
EditSession editSession) throws WorldEditException {
|
EditSession editSession) throws WorldEditException {
|
||||||
|
|
||||||
Region region = session.getSelection(session.getSelectionWorld());
|
Region region = session.getSelection(session.getSelectionWorld());
|
||||||
if (!(region instanceof ConvexPolyhedralRegion)) {
|
if (!(region instanceof ConvexPolyhedralRegion)) {
|
||||||
player.printError("Invalid region type");
|
player.printError("Invalid region type");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.argsLength() < 2 ? false : args.getDouble(1) < 0) {
|
if (args.argsLength() < 2 ? false : args.getDouble(1) < 0) {
|
||||||
player.printError("Invalid thickness. Must not be negative");
|
player.printError("Invalid thickness. Must not be negative");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Pattern pattern = we.getBlockPattern(player, args.getString(0));
|
Pattern pattern = we.getBlockPattern(player, args.getString(0));
|
||||||
ConvexPolyhedralRegion cpregion = (ConvexPolyhedralRegion) region;
|
ConvexPolyhedralRegion cpregion = (ConvexPolyhedralRegion) region;
|
||||||
List<Vector> vectors = new ArrayList<Vector>(cpregion.getVertices());
|
List<Vector> vectors = new ArrayList<Vector>(cpregion.getVertices());
|
||||||
|
|
||||||
int blocksChanged = editSession.drawSpline(pattern, vectors, 0, 0, 0, 10, args.argsLength() < 2 ? 0 : args.getDouble(1), !args.hasFlag('h'));
|
int blocksChanged = editSession.drawSpline(pattern, vectors, 0, 0, 0, 10, args.argsLength() < 2 ? 0 : args.getDouble(1), !args.hasFlag('h'));
|
||||||
|
|
||||||
player.print(blocksChanged + " block(s) have been changed.");
|
player.print(blocksChanged + " block(s) have been changed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Command(
|
@Command(
|
||||||
aliases = { "/replace", "/re", "/rep" },
|
aliases = { "/replace", "/re", "/rep" },
|
||||||
@ -526,4 +516,42 @@ public class RegionCommands {
|
|||||||
|
|
||||||
player.print(affected + " block(s) have been changed.");
|
player.print(affected + " block(s) have been changed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Command(
|
||||||
|
aliases = { "/forest" },
|
||||||
|
usage = "[type] [density]",
|
||||||
|
desc = "Make a forest within the region",
|
||||||
|
min = 0,
|
||||||
|
max = 2
|
||||||
|
)
|
||||||
|
@CommandPermissions("worldedit.region.forest")
|
||||||
|
@Logging(REGION)
|
||||||
|
public void forest(CommandContext args, LocalSession session, LocalPlayer player,
|
||||||
|
EditSession editSession) throws WorldEditException {
|
||||||
|
TreeGenerator.TreeType type = args.argsLength() > 1 ? TreeGenerator.lookup(args.getString(1)) : TreeGenerator.TreeType.TREE;
|
||||||
|
double density = args.argsLength() > 2 ? args.getDouble(2) / 100 : 0.05;
|
||||||
|
|
||||||
|
if (type == null) {
|
||||||
|
player.printError("Tree type '" + args.getString(1) + "' is unknown.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Region region = session.getSelection(player.getWorld());
|
||||||
|
FlatRegion flatRegion;
|
||||||
|
|
||||||
|
if (region instanceof FlatRegion) {
|
||||||
|
flatRegion = (FlatRegion) region;
|
||||||
|
} else {
|
||||||
|
player.print("(The given region is not a 'flat region', so a cuboid region will be used instead.)");
|
||||||
|
flatRegion = CuboidRegion.makeCuboid(region);
|
||||||
|
}
|
||||||
|
|
||||||
|
int upperY = flatRegion.getMaximumY() + 1; // Increase by 1 to have trees generate above the selection 1 block
|
||||||
|
int lowerY = flatRegion.getMinimumY();
|
||||||
|
|
||||||
|
int affected = editSession.makeForest(flatRegion.asFlatRegion(), upperY, lowerY, density, new TreeGenerator(type));
|
||||||
|
player.print(affected + " trees created.");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren