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
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
import dev.lotus.studio.database.hibernate.playerdata.PlayerDataServiceImpl;
import dev.lotus.studio.database.hibernate.savezone.SaveZoneDataService;
import dev.lotus.studio.database.hibernate.savezone.SaveZoneDataServiceImpl;
import dev.lotus.studio.database.hibernate.structures.StructureDataService;
import dev.lotus.studio.database.hibernate.structures.StructureDataServiceImpl;
import dev.lotus.studio.event.EatEvent;
import dev.lotus.studio.event.JoinLeaveEvent;
import dev.lotus.studio.item.CustomItemManager;
Expand All @@ -16,24 +14,20 @@
import dev.lotus.studio.playerdata.PlayerBar;
import dev.lotus.studio.playerdata.PlayerManager;
import dev.lotus.studio.safezone.SafeZoneManager;
import dev.lotus.studio.trader.hoarder.HoarderConfig;
import dev.lotus.studio.trader.hoarder.HolderManager;

public final class LotusOffSeasonV2 extends JavaPlugin {
public final class Main extends JavaPlugin {

private static LotusOffSeasonV2 instance;
private static Main instance;
private CustomItemManager itemManager;


private HoarderConfig horderConfig;

private HolderManager holderManager;

private PlayerDataServiceImpl playerDataBase;
private SaveZoneDataService saveZoneDataService;


private StructureDataService structureDataService;


@Override
public void onEnable() {
Expand All @@ -46,50 +40,39 @@ public void onEnable() {
this.saveZoneDataService = new SaveZoneDataServiceImpl();

itemManager.loadItems();
getServer().getPluginManager().registerEvents(new ArmorEvent(itemManager), this);
getServer().getPluginManager().registerEvents(new EatEvent(itemManager), this);
getServer().getPluginManager().registerEvents(new JoinLeaveEvent(playerDataBase), this);
getServer().getPluginManager().registerEvents(new ArmorEvent(itemManager),this);
getServer().getPluginManager().registerEvents(new EatEvent(itemManager),this);
getServer().getPluginManager().registerEvents(new JoinLeaveEvent(playerDataBase),this);
getLogger().info("Предметы загружены из items.yml.");

new PlayerBar(this, itemManager);

new PlayerBar(this,itemManager);

horderConfig = new HoarderConfig();
holderManager = new HolderManager(horderConfig);
holderManager.loadHoldersFromFile();

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

SafeZoneManager.getInstance().initializeZones(saveZoneDataService);

//test
structureDataService = new StructureDataServiceImpl();
}

@Override
public void onDisable() {
PlayerManager.getInstance().getGlobalTask().cancel();
PlayerManager.getInstance().getGlobalTask().cancel();
// Закриття SessionFactory Hibernate при вимкненні плагіна
if (HibernateUtil.getSessionFactory() != null) {
HibernateUtil.getSessionFactory().close();
}
getLogger().info("LotusOffSeason plugin disabled!");
HandlerList.unregisterAll(this);
}

public PlayerDataServiceImpl getPlayerDataBase() {
return playerDataBase;
}

public HoarderConfig getHorderConfig() {
return horderConfig;
}

public static LotusOffSeasonV2 getInstance() {

public static Main getInstance() {
return instance;
}

public HolderManager getHolderManager() {
return holderManager;
}

}
4 changes: 2 additions & 2 deletions src/main/java/dev/lotus/studio/command/AbstractCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
import org.bukkit.command.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import dev.lotus.studio.LotusOffSeasonV2;
import dev.lotus.studio.Main;

import java.util.ArrayList;
import java.util.List;

abstract class AbstractCommand implements CommandExecutor, TabCompleter {
public AbstractCommand(String command){
PluginCommand pluginCommand = LotusOffSeasonV2.getInstance().getCommand(command);
PluginCommand pluginCommand = Main.getInstance().getCommand(command);
if (pluginCommand != null){
pluginCommand.setExecutor(this);
pluginCommand.setTabCompleter(this);
Expand Down
150 changes: 15 additions & 135 deletions src/main/java/dev/lotus/studio/command/MainCommand.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,22 @@
package dev.lotus.studio.command;

import net.kyori.adventure.text.Component;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import dev.lotus.studio.database.hibernate.savezone.SaveZoneDataService;
import dev.lotus.studio.item.CustomItemManager;
import dev.lotus.studio.trader.hoarder.Holder;
import dev.lotus.studio.trader.hoarder.HolderManager;

import java.util.ArrayList;
import java.util.List;

public class MainCommand extends AbstractCommand {
private final CustomItemManager itemManager;
private final HolderManager holderManager;
private final SafeZoneCommand saveZoneCommand;

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

Expand All @@ -39,7 +36,6 @@ public boolean execute(CommandSender sender, String label, String[] args) {

switch (category) {
case "item" -> handleItemCommands(player, label, args);
case "villager" -> handleVillagerCommands(player, label, args);
case "savezone" -> saveZoneCommand.execute(player, label,args);
case "reload" -> reloadConfig(player, label, args);
default -> player.sendMessage("Неизвестная категория. Используйте /" + label + " для помощи.");
Expand All @@ -59,9 +55,8 @@ private void reloadConfig(Player player, String label, String[] args) {
String reload = args[1].toLowerCase();

switch (reload) {
case "items" -> itemReloadCommand(player, label, args);
case "villager" -> villagerReloadCommand(player, label, args);
case "all" -> allReloadCommand(player, label, args);
case "items" -> itemReloadCommand(player, args);
case "all" -> allReloadCommand(player, args);
case "help" -> sendReloadHelp(player, label);
default -> player.sendMessage("Неизвестная команда для item. Используйте /" + label + " item help.");
}
Expand All @@ -75,7 +70,7 @@ private void sendReloadHelp(Player player, String label) {
player.sendMessage("§7/" + label + " all - Reload all configuration");
}

private void itemReloadCommand(Player player, String label, String[] args) {
private void itemReloadCommand(Player player, String[] args) {
player.sendMessage("Reloading config " + args[1]);
try {
itemManager.reloadItemConfig();
Expand All @@ -85,21 +80,12 @@ private void itemReloadCommand(Player player, String label, String[] args) {
player.sendMessage("Reload complete.");
}

private void villagerReloadCommand(Player player, String label, String[] args) {
player.sendMessage("Reloading config " + args[1]);
try {
holderManager.getHoarderConfig().reloadConfig();
} catch (Exception e) {
player.sendMessage("Config reload failed.");
}
player.sendMessage("Reload complete.");
}

private void allReloadCommand(Player player, String label, String[] args) {

private void allReloadCommand(Player player, String[] args) {
player.sendMessage("Reloading config " + args[1]);
try {
villagerReloadCommand(player, label, args);
itemReloadCommand(player, label, args);
itemReloadCommand(player, args);
} catch (Exception e) {
player.sendMessage("Config reload failed.");
}
Expand Down Expand Up @@ -180,7 +166,8 @@ private void handleViewGiveCommand(Player player, String label, String[] args) {
}

player.getInventory().addItem(itemStack);
player.sendMessage("Вам выдан view item: " + (itemStack.getItemMeta() != null ? itemStack.getItemMeta().getDisplayName() : "Без имени"));
Component displayName = itemStack.getItemMeta().displayName();
player.sendMessage("Вам выдан view item: " + (itemStack.getItemMeta() != null ? displayName : "Без имени"));
}


Expand Down Expand Up @@ -299,111 +286,15 @@ private void sendEatHelp(Player player, String label) {
}


// -- Villager ---
private void handleVillagerCommands(Player player, String label, String[] args) {
if (args.length < 2) {
sendVillagerHelp(player, label);
return;
}

String subCommand = args[1].toLowerCase();

switch (subCommand) {
case "horder" -> handleHorderCommands(player, label, args);
default -> player.sendMessage("Неизвестная команда для villager. Используйте /" + label + " villager help.");
}
}

private void sendVillagerHelp(Player player, String label) {
player.sendMessage("§aКоманды для villager:");
player.sendMessage("§7/" + label + " villager horder - Управление торговцами (Holder).");
player.sendMessage("§7/" + label + " villager help - Показать помощь для villager.");
}


// --- Horder Commands ---
private void handleHorderCommands(Player player, String label, String[] args) {
if (args.length < 4) {
sendHorderHelp(player, label);
return;
}

String action = args[2].toLowerCase();

switch (action) {
case "create" -> handleCreateHolder(player, args);
case "remove" -> handleRemoveHolder(player, args);
case "info" -> handleHolderInfo(player, args);
case "reload" -> handleReloadConfig(player);
case "help" -> sendHorderHelp(player, label);
default -> player.sendMessage("Неизвестная команда для horder. Используйте /" + label + " horder help.");
}
}

private void handleCreateHolder(Player player, String[] args) {
if (args.length < 5) {
player.sendMessage("Использование: /<command> horder create <name> [preset]");
return;
}

String name = args[3];
String preset = args.length > 3 ? args[4] : null;

if (holderManager.getHolderByName(name) != null) {
player.sendMessage("Holder с именем " + name + " уже существует.");
return;
}

holderManager.spawnHolderVillager(name, preset, player.getLocation());
player.sendMessage("Holder '" + name + "' создан.");
}

private void handleRemoveHolder(Player player, String[] args) {
if (args.length < 4) {
player.sendMessage("Использование: /<command> horder remove <name>");
return;
}

String name = args[3];
if (holderManager.getHolderByName(name) == null) {
player.sendMessage("Holder с именем " + name + " не найден.");
return;
}

holderManager.removeHolder(name);
player.sendMessage("Holder '" + name + "' удалён.");
}

private void handleHolderInfo(Player player, String[] args) {
if (args.length < 4) {
player.sendMessage("Использование: /<command> horder info <name>");
return;
}

String name = args[3];
Holder holder = holderManager.getHolderByName(name);
if (holder == null) {
player.sendMessage("Holder с именем " + name + " не найден.");
return;
}

player.sendMessage("Информация о Holder:");
player.sendMessage("Имя: " + holder.getName());
player.sendMessage("Описание: " + holder.getDescription());
}

private void handleReloadConfig(Player player) {
holderManager.reloadConfigAndVillagers();
player.sendMessage("Конфигурация перезагружена.");
}

private void sendHorderHelp(Player player, String label) {
player.sendMessage("Команды для horder:");
player.sendMessage("/" + label + " horder create <name> [preset] - Создать Holder с пресетом рецептов.");
player.sendMessage("/" + label + " horder remove <name> - Удалить Holder.");
player.sendMessage("/" + label + " horder info <name> - Показать информацию о Holder.");
player.sendMessage("/" + label + " horder reload - Перезагрузить конфигурацию Holder.");
}



Expand All @@ -415,33 +306,26 @@ public List<String> complete(CommandSender sender, String[] args) {

if (args.length == 1) {
// Предлагаем категории верхнего уровня
suggestions.addAll(List.of("item", "villager", "savezone"));
suggestions.addAll(List.of("item", "savezone"));
} else if (args.length == 2) {
String category = args[0].toLowerCase();
if ("item".equals(category)) {
suggestions.addAll(List.of("armor", "view", "eat", "help"));
} else if ("villager".equals(category)) {
suggestions.addAll(List.of("horder", "help"));
} else if ("savezone".equals(category)) {
}
else if ("savezone".equals(category)) {
suggestions.addAll(List.of("pos1", "pos2", "save","list"));
}
} else if (args.length == 3) {
String category = args[0].toLowerCase();
String subCommand = args[1].toLowerCase();

if ("item".equals(category)) {
suggestions.addAll(List.of("give")); // Добавить сюда команду "give"
suggestions.add("give"); // Добавить сюда команду "give"
switch (subCommand) {
case "armor", "view", "eat" -> suggestions.addAll(List.of("give", "list", "help"));
}
} else if ("villager".equals(category) && "horder".equals(subCommand)) {
suggestions.addAll(List.of("create", "remove", "info", "list"));
// } else if ("savezone".equals(category)) {
//// if ("save".equals(subCommand)) {
//// // Предлагаем список сохранённых зон
//// //suggestions.addAll(.getSavedZoneNames());
//// }
}

} else if (args.length == 4) {
String category = args[0].toLowerCase();
String subCommand = args[1].toLowerCase();
Expand All @@ -465,10 +349,6 @@ public List<String> complete(CommandSender sender, String[] args) {
}
}
}
} else if ("villager".equals(category) && "horder".equals(subCommand)) {
if ("remove".equals(action) || "info".equals(action)) {
suggestions.addAll(holderManager.getHolderNames());
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import dev.lotus.studio.LotusOffSeasonV2;
import dev.lotus.studio.Main;
import dev.lotus.studio.database.hibernate.playerdata.PlayerDataBase;
import dev.lotus.studio.database.hibernate.savezone.SaveZoneData;
import dev.lotus.studio.database.hibernate.structures.StructuresData;

import static org.bukkit.Bukkit.getLogger;
import static org.bukkit.Bukkit.getServer;
Expand All @@ -34,7 +33,6 @@ public class HibernateUtil {

// Додаємо анотовані класи
configuration.addAnnotatedClass(PlayerDataBase.class);
configuration.addAnnotatedClass(StructuresData.class); // Додайте сюди інші сутності
configuration.addAnnotatedClass(SaveZoneData.class); // Додайте сюди інші сутності

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
Expand All @@ -46,7 +44,7 @@ public class HibernateUtil {
} catch (Exception e) {
getLogger().severe("Failed to initialize Hibernate!");
e.printStackTrace();
getServer().getPluginManager().disablePlugin(LotusOffSeasonV2.getInstance());
getServer().getPluginManager().disablePlugin(Main.getInstance());
throw new ExceptionInInitializerError("Initial SessionFactory creation failed" + e);
}
}
Expand Down
Loading