Start implementing PlayerSettings.java and PlayerSettingsGui.java

This commit is contained in:
Len 2023-08-12 16:49:21 +02:00
parent bd2f71d8c5
commit 0019f27636
6 changed files with 185 additions and 7 deletions

View File

@ -70,12 +70,14 @@ public class MessageConfig extends AbstractConfiguration {
public static String GUI_LIST_SHOPS_TITLE = "<green>Players shops by <playername> <page>/<pages>";
public static String GUI_LIST_TRANSACTIONS_TITLE = "<green>Shop Transactions <page>/<pages>";
public static String GUI_MANAGE_TITLE = "<green>Shop Manager";
public static String GUI_PLAYER_SETTINGS_TITLE = "<green>Shop Settings Manager";
private static void guiTitles() {
GUI_HOME_TITLE = config.getString("gui.home-title", GUI_HOME_TITLE);
GUI_LIST_PLAYERS_TITLE = config.getString("gui.list-players-title", GUI_LIST_PLAYERS_TITLE);
GUI_LIST_SHOPS_TITLE = config.getString("gui.list-shops-title", GUI_LIST_SHOPS_TITLE);
GUI_LIST_TRANSACTIONS_TITLE = config.getString("gui.list-transactions-title", GUI_LIST_TRANSACTIONS_TITLE);
GUI_MANAGE_TITLE = config.getString("gui.manage-title", GUI_MANAGE_TITLE);
GUI_PLAYER_SETTINGS_TITLE = config.getString("gui.player-settings-title", GUI_PLAYER_SETTINGS_TITLE);
}
}

View File

@ -36,7 +36,10 @@ public enum GuiIcon {
LIST_SHOP,
LIST_PLAYER,
LIST_PLAYER_ADMIN,
EMPTY_SHOP;
EMPTY_SHOP,
SETTING_ON,
SETTING_OFF;
@Getter
private final int slot;

View File

@ -35,8 +35,10 @@ public class HomeGui extends AbstractGui {
ListPlayersGui listPlayersGui = new ListPlayersGui(uuid);
listPlayersGui.setLastGui(this);
listPlayersGui.open();
} else if (slot == GuiIcon.HOME_SETTINGS.getSlot() && GuiIcon.HOME_SETTINGS.getItemStack().equals(item)) {
}
}/* else if (slot == GuiIcon.HOME_SETTINGS.getSlot() && GuiIcon.HOME_SETTINGS.getItemStack().equals(item)) {
PlayerSettingsGui playerSettingsGui = new PlayerSettingsGui(uuid);
playerSettingsGui.setLastGui(this);
playerSettingsGui.open();
}*/
}
}

View File

@ -0,0 +1,62 @@
package com.alttd.playershops.gui;
import com.alttd.playershops.PlayerShops;
import com.alttd.playershops.config.MessageConfig;
import com.alttd.playershops.shop.PlayerSettings;
import com.alttd.playershops.utils.ShopUtil;
import com.alttd.playershops.utils.Util;
import it.unimi.dsi.fastutil.objects.Object2BooleanMap;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextReplacementConfig;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.Bukkit;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class PlayerSettingsGui extends AbstractGui {
public PlayerSettingsGui(UUID uuid) {
super(uuid);
this.inventory = Bukkit.createInventory(this, INV_SIZE, Util.parseMiniMessage(MessageConfig.GUI_PLAYER_SETTINGS_TITLE));
initInvContents();
}
@Override
void initInvContents() {
super.initInvContents();
int startIndex = pageIndex * 45;
ItemStack item;
for(Object2BooleanMap.Entry<PlayerSettings.Option> entry : PlayerShops.getInstance().getShopHandler().getPlayerSettings(uuid).optionsMap.object2BooleanEntrySet()) {
item = entry.getBooleanValue() ? GuiIcon.SETTING_ON.getItemStack() : GuiIcon.SETTING_OFF.getItemStack();
ItemMeta itemMeta = item.getItemMeta();
if (itemMeta.hasDisplayName()) {
itemMeta.displayName(
itemMeta.displayName().replaceText(
TextReplacementConfig.builder()
.match("<setting>")
.replacement(entry.getKey().toString().toLowerCase().replace("_", " ")).build()));
}
item.setItemMeta(itemMeta);
if (!addItem(item)) {
addNextPageItem();
break;
}
}
if (pageIndex > 0) {
addPrevPageItem();
}
}
@Override
public void onClick(int slot, ItemStack item) {
super.onClick(slot, item);
}
}

View File

@ -2,6 +2,7 @@ package com.alttd.playershops.handler;
import com.alttd.playershops.PlayerShops;
import com.alttd.playershops.config.Config;
import com.alttd.playershops.shop.PlayerSettings;
import com.alttd.playershops.shop.PlayerShop;
import com.alttd.playershops.storage.database.DatabaseHelper;
import com.alttd.playershops.utils.Logger;
@ -9,8 +10,6 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import lombok.Getter;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.DoubleChest;
@ -18,7 +17,6 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.InventoryHolder;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@ -31,12 +29,15 @@ public class ShopHandler {
private final Map<Location, PlayerShop> shopLocation;
private final Map<Location, PlayerShop> shopSignLocation;
private HashMap<UUID, PlayerSettings> playerSettings;
public ShopHandler(PlayerShops instance) {
plugin = instance;
shopLocation = new ConcurrentHashMap<>();
shopSignLocation = new ConcurrentHashMap<>();
shopBuildLimits = new Object2IntOpenHashMap<>();
shopBuildLimits.defaultReturnValue(Config.shopLimit);
playerSettings = new HashMap<>();
loadShops();
}
@ -169,4 +170,9 @@ public class ShopHandler {
return false;
}
public PlayerSettings getPlayerSettings(UUID uuid) { // TODO a manager for this, extracted and edited from unished PlayerSettingsPlugin
return playerSettings.computeIfAbsent(uuid, PlayerSettings::loadFromFile);
}
}

View File

@ -0,0 +1,103 @@
package com.alttd.playershops.shop;
import com.alttd.playershops.config.Config;
import it.unimi.dsi.fastutil.objects.Object2BooleanMap;
import it.unimi.dsi.fastutil.objects.Object2BooleanOpenHashMap;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class PlayerSettings {
public enum Option {
SALE_OWNER_NOTIFICATIONS, SALE_USER_NOTIFICATIONS,
STOCK_NOTIFICATIONS, DISCORD_STOCK_NOTIFICATIONS
}
private final UUID uuid;
public final Object2BooleanMap<Option> optionsMap;
public PlayerSettings(UUID uuid) {
this.uuid = uuid;
this.optionsMap = new Object2BooleanOpenHashMap<>();
optionsMap.defaultReturnValue(false);
this.optionsMap.put(Option.SALE_OWNER_NOTIFICATIONS, true);
this.optionsMap.put(Option.SALE_USER_NOTIFICATIONS, true);
this.optionsMap.put(Option.STOCK_NOTIFICATIONS, true);
this.optionsMap.put(Option.DISCORD_STOCK_NOTIFICATIONS, false);
}
private PlayerSettings(UUID uuid, Object2BooleanMap<Option> optionsMap) {
this.uuid = uuid;
this.optionsMap = optionsMap;
}
public void setOption(Option option, boolean set) {
optionsMap.put(option, set);
saveToFile();
}
public boolean getOption(Option option) {
if (optionsMap.containsKey(option))
return optionsMap.get(option);
optionsMap.put(option, true);
saveToFile();
return true;
}
private void saveToFile() {
try {
File settingsDirectory = new File(Config.configPath, "PlayerSettings");
if (!settingsDirectory.exists() && !settingsDirectory.mkdir()) {
return;
}
File playerSettingsFile = new File(settingsDirectory, this.uuid.toString() + ".yml");
if (!playerSettingsFile.exists()) {
//noinspection ResultOfMethodCallIgnored
playerSettingsFile.createNewFile();
}
YamlConfiguration config = YamlConfiguration.loadConfiguration(playerSettingsFile);
config.set("player.UUID", this.uuid.toString());
for (Map.Entry<Option, Boolean> entry : optionsMap.entrySet()) {
config.set("player." + entry.getKey().toString(), entry.getValue());
}
config.save(playerSettingsFile);
} catch (Exception e) {
e.printStackTrace();
}
}
public static PlayerSettings loadFromFile(UUID uuid) {
File settingsDirectory = new File(Config.configPath, "PlayerSettings");
if (!settingsDirectory.exists() && !settingsDirectory.mkdir()) {
return null; // could not create directory
}
File playerSettingsFile = new File(settingsDirectory, uuid + ".yml");
if (playerSettingsFile.exists()) {
YamlConfiguration config = YamlConfiguration.loadConfiguration(playerSettingsFile);
//noinspection ConstantConditions
Object2BooleanMap<Option> optionsMap = new Object2BooleanOpenHashMap<>();
for (Option option : Option.values()) {
boolean value = config.getBoolean("player." + option.toString());
optionsMap.put(option, value);
//System.out.println(""+value);
}
return new PlayerSettings(uuid, optionsMap);
}
return new PlayerSettings(uuid);
}
}