增加了箭矢工具选区功能

This commit is contained in:
zhangyuheng 2024-02-16 23:10:47 +08:00
parent 9a4d2a462c
commit 62e89173a2
5 changed files with 90 additions and 12 deletions

View File

@ -6,7 +6,7 @@
<groupId>cn.lunadeer</groupId> <groupId>cn.lunadeer</groupId>
<artifactId>Dominion</artifactId> <artifactId>Dominion</artifactId>
<version>1.2-beta</version> <version>1.3-beta</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>Dominion</name> <name>Dominion</name>

View File

@ -2,6 +2,7 @@ package cn.lunadeer.dominion;
import cn.lunadeer.dominion.events.EnvironmentEvents; import cn.lunadeer.dominion.events.EnvironmentEvents;
import cn.lunadeer.dominion.events.PlayerEvents; import cn.lunadeer.dominion.events.PlayerEvents;
import cn.lunadeer.dominion.events.SelectPointEvents;
import cn.lunadeer.dominion.utils.ConfigManager; import cn.lunadeer.dominion.utils.ConfigManager;
import cn.lunadeer.dominion.utils.Database; import cn.lunadeer.dominion.utils.Database;
import cn.lunadeer.dominion.utils.XLogger; import cn.lunadeer.dominion.utils.XLogger;
@ -25,6 +26,7 @@ public final class Dominion extends JavaPlugin {
Bukkit.getPluginManager().registerEvents(new PlayerEvents(), this); Bukkit.getPluginManager().registerEvents(new PlayerEvents(), this);
Bukkit.getPluginManager().registerEvents(new EnvironmentEvents(), this); Bukkit.getPluginManager().registerEvents(new EnvironmentEvents(), this);
Bukkit.getPluginManager().registerEvents(new SelectPointEvents(), this);
Objects.requireNonNull(Bukkit.getPluginCommand("dominion")).setExecutor(new Commands()); Objects.requireNonNull(Bukkit.getPluginCommand("dominion")).setExecutor(new Commands());
XLogger.info("领地插件已启动"); XLogger.info("领地插件已启动");
@ -47,5 +49,5 @@ public final class Dominion extends JavaPlugin {
public static Dominion instance; public static Dominion instance;
public static ConfigManager config; public static ConfigManager config;
public static Connection dbConnection; public static Connection dbConnection;
public static Map<UUID, List<Location>> pointsSelect = new HashMap<>(); public static Map<UUID, Map<Integer, Location>> pointsSelect = new HashMap<>();
} }

View File

@ -8,7 +8,9 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
public class Apis { public class Apis {
public static Player playerOnly(CommandSender sender) { public static Player playerOnly(CommandSender sender) {
@ -40,9 +42,9 @@ public class Apis {
Location location = player.getLocation(); Location location = player.getLocation();
Location location1 = new Location(location.getWorld(), location.getX() - size, location.getY() - size, location.getZ() - size); Location location1 = new Location(location.getWorld(), location.getX() - size, location.getY() - size, location.getZ() - size);
Location location2 = new Location(location.getWorld(), location.getX() + size, location.getY() + size, location.getZ() + size); Location location2 = new Location(location.getWorld(), location.getX() + size, location.getY() + size, location.getZ() + size);
List<Location> points = new ArrayList<>(); Map<Integer, Location> points = new HashMap<>();
points.add(location1); points.put(0, location1);
points.add(location2); points.put(1, location2);
Dominion.pointsSelect.put(player.getUniqueId(), points); Dominion.pointsSelect.put(player.getUniqueId(), points);
} }

View File

@ -8,7 +8,7 @@ import org.bukkit.Location;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.List; import java.util.Map;
import static cn.lunadeer.dominion.commands.Apis.*; import static cn.lunadeer.dominion.commands.Apis.*;
@ -27,9 +27,9 @@ public class DominionOperate {
Notification.error(sender, "用法: /dominion create <领地名称>"); Notification.error(sender, "用法: /dominion create <领地名称>");
return; return;
} }
List<Location> points = Dominion.pointsSelect.get(player.getUniqueId()); Map<Integer, Location> points = Dominion.pointsSelect.get(player.getUniqueId());
if (points == null || points.size() != 2) { if (points == null || points.get(0) == null || points.get(1) == null) {
Notification.error(sender, "请先使用木棍选择领地的对角线两点,或使用 /dominion auto_create <领地名称> 创建自动领地"); Notification.error(sender, "请先使用箭矢选择领地的对角线两点,或使用 /dominion auto_create <领地名称> 创建自动领地");
return; return;
} }
String name = args[1]; String name = args[1];
@ -54,9 +54,9 @@ public class DominionOperate {
Notification.error(sender, "用法: /dominion create_sub <子领地名称> [父领地名称]"); Notification.error(sender, "用法: /dominion create_sub <子领地名称> [父领地名称]");
return; return;
} }
List<Location> points = Dominion.pointsSelect.get(player.getUniqueId()); Map<Integer, Location> points = Dominion.pointsSelect.get(player.getUniqueId());
if (points == null || points.size() != 2) { if (points == null || points.get(0) == null || points.get(1) == null) {
Notification.error(sender, "请先使用木棍选择子领地的对角线两点,或使用 /dominion auto_create_sub <子领地名称> [父领地名称] 创建自动子领地"); Notification.error(sender, "请先使用箭矢选择子领地的对角线两点,或使用 /dominion auto_create_sub <子领地名称> [父领地名称] 创建自动子领地");
return; return;
} }
if (args.length == 2) { if (args.length == 2) {

View File

@ -0,0 +1,74 @@
package cn.lunadeer.dominion.events;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.utils.Notification;
import cn.lunadeer.dominion.utils.XLogger;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.NPC;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SelectPointEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
public void selectPoint(PlayerInteractEvent event) {
Player player = event.getPlayer();
ItemStack item = player.getInventory().getItemInMainHand();
if (item.getType() != Material.ARROW) {
return;
}
Block block = event.getClickedBlock();
Action action = event.getAction();
if (block == null) {
return;
}
Map<Integer, Location> points = Dominion.pointsSelect.get(player.getUniqueId());
if (points == null) {
points = new HashMap<>();
}
if (action == Action.LEFT_CLICK_BLOCK) {
event.setCancelled(true);
Notification.info(player, "已选择第一个点: " + block.getX() + " " + block.getY() + " " + block.getZ());
points.put(0, block.getLocation());
} else if (action == Action.RIGHT_CLICK_BLOCK) {
event.setCancelled(true);
Notification.info(player, "已选择第二个点: " + block.getX() + " " + block.getY() + " " + block.getZ());
points.put(1, block.getLocation());
} else {
return;
}
if (points.size() == 2) {
Notification.info(player, "已选择两个点,可以使用 /dominion create <领地名称> 创建领地");
Notification.info(player, "尺寸为 " +
Math.abs(points.get(1).getX() - points.get(0).getX()) + " x " +
Math.abs(points.get(1).getY() - points.get(0).getY()) + " x " +
Math.abs(points.get(1).getZ() - points.get(0).getZ()));
Notification.info(player, "面积为 " +
Math.abs(points.get(1).getX() - points.get(0).getX()) *
Math.abs(points.get(1).getZ() - points.get(0).getZ()));
Notification.info(player, "高度为 " +
Math.abs(points.get(1).getY() - points.get(0).getY()));
Notification.info(player, "体积为 " +
Math.abs(points.get(1).getX() - points.get(0).getX()) *
Math.abs(points.get(1).getY() - points.get(0).getY()) *
Math.abs(points.get(1).getZ() - points.get(0).getZ()));
}
Dominion.pointsSelect.put(player.getUniqueId(), points);
}
}