diff --git a/pom.xml b/pom.xml index 547330f..2c1e871 100644 --- a/pom.xml +++ b/pom.xml @@ -46,7 +46,6 @@ xyz.soukup.ecoCraftCore.objects.** - org.apache.maven.plugins maven-shade-plugin @@ -60,8 +59,8 @@ - dev.triumphteam.gui - xyz.soukup.gui + com.github.stefvanschie.inventoryframework + xyz.soukup.inventoryframework org.avaje @@ -128,17 +127,17 @@ mysql-connector-j 9.3.0 - - dev.triumphteam - triumph-gui - 3.1.12 - io.papermc.paper paper-api - 1.21.1-R0.1-SNAPSHOT + 1.21.10-R0.1-SNAPSHOT provided + + com.github.stefvanschie.inventoryframework + IF + 0.11.6 + com.github.MatrixCreations MatrixColorAPI diff --git a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java index bc8ecb4..b6e39d0 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java @@ -9,7 +9,6 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; -import xyz.soukup.ecoCraftCore.commands.GuiCommand; import xyz.soukup.ecoCraftCore.commands.MoneyCommand; import xyz.soukup.ecoCraftCore.commands.RulerCommand; import xyz.soukup.ecoCraftCore.commands.ShopCommand; @@ -24,7 +23,6 @@ import xyz.soukup.ecoCraftCore.utilities.Messages; import java.io.IOException; import java.sql.SQLException; -import java.time.Duration; import java.util.logging.Level; import java.util.logging.Logger; @@ -96,7 +94,6 @@ public final class EcoCraftCore extends JavaPlugin { lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(ShopCommand.createCommand().build())); lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(RulerCommand.createCommand().build())); lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MoneyCommand.createCommand().build())); - lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(GuiCommand.createCommand().build())); } private void registerEvents(){ @@ -106,7 +103,6 @@ public final class EcoCraftCore extends JavaPlugin { pm.registerEvents(new VirtualChestLogic(), this); pm.registerEvents(new ShopLogic(), this); pm.registerEvents(new PreparePlayer(), this); - pm.registerEvents(new InventoryActionCancel(), this); } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/GuiCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/GuiCommand.java deleted file mode 100644 index 20a69cd..0000000 --- a/src/main/java/xyz/soukup/ecoCraftCore/commands/GuiCommand.java +++ /dev/null @@ -1,116 +0,0 @@ -package xyz.soukup.ecoCraftCore.commands; - -import com.mojang.brigadier.arguments.StringArgumentType; -import dev.triumphteam.gui.builder.item.ItemBuilder; -import dev.triumphteam.gui.guis.GuiItem; -import io.papermc.paper.command.brigadier.CommandSourceStack; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import io.papermc.paper.command.brigadier.Commands; -import com.mojang.brigadier.context.CommandContext; -import xyz.soukup.ecoCraftCore.utilities.Messages; -import net.kyori.adventure.text.Component; -import org.bukkit.command.CommandSender; -import dev.triumphteam.gui.guis.Gui; -import org.bukkit.entity.Player; -import org.bukkit.Material; - -import java.util.HashMap; -import java.util.Map; - -public class GuiCommand { - public static LiteralArgumentBuilder createCommand() { - return Commands.literal("gopen") - .then(Commands.argument("id", StringArgumentType.string()) - .executes(GuiCommand::openGui)) - .executes(GuiCommand::getAll); - } - - private static int openGui(CommandContext context){ - CommandSender commandSender = context.getSource().getSender(); - String guiId = context.getArgument("id", String.class); - - if (!(commandSender instanceof Player)){ - Messages.send(commandSender, "generic.error.not-player"); - return 0; - } - - Gui gui = getGui(guiId, false, commandSender); // Pokud najdeme gui vrátíme ho, pokud ne vrátíme default gui - gui.open((Player) commandSender); - return 1; - } - - private static int getAll(CommandContext context){ - CommandSender commandSender = context.getSource().getSender(); - - if (!(commandSender instanceof Player)){ - Messages.send(commandSender, "generic.error.not-player"); - return 0; - } - - getGui("", true, commandSender); // Pokud najdeme gui vrátíme ho, pokud ne vrátíme default gui - return 1; - } - - private static Gui getGui(String guiId, Boolean getAll, CommandSender commandSender){ - // Mapa gui objektů - Map guiMap = new HashMap<>(); - - // Default gui - Gui gui1 = Gui.gui() // U custom gui dávat vždycky "GUI -" -> ../events/InventoryActionCancel - .title(Component.text("GUI - Default")) - .rows(6) - .create(); - - // Shop Admin gui - Gui shopAdminGui = Gui.gui() - .title(Messages.get("gui.shopadmin.title")) - .rows(3) - .create(); - shopAdminGui.getFiller().fill(ItemBuilder.from(Material.BLACK_STAINED_GLASS_PANE) - .name(Messages.get("gui.shopadmin.items.background")).asGuiItem()); - GuiItem deleteShop = ItemBuilder.from(Material.BARRIER).name(Messages.get("gui.shopadmin.items.deleteshop")) - .asGuiItem(event -> { - // Zde delete shop - }); - GuiItem changeSellPrice = ItemBuilder.from(Material.OAK_SIGN).name(Messages.get("gui.shopadmin.items.changesellprice")) - .asGuiItem(event -> { - // Zde change sell price - }); - GuiItem changeBuyPrice = ItemBuilder.from(Material.DARK_OAK_SIGN).name(Messages.get("gui.shopadmin.items.changebuyprice")) - .asGuiItem(event -> { - // Zde change buy price - }); - GuiItem changeAmounts = ItemBuilder.from(Material.GOLD_BLOCK).name(Messages.get("gui.shopadmin.items.changeamounts")) - .asGuiItem(event -> { - // Zde change amounts - }); - - shopAdminGui.setItem(22, deleteShop); - shopAdminGui.setItem(15, changeBuyPrice); - shopAdminGui.setItem(11, changeSellPrice); - shopAdminGui.setItem(13, changeAmounts); - - guiMap.put("default", gui1); - guiMap.put("shop-admin", shopAdminGui); - - if (getAll){ - printAll(guiMap, commandSender); - } - - return guiMap.getOrDefault(guiId, gui1); - } - - private static void printAll(Map guiMap, CommandSender commandSender){ - HashMap stringGuis = new HashMap<>(); - int index = 1; - - for (Map.Entry entry : guiMap.entrySet()) { - String guiName = entry.getKey(); - stringGuis.put(String.valueOf(index), guiName); - index++; // Každý číslo je placeholder v messages, pokud se změní počet gui musí se editnout i messages.yml - } - - Messages.send(commandSender, "gui.all", stringGuis); - } -} - diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/IslandCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/IslandCommand.java new file mode 100644 index 0000000..1e7e173 --- /dev/null +++ b/src/main/java/xyz/soukup/ecoCraftCore/commands/IslandCommand.java @@ -0,0 +1,4 @@ +package xyz.soukup.ecoCraftCore.commands; + +public class IslandCommand { +} diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java index af7b9c6..cc39f48 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java @@ -92,7 +92,7 @@ public class MoneyCommand { return 0; } - Transaction transaction = new Transaction(amount, "player", sender.getName(), "player", receiver.getName(), "player"); + Transaction transaction = new Transaction(amount, "player", sender .getName(), "player", receiver.getName(), "player"); transaction.process(); Messages.send(sender, "money.send.player", PHHM.get(transaction)); diff --git a/src/main/java/xyz/soukup/ecoCraftCore/events/InventoryActionCancel.java b/src/main/java/xyz/soukup/ecoCraftCore/events/InventoryActionCancel.java deleted file mode 100644 index 6b77ec9..0000000 --- a/src/main/java/xyz/soukup/ecoCraftCore/events/InventoryActionCancel.java +++ /dev/null @@ -1,17 +0,0 @@ -package xyz.soukup.ecoCraftCore.events; - -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; - -public class InventoryActionCancel implements Listener { - @EventHandler - public void onInventoryClick(InventoryClickEvent event) { - if (event.getView().getTitle().contains("GUI -")) { - if (!ClickType.valueOf(event.getClick().name()).toString().isEmpty()) { - event.setCancelled(true); - } - } - } -} diff --git a/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java b/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java index 97d3b22..09d8cf2 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java @@ -1,12 +1,17 @@ package xyz.soukup.ecoCraftCore.events; - -import dev.triumphteam.gui.builder.item.ItemBuilder; -import dev.triumphteam.gui.guis.Gui; -import dev.triumphteam.gui.guis.GuiItem; +import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; +import com.github.stefvanschie.inventoryframework.pane.StaticPane; import io.papermc.paper.dialog.Dialog; +import io.papermc.paper.dialog.DialogResponseView; +import io.papermc.paper.registry.data.dialog.ActionButton; import io.papermc.paper.registry.data.dialog.DialogBase; +import io.papermc.paper.registry.data.dialog.action.DialogAction; +import io.papermc.paper.registry.data.dialog.input.DialogInput; import io.papermc.paper.registry.data.dialog.type.DialogType; +import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickCallback; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.Sign; @@ -17,16 +22,16 @@ import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; import xyz.soukup.ecoCraftCore.objects.Account; import xyz.soukup.ecoCraftCore.objects.Shop; import xyz.soukup.ecoCraftCore.objects.Transaction; import xyz.soukup.ecoCraftCore.objects.VirtualChest; -import xyz.soukup.ecoCraftCore.utilities.Converter; -import xyz.soukup.ecoCraftCore.utilities.InventoryUtils; -import xyz.soukup.ecoCraftCore.utilities.Messages; -import xyz.soukup.ecoCraftCore.utilities.PDC; +import xyz.soukup.ecoCraftCore.utilities.*; import java.util.HashMap; +import java.util.List; +import java.util.Objects; @SuppressWarnings("UnstableApiUsage") public class ShopLogic implements Listener { @@ -69,23 +74,27 @@ public class ShopLogic implements Listener { //ZDE Přídat otevíraní shop edit gui if (shop.getOwnerType().equals("player") && shop.getOwner().equals(player.getName())){ - + Dialog dialog = buildEditDialog(shop); + player.showDialog(dialog); return; } - Gui gui = buildShopGui(player, shop); + ChestGui gui = buildShopGui(player, shop); - gui.open(player); + gui.show(player); } - public static Gui buildShopGui(Player player, Shop shop){ + public static ChestGui buildShopGui(Player player, Shop shop){ - Gui gui = Gui.gui() - .title(Component.text("Obchod")) - .rows(1) - .create(); + ChestGui gui = new ChestGui(1, Messages.getAsString("gui.shop.title")); + + gui.setOnGlobalClick(inventoryClickEvent -> { + inventoryClickEvent.setCancelled(true); + }); + + StaticPane staticPane = new StaticPane(9, 1); Float buyPrice = shop.getPriceBuy(); Float sellPrice = shop.getPriceSell(); @@ -97,10 +106,10 @@ public class ShopLogic implements Listener { hashMap.put("amount", Integer.toString(amount)); hashMap.put("price", String.format("%.2f", buyPrice)); - GuiItem one = ItemBuilder - .from(Material.LIME_WOOL) - .name(Messages.get("menu.shop.buy", hashMap)) - .asGuiItem(); + GuiItem one = new GuiItemBuilder(Material.LIME_WOOL) + .setName(Messages.get("gui.shop.buy", hashMap)) + .build(); + one.setAction(event -> { event.setCancelled(true); ShopLogic.buy(shop, player, 1); @@ -109,16 +118,17 @@ public class ShopLogic implements Listener { hashMap.put("amount", Integer.toString(amount*8)); hashMap.put("price", String.format("%.2f", buyPrice*8)); - GuiItem eight = ItemBuilder - .from(Material.LIME_WOOL) - .name(Messages.get("menu.shop.buy", hashMap)) - .asGuiItem(); + GuiItem eight = new GuiItemBuilder(Material.LIME_WOOL) + .setName(Messages.get("gui.shop.buy", hashMap)) + .build(); + eight.setAction(event -> { event.setCancelled(true); ShopLogic.buy(shop, player, 8); }); - gui.setItem(0, one); - gui.setItem(1, eight); + + staticPane.addItem(one, 0,0); + staticPane.addItem(eight, 1,0); } @@ -129,10 +139,9 @@ public class ShopLogic implements Listener { hashMap.put("amount", Integer.toString(amount)); hashMap.put("price", String.format("%.2f", sellPrice)); - GuiItem one = ItemBuilder - .from(Material.YELLOW_WOOL) - .name(Messages.get("menu.shop.sell", hashMap)) - .asGuiItem(); + GuiItem one = new GuiItemBuilder(Material.YELLOW_WOOL) + .setName(Messages.get("gui.shop.sell", hashMap)) + .build(); one.setAction(event -> { event.setCancelled(true); @@ -143,35 +152,60 @@ public class ShopLogic implements Listener { hashMap.put("amount", Integer.toString(amount*8)); hashMap.put("price", String.format("%.2f", sellPrice*8)); - GuiItem eight = ItemBuilder - .from(Material.YELLOW_WOOL) - .name(Messages.get("menu.shop.sell", hashMap)) - .asGuiItem(); + GuiItem eight = new GuiItemBuilder(Material.YELLOW_WOOL) + .setName(Messages.get("gui.shop.sell", hashMap)) + .build(); eight.setAction(event -> { event.setCancelled(true); ShopLogic.sell(shop, player, 8); }); - gui.setItem(7, one); - gui.setItem(8, eight); + staticPane.addItem(one, 7,0); + staticPane.addItem(eight, 8, 0); } GuiItem item = new GuiItem(shop.getItemStack()); - gui.setItem(4, item); + staticPane.addItem(item, 4, 0); + gui.addPane(staticPane); - gui.setDefaultClickAction(event -> { - event.setCancelled(true); - }); return gui; } - public static Dialog editDialog(){ + public static Dialog buildEditDialog(Shop shop){ return Dialog.create(builder -> builder.empty() - .base(DialogBase.builder(Messages.get("gui.shop-edit.title")).build()) - .type(DialogType.notice()) + .base(DialogBase.builder(Messages.get("gui.shop-edit.title")) + .inputs(List.of( + DialogInput.text("count", Messages.get("gui.shop-edit.inputs.count")) + .initial(String.valueOf(shop.getAmount())) + .build(), + DialogInput.text("sellprice", Messages.get("gui.shop-edit.inputs.price-sell")) + .initial(String.valueOf(shop.getPriceSell())) + .build(), + DialogInput.text("buyprice", Messages.get("gui.shop-edit.inputs.price-buy")) + .initial(String.valueOf(shop.getPriceBuy())) + .build(), + DialogInput.bool("changeitem", Messages.get("gui.shop-edit.inputs.change-item")) + .build() + + )) + .build()) + .type(DialogType.confirmation( + ActionButton.builder(Messages.get("gui.shop-edit.button.confirm")) + .action(DialogAction.customClick( + (view, audience) -> { + changeShopParameters(view, audience, shop); + audience.closeDialog(); + }, + ClickCallback.Options.builder() + .build() + )) + .build(), + ActionButton.builder(Messages.get("gui.shop-edit.button.cancel")).build() + )) + ); } @@ -229,6 +263,41 @@ public class ShopLogic implements Listener { } + public static void changeShopParameters(DialogResponseView response, Audience audience, Shop shop){ + if (!(audience instanceof Player)){ + return; + } + + Player player = (Player) audience; + + if (Boolean.TRUE.equals(response.getBoolean("changeitem"))){ + + PlayerInventory playerInventory = player.getInventory(); + ItemStack itemStack = playerInventory.getItemInMainHand(); + + shop.setItemStack(itemStack); + } + + float sellPrice; + float buyPrice; + int count; + + try { + sellPrice = Float.parseFloat(Objects.requireNonNull(response.getText("sellprice"))); + buyPrice = Float.parseFloat(Objects.requireNonNull(response.getText("buyprice"))); + count = Integer.parseInt(Objects.requireNonNull(response.getText("count"))); + } catch (NumberFormatException exception) { + Messages.send(player, "gui.error.invalid-input"); + return; + } + + shop.setAmount(count); + shop.setPriceSell(sellPrice); + shop.setPriceBuy(buyPrice); + shop.save(); + + } + public static void sell(Shop shop, Player player, int multiplier){ if (VirtualChestLogic.openedChests.containsKey(shop.getVirtualChestID())){ diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandLoader.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandLoader.java new file mode 100644 index 0000000..6819687 --- /dev/null +++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandLoader.java @@ -0,0 +1,98 @@ +package xyz.soukup.ecoCraftCore.islands; +import com.infernalsuite.asp.api.exceptions.UnknownWorldException; +import com.infernalsuite.asp.api.loaders.SlimeLoader; +import com.j256.ormlite.stmt.DeleteBuilder; +import com.j256.ormlite.stmt.Where; +import xyz.soukup.ecoCraftCore.objects.Island; +import xyz.soukup.ecoCraftCore.utilities.DaoRegistry; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; +import java.util.stream.Collectors; + +public class IslandLoader implements SlimeLoader { + + + @Override + public byte[] readWorld(String worldName) throws UnknownWorldException, IOException { + + Island island; + + try { + island = DaoRegistry.getIslandDao().queryBuilder().where().eq("uuid", worldName).queryForFirst(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + + if (island == null){ + throw new UnknownWorldException(worldName); + } + + return island.getData(); + } + + @Override + public boolean worldExists(String worldName) throws IOException { + try { + long count = DaoRegistry.getIslandDao().queryBuilder() + .setCountOf(true) + .where() + .eq("uuid", worldName) + .countOf(); + + return count > 0; + + } catch (NumberFormatException | SQLException e) { + return false; + } + } + + @Override + public void saveWorld(String worldName, byte[] serializedWorld) throws IOException { + try { + Island island = DaoRegistry.getIslandDao().queryBuilder().where().eq("uuid", worldName).queryForFirst(); + + if (island != null) { + island.setData(serializedWorld); + island.save(); + } else { + throw new IOException("Island " + worldName + " not found in DB."); + } + } catch (NumberFormatException | SQLException e) { + throw new IOException("Failed to save island : " + worldName, e); + } + } + + @Override + public void deleteWorld(String worldName) throws IOException { + try { + DeleteBuilder deleteBuilder = DaoRegistry.getIslandDao().deleteBuilder(); + deleteBuilder.where().eq("uuid", worldName); + deleteBuilder.delete(); + + } catch (NumberFormatException | SQLException e) { + throw new IOException("Failed to delete: " + worldName, e); + } + } + + @Override + public List listWorlds() throws IOException { + try { + return DaoRegistry.getIslandDao().queryBuilder() + .selectColumns("uuid") // Only fetch the ID column + .query() // This returns Island objects with ONLY the ID field populated + .stream() + .map(Island::getUuid) + .collect(Collectors.toList()); + } catch (SQLException e) { + throw new IOException("Failed to list islands", e); + } + } + + + + + + +} diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java new file mode 100644 index 0000000..7ff145e --- /dev/null +++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java @@ -0,0 +1,68 @@ +package xyz.soukup.ecoCraftCore.islands; + +import com.infernalsuite.asp.api.AdvancedSlimePaperAPI; +import com.infernalsuite.asp.api.world.SlimeWorld; +import com.infernalsuite.asp.api.world.properties.SlimeProperties; +import com.infernalsuite.asp.api.world.properties.SlimePropertyMap; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import xyz.soukup.ecoCraftCore.objects.Island; + +import java.util.Objects; +import java.util.UUID; + +import static xyz.soukup.ecoCraftCore.EcoCraftCore.plugin; + +public class IslandManager { + private final AdvancedSlimePaperAPI asp = AdvancedSlimePaperAPI.instance(); + private final IslandLoader loader = new IslandLoader(); + + // 1. Create a brand new island + public void createIsland(String name, String displayName, String descritpion, String owner, String ownerType) { + String uuid = UUID.randomUUID().toString(); + + + SlimePropertyMap props = new SlimePropertyMap(); + props.setValue(SlimeProperties.ENVIRONMENT, "overworld"); + props.setValue(SlimeProperties.WORLD_TYPE, "flat"); + + // Create empty world in ASWM + try { + // Note: createEmptyWorld is fast, so we can run some parts sync if needed, + // but it's best to run the whole chain async. + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + try { + // Create the database entry first so the loader has a row to update + + + SlimeWorld slimeWorld = asp.createEmptyWorld(uuid, false, props, loader); + Island island = new Island(name, uuid, displayName, descritpion, owner, ownerType, null); + island.save(); + + Bukkit.getScheduler().runTask(plugin, () -> { + asp.loadWorld(slimeWorld, true); + }); + } catch (Exception e) { e.printStackTrace(); } + }); + } catch (Exception e) { e.printStackTrace(); } + } + + // 2. Retrieve and Load existing island + public void loadIsland(Player player, String uuidStr) { + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + try { + // Check if world is already loaded in Bukkit + if (Bukkit.getWorld(uuidStr) != null) { + Bukkit.getScheduler().runTask(plugin, () -> player.teleport(Bukkit.getWorld(uuidStr).getSpawnLocation())); + return; + } + + SlimeWorld slimeWorld = asp.readWorld(loader, uuidStr, false, new SlimePropertyMap()); + Bukkit.getScheduler().runTask(plugin, () -> { + asp.loadWorld(slimeWorld, true); + player.teleport(Bukkit.getWorld(uuidStr).getSpawnLocation()); + }); + } catch (Exception e) { e.printStackTrace(); } + }); + } +} diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/Island.java b/src/main/java/xyz/soukup/ecoCraftCore/objects/Island.java new file mode 100644 index 0000000..86611b9 --- /dev/null +++ b/src/main/java/xyz/soukup/ecoCraftCore/objects/Island.java @@ -0,0 +1,116 @@ +package xyz.soukup.ecoCraftCore.objects; + +import com.j256.ormlite.field.DataType; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import xyz.soukup.ecoCraftCore.utilities.DaoRegistry; + +import java.sql.SQLException; + +@DatabaseTable(tableName = "islands") +public class Island { + @DatabaseField(generatedId = true) + private int id; + + @DatabaseField(canBeNull = false, unique = true) + private String uuid; + + @DatabaseField(canBeNull = false, unique = true) + private String name; + + + @DatabaseField(columnName = "display_name") + private String displayName; + + @DatabaseField() + private String descritpion; + + @DatabaseField(canBeNull = false) + private String owner; + + @DatabaseField(canBeNull = false) + private String ownerType; + + @DatabaseField(canBeNull = false, dataType = DataType.BYTE_ARRAY, columnDefinition = "LONGBLOB") + private byte[] data; + + @DatabaseField(defaultValue = "", columnName = "active_on") + private String activeOn; + + public Island(){ + + } + + public Island(String name, String uuid, String displayName, String descritpion, String owner, String ownerType, byte[] data) { + this.name = name; + this.uuid = uuid; + this.displayName = displayName; + this.descritpion = descritpion; + this.owner = owner; + this.ownerType = ownerType; + this.data = data; + + } + + public void setData(byte[] data) { + this.data = data; + } + + public int getId() { + return id; + } + + public String getName() { + return name; + } + + public String getDisplayName() { + return displayName; + } + + public String getDescritpion() { + return descritpion; + } + + public String getOwner() { + return owner; + } + + public String getOwnerType() { + return ownerType; + } + + public byte[] getData() { + return data; + } + + public String getActiveOn() { + return activeOn; + } + + public static Island findById(int id) { + + + try { + return DaoRegistry.getIslandDao().queryForId(id); + } catch (SQLException e) { + return null; + } + } + + + + public void save(){ + try { + DaoRegistry.getIslandDao().createOrUpdate(this); + } catch (SQLException e) { + throw new RuntimeException(e); + } + + } + + + public String getUuid() { + return uuid; + } +} diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java b/src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java index b41ac1c..48716a5 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java @@ -82,8 +82,8 @@ public class Shop { this.itemName = itemName; } - public void setItemStackString(String itemStackString) { - this.itemStackString = itemStackString; + public void setItemStack(ItemStack itemStack) { + this.itemStackString = Converter.toString(itemStack); } public void setAmount(int amount) { diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java b/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java index 92464e9..09c8332 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java @@ -146,3 +146,9 @@ public class VirtualChest { this.activeServer = activeServer; } } + + + + + + diff --git a/src/main/java/xyz/soukup/ecoCraftCore/utilities/DaoRegistry.java b/src/main/java/xyz/soukup/ecoCraftCore/utilities/DaoRegistry.java index 3ccffd1..017539f 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/utilities/DaoRegistry.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/utilities/DaoRegistry.java @@ -1,16 +1,15 @@ package xyz.soukup.ecoCraftCore.utilities; import com.j256.ormlite.dao.Dao; -import xyz.soukup.ecoCraftCore.objects.Account; -import xyz.soukup.ecoCraftCore.objects.Shop; -import xyz.soukup.ecoCraftCore.objects.Transaction; -import xyz.soukup.ecoCraftCore.objects.VirtualChest; +import com.j256.ormlite.stmt.query.In; +import xyz.soukup.ecoCraftCore.objects.*; public class DaoRegistry { private static Dao shopDao; private static Dao transactionDao; private static Dao virtualChestDao; private static Dao accountDao; + private static Dao islandDao; public static Dao getShopDao() { @@ -44,4 +43,12 @@ public class DaoRegistry { public static void setAccountDao(Dao accountDao) { DaoRegistry.accountDao = accountDao; } + + public static Dao getIslandDao() { + return islandDao; + } + + public static void setIslandDaoo(Dao islandDao) { + DaoRegistry.islandDao = islandDao; + } } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/utilities/GuiItemBuilder.java b/src/main/java/xyz/soukup/ecoCraftCore/utilities/GuiItemBuilder.java new file mode 100644 index 0000000..3150ea7 --- /dev/null +++ b/src/main/java/xyz/soukup/ecoCraftCore/utilities/GuiItemBuilder.java @@ -0,0 +1,37 @@ +package xyz.soukup.ecoCraftCore.utilities; + +import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.List; +import java.util.Objects; + +public class GuiItemBuilder { + private ItemStack itemStack; + private ItemMeta itemMeta; + + public GuiItemBuilder(Material material){ + this.itemStack = new ItemStack(material); + this.itemMeta = this.itemStack.getItemMeta(); + } + + public GuiItemBuilder setName(Component component){ + this.itemMeta.displayName(component); + return this; + } + + public GuiItemBuilder addLore(Component component){ + List lore = itemMeta.lore(); + Objects.requireNonNull(lore).add(component); + itemMeta.lore(lore); + return this; + } + + public GuiItem build(){ + this.itemStack.setItemMeta(this.itemMeta); + return new GuiItem(this.itemStack); + } +} diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index d3ad7c0..36219f0 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -48,14 +48,21 @@ menu: buy: "Koupit ks za $" sell: "Prodat ks za $" gui: + error: + invalid-input: "Vámi zadané hodnoty nejsou platné." all: "Seznam guis: <1>, <2>" shop-edit: - title: "Editace Obchodu" - shopadmin: - title: "GUI - Shop Admin" - items: - background: " " - deleteshop: "Smazat Obchod" - changesellprice: "Změnit Prodávající Cenu" - changebuyprice: "Změnit Kupující Cenu" - changeamounts: "Změnit Množství Prodeje a Výkupu" + title: "Editace Obchodu" + inputs: + count: "Množství" + price-sell: "Cena pro výkup" + price-buy: "Cena pro prodej" + change-item: "Změň item na ten co držíš v ruce" + button: + confirm: "Zapsat změny" + cancel: "Zrušit" + shop: + title: "Obchod" + buy: "Koupit ks za $" + sell: "Prodat ks za $" +