Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ dependencies {
compileOnly("io.papermc.paper:paper-api:1.21.1-R0.1-SNAPSHOT")
compileOnly 'io.th0rgal:oraxen:1.184.1'
compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.2.15")
implementation("com.google.guava:guava:10.0.1")
implementation("org.xerial:sqlite-jdbc:3.50.3.0")
implementation("com.j256.ormlite:ormlite-jdbc:6.1")
}
Expand Down
21 changes: 6 additions & 15 deletions src/main/java/dev/lotus/studio/Main.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
package dev.lotus.studio;

import com.j256.ormlite.support.ConnectionSource;
import dev.lotus.studio.database.DatabaseInitializer;
import dev.lotus.studio.database.playerdata.PlayerDataService;
import org.bukkit.event.HandlerList;
import org.bukkit.plugin.java.JavaPlugin;
import dev.lotus.studio.database.playerdata.PlayerDataServiceImpl;
import dev.lotus.studio.database.savezone.SaveZoneDataService;
import dev.lotus.studio.database.savezone.SaveZoneDataServiceImpl;
import dev.lotus.studio.database.savezone.SafeZoneDataService;
import dev.lotus.studio.event.EatEvent;
import dev.lotus.studio.event.JoinLeaveEvent;
import dev.lotus.studio.item.CustomItemManager;
Expand All @@ -17,22 +14,15 @@
import dev.lotus.studio.playerdata.PlayerManager;
import dev.lotus.studio.safezone.SafeZoneManager;

import java.sql.SQLException;

public final class Main extends JavaPlugin {

private static Main instance;
private CustomItemManager itemManager;




private PlayerDataService playerDataBase;
private SaveZoneDataService saveZoneDataService;
private SafeZoneDataService safeZoneDataService;
private DatabaseInitializer databaseInitializer;



@Override
public void onEnable() {

Expand All @@ -42,7 +32,7 @@ public void onEnable() {
itemManager = new CustomItemManager();
databaseInitializer = new DatabaseInitializer(this);
playerDataBase = databaseInitializer.getPlayerDataBase();
saveZoneDataService = databaseInitializer.getSaveZoneDataService();
safeZoneDataService = databaseInitializer.getSaveZoneDataService();



Expand All @@ -55,15 +45,16 @@ public void onEnable() {
new PlayerBar(this,itemManager);


new MainCommand("lotus", itemManager,saveZoneDataService);
new MainCommand("lotus", itemManager);

SafeZoneManager.getInstance().initializeZones(saveZoneDataService);
SafeZoneManager.getInstance().initialize(safeZoneDataService);

}

@Override
public void onDisable() {
PlayerManager.getInstance().getGlobalTask().cancel();
SafeZoneManager.getInstance().getPreloaded().stopTask();
// Закриття DataBase
if (databaseInitializer != null) {
databaseInitializer.closeConnection();
Expand Down
22 changes: 4 additions & 18 deletions src/main/java/dev/lotus/studio/command/MainCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import dev.lotus.studio.database.savezone.SaveZoneDataService;
import dev.lotus.studio.database.savezone.SafeZoneDataService;
import dev.lotus.studio.item.CustomItemManager;

import java.util.ArrayList;
Expand All @@ -14,10 +14,10 @@ public class MainCommand extends AbstractCommand {
private final CustomItemManager itemManager;
private final SafeZoneCommand saveZoneCommand;

public MainCommand(String command, CustomItemManager itemManager, SaveZoneDataService saveZoneDataService) {
public MainCommand(String command, CustomItemManager itemManager) {
super(command);
this.itemManager = itemManager;
this.saveZoneCommand =new SafeZoneCommand(saveZoneDataService);
this.saveZoneCommand =new SafeZoneCommand();
}

@Override
Expand Down Expand Up @@ -286,20 +286,6 @@ private void sendEatHelp(Player player, String label) {
}
















@Override
public List<String> complete(CommandSender sender, String[] args) {
List<String> suggestions = new ArrayList<>();
Expand All @@ -313,7 +299,7 @@ public List<String> complete(CommandSender sender, String[] args) {
suggestions.addAll(List.of("armor", "view", "eat", "help"));
}
else if ("savezone".equals(category)) {
suggestions.addAll(List.of("pos1", "pos2", "save","list"));
suggestions.addAll(List.of("pos1", "pos2", "save","list","remove"));
}
} else if (args.length == 3) {
String category = args[0].toLowerCase();
Expand Down
89 changes: 42 additions & 47 deletions src/main/java/dev/lotus/studio/command/SafeZoneCommand.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,27 @@
package dev.lotus.studio.command;


import dev.lotus.studio.database.savezone.SafeZoneDataBase;
import dev.lotus.studio.database.savezone.SafeZoneDataService;
import dev.lotus.studio.safezone.SafeZone;
import dev.lotus.studio.safezone.SafeZoneManager;
import net.kyori.adventure.text.Component;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.bukkit.Location;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import dev.lotus.studio.database.savezone.SafeZoneDataBase;
import dev.lotus.studio.database.savezone.SaveZoneDataService;

import java.util.HashMap;
import java.util.List;

import static dev.lotus.studio.utils.MapperUtils.formatLocation;

public class SafeZoneCommand {
private final SaveZoneDataService service;
private final SafeZoneManager safeZoneManager = SafeZoneManager.getInstance();

private Location pos1 = null;
private Location pos2 = null;

public SafeZoneCommand(SaveZoneDataService service) {
this.service = service;
}

public boolean execute(CommandSender sender, String label, String[] args) {
if (!(sender instanceof Player player)) {
Expand All @@ -37,83 +40,75 @@ public boolean execute(CommandSender sender, String label, String[] args) {
switch (args[1].toLowerCase()) {
case "pos1":
pos1 = player.getLocation();
player.sendMessage("fist point: " + formatLocation(pos1));
player.sendMessage("first point: " + formatLocation(pos1));
break;

case "pos2":
pos2 = player.getLocation();
player.sendMessage("second points: " + formatLocation(pos2));
player.sendMessage("second point: " + formatLocation(pos2));
break;

case "save":
if (args.length < 3) {
player.sendMessage("set name to savezone: /lotus savezone save <назва>");
return true;
}
saveZoneToDB(player, pos1, pos2, args[2]);
saveZone(player, pos1, pos2, args[2]);
break;

case "list":
player.sendMessage("Укажіть назву для зони. Наприклад: /<команда> save <назва>");
listZoneToDB(player);
listZones(player);
return true;

case "remove":
if (args.length < 3) {
player.sendMessage("Укажіть назву для зони. Наприклад: /<команда> save <назва>");
player.sendMessage("Укажіть ID зони: /lotus savezone remove <id>");
return true;
}
removeZoneToDB(player, Integer.parseInt(args[1]));
removeZone(player, Integer.parseInt(args[2]));
break;

default:
player.sendMessage("Невідома команда. Використовуйте: pos1, pos2 або save.");
player.sendMessage("Невідома команда. Використовуйте: pos1, pos2, save, list, remove.");
}
return true;
}

private void removeZoneToDB(Player player, int id) {
service.getAllSaveZones().forEach(safeZoneDataBase -> {
if (safeZoneDataBase.getSafeZoneId() == id){
player.sendMessage("Сейв зону удаленно с названием: " + safeZoneDataBase.getSafeZoneName() + " ID: " + safeZoneDataBase.getSafeZoneId());
}
});
service.removeProtectZone(id);
private void saveZone(Player player, Location pos1, Location pos2, String zoneName) {
if (pos1 != null && pos2 != null) {
Pair<Location, Location> zoneLoc = new ImmutablePair<>(pos1, pos2);
SafeZone safeZone = new SafeZone(zoneName, zoneLoc);

// runtime
safeZoneManager.addSafeZone(safeZone);

player.sendMessage("Зона '" + zoneName + "' успішно збережена.");
} else {
player.sendMessage("Будь ласка, спочатку встановіть обидві точки (pos1 і pos2).");
}
}

private void listZoneToDB(Player player) {
// Отримуємо всі збережені зони з бази даних
List<SafeZoneDataBase> safeZoneDataBases = service.getAllSaveZones();
private void listZones(Player player) {
List<SafeZoneDataBase> safeZones = safeZoneManager.getDataZones();

// Якщо зон немає, повідомляємо гравця
if (safeZoneDataBases.isEmpty()) {
player.sendMessage("нет зон.");
if (safeZones.isEmpty()) {
player.sendMessage("немає зон.");
return;
}

// Формуємо мапу з імен зон і їх ідентифікаторів
HashMap<String, Integer> saveId = new HashMap<>();
safeZoneDataBases.forEach(saveZoneData -> saveId.put(saveZoneData.getSafeZoneName(), saveZoneData.getSafeZoneId()));
safeZones.forEach(zone -> saveId.put(zone.getSafeZoneName(), zone.getSafeZoneId()));

// Виводимо гравцю список зон
player.sendMessage("Список зон:");
saveId.forEach((name, id) ->
player.sendMessage(" - Имя: " + name + ", ID: " + id)
player.sendMessage(" - Назва: " + name + ", ID: " + id)
);
}

private void removeZone(Player player, int id) {
// runtime
safeZoneManager.removeSafeZone(id);

private void saveZoneToDB(Player player, Location pos1, Location pos2, String zoneName) {
if (pos1 != null && pos2 != null) {
String positionData = formatLocation(pos1) + "|" + formatLocation(pos2);
service.saveProtectZone(zoneName, positionData);
player.sendMessage("Зона '" + zoneName + "' успішно збережена.");
} else {
player.sendMessage("Будь ласка, спочатку встановіть обидві точки (pos1 і pos2).");
}
player.sendMessage(Component.text("Safe zone with ID " + id + " deleted!"));
}

private String formatLocation(Location location) {
return location.getBlockX() + "," +
location.getBlockY() + "," +
location.getBlockZ();
}

}
18 changes: 7 additions & 11 deletions src/main/java/dev/lotus/studio/database/DatabaseInitializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import dev.lotus.studio.database.playerdata.PlayerDataService;
import dev.lotus.studio.database.playerdata.PlayerDataServiceImpl;
import dev.lotus.studio.database.savezone.SafeZoneDataBase;
import dev.lotus.studio.database.savezone.SaveZoneDataService;
import dev.lotus.studio.database.savezone.SaveZoneDataServiceImpl;
import dev.lotus.studio.database.savezone.SafeZoneDataService;
import dev.lotus.studio.database.savezone.SafeZoneDataServiceImpl;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.File;
Expand All @@ -25,7 +25,7 @@ public class DatabaseInitializer {

private PlayerDataService playerDataBase;

private SaveZoneDataService saveZoneDataService;
private SafeZoneDataService safeZoneDataService;

public DatabaseInitializer(JavaPlugin plugin) {
this.plugin = plugin;
Expand Down Expand Up @@ -70,17 +70,12 @@ public void initialDataService() {
try {
ConnectionSource connectionSource = openConnection();
this.playerDataBase = new PlayerDataServiceImpl(connectionSource);
this.saveZoneDataService = new SaveZoneDataServiceImpl(connectionSource);
this.safeZoneDataService = new SafeZoneDataServiceImpl(connectionSource);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}






/**
* Повертає ORMLite ConnectionSource
*/
Expand Down Expand Up @@ -127,11 +122,12 @@ public void closeConnection() {
public PlayerDataService getPlayerDataBase() {
return playerDataBase;
}

/**
* This method
* @return SaveZoneDataService
*/
public SaveZoneDataService getSaveZoneDataService() {
return saveZoneDataService;
public SafeZoneDataService getSaveZoneDataService() {
return safeZoneDataService;
}
}
Loading