mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2025-07-16 03:34:03 +00:00
This commit is contained in:
@@ -48,8 +48,8 @@ public class ListFilters {
|
||||
}
|
||||
|
||||
@Command(
|
||||
name = "private",
|
||||
aliases = {"me", "mine", "local"},
|
||||
name = "local",
|
||||
aliases = {"me", "mine", "private"},
|
||||
desc = "List your personal schematics"
|
||||
)
|
||||
public Filter local() {
|
||||
@@ -57,8 +57,8 @@ public class ListFilters {
|
||||
}
|
||||
|
||||
@Command(
|
||||
name = "public",
|
||||
aliases = {"global"},
|
||||
name = "global",
|
||||
aliases = {"public"},
|
||||
desc = "List public schematics"
|
||||
)
|
||||
public Filter global() {
|
||||
@@ -76,7 +76,7 @@ public class ListFilters {
|
||||
}
|
||||
|
||||
@Command(
|
||||
name = "*", //TODO originally this was left blank but doing so causes a major compilation error
|
||||
name = "*", //TODO NOT IMPLEMENTED originally this was left blank but doing so causes a major compilation error
|
||||
desc = "wildcard"
|
||||
)
|
||||
public Filter wildcard(Actor actor, File root, String arg) {
|
||||
|
@@ -88,8 +88,8 @@ public class MaskCommands {
|
||||
}
|
||||
|
||||
@Command(
|
||||
name = "false",
|
||||
aliases = {"#false"},
|
||||
name = "#false",
|
||||
aliases = {"false"},
|
||||
desc = "Always false"
|
||||
)
|
||||
public Mask falseMask(Extent extent) {
|
||||
@@ -97,8 +97,8 @@ public class MaskCommands {
|
||||
}
|
||||
|
||||
@Command(
|
||||
name = "true",
|
||||
aliases = {"#true"},
|
||||
name = "#true",
|
||||
aliases = {"true"},
|
||||
desc = "Always true"
|
||||
)
|
||||
public Mask trueMask(Extent extent) {
|
||||
|
@@ -428,7 +428,10 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
|
||||
if (typeId.hasBlockType()) {
|
||||
return typeId.getBlockType().getDefaultState().toBaseBlock();
|
||||
} else {
|
||||
return BlockTypes.AIR.getDefaultState().toBaseBlock(); // FAWE returns air here
|
||||
/*
|
||||
throw new NotABlockException();
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -81,6 +81,7 @@ import com.sk89q.worldedit.command.ToolCommandsRegistration;
|
||||
import com.sk89q.worldedit.command.ToolUtilCommands;
|
||||
import com.sk89q.worldedit.command.ToolUtilCommandsRegistration;
|
||||
import com.sk89q.worldedit.command.TransformCommands;
|
||||
import com.sk89q.worldedit.command.TransformCommandsRegistration;
|
||||
import com.sk89q.worldedit.command.UtilityCommands;
|
||||
import com.sk89q.worldedit.command.UtilityCommandsRegistration;
|
||||
import com.sk89q.worldedit.command.WorldEditCommands;
|
||||
@@ -690,7 +691,7 @@ public final class PlatformCommandManager {
|
||||
// exceptions without writing a hook into every dispatcher, we need to unwrap these
|
||||
// exceptions and rethrow their converted form, if their is one.
|
||||
try {
|
||||
task.get();
|
||||
Object result = task.get();
|
||||
} catch (Throwable t) {
|
||||
// Use the exception converter to convert the exception if any of its causes
|
||||
// can be converted, otherwise throw the original exception
|
||||
|
@@ -72,27 +72,13 @@ public enum BuiltInClipboardFormat implements ClipboardFormat {
|
||||
|
||||
@Override
|
||||
public ClipboardWriter getWriter(OutputStream outputStream) throws IOException {
|
||||
throw new IOException("This format does not support saving");
|
||||
throw new IOException("This format does not support saving, use `schem` or `sponge` as format"); // Is more helpful
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFormat(File file) {
|
||||
try (NBTInputStream str = new NBTInputStream(new GZIPInputStream(new FileInputStream(file)))) {
|
||||
NamedTag rootTag = str.readNamedTag();
|
||||
if (!rootTag.getName().equals("Schematic")) {
|
||||
return false;
|
||||
}
|
||||
CompoundTag schematicTag = (CompoundTag) rootTag.getTag();
|
||||
|
||||
// Check
|
||||
Map<String, Tag> schematic = schematicTag.getValue();
|
||||
if (!schematic.containsKey("Materials")) {
|
||||
return false;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
String name = file.getName().toLowerCase();
|
||||
return name.endsWith(".schematic") || name.endsWith(".mcedit") || name.endsWith(".mce");
|
||||
}
|
||||
},
|
||||
SPONGE_SCHEMATIC("sponge", "schem") {
|
||||
@@ -127,23 +113,8 @@ public enum BuiltInClipboardFormat implements ClipboardFormat {
|
||||
|
||||
@Override
|
||||
public boolean isFormat(File file) {
|
||||
try (NBTInputStream str = new NBTInputStream(new GZIPInputStream(new FileInputStream(file)))) {
|
||||
NamedTag rootTag = str.readNamedTag();
|
||||
if (!rootTag.getName().equals("Schematic")) {
|
||||
return false;
|
||||
}
|
||||
CompoundTag schematicTag = (CompoundTag) rootTag.getTag();
|
||||
|
||||
// Check
|
||||
Map<String, Tag> schematic = schematicTag.getValue();
|
||||
if (!schematic.containsKey("Version")) {
|
||||
return false;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
String name = file.getName().toLowerCase();
|
||||
return name.endsWith(".schem") || name.endsWith(".sponge");
|
||||
}
|
||||
|
||||
},
|
||||
@@ -175,20 +146,8 @@ public enum BuiltInClipboardFormat implements ClipboardFormat {
|
||||
|
||||
@Override
|
||||
public boolean isFormat(File file) {
|
||||
try (NBTInputStream str = new NBTInputStream(new GZIPInputStream(new FileInputStream(file)))) {
|
||||
NamedTag rootTag = str.readNamedTag();
|
||||
CompoundTag structureTag = (CompoundTag) rootTag.getTag();
|
||||
|
||||
// Check
|
||||
Map<String, Tag> structure = structureTag.getValue();
|
||||
if (!structure.containsKey("DataVersion")) {
|
||||
return false;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
String name = file.getName().toLowerCase();
|
||||
return name.endsWith(".nbt");
|
||||
}
|
||||
},
|
||||
|
||||
|
@@ -280,6 +280,7 @@ public class SpongeSchematicReader extends NBTSchematicReader {
|
||||
return clipboard;
|
||||
}
|
||||
|
||||
/*
|
||||
private Clipboard readVersion2(BlockArrayClipboard version1, CompoundTag schematicTag) throws IOException {
|
||||
Map<String, Tag> schematic = schematicTag.getValue();
|
||||
if (schematic.containsKey("BiomeData")) {
|
||||
@@ -290,6 +291,7 @@ public class SpongeSchematicReader extends NBTSchematicReader {
|
||||
}
|
||||
return version1;
|
||||
}
|
||||
*/
|
||||
|
||||
private void readBiomes(BlockArrayClipboard clipboard, Map<String, Tag> schematic) throws IOException {
|
||||
ByteArrayTag dataTag = requireTag(schematic, "BiomeData", ByteArrayTag.class);
|
||||
@@ -349,6 +351,7 @@ public class SpongeSchematicReader extends NBTSchematicReader {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
private void readEntities(BlockArrayClipboard clipboard, Map<String, Tag> schematic) throws IOException {
|
||||
List<Tag> entList = requireTag(schematic, "Entities", ListTag.class).getValue();
|
||||
if (entList.isEmpty()) {
|
||||
@@ -379,6 +382,7 @@ public class SpongeSchematicReader extends NBTSchematicReader {
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
inputStream.close();
|
||||
|
@@ -50,7 +50,7 @@ public class BlockReplace implements RegionFunction {
|
||||
|
||||
@Override
|
||||
public boolean apply(BlockVector3 position) throws WorldEditException {
|
||||
return extent.setBlock(position, pattern.apply(position));
|
||||
return pattern.apply(extent, position, position);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -40,7 +40,7 @@ public class ExistingBlockMask extends AbstractExtentMask {
|
||||
|
||||
@Override
|
||||
public boolean test(BlockVector3 vector) {
|
||||
return !getExtent().getBlock(vector).getBlockType().getMaterial().isAir();
|
||||
return !vector.getBlock(getExtent()).getMaterial().isAir();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
@@ -31,13 +31,6 @@ public class SolidBlockMask extends BlockMask {
|
||||
add(state -> state.getMaterial().isMovementBlocker());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean test(BlockVector3 vector) {
|
||||
Extent extent = getExtent();
|
||||
BlockState block = extent.getBlock(vector);
|
||||
return block.getBlockType().getMaterial().isMovementBlocker();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Mask2D toMask2D() {
|
||||
|
@@ -66,11 +66,13 @@ public class ChangeSetExecutor implements Operation {
|
||||
|
||||
@Override
|
||||
public Operation resume(RunContext run) throws WorldEditException {
|
||||
while (iterator.hasNext()) {
|
||||
Change change = iterator.next();
|
||||
Change change = iterator.next();
|
||||
if (type == Type.UNDO) {
|
||||
while (iterator.hasNext()) {
|
||||
change.undo(context);
|
||||
}
|
||||
} else {
|
||||
while (iterator.hasNext()) {
|
||||
change.redo(context);
|
||||
}
|
||||
}
|
||||
|
@@ -54,6 +54,7 @@ public class BlockVector2 {
|
||||
}
|
||||
|
||||
public static BlockVector2 at(int x, int z) {
|
||||
/* unnecessary
|
||||
switch (x) {
|
||||
case 0:
|
||||
if (z == 0) {
|
||||
@@ -66,11 +67,14 @@ public class BlockVector2 {
|
||||
}
|
||||
break;
|
||||
}
|
||||
*/
|
||||
return new BlockVector2(x, z);
|
||||
}
|
||||
|
||||
protected int x, z;
|
||||
|
||||
protected BlockVector2(){}
|
||||
|
||||
/**
|
||||
* Construct an instance.
|
||||
*
|
||||
|
@@ -48,6 +48,7 @@ public abstract class BlockVector3 {
|
||||
}
|
||||
|
||||
public static BlockVector3 at(int x, int y, int z) {
|
||||
/* unnecessary
|
||||
// switch for efficiency on typical cases
|
||||
// in MC y is rarely 0/1 on selections
|
||||
switch (y) {
|
||||
@@ -62,6 +63,7 @@ public abstract class BlockVector3 {
|
||||
}
|
||||
break;
|
||||
}
|
||||
*/
|
||||
return new BlockVector3Imp(x, y, z);
|
||||
}
|
||||
|
||||
|
@@ -33,6 +33,7 @@ public class Vector2 {
|
||||
public static final Vector2 ONE = new Vector2(1, 1);
|
||||
|
||||
public static Vector2 at(double x, double z) {
|
||||
/* Unnecessary
|
||||
int xTrunc = (int) x;
|
||||
switch (xTrunc) {
|
||||
case 0:
|
||||
@@ -46,6 +47,7 @@ public class Vector2 {
|
||||
}
|
||||
break;
|
||||
}
|
||||
*/
|
||||
return new Vector2(x, z);
|
||||
}
|
||||
|
||||
|
@@ -39,6 +39,7 @@ public abstract class Vector3 {
|
||||
public static final Vector3 ONE = Vector3.at(1, 1, 1);
|
||||
|
||||
public static Vector3 at(double x, double y, double z) {
|
||||
/* Unnecessary
|
||||
// switch for efficiency on typical cases
|
||||
// in MC y is rarely 0/1 on selections
|
||||
int yTrunc = (int) y;
|
||||
@@ -54,6 +55,7 @@ public abstract class Vector3 {
|
||||
}
|
||||
break;
|
||||
}
|
||||
*/
|
||||
return new Vector3Impl(x, y, z);
|
||||
}
|
||||
|
||||
|
@@ -392,6 +392,7 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion {
|
||||
return chunks;
|
||||
}
|
||||
|
||||
/* Slow and unnecessary
|
||||
@Override
|
||||
public boolean contains(BlockVector3 position) {
|
||||
BlockVector3 min = getMinimumPoint();
|
||||
@@ -399,6 +400,7 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion {
|
||||
|
||||
return position.containedWithin(min, max);
|
||||
}
|
||||
*/
|
||||
|
||||
@Override
|
||||
public boolean contains(int x, int y, int z) {
|
||||
|
@@ -296,6 +296,7 @@ public class CylinderRegion extends AbstractRegion implements FlatRegion {
|
||||
/**
|
||||
* Checks to see if a point is inside this region.
|
||||
*/
|
||||
/* Slow and unnecessary
|
||||
@Override
|
||||
public boolean contains(BlockVector3 position) {
|
||||
final int blockY = position.getBlockY();
|
||||
@@ -305,6 +306,7 @@ public class CylinderRegion extends AbstractRegion implements FlatRegion {
|
||||
|
||||
return position.toBlockVector2().subtract(center).toVector2().divide(radius).lengthSq() <= 1;
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Checks to see if a point is inside this region.
|
||||
|
@@ -26,7 +26,7 @@ import javax.annotation.Nullable;
|
||||
|
||||
public class EnumProperty extends AbstractProperty<String> {
|
||||
|
||||
private Map<String, Integer> offsets = new HashMap<>();
|
||||
private Map<CharSequence, Integer> offsets = new HashMap<>();
|
||||
|
||||
public EnumProperty(final String name, final List<String> values) {
|
||||
this(name, values, 0);
|
||||
@@ -48,7 +48,7 @@ public class EnumProperty extends AbstractProperty<String> {
|
||||
|
||||
@Override
|
||||
public int getIndexFor(CharSequence string) throws IllegalArgumentException {
|
||||
Integer value = offsets.get(string.toString());
|
||||
Integer value = offsets.get(string);
|
||||
return value == null ? -1 : value;
|
||||
}
|
||||
|
||||
|
@@ -67,10 +67,16 @@ public class IntegerProperty extends AbstractProperty<Integer> {
|
||||
public Integer getValueFor(String string) {
|
||||
try {
|
||||
int val = Integer.parseInt(string);
|
||||
/*
|
||||
//It shouldn't matter if this check is slow. It's an important check
|
||||
if (!getValues().contains(val)) {
|
||||
throw new IllegalArgumentException("Invalid int value: " + string + ". Must be in " + getValues().toString());
|
||||
}
|
||||
*/
|
||||
// An exception will get thrown anyway if the property doesn't exist, so it's not really that important. Anyway, we can check the array instead of the string list
|
||||
if (val > 0 && val >= map.length) {
|
||||
throw new IllegalArgumentException("Invalid int value: " + string + ". Must be in " + getValues().toString());
|
||||
}
|
||||
return val;
|
||||
} catch (NumberFormatException e) {
|
||||
throw new IllegalArgumentException("Invalid int value: " + string + ". Not an int.");
|
||||
|
@@ -151,7 +151,7 @@ public class PasteBuilder {
|
||||
copy.setFilterFunction(this.canApply);
|
||||
}
|
||||
if (ignoreAirBlocks) {
|
||||
sourceMask = new MaskIntersection(sourceMask, new ExistingBlockMask(clipboard));
|
||||
sourceMask = MaskIntersection.of(sourceMask, new ExistingBlockMask(clipboard));
|
||||
}
|
||||
if (targetExtent instanceof EditSession) {
|
||||
Mask esSourceMask = ((EditSession) targetExtent).getSourceMask();
|
||||
|
Reference in New Issue
Block a user