11package dev .lotus .studio .command ;
22
3-
3+ import dev .lotus .studio .database .savezone .SafeZoneDataBase ;
4+ import dev .lotus .studio .database .savezone .SafeZoneDataService ;
5+ import dev .lotus .studio .safezone .SafeZone ;
6+ import dev .lotus .studio .safezone .SafeZoneManager ;
7+ import net .kyori .adventure .text .Component ;
8+ import org .apache .commons .lang3 .tuple .ImmutablePair ;
9+ import org .apache .commons .lang3 .tuple .Pair ;
410import org .bukkit .Location ;
511import org .bukkit .command .CommandSender ;
612import org .bukkit .entity .Player ;
7- import dev .lotus .studio .database .savezone .SafeZoneDataBase ;
8- import dev .lotus .studio .database .savezone .SaveZoneDataService ;
913
1014import java .util .HashMap ;
1115import java .util .List ;
1216
17+ import static dev .lotus .studio .utils .MapperUtils .formatLocation ;
18+
1319public class SafeZoneCommand {
14- private final SaveZoneDataService service ;
20+ private final SafeZoneManager safeZoneManager = SafeZoneManager . getInstance () ;
1521
1622 private Location pos1 = null ;
1723 private Location pos2 = null ;
1824
19- public SafeZoneCommand (SaveZoneDataService service ) {
20- this .service = service ;
21- }
2225
2326 public boolean execute (CommandSender sender , String label , String [] args ) {
2427 if (!(sender instanceof Player player )) {
@@ -37,83 +40,75 @@ public boolean execute(CommandSender sender, String label, String[] args) {
3740 switch (args [1 ].toLowerCase ()) {
3841 case "pos1" :
3942 pos1 = player .getLocation ();
40- player .sendMessage ("fist point: " + formatLocation (pos1 ));
43+ player .sendMessage ("first point: " + formatLocation (pos1 ));
4144 break ;
4245
4346 case "pos2" :
4447 pos2 = player .getLocation ();
45- player .sendMessage ("second points : " + formatLocation (pos2 ));
48+ player .sendMessage ("second point : " + formatLocation (pos2 ));
4649 break ;
4750
4851 case "save" :
4952 if (args .length < 3 ) {
5053 player .sendMessage ("set name to savezone: /lotus savezone save <назва>" );
5154 return true ;
5255 }
53- saveZoneToDB (player , pos1 , pos2 , args [2 ]);
56+ saveZone (player , pos1 , pos2 , args [2 ]);
5457 break ;
58+
5559 case "list" :
56- player .sendMessage ("Укажіть назву для зони. Наприклад: /<команда> save <назва>" );
57- listZoneToDB (player );
60+ listZones (player );
5861 return true ;
62+
5963 case "remove" :
6064 if (args .length < 3 ) {
61- player .sendMessage ("Укажіть назву для зони. Наприклад : /<команда> save <назва >" );
65+ player .sendMessage ("Укажіть ID зони: /lotus savezone remove <id >" );
6266 return true ;
6367 }
64- removeZoneToDB (player , Integer .parseInt (args [1 ]));
68+ removeZone (player , Integer .parseInt (args [2 ]));
6569 break ;
70+
6671 default :
67- player .sendMessage ("Невідома команда. Використовуйте: pos1, pos2 або save." );
72+ player .sendMessage ("Невідома команда. Використовуйте: pos1, pos2, save, list, remove ." );
6873 }
6974 return true ;
7075 }
7176
72- private void removeZoneToDB (Player player , int id ) {
73- service .getAllSaveZones ().forEach (safeZoneDataBase -> {
74- if (safeZoneDataBase .getSafeZoneId () == id ){
75- player .sendMessage ("Сейв зону удаленно с названием: " + safeZoneDataBase .getSafeZoneName () + " ID: " + safeZoneDataBase .getSafeZoneId ());
76- }
77- });
78- service .removeProtectZone (id );
77+ private void saveZone (Player player , Location pos1 , Location pos2 , String zoneName ) {
78+ if (pos1 != null && pos2 != null ) {
79+ Pair <Location , Location > zoneLoc = new ImmutablePair <>(pos1 , pos2 );
80+ SafeZone safeZone = new SafeZone (zoneName , zoneLoc );
81+
82+ // runtime
83+ safeZoneManager .addSafeZone (safeZone );
84+
85+ player .sendMessage ("Зона '" + zoneName + "' успішно збережена." );
86+ } else {
87+ player .sendMessage ("Будь ласка, спочатку встановіть обидві точки (pos1 і pos2)." );
88+ }
7989 }
8090
81- private void listZoneToDB (Player player ) {
82- // Отримуємо всі збережені зони з бази даних
83- List <SafeZoneDataBase > safeZoneDataBases = service .getAllSaveZones ();
91+ private void listZones (Player player ) {
92+ List <SafeZoneDataBase > safeZones = safeZoneManager .getDataZones ();
8493
85- // Якщо зон немає, повідомляємо гравця
86- if (safeZoneDataBases .isEmpty ()) {
87- player .sendMessage ("нет зон." );
94+ if (safeZones .isEmpty ()) {
95+ player .sendMessage ("немає зон." );
8896 return ;
8997 }
9098
91- // Формуємо мапу з імен зон і їх ідентифікаторів
9299 HashMap <String , Integer > saveId = new HashMap <>();
93- safeZoneDataBases .forEach (saveZoneData -> saveId .put (saveZoneData .getSafeZoneName (), saveZoneData .getSafeZoneId ()));
100+ safeZones .forEach (zone -> saveId .put (zone .getSafeZoneName (), zone .getSafeZoneId ()));
94101
95- // Виводимо гравцю список зон
96102 player .sendMessage ("Список зон:" );
97103 saveId .forEach ((name , id ) ->
98- player .sendMessage (" - Имя : " + name + ", ID: " + id )
104+ player .sendMessage (" - Назва : " + name + ", ID: " + id )
99105 );
100106 }
101107
108+ private void removeZone (Player player , int id ) {
109+ // runtime
110+ safeZoneManager .removeSafeZone (id );
102111
103- private void saveZoneToDB (Player player , Location pos1 , Location pos2 , String zoneName ) {
104- if (pos1 != null && pos2 != null ) {
105- String positionData = formatLocation (pos1 ) + "|" + formatLocation (pos2 );
106- service .saveProtectZone (zoneName , positionData );
107- player .sendMessage ("Зона '" + zoneName + "' успішно збережена." );
108- } else {
109- player .sendMessage ("Будь ласка, спочатку встановіть обидві точки (pos1 і pos2)." );
110- }
112+ player .sendMessage (Component .text ("Safe zone with ID " + id + " deleted!" ));
111113 }
112-
113- private String formatLocation (Location location ) {
114- return location .getBlockX () + "," +
115- location .getBlockY () + "," +
116- location .getBlockZ ();
117- }
118-
119114}
0 commit comments