mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-23 17:57:38 +00:00
Reduced indentation level in some methods in WorldEdit.java and made WorldEdit.getBlock less confusing.
This commit is contained in:
parent
3acc82e97b
commit
8dbabe344d
@ -391,10 +391,13 @@ public class WorldEdit {
|
|||||||
String[] blockAndExtraData = arg.split("\\|");
|
String[] blockAndExtraData = arg.split("\\|");
|
||||||
String[] typeAndData = blockAndExtraData[0].split(":", 2);
|
String[] typeAndData = blockAndExtraData[0].split(":", 2);
|
||||||
String testID = typeAndData[0];
|
String testID = typeAndData[0];
|
||||||
|
|
||||||
int blockId = -1;
|
int blockId = -1;
|
||||||
|
|
||||||
int data = -1;
|
int data = -1;
|
||||||
|
|
||||||
|
boolean parseDataValue = true;
|
||||||
|
|
||||||
// Attempt to parse the item ID or otherwise resolve an item/block
|
// Attempt to parse the item ID or otherwise resolve an item/block
|
||||||
// name to its numeric ID
|
// name to its numeric ID
|
||||||
try {
|
try {
|
||||||
@ -414,13 +417,15 @@ public class WorldEdit {
|
|||||||
if (blockId == -1 && blockType == null) {
|
if (blockId == -1 && blockType == null) {
|
||||||
// Maybe it's a cloth
|
// Maybe it's a cloth
|
||||||
ClothColor col = ClothColor.lookup(testID);
|
ClothColor col = ClothColor.lookup(testID);
|
||||||
|
if (col == null) {
|
||||||
if (col != null) {
|
|
||||||
blockType = BlockType.CLOTH;
|
|
||||||
data = col.getID();
|
|
||||||
} else {
|
|
||||||
throw new UnknownItemException(arg);
|
throw new UnknownItemException(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
blockType = BlockType.CLOTH;
|
||||||
|
data = col.getID();
|
||||||
|
|
||||||
|
// Prevent overriding the data value
|
||||||
|
parseDataValue = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read block ID
|
// Read block ID
|
||||||
@ -432,167 +437,177 @@ public class WorldEdit {
|
|||||||
throw new UnknownItemException(arg);
|
throw new UnknownItemException(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data == -1) { // Block data not yet detected
|
if (!allowNoData && data == -1) {
|
||||||
|
// No wildcards allowed => eliminate them.
|
||||||
|
data = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parseDataValue) { // Block data not yet detected
|
||||||
// Parse the block data (optional)
|
// Parse the block data (optional)
|
||||||
try {
|
try {
|
||||||
data = (typeAndData.length > 1 && typeAndData[1].length() > 0) ? Integer.parseInt(typeAndData[1]) : (allowNoData ? -1 : 0);
|
if (typeAndData.length > 1 && typeAndData[1].length() > 0) {
|
||||||
if (data > 15 || (data < 0 && !(allAllowed && data == -1))) {
|
data = Integer.parseInt(typeAndData[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data > 15) {
|
||||||
|
throw new InvalidItemException(arg, "Unknown invalid data value '" + typeAndData[1] + "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data < 0 && !(allAllowed && data == -1)) {
|
||||||
data = 0;
|
data = 0;
|
||||||
}
|
}
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
if (blockType != null) {
|
if (blockType == null) {
|
||||||
switch (blockType) {
|
|
||||||
case CLOTH:
|
|
||||||
case STAINED_CLAY:
|
|
||||||
case CARPET:
|
|
||||||
ClothColor col = ClothColor.lookup(typeAndData[1]);
|
|
||||||
|
|
||||||
if (col != null) {
|
|
||||||
data = col.getID();
|
|
||||||
} else {
|
|
||||||
throw new InvalidItemException(arg, "Unknown cloth color '" + typeAndData[1] + "'");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STEP:
|
|
||||||
case DOUBLE_STEP:
|
|
||||||
BlockType dataType = BlockType.lookup(typeAndData[1]);
|
|
||||||
|
|
||||||
if (dataType != null) {
|
|
||||||
switch (dataType) {
|
|
||||||
case STONE:
|
|
||||||
data = 0;
|
|
||||||
break;
|
|
||||||
case SANDSTONE:
|
|
||||||
data = 1;
|
|
||||||
break;
|
|
||||||
case WOOD:
|
|
||||||
data = 2;
|
|
||||||
break;
|
|
||||||
case COBBLESTONE:
|
|
||||||
data = 3;
|
|
||||||
break;
|
|
||||||
case BRICK:
|
|
||||||
data = 4;
|
|
||||||
break;
|
|
||||||
case STONE_BRICK:
|
|
||||||
data = 5;
|
|
||||||
break;
|
|
||||||
case NETHER_BRICK:
|
|
||||||
data = 6;
|
|
||||||
break;
|
|
||||||
case QUARTZ_BLOCK:
|
|
||||||
data = 7;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new InvalidItemException(arg, "Invalid step type '" + typeAndData[1] + "'");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new InvalidItemException(arg, "Unknown step type '" + typeAndData[1] + "'");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new InvalidItemException(arg, "Unknown data value '" + typeAndData[1] + "'");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new InvalidItemException(arg, "Unknown data value '" + typeAndData[1] + "'");
|
throw new InvalidItemException(arg, "Unknown data value '" + typeAndData[1] + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (blockType) {
|
||||||
|
case CLOTH:
|
||||||
|
case STAINED_CLAY:
|
||||||
|
case CARPET:
|
||||||
|
ClothColor col = ClothColor.lookup(typeAndData[1]);
|
||||||
|
if (col == null) {
|
||||||
|
throw new InvalidItemException(arg, "Unknown cloth color '" + typeAndData[1] + "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
data = col.getID();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STEP:
|
||||||
|
case DOUBLE_STEP:
|
||||||
|
BlockType dataType = BlockType.lookup(typeAndData[1]);
|
||||||
|
|
||||||
|
if (dataType == null) {
|
||||||
|
throw new InvalidItemException(arg, "Unknown step type '" + typeAndData[1] + "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (dataType) {
|
||||||
|
case STONE:
|
||||||
|
data = 0;
|
||||||
|
break;
|
||||||
|
case SANDSTONE:
|
||||||
|
data = 1;
|
||||||
|
break;
|
||||||
|
case WOOD:
|
||||||
|
data = 2;
|
||||||
|
break;
|
||||||
|
case COBBLESTONE:
|
||||||
|
data = 3;
|
||||||
|
break;
|
||||||
|
case BRICK:
|
||||||
|
data = 4;
|
||||||
|
break;
|
||||||
|
case STONE_BRICK:
|
||||||
|
data = 5;
|
||||||
|
break;
|
||||||
|
case NETHER_BRICK:
|
||||||
|
data = 6;
|
||||||
|
break;
|
||||||
|
case QUARTZ_BLOCK:
|
||||||
|
data = 7;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new InvalidItemException(arg, "Invalid step type '" + typeAndData[1] + "'");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new InvalidItemException(arg, "Unknown data value '" + typeAndData[1] + "'");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the item is allowed
|
// Check if the item is allowed
|
||||||
if (allAllowed || player.hasPermission("worldedit.anyblock") || !config.disallowedBlocks.contains(blockId)) {
|
if (!allAllowed && !player.hasPermission("worldedit.anyblock") && config.disallowedBlocks.contains(blockId)) {
|
||||||
if (blockType != null) {
|
throw new DisallowedItemException(arg);
|
||||||
switch (blockType) {
|
|
||||||
case SIGN_POST:
|
|
||||||
case WALL_SIGN:
|
|
||||||
// Allow special sign text syntax
|
|
||||||
String[] text = new String[4];
|
|
||||||
text[0] = blockAndExtraData.length > 1 ? blockAndExtraData[1] : "";
|
|
||||||
text[1] = blockAndExtraData.length > 2 ? blockAndExtraData[2] : "";
|
|
||||||
text[2] = blockAndExtraData.length > 3 ? blockAndExtraData[3] : "";
|
|
||||||
text[3] = blockAndExtraData.length > 4 ? blockAndExtraData[4] : "";
|
|
||||||
return new SignBlock(blockType.getID(), data, text);
|
|
||||||
|
|
||||||
case MOB_SPAWNER:
|
|
||||||
// Allow setting mob spawn type
|
|
||||||
if (blockAndExtraData.length > 1) {
|
|
||||||
String mobName = blockAndExtraData[1];
|
|
||||||
for (MobType mobType : MobType.values()) {
|
|
||||||
if (mobType.getName().toLowerCase().equals(mobName.toLowerCase())) {
|
|
||||||
mobName = mobType.getName();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!server.isValidMobType(mobName)) {
|
|
||||||
throw new InvalidItemException(arg, "Unknown mob type '" + mobName + "'");
|
|
||||||
}
|
|
||||||
return new MobSpawnerBlock(data, mobName);
|
|
||||||
} else {
|
|
||||||
return new MobSpawnerBlock(data, MobType.PIG.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
case NOTE_BLOCK:
|
|
||||||
// Allow setting note
|
|
||||||
if (blockAndExtraData.length > 1) {
|
|
||||||
byte note = Byte.parseByte(blockAndExtraData[1]);
|
|
||||||
if (note < 0 || note > 24) {
|
|
||||||
throw new InvalidItemException(arg, "Out of range note value: '" + blockAndExtraData[1] + "'");
|
|
||||||
} else {
|
|
||||||
return new NoteBlock(data, note);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return new NoteBlock(data, (byte) 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
case HEAD:
|
|
||||||
// allow setting type/player/rotation
|
|
||||||
if (blockAndExtraData.length > 1) {
|
|
||||||
// and thus, the format shall be "|type|rotation" or "|type" or "|rotation"
|
|
||||||
byte rot = 0;
|
|
||||||
String type = "";
|
|
||||||
try {
|
|
||||||
rot = Byte.parseByte(blockAndExtraData[1]);
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
type = blockAndExtraData[1];
|
|
||||||
if (blockAndExtraData.length > 2) {
|
|
||||||
try {
|
|
||||||
rot = Byte.parseByte(blockAndExtraData[2]);
|
|
||||||
} catch (NumberFormatException e2) {
|
|
||||||
throw new InvalidItemException(arg, "Second part of skull metadata should be a number.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
byte skullType = 0;
|
|
||||||
// type is either the mob type or the player name
|
|
||||||
// sorry for the four minecraft accounts named "skeleton", "wither", "zombie", or "creeper"
|
|
||||||
if (!type.isEmpty()) {
|
|
||||||
if (type.equalsIgnoreCase("skeleton")) skullType = 0;
|
|
||||||
else if (type.equalsIgnoreCase("wither")) skullType = 1;
|
|
||||||
else if (type.equalsIgnoreCase("zombie")) skullType = 2;
|
|
||||||
else if (type.equalsIgnoreCase("creeper")) skullType = 4;
|
|
||||||
else skullType = 3;
|
|
||||||
}
|
|
||||||
if (skullType == 3) {
|
|
||||||
return new SkullBlock(data, rot, type.replace(" ", "_")); // valid MC usernames
|
|
||||||
} else {
|
|
||||||
return new SkullBlock(data, skullType, rot);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return new SkullBlock(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
return new BaseBlock(blockId, data);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return new BaseBlock(blockId, data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new DisallowedItemException(arg);
|
if (blockType == null) {
|
||||||
|
return new BaseBlock(blockId, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (blockType) {
|
||||||
|
case SIGN_POST:
|
||||||
|
case WALL_SIGN:
|
||||||
|
// Allow special sign text syntax
|
||||||
|
String[] text = new String[4];
|
||||||
|
text[0] = blockAndExtraData.length > 1 ? blockAndExtraData[1] : "";
|
||||||
|
text[1] = blockAndExtraData.length > 2 ? blockAndExtraData[2] : "";
|
||||||
|
text[2] = blockAndExtraData.length > 3 ? blockAndExtraData[3] : "";
|
||||||
|
text[3] = blockAndExtraData.length > 4 ? blockAndExtraData[4] : "";
|
||||||
|
return new SignBlock(blockType.getID(), data, text);
|
||||||
|
|
||||||
|
case MOB_SPAWNER:
|
||||||
|
// Allow setting mob spawn type
|
||||||
|
if (blockAndExtraData.length > 1) {
|
||||||
|
String mobName = blockAndExtraData[1];
|
||||||
|
for (MobType mobType : MobType.values()) {
|
||||||
|
if (mobType.getName().toLowerCase().equals(mobName.toLowerCase())) {
|
||||||
|
mobName = mobType.getName();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!server.isValidMobType(mobName)) {
|
||||||
|
throw new InvalidItemException(arg, "Unknown mob type '" + mobName + "'");
|
||||||
|
}
|
||||||
|
return new MobSpawnerBlock(data, mobName);
|
||||||
|
} else {
|
||||||
|
return new MobSpawnerBlock(data, MobType.PIG.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
case NOTE_BLOCK:
|
||||||
|
// Allow setting note
|
||||||
|
if (blockAndExtraData.length <= 1) {
|
||||||
|
return new NoteBlock(data, (byte) 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte note = Byte.parseByte(blockAndExtraData[1]);
|
||||||
|
if (note < 0 || note > 24) {
|
||||||
|
throw new InvalidItemException(arg, "Out of range note value: '" + blockAndExtraData[1] + "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
return new NoteBlock(data, note);
|
||||||
|
|
||||||
|
case HEAD:
|
||||||
|
// allow setting type/player/rotation
|
||||||
|
if (blockAndExtraData.length <= 1) {
|
||||||
|
return new SkullBlock(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte rot = 0;
|
||||||
|
String type = "";
|
||||||
|
try {
|
||||||
|
rot = Byte.parseByte(blockAndExtraData[1]);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
type = blockAndExtraData[1];
|
||||||
|
if (blockAndExtraData.length > 2) {
|
||||||
|
try {
|
||||||
|
rot = Byte.parseByte(blockAndExtraData[2]);
|
||||||
|
} catch (NumberFormatException e2) {
|
||||||
|
throw new InvalidItemException(arg, "Second part of skull metadata should be a number.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
byte skullType = 0;
|
||||||
|
// type is either the mob type or the player name
|
||||||
|
// sorry for the four minecraft accounts named "skeleton", "wither", "zombie", or "creeper"
|
||||||
|
if (!type.isEmpty()) {
|
||||||
|
if (type.equalsIgnoreCase("skeleton")) skullType = 0;
|
||||||
|
else if (type.equalsIgnoreCase("wither")) skullType = 1;
|
||||||
|
else if (type.equalsIgnoreCase("zombie")) skullType = 2;
|
||||||
|
else if (type.equalsIgnoreCase("creeper")) skullType = 4;
|
||||||
|
else skullType = 3;
|
||||||
|
}
|
||||||
|
if (skullType == 3) {
|
||||||
|
return new SkullBlock(data, rot, type.replace(" ", "_")); // valid MC usernames
|
||||||
|
} else {
|
||||||
|
return new SkullBlock(data, skullType, rot);
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
return new BaseBlock(blockId, data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -646,21 +661,18 @@ public class WorldEdit {
|
|||||||
|
|
||||||
// Handle special block pattern types
|
// Handle special block pattern types
|
||||||
if (patternString.charAt(0) == '#') {
|
if (patternString.charAt(0) == '#') {
|
||||||
if (patternString.equals("#clipboard") || patternString.equals("#copy")) {
|
if (!patternString.equals("#clipboard") && !patternString.equals("#copy")) {
|
||||||
LocalSession session = getSession(player);
|
|
||||||
CuboidClipboard clipboard;
|
|
||||||
|
|
||||||
try {
|
|
||||||
clipboard = session.getClipboard();
|
|
||||||
} catch (EmptyClipboardException e) {
|
|
||||||
player.printError("Copy a selection first with //copy.");
|
|
||||||
throw new UnknownItemException("#clipboard");
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ClipboardPattern(clipboard);
|
|
||||||
} else {
|
|
||||||
throw new UnknownItemException(patternString);
|
throw new UnknownItemException(patternString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LocalSession session = getSession(player);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return new ClipboardPattern(session.getClipboard());
|
||||||
|
} catch (EmptyClipboardException e) {
|
||||||
|
player.printError("Copy a selection first with //copy.");
|
||||||
|
throw new UnknownItemException("#clipboard");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If it's only one block, then just return that single one
|
// If it's only one block, then just return that single one
|
||||||
@ -902,25 +914,25 @@ public class WorldEdit {
|
|||||||
public int getMaximumPolygonalPoints(LocalPlayer player) {
|
public int getMaximumPolygonalPoints(LocalPlayer player) {
|
||||||
if (player.hasPermission("worldedit.limit.unrestricted") || config.maxPolygonalPoints < 0) {
|
if (player.hasPermission("worldedit.limit.unrestricted") || config.maxPolygonalPoints < 0) {
|
||||||
return config.defaultMaxPolygonalPoints;
|
return config.defaultMaxPolygonalPoints;
|
||||||
} else {
|
|
||||||
if (config.defaultMaxPolygonalPoints < 0) {
|
|
||||||
return config.maxPolygonalPoints;
|
|
||||||
}
|
|
||||||
return Math.min(config.defaultMaxPolygonalPoints,
|
|
||||||
config.maxPolygonalPoints);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config.defaultMaxPolygonalPoints < 0) {
|
||||||
|
return config.maxPolygonalPoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.min(config.defaultMaxPolygonalPoints, config.maxPolygonalPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMaximumPolyhedronPoints(LocalPlayer player) {
|
public int getMaximumPolyhedronPoints(LocalPlayer player) {
|
||||||
if (player.hasPermission("worldedit.limit.unrestricted") || config.maxPolyhedronPoints < 0) {
|
if (player.hasPermission("worldedit.limit.unrestricted") || config.maxPolyhedronPoints < 0) {
|
||||||
return config.defaultMaxPolyhedronPoints;
|
return config.defaultMaxPolyhedronPoints;
|
||||||
} else {
|
|
||||||
if (config.defaultMaxPolyhedronPoints < 0) {
|
|
||||||
return config.maxPolyhedronPoints;
|
|
||||||
}
|
|
||||||
return Math.min(config.defaultMaxPolyhedronPoints,
|
|
||||||
config.maxPolyhedronPoints);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config.defaultMaxPolyhedronPoints < 0) {
|
||||||
|
return config.maxPolyhedronPoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.min(config.defaultMaxPolyhedronPoints, config.maxPolyhedronPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -958,9 +970,9 @@ public class WorldEdit {
|
|||||||
File f = new File(path);
|
File f = new File(path);
|
||||||
if (f.isAbsolute()) {
|
if (f.isAbsolute()) {
|
||||||
return f;
|
return f;
|
||||||
} else {
|
|
||||||
return new File(config.getWorkingDirectory(), path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new File(config.getWorkingDirectory(), path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user