mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2025-07-01 02:46:41 +00:00
Plenty of changes to core block behavior to become more compatible with upstream WorldEdit (still more to be done!)
This commit is contained in:
@ -57,6 +57,7 @@ import com.sk89q.worldedit.entity.Player;
|
||||
import com.sk89q.worldedit.extension.input.ParserContext;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
|
||||
import com.sk89q.worldedit.function.mask.ExistingBlockMask;
|
||||
import com.sk89q.worldedit.function.mask.Mask;
|
||||
import com.sk89q.worldedit.function.mask.SingleBlockTypeMask;
|
||||
@ -469,7 +470,7 @@ public class BrushCommands extends BrushProcessor {
|
||||
|
||||
|
||||
try {
|
||||
MultiClipboardHolder clipboards = ClipboardFormat.SCHEMATIC.loadAllFromInput(player, clipboard, null, true);
|
||||
MultiClipboardHolder clipboards = ClipboardFormats.loadAllFromInput(player, clipboard, null, true);
|
||||
if (clipboards == null) {
|
||||
BBC.SCHEMATIC_NOT_FOUND.send(player, clipboard);
|
||||
return null;
|
||||
|
@ -55,7 +55,9 @@ import com.sk89q.worldedit.entity.Player;
|
||||
import com.sk89q.worldedit.event.extent.PasteEvent;
|
||||
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.BuiltInClipboardFormat;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardWriter;
|
||||
import com.sk89q.worldedit.function.block.BlockReplace;
|
||||
import com.sk89q.worldedit.function.mask.Mask;
|
||||
@ -296,7 +298,7 @@ public class ClipboardCommands extends MethodCommands {
|
||||
@Deprecated
|
||||
@CommandPermissions({"worldedit.clipboard.download"})
|
||||
public void download(final Player player, final LocalSession session, @Optional("schematic") final String formatName) throws CommandException, WorldEditException {
|
||||
final ClipboardFormat format = ClipboardFormat.findByAlias(formatName);
|
||||
final ClipboardFormat format = ClipboardFormats.findByAlias(formatName);
|
||||
if (format == null) {
|
||||
BBC.CLIPBOARD_INVALID_FORMAT.send(player, formatName);
|
||||
return;
|
||||
@ -356,8 +358,8 @@ public class ClipboardCommands extends MethodCommands {
|
||||
} else {
|
||||
target = clipboard;
|
||||
}
|
||||
switch (format) {
|
||||
case PNG:
|
||||
switch (format.getName()) {
|
||||
case "PNG":
|
||||
try {
|
||||
FastByteArrayOutputStream baos = new FastByteArrayOutputStream(Short.MAX_VALUE);
|
||||
ClipboardWriter writer = format.getWriter(baos);
|
||||
@ -369,7 +371,7 @@ public class ClipboardCommands extends MethodCommands {
|
||||
url = null;
|
||||
}
|
||||
break;
|
||||
case SCHEMATIC:
|
||||
case "SCHEMATIC":
|
||||
if (Settings.IMP.WEB.URL.isEmpty()) {
|
||||
BBC.SETTING_DISABLE.send(player, "web.url");
|
||||
return;
|
||||
@ -380,30 +382,30 @@ public class ClipboardCommands extends MethodCommands {
|
||||
url = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (url == null) {
|
||||
BBC.GENERATING_LINK_FAILED.send(player);
|
||||
} else {
|
||||
String urlText = url.toString();
|
||||
if (Settings.IMP.WEB.SHORTEN_URLS) {
|
||||
try {
|
||||
urlText = MainUtil.getText("https://empcraft.com/s/?" + URLEncoder.encode(url.toString(), "UTF-8"));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
if (Fawe.imp().getPlatform().equalsIgnoreCase("nukkit")) {
|
||||
FormBuilder form = Fawe.imp().getFormBuilder();
|
||||
FawePlayer<Object> fp = FawePlayer.wrap(player);
|
||||
if (form != null && fp != FakePlayer.getConsole().toFawePlayer()) {
|
||||
form.setTitle("Download Clipboard");
|
||||
form.addInput("url:", urlText, urlText);
|
||||
form.display(fp);
|
||||
return;
|
||||
}
|
||||
}
|
||||
BBC.DOWNLOAD_LINK.send(player, urlText);
|
||||
}
|
||||
if (url == null) {
|
||||
BBC.GENERATING_LINK_FAILED.send(player);
|
||||
} else {
|
||||
String urlText = url.toString();
|
||||
if (Settings.IMP.WEB.SHORTEN_URLS) {
|
||||
try {
|
||||
urlText = MainUtil.getText("https://empcraft.com/s/?" + URLEncoder.encode(url.toString(), "UTF-8"));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
if (Fawe.imp().getPlatform().equalsIgnoreCase("nukkit")) {
|
||||
FormBuilder form = Fawe.imp().getFormBuilder();
|
||||
FawePlayer<Object> fp = FawePlayer.wrap(player);
|
||||
if (form != null && fp != FakePlayer.getConsole().toFawePlayer()) {
|
||||
form.setTitle("Download Clipboard");
|
||||
form.addInput("url:", urlText, urlText);
|
||||
form.display(fp);
|
||||
return;
|
||||
}
|
||||
}
|
||||
BBC.DOWNLOAD_LINK.send(player, urlText);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
@ -416,7 +418,7 @@ public class ClipboardCommands extends MethodCommands {
|
||||
)
|
||||
@CommandPermissions({"worldedit.clipboard.asset"})
|
||||
public void asset(final Player player, final LocalSession session, String category) throws CommandException, WorldEditException {
|
||||
final ClipboardFormat format = ClipboardFormat.SCHEMATIC;
|
||||
final ClipboardFormat format = BuiltInClipboardFormat.MCEDIT_SCHEMATIC;
|
||||
ClipboardHolder holder = session.getClipboard();
|
||||
Clipboard clipboard = holder.getClipboard();
|
||||
final Transform transform = holder.getTransform();
|
||||
@ -430,7 +432,7 @@ public class ClipboardCommands extends MethodCommands {
|
||||
} else {
|
||||
target = clipboard;
|
||||
}
|
||||
BBC.GENERATING_LINK.send(player, format.name());
|
||||
BBC.GENERATING_LINK.send(player, format.getName());
|
||||
if (Settings.IMP.WEB.ASSETS.isEmpty()) {
|
||||
BBC.SETTING_DISABLE.send(player, "web.assets");
|
||||
return;
|
||||
@ -478,7 +480,7 @@ public class ClipboardCommands extends MethodCommands {
|
||||
}
|
||||
Clipboard clipboard = holder.getClipboard();
|
||||
Region region = clipboard.getRegion();
|
||||
BlockVector3 to = atOrigin ? clipboard.getOrigin() : session.getPlacementPosition(player);
|
||||
BlockVector3 to = atOrigin ? clipboard.getOrigin() : session.getPlacementPosition(player);
|
||||
checkPaste(player, editSession, to, holder, clipboard);
|
||||
Operation operation = holder
|
||||
.createPaste(editSession)
|
||||
|
@ -187,7 +187,7 @@ public class GeneralCommands {
|
||||
|
||||
int found = 0;
|
||||
|
||||
for (ItemType searchType : ItemTypes.values) {
|
||||
for (ItemType searchType : ItemTypes.values()) {
|
||||
if (found >= 15) {
|
||||
actor.print(BBC.getPrefix() + "Too many results!");
|
||||
break;
|
||||
|
@ -284,7 +284,7 @@ public class OptionsCommands {
|
||||
|
||||
int found = 0;
|
||||
|
||||
for (ItemType searchType : ItemTypes.values) {
|
||||
for (ItemType searchType : ItemTypes.values()) {
|
||||
if (found >= 15) {
|
||||
actor.print(BBC.getPrefix() + "Too many results!");
|
||||
break;
|
||||
|
@ -16,6 +16,7 @@ import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldedit.extent.Extent;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
|
||||
import com.sk89q.worldedit.function.mask.Mask;
|
||||
import com.sk89q.worldedit.function.pattern.ClipboardPattern;
|
||||
import com.sk89q.worldedit.function.pattern.Pattern;
|
||||
@ -191,7 +192,7 @@ public class PatternCommands extends MethodCommands {
|
||||
clipboards = Collections.singletonList(clipboard);
|
||||
break;
|
||||
default:
|
||||
MultiClipboardHolder multi = ClipboardFormat.SCHEMATIC.loadAllFromInput(player, location, null, true);
|
||||
MultiClipboardHolder multi = ClipboardFormats.loadAllFromInput(player, location, null, true);
|
||||
clipboards = multi != null ? multi.getHolders() : null;
|
||||
break;
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ import com.sk89q.worldedit.event.extent.PlayerSaveClipboardEvent;
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.BuiltInClipboardFormat;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardWriter;
|
||||
@ -99,13 +100,13 @@ public class SchematicCommands extends MethodCommands {
|
||||
@Deprecated
|
||||
@CommandPermissions({"worldedit.clipboard.load", "worldedit.schematic.load", "worldedit.schematic.load.web", "worldedit.schematic.load.asset"})
|
||||
public void loadall(final Player player, final LocalSession session, @Optional("schematic") final String formatName, final String filename, @Switch('r') boolean randomRotate) throws FilenameException {
|
||||
final ClipboardFormat format = ClipboardFormat.findByAlias(formatName);
|
||||
final ClipboardFormat format = ClipboardFormats.findByAlias(formatName);
|
||||
if (format == null) {
|
||||
BBC.CLIPBOARD_INVALID_FORMAT.send(player, formatName);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
MultiClipboardHolder all = format.loadAllFromInput(player, filename, null, true);
|
||||
MultiClipboardHolder all = ClipboardFormats.loadAllFromInput(player, filename, null, true);
|
||||
if (all != null) {
|
||||
session.addClipboard(all);
|
||||
BBC.SCHEMATIC_LOADED.send(player, filename);
|
||||
@ -192,7 +193,7 @@ public class SchematicCommands extends MethodCommands {
|
||||
@CommandPermissions({"worldedit.clipboard.load", "worldedit.schematic.load", "worldedit.schematic.load.asset", "worldedit.schematic.load.web", "worldedit.schematic.load.other"})
|
||||
public void load(final Player player, final LocalSession session, @Optional() final String formatName, String filename) throws FilenameException {
|
||||
final LocalConfiguration config = this.worldEdit.getConfiguration();
|
||||
ClipboardFormat format = formatName == null ? null : ClipboardFormat.findByAlias(formatName);
|
||||
ClipboardFormat format = formatName == null ? null : ClipboardFormats.findByAlias(formatName);
|
||||
InputStream in = null;
|
||||
try {
|
||||
URI uri;
|
||||
@ -207,7 +208,7 @@ public class SchematicCommands extends MethodCommands {
|
||||
ReadableByteChannel rbc = Channels.newChannel(url.openStream());
|
||||
in = Channels.newInputStream(rbc);
|
||||
uri = url.toURI();
|
||||
if (format == null) format = ClipboardFormat.SCHEMATIC;
|
||||
if (format == null) format = BuiltInClipboardFormat.MCEDIT_SCHEMATIC;
|
||||
} else {
|
||||
if (!player.hasPermission("worldedit.schematic.load") && !player.hasPermission("worldedit.clipboard.load")) {
|
||||
BBC.NO_PERM.send(player, "worldedit.clipboard.load");
|
||||
@ -235,7 +236,7 @@ public class SchematicCommands extends MethodCommands {
|
||||
}
|
||||
if (format == null && filename.matches(".*\\.[\\w].*")) {
|
||||
String extension = filename.substring(filename.lastIndexOf('.') + 1, filename.length());
|
||||
format = ClipboardFormat.findByExtension(extension);
|
||||
format = ClipboardFormats.findByExtension(extension);
|
||||
}
|
||||
f = MainUtil.resolve(dir, filename, format, false);
|
||||
}
|
||||
@ -250,7 +251,7 @@ public class SchematicCommands extends MethodCommands {
|
||||
return;
|
||||
}
|
||||
if (format == null) {
|
||||
format = ClipboardFormat.findByFile(f);
|
||||
format = ClipboardFormats.findByFile(f);
|
||||
if (format == null) {
|
||||
BBC.CLIPBOARD_INVALID_FORMAT.send(player, f.getName());
|
||||
return;
|
||||
@ -281,7 +282,7 @@ public class SchematicCommands extends MethodCommands {
|
||||
@CommandPermissions({"worldedit.clipboard.save", "worldedit.schematic.save", "worldedit.schematic.save.other"})
|
||||
public void save(final Player player, final LocalSession session, @Optional("schem") final String formatName, String filename, @Switch('g') boolean global) throws CommandException, WorldEditException {
|
||||
final LocalConfiguration config = this.worldEdit.getConfiguration();
|
||||
final ClipboardFormat format = ClipboardFormat.findByAlias(formatName);
|
||||
final ClipboardFormat format = ClipboardFormats.findByAlias(formatName);
|
||||
if (format == null) {
|
||||
player.printError("Unknown schematic format: " + formatName);
|
||||
return;
|
||||
@ -298,14 +299,14 @@ public class SchematicCommands extends MethodCommands {
|
||||
filename = filename.substring(3);
|
||||
}
|
||||
}
|
||||
File f = this.worldEdit.getSafeSaveFile(player, dir, filename, format.getExtension(), format.getExtension());
|
||||
if (f.getName().replaceAll("." + format.getExtension(), "").isEmpty()) {
|
||||
File f = this.worldEdit.getSafeSaveFile(player, dir, filename, format.getPrimaryFileExtension(), format.getPrimaryFileExtension());
|
||||
if (f.getName().replaceAll("." + format.getPrimaryFileExtension(), "").isEmpty()) {
|
||||
File directory = f.getParentFile();
|
||||
if (directory.exists()) {
|
||||
int max = MainUtil.getMaxFileId(directory);
|
||||
f = new File(directory, max + "." + format.getExtension());
|
||||
f = new File(directory, max + "." + format.getPrimaryFileExtension());
|
||||
} else {
|
||||
f = new File(directory, "1." + format.getExtension());
|
||||
f = new File(directory, "1." + format.getPrimaryFileExtension());
|
||||
}
|
||||
}
|
||||
final File parent = f.getParentFile();
|
||||
@ -477,9 +478,9 @@ public class SchematicCommands extends MethodCommands {
|
||||
Message m = new Message(BBC.SCHEMATIC_FORMAT).newline();
|
||||
String baseCmd = Commands.getAlias(SchematicCommands.class, "schematic") + " " + Commands.getAlias(SchematicCommands.class, "save");
|
||||
boolean first = true;
|
||||
for (final ClipboardFormat format : ClipboardFormat.values) {
|
||||
for (final ClipboardFormat format : ClipboardFormats.getAll()) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append(format.name()).append(": ");
|
||||
builder.append(format.getName()).append(": ");
|
||||
for (final String lookupName : format.getAliases()) {
|
||||
if (!first) {
|
||||
builder.append(", ");
|
||||
@ -487,7 +488,7 @@ public class SchematicCommands extends MethodCommands {
|
||||
builder.append(lookupName);
|
||||
first = false;
|
||||
}
|
||||
String cmd = baseCmd + " " + format.name() + " <filename>";
|
||||
String cmd = baseCmd + " " + format.getName() + " <filename>";
|
||||
m.text(builder).suggestTip(cmd).newline();
|
||||
first = true;
|
||||
}
|
||||
|
@ -37,7 +37,6 @@ import com.sk89q.worldedit.WorldEditException;
|
||||
|
||||
import com.sk89q.worldedit.world.block.BlockState;
|
||||
import com.sk89q.worldedit.blocks.BaseItemStack;
|
||||
import com.sk89q.worldedit.blocks.BlockType;
|
||||
import com.sk89q.worldedit.entity.Player;
|
||||
import com.sk89q.worldedit.extension.input.ParserContext;
|
||||
import com.sk89q.worldedit.extension.platform.permission.ActorSelectorLimits;
|
||||
@ -287,7 +286,7 @@ public class SelectionCommands {
|
||||
)
|
||||
@CommandPermissions("worldedit.wand")
|
||||
public void wand(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException {
|
||||
player.giveItem(new BaseItemStack(we.getConfiguration().wandItem, 1));
|
||||
player.giveItem(new BaseItemStack(ItemTypes.parse(we.getConfiguration().wandItem), 1));
|
||||
BBC.SELECTION_WAND.send(player);
|
||||
if (!FawePlayer.wrap(player).hasPermission("fawe.tips"))
|
||||
BBC.TIP_SEL_LIST.or(BBC.TIP_SELECT_CONNECTED, BBC.TIP_SET_POS1, BBC.TIP_FARWAND, BBC.TIP_DISCORD).send(player);
|
||||
|
@ -67,6 +67,7 @@ import com.sk89q.worldedit.extension.platform.Capability;
|
||||
import com.sk89q.worldedit.extension.platform.CommandManager;
|
||||
import com.sk89q.worldedit.extension.platform.Platform;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
|
||||
import com.sk89q.worldedit.function.mask.ExistingBlockMask;
|
||||
import com.sk89q.worldedit.function.mask.Mask;
|
||||
import com.sk89q.worldedit.function.operation.Operations;
|
||||
@ -903,7 +904,7 @@ public class UtilityCommands extends MethodCommands {
|
||||
}
|
||||
|
||||
if (formatName != null) {
|
||||
final ClipboardFormat cf = ClipboardFormat.findByAlias(formatName);
|
||||
final ClipboardFormat cf = ClipboardFormats.findByAlias(formatName);
|
||||
forEachFile = new DelegateConsumer<File>(forEachFile) {
|
||||
@Override
|
||||
public void accept(File file) {
|
||||
@ -1013,7 +1014,7 @@ public class UtilityCommands extends MethodCommands {
|
||||
dir = root;
|
||||
}
|
||||
|
||||
ClipboardFormat format = ClipboardFormat.findByFile(file);
|
||||
ClipboardFormat format = ClipboardFormats.findByFile(file);
|
||||
URI relative = dir.toURI().relativize(file.toURI());
|
||||
StringBuilder name = new StringBuilder();
|
||||
if (relative.isAbsolute()) {
|
||||
|
@ -132,12 +132,12 @@ public class FloatingTreeRemover implements BlockTool {
|
||||
|
||||
if (visited.add(next)) {
|
||||
BlockState state = world.getBlock(next);
|
||||
BlockTypes type = state.getBlockType();
|
||||
switch (type) {
|
||||
case AIR:
|
||||
case CAVE_AIR:
|
||||
case VOID_AIR:
|
||||
case SNOW:
|
||||
BlockType type = state.getBlockType();
|
||||
switch (type.getResource().toUpperCase()) {
|
||||
case "AIR":
|
||||
case "CAVE_AIR":
|
||||
case "VOID_AIR":
|
||||
case "SNOW":
|
||||
continue;
|
||||
}
|
||||
if (isTreeBlock(state.getBlockType())) {
|
||||
|
Reference in New Issue
Block a user