新增了overly任务 可以在地面铺上一层需要的方块
This commit is contained in:
parent
6d7c1f3c20
commit
f4fec3b044
@ -77,6 +77,6 @@ Debug: false
|
|||||||
|
|
||||||
- [ ] 选区可视化
|
- [ ] 选区可视化
|
||||||
|
|
||||||
- [ ] 可手动暂停、恢复任务
|
- [x] 可手动暂停、恢复任务
|
||||||
|
|
||||||
- [ ] 更多的任务类型支持(如画圆、弧线)
|
- [ ] 更多的任务类型支持(如画圆、弧线)
|
||||||
|
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>site.deercloud</groupId>
|
<groupId>site.deercloud</groupId>
|
||||||
<artifactId>LiteWorldEdit</artifactId>
|
<artifactId>LiteWorldEdit</artifactId>
|
||||||
<version>2.0.0</version>
|
<version>2.1.1</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>LiteWorldEdit</name>
|
<name>LiteWorldEdit</name>
|
||||||
|
@ -10,6 +10,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import site.deercloud.liteworldedit.JobGenerator.Empty;
|
import site.deercloud.liteworldedit.JobGenerator.Empty;
|
||||||
import site.deercloud.liteworldedit.JobGenerator.Fill;
|
import site.deercloud.liteworldedit.JobGenerator.Fill;
|
||||||
|
import site.deercloud.liteworldedit.JobGenerator.OverLay;
|
||||||
import site.deercloud.liteworldedit.Jobs.Job;
|
import site.deercloud.liteworldedit.Jobs.Job;
|
||||||
import site.deercloud.liteworldedit.Managers.Point;
|
import site.deercloud.liteworldedit.Managers.Point;
|
||||||
|
|
||||||
@ -33,6 +34,8 @@ public class Commands implements TabExecutor {
|
|||||||
return fillTask(sender, args);
|
return fillTask(sender, args);
|
||||||
} else if (Objects.equals(args[0], "empty")) {
|
} else if (Objects.equals(args[0], "empty")) {
|
||||||
return emptyTask(sender, args);
|
return emptyTask(sender, args);
|
||||||
|
} else if (Objects.equals(args[0], "overlay")) {
|
||||||
|
return overlayTask(sender, args);
|
||||||
} else if (Objects.equals(args[0], "help")) {
|
} else if (Objects.equals(args[0], "help")) {
|
||||||
print_help(sender);
|
print_help(sender);
|
||||||
return true;
|
return true;
|
||||||
@ -57,8 +60,12 @@ public class Commands implements TabExecutor {
|
|||||||
private static void resumeJobs(CommandSender sender) {
|
private static void resumeJobs(CommandSender sender) {
|
||||||
if (sender instanceof Player) {
|
if (sender instanceof Player) {
|
||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
LiteWorldEdit.instance.getCache().getQueueOf(player).resume();
|
if (LiteWorldEdit.instance.getCache().getQueueOf(player) == null) {
|
||||||
sender.sendMessage("已恢复。");
|
sender.sendMessage("你没有正在进行的任务。");
|
||||||
|
} else {
|
||||||
|
LiteWorldEdit.instance.getCache().getQueueOf(player).resume();
|
||||||
|
sender.sendMessage("已恢复。");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage("该命令只能由玩家执行。");
|
sender.sendMessage("该命令只能由玩家执行。");
|
||||||
}
|
}
|
||||||
@ -67,8 +74,12 @@ public class Commands implements TabExecutor {
|
|||||||
private static void pauseJobs(CommandSender sender) {
|
private static void pauseJobs(CommandSender sender) {
|
||||||
if (sender instanceof Player) {
|
if (sender instanceof Player) {
|
||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
LiteWorldEdit.instance.getCache().getQueueOf(player).pause();
|
if (LiteWorldEdit.instance.getCache().getQueueOf(player) == null) {
|
||||||
sender.sendMessage("已暂停。");
|
sender.sendMessage("你没有正在进行的任务。");
|
||||||
|
} else {
|
||||||
|
LiteWorldEdit.instance.getCache().getQueueOf(player).pause();
|
||||||
|
sender.sendMessage("已暂停。");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage("该命令只能由玩家执行。");
|
sender.sendMessage("该命令只能由玩家执行。");
|
||||||
}
|
}
|
||||||
@ -92,8 +103,12 @@ public class Commands implements TabExecutor {
|
|||||||
private static void cancerJobs(CommandSender sender) {
|
private static void cancerJobs(CommandSender sender) {
|
||||||
if (sender instanceof Player) {
|
if (sender instanceof Player) {
|
||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
LiteWorldEdit.instance.getCache().getQueueOf(player).cancel();
|
if (LiteWorldEdit.instance.getCache().getQueueOf(player) == null) {
|
||||||
sender.sendMessage("已取消。");
|
sender.sendMessage("你没有正在进行的任务。");
|
||||||
|
} else {
|
||||||
|
LiteWorldEdit.instance.getCache().getQueueOf(player).cancel();
|
||||||
|
sender.sendMessage("已取消。");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage("该命令只能由玩家执行。");
|
sender.sendMessage("该命令只能由玩家执行。");
|
||||||
}
|
}
|
||||||
@ -118,7 +133,35 @@ public class Commands implements TabExecutor {
|
|||||||
} else {
|
} else {
|
||||||
sender.sendMessage("参数错误。");
|
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) {
|
private static boolean fillTask(CommandSender sender, String[] args) {
|
||||||
@ -146,7 +189,7 @@ public class Commands implements TabExecutor {
|
|||||||
} else {
|
} else {
|
||||||
sender.sendMessage("参数错误。");
|
sender.sendMessage("参数错误。");
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Vector2 getVector2(CommandSender sender, String[] args, Player player) {
|
private static Vector2 getVector2(CommandSender sender, String[] args, Player player) {
|
||||||
@ -226,21 +269,18 @@ public class Commands implements TabExecutor {
|
|||||||
} else {
|
} else {
|
||||||
sender.sendMessage("参数错误。");
|
sender.sendMessage("参数错误。");
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
if (args.length == 1) {
|
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) {
|
} else if (args.length == 2) {
|
||||||
switch (args[1]) {
|
if (args[0].equals("point") || args[0].equals("p")) {
|
||||||
case "point":
|
return Collections.singletonList("[点序号(整数)] [x] [y] [z] - 创建点");
|
||||||
return Collections.singletonList("[点序号(整数)] [x] [y] [z]");
|
} else if (args[0].equals("fill") || args[0].equals("empty") || args[0].equals("overlay")) {
|
||||||
case "fill":
|
return Collections.singletonList("[点序号A] [点序号B]");
|
||||||
return Collections.singletonList("[点序号A] [点序号B] (需要手持被放置的方块)");
|
|
||||||
case "empty":
|
|
||||||
return Collections.singletonList("[点序号A] [点序号B] (需要拥有下届合金锄)");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
@ -253,6 +293,7 @@ public class Commands implements TabExecutor {
|
|||||||
sender.sendMessage(ChatColor.GREEN + "/lwe points - 查看所有点");
|
sender.sendMessage(ChatColor.GREEN + "/lwe points - 查看所有点");
|
||||||
sender.sendMessage(ChatColor.GREEN + "/lwe fill [点序号A] [点序号B] - (在AB点对角线间放置方块 - 需要手持被放置的方块)");
|
sender.sendMessage(ChatColor.GREEN + "/lwe fill [点序号A] [点序号B] - (在AB点对角线间放置方块 - 需要手持被放置的方块)");
|
||||||
sender.sendMessage(ChatColor.GREEN + "/lwe empty [点序号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 cancel - 取消所有任务");
|
||||||
sender.sendMessage(ChatColor.GREEN + "/lwe pause - 暂停工作");
|
sender.sendMessage(ChatColor.GREEN + "/lwe pause - 暂停工作");
|
||||||
sender.sendMessage(ChatColor.GREEN + "/lwe resume - 恢复工作");
|
sender.sendMessage(ChatColor.GREEN + "/lwe resume - 恢复工作");
|
||||||
|
@ -9,7 +9,6 @@ import site.deercloud.liteworldedit.Managers.Point;
|
|||||||
|
|
||||||
public class Empty {
|
public class Empty {
|
||||||
public static void empty(Player player, World world, Point p1, Point p2) {
|
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 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 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 z = Math.min(p1.z, p2.z); z <= Math.max(p1.z, p2.z); z++) {
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -50,6 +50,12 @@ public class Cache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public JobQueue getQueueOf(Player player) {
|
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());
|
return _jobs.get(player.getUniqueId().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user