diff --git a/README.md b/README.md
index 6143bae..cb02b9e 100644
--- a/README.md
+++ b/README.md
@@ -77,6 +77,6 @@ Debug: false
- [ ] 选区可视化
-- [ ] 可手动暂停、恢复任务
+- [x] 可手动暂停、恢复任务
- [ ] 更多的任务类型支持(如画圆、弧线)
diff --git a/pom.xml b/pom.xml
index 3635943..2fe3851 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
site.deercloud
LiteWorldEdit
- 2.0.0
+ 2.1.1
jar
LiteWorldEdit
diff --git a/src/main/java/site/deercloud/liteworldedit/Commands.java b/src/main/java/site/deercloud/liteworldedit/Commands.java
index 417a087..e297005 100644
--- a/src/main/java/site/deercloud/liteworldedit/Commands.java
+++ b/src/main/java/site/deercloud/liteworldedit/Commands.java
@@ -10,6 +10,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import site.deercloud.liteworldedit.JobGenerator.Empty;
import site.deercloud.liteworldedit.JobGenerator.Fill;
+import site.deercloud.liteworldedit.JobGenerator.OverLay;
import site.deercloud.liteworldedit.Jobs.Job;
import site.deercloud.liteworldedit.Managers.Point;
@@ -33,6 +34,8 @@ public class Commands implements TabExecutor {
return fillTask(sender, args);
} else if (Objects.equals(args[0], "empty")) {
return emptyTask(sender, args);
+ } else if (Objects.equals(args[0], "overlay")) {
+ return overlayTask(sender, args);
} else if (Objects.equals(args[0], "help")) {
print_help(sender);
return true;
@@ -57,8 +60,12 @@ public class Commands implements TabExecutor {
private static void resumeJobs(CommandSender sender) {
if (sender instanceof Player) {
Player player = (Player) sender;
- LiteWorldEdit.instance.getCache().getQueueOf(player).resume();
- sender.sendMessage("已恢复。");
+ if (LiteWorldEdit.instance.getCache().getQueueOf(player) == null) {
+ sender.sendMessage("你没有正在进行的任务。");
+ } else {
+ LiteWorldEdit.instance.getCache().getQueueOf(player).resume();
+ sender.sendMessage("已恢复。");
+ }
} else {
sender.sendMessage("该命令只能由玩家执行。");
}
@@ -67,8 +74,12 @@ public class Commands implements TabExecutor {
private static void pauseJobs(CommandSender sender) {
if (sender instanceof Player) {
Player player = (Player) sender;
- LiteWorldEdit.instance.getCache().getQueueOf(player).pause();
- sender.sendMessage("已暂停。");
+ if (LiteWorldEdit.instance.getCache().getQueueOf(player) == null) {
+ sender.sendMessage("你没有正在进行的任务。");
+ } else {
+ LiteWorldEdit.instance.getCache().getQueueOf(player).pause();
+ sender.sendMessage("已暂停。");
+ }
} else {
sender.sendMessage("该命令只能由玩家执行。");
}
@@ -92,8 +103,12 @@ public class Commands implements TabExecutor {
private static void cancerJobs(CommandSender sender) {
if (sender instanceof Player) {
Player player = (Player) sender;
- LiteWorldEdit.instance.getCache().getQueueOf(player).cancel();
- sender.sendMessage("已取消。");
+ if (LiteWorldEdit.instance.getCache().getQueueOf(player) == null) {
+ sender.sendMessage("你没有正在进行的任务。");
+ } else {
+ LiteWorldEdit.instance.getCache().getQueueOf(player).cancel();
+ sender.sendMessage("已取消。");
+ }
} else {
sender.sendMessage("该命令只能由玩家执行。");
}
@@ -118,7 +133,35 @@ public class Commands implements TabExecutor {
} else {
sender.sendMessage("参数错误。");
}
- return false;
+ return true;
+ }
+
+ private static boolean overlayTask(CommandSender sender, String[] args) {
+ if (!(sender instanceof Player)) {
+ sender.sendMessage("该命令只能由玩家执行。");
+ return true;
+ }
+ Player player = (Player) sender;
+ if (args.length == 3) {
+ try {
+ Vector2 diagonalPoint = getVector2(sender, args, player);
+ if (diagonalPoint == null) return true;
+ ItemStack items_in_hand = player.getInventory().getItemInMainHand();
+ if (!items_in_hand.getType().isBlock() || items_in_hand.getType() == Material.AIR) {
+ sender.sendMessage("你手上没有方块。");
+ return true;
+ }
+ Material material = Material.getMaterial(items_in_hand.getType().name());
+ OverLay.overLay(player, player.getWorld(), diagonalPoint.pointA, diagonalPoint.pointB, material);
+ sender.sendMessage("已添加任务。");
+ return true;
+ } catch (NumberFormatException e) {
+ sender.sendMessage("参数错误。");
+ }
+ } else {
+ sender.sendMessage("参数错误。");
+ }
+ return true;
}
private static boolean fillTask(CommandSender sender, String[] args) {
@@ -146,7 +189,7 @@ public class Commands implements TabExecutor {
} else {
sender.sendMessage("参数错误。");
}
- return false;
+ return true;
}
private static Vector2 getVector2(CommandSender sender, String[] args, Player player) {
@@ -226,21 +269,18 @@ public class Commands implements TabExecutor {
} else {
sender.sendMessage("参数错误。");
}
- return false;
+ return true;
}
@Override
public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
if (args.length == 1) {
- return Arrays.asList("point", "p", "points", "fill", "empty", "cancel", "pause", "resume", "help", "reload");
+ return Arrays.asList("point", "p", "points", "fill", "empty", "overlay", "cancel", "pause", "resume", "help", "reload");
} else if (args.length == 2) {
- switch (args[1]) {
- case "point":
- return Collections.singletonList("[点序号(整数)] [x] [y] [z]");
- case "fill":
- return Collections.singletonList("[点序号A] [点序号B] (需要手持被放置的方块)");
- case "empty":
- return Collections.singletonList("[点序号A] [点序号B] (需要拥有下届合金锄)");
+ if (args[0].equals("point") || args[0].equals("p")) {
+ return Collections.singletonList("[点序号(整数)] [x] [y] [z] - 创建点");
+ } else if (args[0].equals("fill") || args[0].equals("empty") || args[0].equals("overlay")) {
+ return Collections.singletonList("[点序号A] [点序号B]");
}
}
return Collections.emptyList();
@@ -253,6 +293,7 @@ public class Commands implements TabExecutor {
sender.sendMessage(ChatColor.GREEN + "/lwe points - 查看所有点");
sender.sendMessage(ChatColor.GREEN + "/lwe fill [点序号A] [点序号B] - (在AB点对角线间放置方块 - 需要手持被放置的方块)");
sender.sendMessage(ChatColor.GREEN + "/lwe empty [点序号A] [点序号B] - (破坏AB点对角线间方块 - 需要拥有下届合金镐)");
+ sender.sendMessage(ChatColor.GREEN + "/lwe overlay [点序号A] [点序号B] - (在选区地面上铺一层方块 - 需要手持被放置的方块)");
sender.sendMessage(ChatColor.GREEN + "/lwe cancel - 取消所有任务");
sender.sendMessage(ChatColor.GREEN + "/lwe pause - 暂停工作");
sender.sendMessage(ChatColor.GREEN + "/lwe resume - 恢复工作");
diff --git a/src/main/java/site/deercloud/liteworldedit/JobGenerator/Empty.java b/src/main/java/site/deercloud/liteworldedit/JobGenerator/Empty.java
index e34c32f..d4ed860 100644
--- a/src/main/java/site/deercloud/liteworldedit/JobGenerator/Empty.java
+++ b/src/main/java/site/deercloud/liteworldedit/JobGenerator/Empty.java
@@ -9,7 +9,6 @@ import site.deercloud.liteworldedit.Managers.Point;
public class Empty {
public static void empty(Player player, World world, Point p1, Point p2) {
- // 经验扣除与校验
for (int y = Math.max(p1.y, p2.y); y >= Math.min(p1.y, p2.y); y--) {
for (int x = Math.min(p1.x, p2.x); x <= Math.max(p1.x, p2.x); x++) {
for (int z = Math.min(p1.z, p2.z); z <= Math.max(p1.z, p2.z); z++) {
diff --git a/src/main/java/site/deercloud/liteworldedit/JobGenerator/OverLay.java b/src/main/java/site/deercloud/liteworldedit/JobGenerator/OverLay.java
new file mode 100644
index 0000000..ba9cbc6
--- /dev/null
+++ b/src/main/java/site/deercloud/liteworldedit/JobGenerator/OverLay.java
@@ -0,0 +1,29 @@
+package site.deercloud.liteworldedit.JobGenerator;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import site.deercloud.liteworldedit.Jobs.Place;
+import site.deercloud.liteworldedit.LiteWorldEdit;
+import site.deercloud.liteworldedit.Managers.Point;
+
+public class OverLay {
+
+ public static void overLay(Player player, World world, Point p1, Point p2, Material block) {
+ for (int x = Math.min(p1.x, p2.x); x <= Math.max(p1.x, p2.x); x++) {
+ for (int z = Math.min(p1.z, p2.z); z <= Math.max(p1.z, p2.z); z++) {
+ for (int y = Math.min(p1.y, p2.y); y <= Math.max(p1.y, p2.y); y++) {
+ Block block1 = world.getBlockAt(x, y, z);
+ if (block1.getType() == Material.AIR) {
+ Location location = new Location(world, (double) x, (double) y, (double) z);
+ Place place_job = new Place(location, player, block);
+ LiteWorldEdit.instance.getCache().addJob(player, place_job);
+ break;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/site/deercloud/liteworldedit/Managers/Cache.java b/src/main/java/site/deercloud/liteworldedit/Managers/Cache.java
index 063f5f9..452117c 100644
--- a/src/main/java/site/deercloud/liteworldedit/Managers/Cache.java
+++ b/src/main/java/site/deercloud/liteworldedit/Managers/Cache.java
@@ -50,6 +50,12 @@ public class Cache {
}
public JobQueue getQueueOf(Player player) {
+ if (!_jobs.containsKey(player.getUniqueId().toString())) {
+ return null;
+ }
+ if (_jobs.get(player.getUniqueId().toString()).isEmpty()) {
+ return null;
+ }
return _jobs.get(player.getUniqueId().toString());
}