- funkční region command

- příprava meníček
region-rework
jakub 5 days ago
parent 71f8b0eaf4
commit 8f734eb1d1
  1. 4
      src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
  2. 81
      src/main/java/xyz/soukup/ecoCraftCore/genericMenus/GroupSelector.java
  3. 13
      src/main/java/xyz/soukup/ecoCraftCore/genericMenus/PlayerSelector.java
  4. 32
      src/main/java/xyz/soukup/ecoCraftCore/genericMenus/TextInput.java
  5. 25
      src/main/java/xyz/soukup/ecoCraftCore/gui/GuiItemBuilder.java
  6. 8
      src/main/java/xyz/soukup/ecoCraftCore/islands/IslandAdminCommand.java
  7. 10
      src/main/java/xyz/soukup/ecoCraftCore/islands/IslandSelectorCommand.java
  8. 63
      src/main/java/xyz/soukup/ecoCraftCore/messages/LangManager.java
  9. 18
      src/main/java/xyz/soukup/ecoCraftCore/mines/MineCommand.java
  10. 24
      src/main/java/xyz/soukup/ecoCraftCore/money/MoneyCommand.java
  11. 10
      src/main/java/xyz/soukup/ecoCraftCore/objects/Island.java
  12. 6
      src/main/java/xyz/soukup/ecoCraftCore/objects/PermissionGroup.java
  13. 18
      src/main/java/xyz/soukup/ecoCraftCore/objects/Region.java
  14. 4
      src/main/java/xyz/soukup/ecoCraftCore/positionMarker/MarkerCommand.java
  15. 10
      src/main/java/xyz/soukup/ecoCraftCore/positionMarker/MarkerEvent.java
  16. 14
      src/main/java/xyz/soukup/ecoCraftCore/regions/RegionAdminCommand.java
  17. 110
      src/main/java/xyz/soukup/ecoCraftCore/regions/RegionCommand.java
  18. 163
      src/main/java/xyz/soukup/ecoCraftCore/regions/RegionMenu.java
  19. 12
      src/main/java/xyz/soukup/ecoCraftCore/shop/ShopCommand.java
  20. 56
      src/main/java/xyz/soukup/ecoCraftCore/shop/ShopLogic.java
  21. 26
      src/main/java/xyz/soukup/ecoCraftCore/sign/SignEditCommand.java
  22. 8
      src/main/java/xyz/soukup/ecoCraftCore/virtualChest/VirtualChestLogic.java
  23. 22
      src/main/resources/messages.yml

@ -60,7 +60,7 @@ import xyz.soukup.ecoCraftCore.regions.RegionEvents;
import xyz.soukup.ecoCraftCore.shop.ShopCommand;
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
import xyz.soukup.ecoCraftCore.positionMarker.MarkerEvent;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.shop.ShopLogic;
import xyz.soukup.ecoCraftCore.sign.SignEditCommand;
import xyz.soukup.ecoCraftCore.sit.LetMeSit;
@ -100,7 +100,7 @@ public final class EcoCraftCore extends JavaPlugin {
try {
plugin.saveConfig();
saveIslandTemplates();
Messages.init();
LangManager.init();
prepareDatabase();
registerCommands();
registerEvents();

@ -0,0 +1,81 @@
package xyz.soukup.ecoCraftCore.genericMenus;
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
import com.github.stefvanschie.inventoryframework.pane.OutlinePane;
import com.github.stefvanschie.inventoryframework.pane.PaginatedPane;
import com.github.stefvanschie.inventoryframework.pane.component.PagingButtons;
import com.github.stefvanschie.inventoryframework.pane.util.Slot;
import com.j256.ormlite.stmt.QueryBuilder;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import xyz.soukup.ecoCraftCore.gui.GuiItemBuilder;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.objects.PermissionGroup;
import xyz.soukup.ecoCraftCore.objects.Region;
import xyz.soukup.ecoCraftCore.objects.RegionMember;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
public class GroupSelector {
public static ChestGui selectGroup(Player viewer, Region region, Consumer<Player> selectAction){
ChestGui chestGui = new ChestGui(3, LangManager.getLegacyString("gui.player-selector.title"));
PaginatedPane pane = new PaginatedPane(0,0, 9, 2);
List<GuiItem> guiItems = new ArrayList<>();
chestGui.setOnGlobalClick(event -> event.setCancelled(true));
RegionMember regionMember = region.getRegionMember(viewer);
if (regionMember == null){
return null;
}
QueryBuilder<PermissionGroup, Integer> queryBuilder = PermissionGroup.getDao().queryBuilder();
try {
queryBuilder
.where()
.eq("region_id", region.getId())
.and()
.lt("weight", regionMember.getPermissionGroup().getWeight());
List<PermissionGroup> groups = queryBuilder.query();
for (PermissionGroup group : groups){
GuiItem guiItem = new GuiItemBuilder(group.getIcon(),
group.getName(),
group.getDescription(),
(event -> selectAction.accept(viewer))).build();
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
pane.populateWithGuiItems(guiItems);
PagingButtons pagingButtons = new PagingButtons(Slot.fromXY(0, 2),9, pane);
chestGui.addPane(pane);
return chestGui;
}
public static ChestGui selectGroup(Player viewer, Region region, Consumer<Player> selectAction, Consumer<Player> backAction){
ChestGui chestGui = selectGroup(viewer, region, selectAction);
OutlinePane pane = new OutlinePane(4,2, 1, 1);
GuiItem backButton = new GuiItemBuilder(Material.REDSTONE,
"gui.player-selector.back-button.name",
"gui.player-selector.back-button.lore",
(event -> backAction.accept(viewer)))
.build();
pane.addItem(backButton);
chestGui.addPane(pane);
return chestGui;
}
}

@ -12,17 +12,16 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
import xyz.soukup.ecoCraftCore.gui.GuiItemBuilder;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.messages.Replace;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
public class PlayerSelector {
public static ChestGui selectPlayer(Player viewer, List<Player> players, BiConsumer<Player, Player> selectAction){
ChestGui chestGui = new ChestGui(3, Messages.getAsString("gui.player-selector.title"));
public static ChestGui selectPlayer(Player viewer, List<Player> players, Consumer<Player> selectAction){
ChestGui chestGui = new ChestGui(3, LangManager.getLegacyString("gui.player-selector.title"));
PaginatedPane pane = new PaginatedPane(0,0, 9, 2);
List<GuiItem> guiItems = new ArrayList<>();
@ -31,14 +30,14 @@ public class PlayerSelector {
for (Player player : players){
ItemStack itemStack = new ItemStack(Material.PLAYER_HEAD);
SkullMeta skullMeta = (SkullMeta) itemStack.getItemMeta();
Component name = Messages.get("gui.player-selector.name-format", new Replace("name", player.displayName()));
Component name = LangManager.get("gui.player-selector.name-format", new Replace("name", player.displayName()));
skullMeta.setOwningPlayer(player);
skullMeta.displayName(name);
itemStack.setItemMeta(skullMeta);
GuiItem guiItem = new GuiItem(itemStack);
guiItem.setAction(event -> selectAction.accept(viewer, player));
guiItem.setAction(event -> selectAction.accept(viewer));
guiItems.add(guiItem);
}
@ -51,7 +50,7 @@ public class PlayerSelector {
return chestGui;
}
public static ChestGui selectPlayer(Player viewer, List<Player> players, BiConsumer<Player, Player> selectAction, Consumer<Player> backAction){
public static ChestGui selectPlayer(Player viewer, List<Player> players, Consumer<Player> selectAction, Consumer<Player> backAction){
ChestGui chestGui = selectPlayer(viewer, players, selectAction);
OutlinePane pane = new OutlinePane(4,2, 1, 1);
GuiItem backButton = new GuiItemBuilder(Material.REDSTONE,

@ -1,4 +1,36 @@
package xyz.soukup.ecoCraftCore.genericMenus;
import io.papermc.paper.dialog.Dialog;
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.text.event.ClickCallback;
import org.bukkit.entity.Player;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import java.util.List;
import java.util.function.Consumer;
public class TextInput {
public static Dialog textInput(Player viewer, String titleKey, String fieldDesctriptionKey, String initial , Consumer<String> action){
DialogAction dialogAction = DialogAction.customClick(((response, audience) -> action.accept(response.getText("input"))), ClickCallback.Options.builder().build()));
return Dialog.create(builder -> builder.empty()
.base(DialogBase.builder(LangManager.get(titleKey))
.inputs(List.of(DialogInput.text("input", LangManager.get(fieldDesctriptionKey))
.initial(initial)
.maxLength(256)
.build()))
.build())
.type(DialogType.confirmation(
ActionButton.builder(LangManager.get("gui.text-input.confirm"))
.action(dialogAction)
.build(),
ActionButton.builder(LangManager.get("gui.text-input.cancel"))
.build()
)));
}
}

@ -7,7 +7,7 @@ import org.bukkit.Material;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import java.util.Arrays;
import java.util.List;
@ -29,12 +29,29 @@ public class GuiItemBuilder {
public GuiItemBuilder(Material material, String nameKey, String loreKey, Consumer<InventoryClickEvent> onClick){
this.itemStack = new ItemStack(material);
this.itemMeta = this.itemStack.getItemMeta();
this.itemMeta.displayName(Messages.get(nameKey));
this.itemMeta.lore(Arrays.stream(Messages.getAsString(loreKey).split("\\R")).map(MiniMessage.miniMessage()::deserialize).collect(Collectors.toList()));
this.itemMeta.displayName(LangManager.get(nameKey));
this.itemMeta.lore(LangManager.getComponentList(loreKey));
this.onClick = onClick;
}
public GuiItemBuilder(Material material, String nameKey, String loreKey, Consumer<InventoryClickEvent> onClick, boolean toggle) {
this.itemStack = new ItemStack(material);
this.itemMeta = this.itemStack.getItemMeta();
this.itemMeta.displayName(LangManager.get(nameKey));
List<Component> lore = LangManager.getComponentList(loreKey);
if (toggle){
lore.add(LangManager.get("gui.toggle.on"));
}else {
lore.add(LangManager.get("gui.toggle.off"));
}
this.itemMeta.lore(lore);
this.onClick = onClick;
}
public GuiItemBuilder setName(Component component){
this.itemMeta.displayName(component);
return this;
@ -47,7 +64,7 @@ public class GuiItemBuilder {
return this;
}
public GuiItemBuilder setRawLore(String rawLore){
public GuiItemBuilder setLoreFromString(String rawLore){
List<Component> lore = Arrays.stream(rawLore.split("\\R"))
.map(line -> MiniMessage.miniMessage().deserialize(line))
.collect(Collectors.toList());

@ -17,7 +17,7 @@ import org.bukkit.entity.Player;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import xyz.soukup.ecoCraftCore.objects.Island;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import java.io.IOException;
import java.sql.SQLException;
@ -198,7 +198,7 @@ public class IslandAdminCommand {
Location spawn = player.getLocation();
String uuid = player.getWorld().getName();
islandManager.changeSpawn(spawn, uuid);
Messages.send(player, "island.setSpawn.success");
LangManager.send(player, "island.setSpawn.success");
return 0;
}
@ -208,7 +208,7 @@ public class IslandAdminCommand {
IslandManager islandManager = new IslandManager();
String uuid = player.getWorld().getName();
islandManager.changeEnviroment(context.getArgument("environment", String.class), uuid);
Messages.send(player, "island.setEnvironment.success");
LangManager.send(player, "island.setEnvironment.success");
return 0;
}
@ -218,7 +218,7 @@ public class IslandAdminCommand {
IslandManager islandManager = new IslandManager();
String uuid = player.getWorld().getName();
islandManager.changeBiome(context.getArgument("biome", String.class), uuid);
Messages.send(player, "island.set-biome.success");
LangManager.send(player, "island.set-biome.success");
return 0;
}

@ -21,7 +21,7 @@ import xyz.soukup.ecoCraftCore.objects.Island;
import xyz.soukup.ecoCraftCore.objects.Region;
import xyz.soukup.ecoCraftCore.objects.RegionMember;
import xyz.soukup.ecoCraftCore.gui.GuiItemBuilder;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import java.sql.SQLException;
import java.util.ArrayList;
@ -35,7 +35,7 @@ public class IslandSelectorCommand {
}
private static int displayIslandListSelectorGui(CommandContext<CommandSourceStack> context) {
String title = LegacyComponentSerializer.legacySection().serialize(Messages.get("menu.island-selector.title"));
String title = LegacyComponentSerializer.legacySection().serialize(LangManager.get("menu.island-selector.title"));
HopperGui hopperGui = new HopperGui(title);
hopperGui.setOnGlobalClick(event -> event.setCancelled(true));
@ -110,7 +110,7 @@ public class IslandSelectorCommand {
public static GuiItem selectorItem(String key, Material material, List<Island> islands){
GuiItemBuilder guiItemBuilder = new GuiItemBuilder(material);
guiItemBuilder.setName(Messages.get(key));
guiItemBuilder.setName(LangManager.get(key));
GuiItem guiItem = guiItemBuilder.build();
guiItem.setAction(event -> openIslandListGui((Player) event.getWhoClicked(), islands));
return guiItem;
@ -118,7 +118,7 @@ public class IslandSelectorCommand {
private static void openIslandListGui(Player player, List<Island> islands){
String title = LegacyComponentSerializer.legacySection().serialize(Messages.get("menu.island-selector.title"));
String title = LegacyComponentSerializer.legacySection().serialize(LangManager.get("menu.island-selector.title"));
ChestGui chestGui = new ChestGui(4, title);
chestGui.setOnGlobalClick(event -> event.setCancelled(true));
@ -167,7 +167,7 @@ public class IslandSelectorCommand {
GuiItemBuilder guiItemBuilder = new GuiItemBuilder(material);
guiItemBuilder.setName(Component.text(island.getDisplayName(), color));
guiItemBuilder.setRawLore(island.getDescritpion());
guiItemBuilder.setLoreFromString(island.getDescritpion());
GuiItem guiItem = guiItemBuilder.build();
guiItem.setAction(event -> {

@ -10,14 +10,15 @@ import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import static xyz.soukup.ecoCraftCore.EcoCraftCore.plugin;
public class Messages {
public class LangManager {
private static YamlConfiguration messages;
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
public static void init() throws IOException {
File messagesFile = new File(plugin.getDataFolder(), "messages.yml");
@ -36,11 +37,11 @@ public class Messages {
public static Component get(String key) {
String string = getString(key);
return MiniMessage.miniMessage().deserialize(string);
return miniMessage.deserialize(string);
}
public static String getAsString(String key){
return LegacyComponentSerializer.legacySection().serialize(Messages.get(key));
public static String getLegacyString(String key){
return LegacyComponentSerializer.legacySection().serialize(LangManager.get(key));
}
public static Component get(String key, HashMap<String, String> placeholders){
@ -49,8 +50,7 @@ public class Messages {
TagResolver.Builder resolverBuilder = TagResolver.builder();
placeholders.forEach((k, value) -> resolverBuilder.resolver(Placeholder.unparsed(k, value)));
return MiniMessage.miniMessage().deserialize(string, resolverBuilder.build());
return miniMessage.deserialize(string, resolverBuilder.build());
}
public static Component get(String key, Replace... replaces){
@ -77,28 +77,35 @@ public class Messages {
sender.sendMessage(get(key, placeholders));
}
private static String getString(String key){
StringBuilder string = new StringBuilder();
if (messages.isString(key)){
string = new StringBuilder(Objects.requireNonNull(messages.getString(key)));
} else if (messages.isList(key)) {
boolean isFirst = true;
List<String> list = messages.getStringList(key);
for (String s : list){
if (isFirst){
isFirst = false;
string.append(s);
}else {
string.append("\n").append(s);
}
}
}else {
string = new StringBuilder(key);
public static List<Component> getComponentList(String key){
List<Component> componentList = new ArrayList<>();
for (String string : messages.getStringList(key)){
Component component = miniMessage.deserialize(string);
componentList.add(component);
}
return componentList;
}
public static List<String> getStringList(String key) {
if (!(messages.contains(key) && messages.isList(key))){
return List.of(key);
}
return string.toString();
return messages.getStringList(key);
}
public static String getString(String key) {
if (messages.isList(key)) {
return String.join("\n", messages.getStringList(key));
}
if (messages.isString(key)) {
return messages.getString(key);
}
return key;
}
}

@ -8,7 +8,7 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
@SuppressWarnings("UnstableApiUsage")
public class MineCommand {
@ -31,23 +31,23 @@ public class MineCommand {
World world = MineWorldManager.getWorld();
if (world == null) {
Messages.send(sender, "mine.error.no-world");
LangManager.send(sender, "mine.error.no-world");
return 0;
}
Messages.send(sender, "mine.regenerating");
LangManager.send(sender, "mine.regenerating");
for (Player player : world.getPlayers()) {
player.teleport(player.getServer().getWorlds().getFirst().getSpawnLocation());
Messages.send(player, "mine.teleported-out");
LangManager.send(player, "mine.teleported-out");
}
MineWorldManager.recreateWorld(newWorld -> {
boolean success = MineManager.regenerate(newWorld);
if (success) {
Messages.send(sender, "mine.regenerate-complete");
LangManager.send(sender, "mine.regenerate-complete");
} else {
Messages.send(sender, "mine.error.regenerate-failed");
LangManager.send(sender, "mine.error.regenerate-failed");
}
});
return 1;
@ -58,18 +58,18 @@ public class MineCommand {
World world = MineWorldManager.getWorld();
if (world == null) {
Messages.send(player, "mine.error.no-world");
LangManager.send(player, "mine.error.no-world");
return 0;
}
Location spawn = MineWorldManager.getSpawnLocation();
if (spawn == null) {
Messages.send(player, "mine.error.no-world");
LangManager.send(player, "mine.error.no-world");
return 0;
}
player.teleport(spawn);
Messages.send(player, "mine.teleporting");
LangManager.send(player, "mine.teleporting");
return 1;
}
}

@ -13,7 +13,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import xyz.soukup.ecoCraftCore.objects.Account;
import xyz.soukup.ecoCraftCore.objects.Transaction;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.messages.PHHM;
@ -70,11 +70,11 @@ public class MoneyCommand {
private static int getBalance(CommandContext<CommandSourceStack> context) {
CommandSender commandSender = context.getSource().getSender();
if (!(commandSender instanceof Player player)) {
Messages.send(commandSender, "generic.error.not-player");
LangManager.send(commandSender, "generic.error.not-player");
return 0;
}
Account account = Account.getOrCreate(player);
Messages.send(player, "money.balance.self", PHHM.get(account));
LangManager.send(player, "money.balance.self", PHHM.get(account));
return 1;
}
@ -88,15 +88,15 @@ public class MoneyCommand {
Account senderAccount = Account.getOrCreate(sender);
if (amount > senderAccount.getBalance()) {
Messages.send(sender, "generic.error.no-funds");
LangManager.send(sender, "generic.error.no-funds");
return 0;
}
Transaction transaction = new Transaction(amount, "player", sender .getName(), "player", receiver.getName(), "player");
transaction.process();
Messages.send(sender, "money.send.player", PHHM.get(transaction));
Messages.send(receiver, "money.receive.player", PHHM.get(transaction));
LangManager.send(sender, "money.send.player", PHHM.get(transaction));
LangManager.send(receiver, "money.receive.player", PHHM.get(transaction));
return 1;
}
@ -110,7 +110,7 @@ public class MoneyCommand {
Transaction transaction = new Transaction(amount, "admin", commandSender.getName(), "player", receiver.getName(), "admin");
transaction.process();
Messages.send(commandSender, "money.give.player", PHHM.get(transaction));
LangManager.send(commandSender, "money.give.player", PHHM.get(transaction));
return 1;
}
@ -121,7 +121,7 @@ public class MoneyCommand {
Transaction transaction = new Transaction(amount, "admin", player.getName(), "player", player.getName(), "admin");
transaction.process();
Messages.send(player, "money.give.self", PHHM.get(transaction));
LangManager.send(player, "money.give.self", PHHM.get(transaction));
return 1;
}
@ -134,7 +134,7 @@ public class MoneyCommand {
Transaction transaction = new Transaction(amount, "admin", commandSender.getName(), type, owner, "admin");
transaction.process();
Messages.send(commandSender, "money.give.other", PHHM.get(transaction));
LangManager.send(commandSender, "money.give.other", PHHM.get(transaction));
return 1;
}
@ -147,7 +147,7 @@ public class MoneyCommand {
Transaction transaction = new Transaction(amount, "player", sender.getName(), "admin", commandSender.getName(), "admin");
transaction.process();
Messages.send(commandSender, "money.remove.player", PHHM.get(transaction));
LangManager.send(commandSender, "money.remove.player", PHHM.get(transaction));
return 1;
}
@ -158,7 +158,7 @@ public class MoneyCommand {
Transaction transaction = new Transaction(amount, "player", player.getName(), "admin", player.getName(), "admin");
transaction.process();
Messages.send(player, "money.remove.self", PHHM.get(transaction));
LangManager.send(player, "money.remove.self", PHHM.get(transaction));
return 1;
}
@ -171,7 +171,7 @@ public class MoneyCommand {
Transaction transaction = new Transaction(amount, type, owner, "admin", commandSender.getName(), "admin");
transaction.process();
Messages.send(commandSender, "money.remove.other", PHHM.get(transaction));
LangManager.send(commandSender, "money.remove.other", PHHM.get(transaction));
return 1;
}
}

@ -110,6 +110,16 @@ public class Island {
return activeOn;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public void setDescritpion(String descritpion) {
this.descritpion = descritpion;
}
public static Island findById(int id) {

@ -208,6 +208,10 @@ public class PermissionGroup {
}
}
public String getDescription() {
return description;
}
public void delete() {
Dao<RegionMember, Integer> memberDao = RegionMember.getDao();
try {
@ -219,4 +223,6 @@ public class PermissionGroup {
region.dropCache();
}
}

@ -9,7 +9,7 @@ import com.j256.ormlite.table.DatabaseTable;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import java.sql.SQLException;
import java.util.Comparator;
@ -413,23 +413,23 @@ public class Region {
}
public PermissionGroup createDefaultGroupsAndReturnOwner(){
String ownerDisplayName = Messages.getAsString("region.permission-groups.owner.name");
String ownerDescription = Messages.getAsString("region.permission-groups.owner.description");
String ownerDisplayName = LangManager.getString("region.permission-groups.owner.name");
String ownerDescription = LangManager.getString("region.permission-groups.owner.description");
PermissionGroup owner = new PermissionGroup(this, "owner", ownerDisplayName, ownerDescription, Material.RED_CONCRETE, false, false, 101, 2147483647);
owner.save();
String adminDisplayName = Messages.getAsString("region.permission-groups.admin.name");
String adminDescription = Messages.getAsString("region.permission-groups.admin.description");
String adminDisplayName = LangManager.getString("region.permission-groups.admin.name");
String adminDescription = LangManager.getString("region.permission-groups.admin.description");
PermissionGroup admin = new PermissionGroup(this, "admin", adminDisplayName, adminDescription, Material.YELLOW_CONCRETE, true, true, 90, 2147482623);
admin.save();
String memberDisplayName = Messages.getAsString("region.permission-groups.member.name");
String memberDescription = Messages.getAsString("region.permission-groups.member.description");
String memberDisplayName = LangManager.getString("region.permission-groups.member.name");
String memberDescription = LangManager.getString("region.permission-groups.member.description");
PermissionGroup member = new PermissionGroup(this, "member", memberDisplayName, memberDescription, Material.GREEN_CONCRETE, true, true, 10, 2095231);
member.save();
String defaultDisplayName = Messages.getAsString("region.permission-groups.default");
String defaultDescription = Messages.getAsString("region.permission-groups.default.description");
String defaultDisplayName = LangManager.getString("region.permission-groups.default");
String defaultDescription = LangManager.getString("region.permission-groups.default.description");
PermissionGroup defaultGroup = new PermissionGroup(this, "default", defaultDisplayName, defaultDescription, Material.GRAY_CONCRETE, true, false, 0,96);
defaultGroup.save();

@ -8,7 +8,7 @@ import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.utilities.PDC;
public class MarkerCommand {
@ -22,7 +22,7 @@ public class MarkerCommand {
CommandSender commandSender = context.getSource().getSender();
if (!(commandSender instanceof Player player)){
Messages.send(commandSender, "generic.error.not-player");
LangManager.send(commandSender, "generic.error.not-player");
return 0;
}

@ -10,7 +10,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.utilities.PDC;
import xyz.soukup.ecoCraftCore.messages.PHHM;
@ -50,7 +50,7 @@ public class MarkerEvent implements Listener {
return;
}
chests.put(player, chest);
Messages.send(player, "marker.marked.chest", PHHM.get(chest.getLocation()));
LangManager.send(player, "marker.marked.chest", PHHM.get(chest.getLocation()));
return;
}
@ -60,7 +60,7 @@ public class MarkerEvent implements Listener {
return;
}
signs.put(player, sign);
Messages.send(player, "marker.marked.sign", PHHM.get(sign.getLocation()));
LangManager.send(player, "marker.marked.sign", PHHM.get(sign.getLocation()));
return;
}
@ -73,7 +73,7 @@ public class MarkerEvent implements Listener {
return;
}
primaryLocations.put(player, location);
Messages.send(player, "marker.marked.primary", PHHM.get(location));
LangManager.send(player, "marker.marked.primary", PHHM.get(location));
return;
}
case RIGHT_CLICK_BLOCK -> {
@ -82,7 +82,7 @@ public class MarkerEvent implements Listener {
return;
}
secondaryLocations.put(player, location);
Messages.send(player, "marker.marked.secondary", PHHM.get(location));
LangManager.send(player, "marker.marked.secondary", PHHM.get(location));
return;
}
}

@ -10,7 +10,7 @@ import io.papermc.paper.command.brigadier.Commands;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import xyz.soukup.ecoCraftCore.objects.Region;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import java.sql.SQLException;
import java.util.List;
@ -63,16 +63,16 @@ public class RegionAdminCommand {
private static int createRegion(CommandContext<CommandSourceStack> context) {
Integer type = context.getArgument("type", Integer.class);
if(!(context.getSource().getSender() instanceof Player player)){
Messages.send(context.getSource().getSender(), "generic.error.not-player");
LangManager.send(context.getSource().getSender(), "generic.error.not-player");
return 0;
};
int status = RegionManager.createRegion(player, type, player.getName(), "player");
switch (status){
case 0 -> Messages.send(player, "generic.success.created");
case 1 -> Messages.send(player, "region.error.not-marked");
case 2 -> Messages.send(player, "region.error.not-same-world");
case 0 -> LangManager.send(player, "generic.success.created");
case 1 -> LangManager.send(player, "region.error.not-marked");
case 2 -> LangManager.send(player, "region.error.not-same-world");
}
return 0;
@ -86,8 +86,8 @@ public class RegionAdminCommand {
int status = RegionManager.addMember(id, "player", player, membership);
switch (status){
case 0 -> Messages.send(commandSender, "generic.success.created");
case 1 -> Messages.send(commandSender, "region.error.not-exist");
case 0 -> LangManager.send(commandSender, "generic.success.created");
case 1 -> LangManager.send(commandSender, "region.error.not-exist");
}
return 0;
}

@ -15,7 +15,7 @@ import io.papermc.paper.command.brigadier.argument.ArgumentTypes;
import io.papermc.paper.command.brigadier.argument.resolvers.selector.PlayerSelectorArgumentResolver;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.messages.Replace;
import xyz.soukup.ecoCraftCore.objects.Permission;
import xyz.soukup.ecoCraftCore.objects.PermissionGroup;
@ -120,10 +120,10 @@ public class RegionCommand {
ItemStack itemStack = context.getArgument("icon", ItemStack.class);
switch (RegionManager.changeGroupIconSafely(id, name, itemStack, player)){
case NOT_EXIST -> Messages.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> Messages.send(player, "region.command.error.not-exist-group");
case NO_PERMISSION -> Messages.send(player, "region.command.error.no-permission");
case OK -> Messages.send(player, "region.command.icon-changed");
case NOT_EXIST -> LangManager.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> LangManager.send(player, "region.command.error.not-exist-group");
case NO_PERMISSION -> LangManager.send(player, "region.command.error.no-permission");
case OK -> LangManager.send(player, "region.command.icon-changed");
}
return 0;
@ -136,10 +136,10 @@ public class RegionCommand {
String description = context.getArgument("description", String.class);
switch (RegionManager.changeGroupDescriptionSafely(id, name, description, player)){
case NOT_EXIST -> Messages.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> Messages.send(player, "region.command.error.not-exist-group");
case NO_PERMISSION -> Messages.send(player, "region.command.error.no-permission");
case OK -> Messages.send(player, "region.command.description-changed");
case NOT_EXIST -> LangManager.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> LangManager.send(player, "region.command.error.not-exist-group");
case NO_PERMISSION -> LangManager.send(player, "region.command.error.no-permission");
case OK -> LangManager.send(player, "region.command.description-changed");
}
return 0;
@ -152,10 +152,10 @@ public class RegionCommand {
String displayName = context.getArgument("display-name", String.class);
switch (RegionManager.changeGroupDisplayNameSafely(id, name, displayName, player)){
case NOT_EXIST -> Messages.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> Messages.send(player, "region.command.error.not-exist-group");
case NO_PERMISSION -> Messages.send(player, "region.command.error.no-permission");
case OK -> Messages.send(player, "region.command.display-name-changed");
case NOT_EXIST -> LangManager.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> LangManager.send(player, "region.command.error.not-exist-group");
case NO_PERMISSION -> LangManager.send(player, "region.command.error.no-permission");
case OK -> LangManager.send(player, "region.command.display-name-changed");
}
return 0;
@ -170,21 +170,21 @@ public class RegionCommand {
try {
newOwner = newOwnerResolver.resolve(context.getSource()).getFirst();
} catch (CommandSyntaxException e) {
Messages.send(player, "region.command.error.not-exist");
LangManager.send(player, "region.command.error.not-exist");
return 1;
}
if (!context.getInput().endsWith("confirm")){
Messages.send(player, "region.command.confirm-warning.transfer-ownership",
LangManager.send(player, "region.command.confirm-warning.transfer-ownership",
new Replace("id", String.valueOf(id)),
new Replace("name", newOwner.getName()));
return 1;
}
switch (RegionManager.transferOwnershipSafely(id, player, newOwner)){
case NO_PERMISSION -> Messages.send(player, "region.command.error.no-permission");
case NOT_EXIST -> Messages.send(player, "region.command.error.not-exist");
case OK -> Messages.send(player, "region.command.transferred-ownership");
case NO_PERMISSION -> LangManager.send(player, "region.command.error.no-permission");
case NOT_EXIST -> LangManager.send(player, "region.command.error.not-exist");
case OK -> LangManager.send(player, "region.command.transferred-ownership");
}
@ -199,11 +199,11 @@ public class RegionCommand {
String permission = context.getArgument("permission", String.class);
switch (RegionManager.removeGroupPermissionSafely(player, id, name, permission)){
case NOT_EXIST -> Messages.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> Messages.send(player, "region.command.error.not-exist-group");
case NOT_EXIST_PERMISSION -> Messages.send(player, "region.command.error.not-exist-permission");
case NO_PERMISSION -> Messages.send(player, "region.command.error.no-permission");
case OK -> Messages.send(player, "region.command.removed-permission");
case NOT_EXIST -> LangManager.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> LangManager.send(player, "region.command.error.not-exist-group");
case NOT_EXIST_PERMISSION -> LangManager.send(player, "region.command.error.not-exist-permission");
case NO_PERMISSION -> LangManager.send(player, "region.command.error.no-permission");
case OK -> LangManager.send(player, "region.command.removed-permission");
}
return 0;
@ -216,11 +216,11 @@ public class RegionCommand {
String permission = context.getArgument("permission", String.class);
switch (RegionManager.addGroupPermissionSafely(player, id, name, permission)){
case NOT_EXIST -> Messages.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> Messages.send(player, "region.command.error.not-exist-group");
case NOT_EXIST_PERMISSION -> Messages.send(player, "region.command.error.not-exist-permission");
case NO_PERMISSION -> Messages.send(player, "region.command.error.no-permission");
case OK -> Messages.send(player, "region.command.added-permission");
case NOT_EXIST -> LangManager.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> LangManager.send(player, "region.command.error.not-exist-group");
case NOT_EXIST_PERMISSION -> LangManager.send(player, "region.command.error.not-exist-permission");
case NO_PERMISSION -> LangManager.send(player, "region.command.error.no-permission");
case OK -> LangManager.send(player, "region.command.added-permission");
}
return 0;
@ -232,10 +232,10 @@ public class RegionCommand {
String name = context.getArgument("name", String.class);
switch (RegionManager.removeRegionGroupSafely(id, player, name)){
case NOT_EXIST -> Messages.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> Messages.send(player, "region.command.error.not-exist-group");
case NO_PERMISSION -> Messages.send(player, "region.command.error.no-permission");
case OK -> Messages.send(player, "region.command.deleted-group");
case NOT_EXIST -> LangManager.send(player, "region.command.error.not-exist");
case NOT_EXIST_GROUP -> LangManager.send(player, "region.command.error.not-exist-group");
case NO_PERMISSION -> LangManager.send(player, "region.command.error.no-permission");
case OK -> LangManager.send(player, "region.command.deleted-group");
}
return 0;
@ -252,10 +252,10 @@ public class RegionCommand {
switch (RegionManager.addRegionGroupSafely(id, player, name, weight, icon, displayName, description)){
case NOT_EXIST -> Messages.send(player, "region.command.error.not-exist");
case NO_PERMISSION -> Messages.send(player, "region.command.error.no-permission");
case ALREADY_EXISTS -> Messages.send(player, "region.command.error.already-exist");
case OK -> Messages.send(player, "region.command.created-group");
case NOT_EXIST -> LangManager.send(player, "region.command.error.not-exist");
case NO_PERMISSION -> LangManager.send(player, "region.command.error.no-permission");
case ALREADY_EXISTS -> LangManager.send(player, "region.command.error.already-exist");
case OK -> LangManager.send(player, "region.command.created-group");
}
return 0;
@ -378,10 +378,10 @@ public class RegionCommand {
switch (RegionManager.removeMemberSafely(id, memberToRemove, senderPlayer)){
case OK -> Messages.send(senderPlayer, "region.command.removed-member");
case NOT_EXIST -> Messages.send(senderPlayer, "region.command.error.not-exist");
case NO_PERMISSION -> Messages.send(senderPlayer, "region.command.error.no-permission");
case NOT_MEMBER -> Messages.send(senderPlayer, "region.command.error.not-member");
case OK -> LangManager.send(senderPlayer, "region.command.removed-member");
case NOT_EXIST -> LangManager.send(senderPlayer, "region.command.error.not-exist");
case NO_PERMISSION -> LangManager.send(senderPlayer, "region.command.error.no-permission");
case NOT_MEMBER -> LangManager.send(senderPlayer, "region.command.error.not-member");
}
@ -398,12 +398,12 @@ public class RegionCommand {
Player playerToAdd = playerSelectorArgumentResolver.resolve(context.getSource()).getFirst();
switch (RegionManager.addMemberSafely(id, playerToAdd, senderPlayer, groupName)){
case OK -> Messages.send(senderPlayer, "region.command.added-member");
case NOT_EXIST -> Messages.send(senderPlayer, "region.command.error.not-exist");
case NO_PERMISSION -> Messages.send(senderPlayer, "region.command.error.no-permission");
case NOT_EXIST_GROUP -> Messages.send(senderPlayer, "region.command.error.not-exist-group");
case PLAYER_NOT_ON_ISLAND -> Messages.send(senderPlayer, "region.command.error.player-not-on-island");
case ALREADY_MEMBER -> Messages.send(senderPlayer, "region.command.error.already-member");
case OK -> LangManager.send(senderPlayer, "region.command.added-member");
case NOT_EXIST -> LangManager.send(senderPlayer, "region.command.error.not-exist");
case NO_PERMISSION -> LangManager.send(senderPlayer, "region.command.error.no-permission");
case NOT_EXIST_GROUP -> LangManager.send(senderPlayer, "region.command.error.not-exist-group");
case PLAYER_NOT_ON_ISLAND -> LangManager.send(senderPlayer, "region.command.error.player-not-on-island");
case ALREADY_MEMBER -> LangManager.send(senderPlayer, "region.command.error.already-member");
}
} catch (CommandSyntaxException e) {
throw new RuntimeException(e);
@ -416,14 +416,14 @@ public class RegionCommand {
int id = context.getArgument("id", Integer.class);
if (!context.getInput().endsWith("confirm")){
Messages.send(player, "region.command.confirm-warning.delete", new Replace("id", String.valueOf(id)));
LangManager.send(player, "region.command.confirm-warning.delete", new Replace("id", String.valueOf(id)));
return 1;
}
switch (RegionManager.deleteRegionSafely(id, player)){
case OK -> Messages.send(player, "region.command.deleted");
case NOT_EXIST -> Messages.send(player, "region.command.error.not-exist");
case NO_PERMISSION -> Messages.send(player, "region.command.error.no-permission");
case OK -> LangManager.send(player, "region.command.deleted");
case NOT_EXIST -> LangManager.send(player, "region.command.error.not-exist");
case NO_PERMISSION -> LangManager.send(player, "region.command.error.no-permission");
}
return 0;
@ -433,11 +433,11 @@ public class RegionCommand {
Player player = (Player) context.getSource().getSender();
switch (RegionManager.createRegionSafely(player)){
case OK -> Messages.send(player, "region.command.created");
case NO_SELECTION -> Messages.send(player, "region.command.error.no-selection");
case NO_PERMISSION -> Messages.send(player, "region.command.error.no-permission");
case INVALID_SELECTION -> Messages.send(player, "region.command.error.invalid-selection");
case REGION_NOT_ENVELOPS -> Messages.send(player, "region.command.error.region-not-envelops");
case OK -> LangManager.send(player, "region.command.created");
case NO_SELECTION -> LangManager.send(player, "region.command.error.no-selection");
case NO_PERMISSION -> LangManager.send(player, "region.command.error.no-permission");
case INVALID_SELECTION -> LangManager.send(player, "region.command.error.invalid-selection");
case REGION_NOT_ENVELOPS -> LangManager.send(player, "region.command.error.region-not-envelops");
}
return 0;
}

@ -1,46 +1,185 @@
package xyz.soukup.ecoCraftCore.regions;
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
import com.github.stefvanschie.inventoryframework.pane.OutlinePane;
import com.github.stefvanschie.inventoryframework.pane.component.ToggleButton;
import io.papermc.paper.dialog.Dialog;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.genericMenus.PlayerSelector;
import xyz.soukup.ecoCraftCore.genericMenus.TextInput;
import xyz.soukup.ecoCraftCore.gui.GuiItemBuilder;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.objects.Island;
import xyz.soukup.ecoCraftCore.objects.Permission;
import xyz.soukup.ecoCraftCore.objects.Region;
import xyz.soukup.ecoCraftCore.objects.RegionMember;
import java.util.ArrayList;
import java.util.List;
public class RegionMenu {
public static ChestGui regionGui(RegionMember regionMember, Region region){
public static ChestGui regionGui(Player player, Region region){
return buildGui(regionMember, region);
return buildGui(player, region);
}
private static ChestGui buildGui(RegionMember regionMember, Region region){
private static ChestGui buildGui(Player player, Region region){
String title;
int regionLevel = region.getLevel();
if (regionLevel == -1){
title = Messages.getAsString("gui.region.title-island");
title = LangManager.getLegacyString("gui.region.title-island");
} else {
title = Messages.getAsString("gui.region.title");
title = LangManager.getLegacyString("gui.region.title");
}
ChestGui gui = new ChestGui(2, title);
OutlinePane outlinePane = new OutlinePane(0, 0, 9, 2);
addIslandSettings(outlinePane, regionMember, region);
addIslandSettings(outlinePane, player, region);
addMemberManagement(outlinePane, player, region);
gui.addPane(outlinePane);
return gui;
}
private static void addIslandSettings(OutlinePane outlinePane, RegionMember regionMember, Region region) {
private static void addMemberManagement(OutlinePane pane, Player player, Region region){
if (!region.hasPermission(player, Permission.MANAGE_MEMBERS)){
return;
}
GuiItem addMemberButton = new GuiItemBuilder(Material.PLAYER_HEAD,
"gui.region.add-member.name",
"gui.region.add-member.description",
(event -> addMemberSelectPlayer(player, region)))
.build();
}
private static void addMemberSelectPlayer(Player player, Region region) {
World world = Bukkit.getWorld(region.getIsland());
if (world == null){
return;
}
List<Player> players = world.getPlayers();
List<Player> candidates = new ArrayList<>();
for(Player candidate : players){
if (region.getRegionMember(candidate) != null){
continue;
}
candidates.add(candidate);
}
ChestGui playerSelectGui = PlayerSelector.selectPlayer(player,
candidates,
(( selectedPlayer) -> addMemberSelectGroup(player, region, selectedPlayer)),
(event -> regionGui(player, region).show(player)));
playerSelectGui.show(player);
}
private static void setIslandDescription(InventoryClickEvent event, Region region, RegionMember regionMember) {
private static void addMemberSelectGroup(Player player, Region region, Player selectedPlayer){
}
private static void setIslandName(InventoryClickEvent inventoryClickEvent, Region region, RegionMember regionMember) {
private static void addIslandSettings(OutlinePane pane, Player player, Region region) {
if (region.getLevel() != -1){
return;
}
if (!region.hasPermission(player, Permission.MANAGE_INFO)){
return;
}
Island island = Island.findByUuid(region.getIsland());
if (island == null){
return;
}
ToggleButton toggleButton = new ToggleButton(1,1);
Dialog islandTitleDialog = TextInput.textInput(player,
"gui.region.name-island.name",
"gui.region.name-island.input",
island.getDisplayName(),
(s -> setIslandName(player, island, s)));
Dialog islandDescriptionDialog = TextInput.textInput(player,
"gui.region.description-island.name",
"gui.region.description-island.input",
island.getDescritpion(),
(s -> setIslandDescription(player, island, s)));
GuiItem visibilityToggle = new GuiItemBuilder(Material.ENDER_EYE,
"gui.region.visibility-island.name",
"gui.region.visibility-island.description",
(event -> toggleIslandPublic(player, island, event)),
island.getPublic()
).build();
GuiItem titleButton = new GuiItemBuilder(
Material.DARK_OAK_SIGN,
"gui.region.name-island.name",
"gui.region.name-island.description",
(event -> player.showDialog(islandTitleDialog))
).build();
GuiItem descriptionButton = new GuiItemBuilder(
Material.ACACIA_SIGN,
"gui.region.description-island.name",
"gui.region.description-island.description",
(event -> player.showDialog(islandDescriptionDialog))
).build();
pane.addItem(visibilityToggle);
pane.addItem(titleButton);
pane.addItem(descriptionButton);
}
private static void toggleIslandPublic(Player player, Island island, InventoryClickEvent event){
island.setPublic(!island.getPublic());
island.save();
ChestGui chestGui = (ChestGui) ChestGui.getGui(event.getInventory());
if (chestGui == null){
return;
}
OutlinePane pane = new OutlinePane(event.getSlot(), 1);
GuiItem visibilityToggle = new GuiItemBuilder(Material.ENDER_EYE,
"gui.region.visibility-island.name",
"gui.region.visibility-island.description",
(clickEvent -> toggleIslandPublic(player, island, event)),
island.getPublic()
).build();
pane.addItem(visibilityToggle);
chestGui.addPane(pane);
}
private static void setIslandDescription(Player player, Island island, String description) {
island.setDescritpion(description);
island.save();
LangManager.send(player, "island.changed.description");
}
private static void setIslandName(Player player, Island island, String name) {
island.setDisplayName(name);
island.save();
LangManager.send(player, "island.changed.name");
}
}

@ -13,7 +13,7 @@ import xyz.soukup.ecoCraftCore.positionMarker.MarkerEvent;
import xyz.soukup.ecoCraftCore.objects.Shop;
import xyz.soukup.ecoCraftCore.objects.VirtualChest;
import xyz.soukup.ecoCraftCore.inventory.InventoryUtils;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.utilities.PDC;
public class ShopCommand {
@ -46,7 +46,7 @@ public class ShopCommand {
CommandSourceStack source = ctx.getSource();
if (!(source.getSender() instanceof Player player)) {
Messages.send(source.getSender(), "generic.error.not-player");
LangManager.send(source.getSender(), "generic.error.not-player");
return 0;
}
@ -55,20 +55,20 @@ public class ShopCommand {
Sign sign = MarkerEvent.signs.get(player);
if (sign == null || chest == null) {
Messages.send(player, "shop.error.not-marked");
LangManager.send(player, "shop.error.not-marked");
return 0;
}
// 2. Validate Item in Hand
ItemStack item = player.getInventory().getItemInMainHand();
if (item.isEmpty()) {
Messages.send(player, "shop.error.empty-hand");
LangManager.send(player, "shop.error.empty-hand");
return 0;
}
// 3. Check if already a shop
if (PDC.getInteger(sign, "shop") != null) {
Messages.send(player, "shop.error.already-shop");
LangManager.send(player, "shop.error.already-shop");
return 0;
}
@ -99,7 +99,7 @@ public class ShopCommand {
shop.save();
shop.writeIntoSign(sign);
Messages.send(player, "shop.created");
LangManager.send(player, "shop.created");
return 1;
}
}

@ -30,7 +30,7 @@ import org.bukkit.inventory.PlayerInventory;
import xyz.soukup.ecoCraftCore.virtualChest.VirtualChestLogic;
import xyz.soukup.ecoCraftCore.gui.GuiItemBuilder;
import xyz.soukup.ecoCraftCore.inventory.InventoryUtils;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.objects.Account;
import xyz.soukup.ecoCraftCore.objects.Shop;
import xyz.soukup.ecoCraftCore.objects.Transaction;
@ -75,7 +75,7 @@ public class ShopLogic implements Listener {
Player player = event.getPlayer();
if (VirtualChestLogic.openedChests.containsKey(shop.getVirtualChestID())){
Messages.send(player, "shop.error.chest-open");
LangManager.send(player, "shop.error.chest-open");
return;
}
@ -129,7 +129,7 @@ public class ShopLogic implements Listener {
public static ChestGui buildShopGui(Player player, Shop shop){
ChestGui gui = new ChestGui(1, Messages.getAsString("gui.shop.title"));
ChestGui gui = new ChestGui(1, LangManager.getLegacyString("gui.shop.title"));
gui.setOnGlobalClick(inventoryClickEvent -> {
inventoryClickEvent.setCancelled(true);
@ -148,7 +148,7 @@ public class ShopLogic implements Listener {
hashMap.put("price", String.format("%.2f", buyPrice));
GuiItem one = new GuiItemBuilder(Material.LIME_WOOL)
.setName(Messages.get("gui.shop.buy", hashMap))
.setName(LangManager.get("gui.shop.buy", hashMap))
.build();
one.setAction(event -> {
@ -160,7 +160,7 @@ public class ShopLogic implements Listener {
hashMap.put("price", String.format("%.2f", buyPrice*8));
GuiItem eight = new GuiItemBuilder(Material.LIME_WOOL)
.setName(Messages.get("gui.shop.buy", hashMap))
.setName(LangManager.get("gui.shop.buy", hashMap))
.build();
eight.setAction(event -> {
@ -181,7 +181,7 @@ public class ShopLogic implements Listener {
hashMap.put("price", String.format("%.2f", sellPrice));
GuiItem one = new GuiItemBuilder(Material.YELLOW_WOOL)
.setName(Messages.get("gui.shop.sell", hashMap))
.setName(LangManager.get("gui.shop.sell", hashMap))
.build();
one.setAction(event -> {
@ -194,7 +194,7 @@ public class ShopLogic implements Listener {
hashMap.put("price", String.format("%.2f", sellPrice*8));
GuiItem eight = new GuiItemBuilder(Material.YELLOW_WOOL)
.setName(Messages.get("gui.shop.sell", hashMap))
.setName(LangManager.get("gui.shop.sell", hashMap))
.build();
eight.setAction(event -> {
@ -217,24 +217,24 @@ public class ShopLogic implements Listener {
public static Dialog buildEditDialog(Shop shop){
return Dialog.create(builder -> builder.empty()
.base(DialogBase.builder(Messages.get("gui.shop-edit.title"))
.base(DialogBase.builder(LangManager.get("gui.shop-edit.title"))
.inputs(List.of(
DialogInput.text("count", Messages.get("gui.shop-edit.inputs.count"))
DialogInput.text("count", LangManager.get("gui.shop-edit.inputs.count"))
.initial(String.valueOf(shop.getAmount()))
.build(),
DialogInput.text("sellprice", Messages.get("gui.shop-edit.inputs.price-sell"))
DialogInput.text("sellprice", LangManager.get("gui.shop-edit.inputs.price-sell"))
.initial(String.valueOf(shop.getPriceSell()))
.build(),
DialogInput.text("buyprice", Messages.get("gui.shop-edit.inputs.price-buy"))
DialogInput.text("buyprice", LangManager.get("gui.shop-edit.inputs.price-buy"))
.initial(String.valueOf(shop.getPriceBuy()))
.build(),
DialogInput.bool("changeitem", Messages.get("gui.shop-edit.inputs.change-item"))
DialogInput.bool("changeitem", LangManager.get("gui.shop-edit.inputs.change-item"))
.build()
))
.build())
.type(DialogType.confirmation(
ActionButton.builder(Messages.get("gui.shop-edit.button.confirm"))
ActionButton.builder(LangManager.get("gui.shop-edit.button.confirm"))
.action(DialogAction.customClick(
(view, audience) -> {
changeShopParameters(view, audience, shop);
@ -244,7 +244,7 @@ public class ShopLogic implements Listener {
.build()
))
.build(),
ActionButton.builder(Messages.get("gui.shop-edit.button.cancel")).build()
ActionButton.builder(LangManager.get("gui.shop-edit.button.cancel")).build()
))
);
@ -253,7 +253,7 @@ public class ShopLogic implements Listener {
public static void buy(Shop shop, Player player, int multiplier){
if (VirtualChestLogic.openedChests.containsKey(shop.getVirtualChestID())){
Messages.send(player, "shop.error.chest-open");
LangManager.send(player, "shop.error.chest-open");
return;
}
@ -265,7 +265,7 @@ public class ShopLogic implements Listener {
Account account = Account.getOrCreate(player);
if (price > account.getBalance()){
Messages.send(player, "generic.error.no-money.self");
LangManager.send(player, "generic.error.no-money.self");
return;
}
@ -278,12 +278,12 @@ public class ShopLogic implements Listener {
Inventory playerInventory = player.getInventory();
if (InventoryUtils.getSpaceLeft(playerInventory, itemStack) < amount){
Messages.send(player, "generic.error.no-space.self");
LangManager.send(player, "generic.error.no-space.self");
return;
}
if (!virtualChest.removeItem(itemStack)){
Messages.send(player, "generic.error.no-item.shop");
LangManager.send(player, "generic.error.no-item.shop");
return;
}
@ -300,7 +300,7 @@ public class ShopLogic implements Listener {
hashMap.put("price", String.format("%.2f", price));
hashMap.put("item", PlainTextComponentSerializer.plainText().serialize(itemStack.displayName()));
Messages.send(player, "shop.buy", hashMap);
LangManager.send(player, "shop.buy", hashMap);
}
@ -328,7 +328,7 @@ public class ShopLogic implements Listener {
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");
LangManager.send(player, "gui.error.invalid-input");
return;
}
@ -342,7 +342,7 @@ public class ShopLogic implements Listener {
public static void sell(Shop shop, Player player, int multiplier){
if (VirtualChestLogic.openedChests.containsKey(shop.getVirtualChestID())){
Messages.send(player, "shop.error.chest-open");
LangManager.send(player, "shop.error.chest-open");
return;
}
@ -354,7 +354,7 @@ public class ShopLogic implements Listener {
Account account = Account.getOrCreate(shop.getOwnerType(), shop.getOwner());
if (price > account.getBalance()){
Messages.send(player, "generic.error.no-money.self");
LangManager.send(player, "generic.error.no-money.self");
return;
}
@ -367,12 +367,12 @@ public class ShopLogic implements Listener {
Inventory playerInventory = player.getInventory();
if (InventoryUtils.getCount(playerInventory, itemStack) < amount){
Messages.send(player, "generic.error.no-item.self");
LangManager.send(player, "generic.error.no-item.self");
return;
}
if (!virtualChest.addItem(itemStack)){
Messages.send(player, "generic.error.no-space.shop");
LangManager.send(player, "generic.error.no-space.shop");
return;
}
@ -388,12 +388,12 @@ public class ShopLogic implements Listener {
hashMap.put("price", String.format("%.2f", price));
hashMap.put("item", PlainTextComponentSerializer.plainText().serialize(itemStack.displayName()));
Messages.send(player, "shop.sell", hashMap);
LangManager.send(player, "shop.sell", hashMap);
}
public static HopperGui confirmBreakGui(Block block, Shop shop){
HopperGui gui = new HopperGui(Messages.getAsString("menu.destroy-confirmation.title"));
HopperGui gui = new HopperGui(LangManager.getLegacyString("menu.destroy-confirmation.title"));
OutlinePane pane = new OutlinePane(0,0, 5, 1);
gui.setOnGlobalClick(inventoryClickEvent -> {
@ -401,11 +401,11 @@ public class ShopLogic implements Listener {
});
GuiItem confirmButton = new GuiItemBuilder(Material.LIME_WOOL)
.setName(Messages.get("menu.destroy-confirmation.confirm"))
.setName(LangManager.get("menu.destroy-confirmation.confirm"))
.build();
GuiItem cancelButton = new GuiItemBuilder(Material.RED_WOOL)
.setName(Messages.get("menu.destroy-confirmation.cancel"))
.setName(LangManager.get("menu.destroy-confirmation.cancel"))
.build();
cancelButton.setAction(event -> {

@ -23,7 +23,7 @@ import org.bukkit.block.sign.Side;
import org.bukkit.block.sign.SignSide;
import org.bukkit.entity.Player;
import org.bukkit.persistence.PersistentDataType;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.regions.RegionManager;
import xyz.soukup.ecoCraftCore.utilities.PDC;
@ -48,14 +48,14 @@ public class SignEditCommand {
BlockState blockState = block.getState();
if (!(blockState instanceof Sign sign)){
Messages.send(player, "sign-edit.error.not-sign");
LangManager.send(player, "sign-edit.error.not-sign");
return 1;
}
Location location = sign.getLocation();
if (!RegionManager.isAllowedToInteract(player, location)){
Messages.send(player, "region.error.not-allowed-to-interact");
LangManager.send(player, "region.error.not-allowed-to-interact");
return 1;
}
@ -78,16 +78,16 @@ public class SignEditCommand {
actionButtons.add(ActionButton.builder(Messages.get("gui.sign-edit.buttons.copy"))
actionButtons.add(ActionButton.builder(LangManager.get("gui.sign-edit.buttons.copy"))
.action(DialogAction.customClick((view, audience) -> copySignText(view, player, sign), ClickCallback.Options.builder().build()))
.build());
actionButtons.add(ActionButton.builder(Messages.get("gui.sign-edit.buttons.paste"))
actionButtons.add(ActionButton.builder(LangManager.get("gui.sign-edit.buttons.paste"))
.action(DialogAction.customClick((view, audience) -> pasteSignText(sign, player), ClickCallback.Options.builder().build()))
.build());
actionButtons.add(ActionButton.builder(Messages.get("gui.sign-edit.buttons.confirm"))
actionButtons.add(ActionButton.builder(LangManager.get("gui.sign-edit.buttons.confirm"))
.action(DialogAction.customClick((view, audience) -> editSign(view, sign, player), ClickCallback.Options.builder().build()))
.build());
actionButtons.add(ActionButton.builder(Messages.get("gui.sign-edit.buttons.cancel"))
actionButtons.add(ActionButton.builder(LangManager.get("gui.sign-edit.buttons.cancel"))
.action(DialogAction.customClick((view, audience) -> audience.closeDialog(), ClickCallback.Options.builder().build()))
.build());
@ -95,21 +95,21 @@ public class SignEditCommand {
List<String> finalLines = lines;
return Dialog.create(builder -> builder.empty()
.base(DialogBase.builder(Messages.get("gui.sign-edit.title"))
.base(DialogBase.builder(LangManager.get("gui.sign-edit.title"))
.inputs(List.of(
DialogInput.text("line1", Messages.get("gui.sign-edit.inputs.line1"))
DialogInput.text("line1", LangManager.get("gui.sign-edit.inputs.line1"))
.initial(finalLines.getFirst())
.maxLength(256)
.build(),
DialogInput.text("line2", Messages.get("gui.sign-edit.inputs.line2"))
DialogInput.text("line2", LangManager.get("gui.sign-edit.inputs.line2"))
.initial(finalLines.get(1))
.maxLength(256)
.build(),
DialogInput.text("line3", Messages.get("gui.sign-edit.inputs.line3"))
DialogInput.text("line3", LangManager.get("gui.sign-edit.inputs.line3"))
.initial(finalLines.get(2))
.maxLength(256)
.build(),
DialogInput.text("line4", Messages.get("gui.sign-edit.inputs.line4"))
DialogInput.text("line4", LangManager.get("gui.sign-edit.inputs.line4"))
.initial(finalLines.get(3))
.maxLength(256)
.build()
@ -148,7 +148,7 @@ public class SignEditCommand {
lines.add(view.getText("line4"));
clipBoard.put(player, lines);
Messages.send(player, "gui.sign-edit.success.copied");
LangManager.send(player, "gui.sign-edit.success.copied");
pasteSignText(sign, player);
}

@ -17,7 +17,7 @@ import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import xyz.soukup.ecoCraftCore.gui.GuiItemBuilder;
import xyz.soukup.ecoCraftCore.objects.VirtualChest;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.messages.LangManager;
import xyz.soukup.ecoCraftCore.utilities.PDC;
import java.util.HashMap;
@ -184,7 +184,7 @@ public class VirtualChestLogic implements Listener {
}
public static HopperGui confirmBreakGui(Block block, VirtualChest virtualChest){
HopperGui gui = new HopperGui(Messages.getAsString("menu.destroy-confirmation.title"));
HopperGui gui = new HopperGui(LangManager.getLegacyString("menu.destroy-confirmation.title"));
OutlinePane pane = new OutlinePane(0,0, 5, 1);
gui.setOnGlobalClick(inventoryClickEvent -> {
@ -192,11 +192,11 @@ public class VirtualChestLogic implements Listener {
});
GuiItem confirmButton = new GuiItemBuilder(Material.LIME_WOOL)
.setName(Messages.get("menu.destroy-confirmation.confirm"))
.setName(LangManager.get("menu.destroy-confirmation.confirm"))
.build();
GuiItem cancelButton = new GuiItemBuilder(Material.RED_WOOL)
.setName(Messages.get("menu.destroy-confirmation.cancel"))
.setName(LangManager.get("menu.destroy-confirmation.cancel"))
.build();
cancelButton.setAction(event -> {

@ -12,6 +12,10 @@ generic:
no-item:
self: "<red>Nemáš dostatek itemů"
shop: "<red>Obchod nemá dostatek itemů"
island:
changed:
name: "<green>Jméno ostrova změněno."
description: "<green>Popis ostrova změněn."
region:
command:
created: "<green>Úspěšně vytvořeno."
@ -110,21 +114,39 @@ menu:
buy: "<green>Koupit <amount>ks za <price>$"
sell: "<yellow>Prodat <amount>ks za <price>$"
gui:
toggle:
on: "<green>Povoleno"
off: "<red>Zakázáno"
text-input:
confirm: "<green>Potvrdit"
cancel: "<red>Zrušit"
player-selector:
title: "<aqua><bold>Vyber Hráče"
name-format: "<yellow><name>"
back-button:
name: "<yellow>Zpět"
lore : ""
region:
title: "<aqua><bold>Nastavení pozemku"
title-island: "<aqua><bold>Nastavení ostrovního pozemku"
add-member:
name: "<yellow><bold>Přidat člena"
description: "<gray>Přidej hráče, jenž dostane<br> další práva na pozemku"
remove-member:
name: "<yellow><bold>Odebrat člena"
description: "<gray>Odstranit člena<br>z pozemku"
name-island:
name: "<yellow><bold>Změnit název ostrova"
description: "<gray>Změní název jenž se<br>zobrauje ve výběru ostrovů"
input: "<yellow>Nový název"
description-island:
name: "<yellow><bold>Změnit popis ostrova"
description: "<gray>Změní popis jenž se<br>zobrauje ve výběru ostrovů"
input: "<yellow>Nový popis"
visibility-island:
name: "<yellow><bold>Veřejný ostrov"
description: "<gray>Pokud je povoleno mohou hráči<br>tvůj ostrov najít v seznamu ostrovů"
error:
invalid-input: "<red>Vámi zadané hodnoty nejsou platné."
all: "<green>Seznam guis: <yellow><1>, <2>"

Loading…
Cancel
Save