mirror of
https://github.com/songoda/SongodaCore.git
synced 2024-10-22 12:20:26 +02:00
remove deprecated classes
This commit is contained in:
parent
fcdb9d2d50
commit
6a1610811a
@ -1,97 +0,0 @@
|
||||
package com.songoda.core.settingsv1;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class Category extends Narrow {
|
||||
|
||||
private final Config config;
|
||||
|
||||
private final String key;
|
||||
|
||||
protected final Map<String, FoundSetting> defaultSettings = new LinkedHashMap<>();
|
||||
|
||||
private final Map<String, List<String>> comments = new HashMap<>();
|
||||
|
||||
public Category(Config config, String key, String... comments) {
|
||||
this.config = config;
|
||||
this.key = key;
|
||||
if (comments != null)
|
||||
this.comments.put(null, Arrays.asList(comments));
|
||||
}
|
||||
|
||||
public Category(Config config, String key) {
|
||||
this(config, key, null);
|
||||
}
|
||||
|
||||
public Category addAll(Category category) {
|
||||
addSettings(category);
|
||||
if (comments.size() == 0)
|
||||
comments.putAll(category.getAllComments());
|
||||
return this;
|
||||
}
|
||||
|
||||
public Category addSetting(String key, Object defaultValue, String... comments) {
|
||||
addSetting(new FoundSetting(this, key, defaultValue, comments));
|
||||
return this;
|
||||
}
|
||||
|
||||
public Category addDefaultSetting(String key, Object defaultValue, String... comments) {
|
||||
addDefaultSetting(new FoundSetting(this, key, defaultValue, comments));
|
||||
return this;
|
||||
}
|
||||
|
||||
public Category addDefaultSetting(FoundSetting setting) {
|
||||
this.defaultSettings.put(setting.getKey(), setting);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Category addSettings(FoundSetting... settings) {
|
||||
for (FoundSetting setting : settings)
|
||||
this.settings.put(setting.getKey(), setting);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Category addSettings(Category category) {
|
||||
for (FoundSetting setting : category.getSettings())
|
||||
this.settings.put(setting.getKey(), setting);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Setting getDefaultSetting(String setting) {
|
||||
for (String string : defaultSettings.keySet())
|
||||
if (string.equalsIgnoreCase(setting))
|
||||
return defaultSettings.get(string);
|
||||
return new Setting();
|
||||
}
|
||||
|
||||
public List<FoundSetting> getDefaultSettings() {
|
||||
return new ArrayList<>(defaultSettings.values());
|
||||
}
|
||||
|
||||
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
public Category addComment(String key, String... comments) {
|
||||
this.comments.put(key, Arrays.asList(comments));
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<String> getComments(String key) {
|
||||
return Collections.unmodifiableList(comments.get(key));
|
||||
}
|
||||
|
||||
public Map<String, List<String>> getAllComments() {
|
||||
return Collections.unmodifiableMap(comments);
|
||||
}
|
||||
|
||||
public Config getConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return key;
|
||||
}
|
||||
}
|
@ -1,327 +0,0 @@
|
||||
package com.songoda.core.settingsv1;
|
||||
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.MemorySection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Deprecated
|
||||
public class Config {
|
||||
|
||||
private final Plugin plugin;
|
||||
private final String folderName, fileName;
|
||||
|
||||
private FileConfiguration fileConfiguration;
|
||||
private File configFile;
|
||||
|
||||
private boolean allowUserExpansion = true, categorySpacing = true,
|
||||
commentSpacing = true, showNullCategoryComments = true;
|
||||
|
||||
private final Map<String, Category> categories = new LinkedHashMap<>();
|
||||
|
||||
public Config(JavaPlugin plugin, String folderName, String fileName) {
|
||||
this.plugin = plugin;
|
||||
this.folderName = folderName;
|
||||
this.fileName = fileName;
|
||||
this.reload();
|
||||
}
|
||||
|
||||
public Config(JavaPlugin plugin, String fileName) {
|
||||
this(plugin, "", fileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* This allows users to expand the config and create new lines as well as
|
||||
* remove older lines. If this is disabled the config will regenerate
|
||||
* removed lines as well as add new lines that are added in the future
|
||||
*
|
||||
* @param allowUserExpansion allow users to expand config, otherwise don't
|
||||
* @return this class
|
||||
*/
|
||||
public Config allowUserExpansion(boolean allowUserExpansion) {
|
||||
this.allowUserExpansion = allowUserExpansion;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* This will add two spaces above each category
|
||||
*
|
||||
* @param categorySpacing add two spaces above each category, otherwise don't
|
||||
* @return this class
|
||||
*/
|
||||
public Config categorySpacing(boolean categorySpacing) {
|
||||
this.categorySpacing = categorySpacing;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* This will add a single space above each commented setting. Useful when
|
||||
* you don't want your comments to stand out
|
||||
*
|
||||
* @param commentSpacing add a space above each comment, otherwise don't
|
||||
* @return this class
|
||||
*/
|
||||
public Config commentSpacing(boolean commentSpacing) {
|
||||
this.commentSpacing = commentSpacing;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* This will add a single space above each commented setting. Useful when
|
||||
* you don't want your comments to stand out
|
||||
*
|
||||
* @param showNullCategoryComments shows a placeholder comment when null,
|
||||
* otherwise doesn't
|
||||
* @return this class
|
||||
*/
|
||||
public Config showNullCategoryComments(boolean showNullCategoryComments) {
|
||||
this.showNullCategoryComments = showNullCategoryComments;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Category addCategory(String key, String... comments) {
|
||||
return addCategory(new Category(this, key, comments));
|
||||
}
|
||||
|
||||
public Category addCategory(Category category) {
|
||||
if (categories.containsKey(category.getKey()))
|
||||
return categories.get(category.getKey()).addAll(category);
|
||||
else {
|
||||
categories.put(category.getKey(), category);
|
||||
return category;
|
||||
}
|
||||
}
|
||||
|
||||
public Category getCategory(String key) {
|
||||
for (String string : categories.keySet())
|
||||
if (string.equalsIgnoreCase(key))
|
||||
return categories.get(string);
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<Category> getCategories() {
|
||||
return new ArrayList<>(categories.values());
|
||||
}
|
||||
|
||||
public boolean hasCategory(String key) {
|
||||
return getCategory(key) != null;
|
||||
}
|
||||
|
||||
public Setting getSetting(String key) {
|
||||
return getSetting(key, false);
|
||||
}
|
||||
|
||||
public Setting getDefaultSetting(String key) {
|
||||
return getSetting(key, true);
|
||||
}
|
||||
|
||||
private Setting getSetting(String key, boolean isDefault) {
|
||||
String[] split = key.split("\\.", 2);
|
||||
if (split.length != 2) return null;
|
||||
Category category = getCategory(split[0]);
|
||||
if (category == null) return null;
|
||||
if (isDefault)
|
||||
return category.getDefaultSetting(split[1]);
|
||||
else
|
||||
return category.getSetting(split[1]);
|
||||
}
|
||||
|
||||
public List<FoundSetting> getSettings() {
|
||||
return getSettings(false);
|
||||
}
|
||||
|
||||
public List<FoundSetting> getDefaultSettings() {
|
||||
return getSettings(true);
|
||||
}
|
||||
|
||||
private List<FoundSetting> getSettings(boolean isDefault) {
|
||||
List<FoundSetting> settings = new ArrayList<>();
|
||||
for (Category category : categories.values()) {
|
||||
if (isDefault)
|
||||
settings.addAll(category.getDefaultSettings());
|
||||
else
|
||||
settings.addAll(category.getSettings());
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
|
||||
private void loadExisting() {
|
||||
this.categories.clear();
|
||||
for (String categoryStr : fileConfiguration.getKeys(false)) {
|
||||
Category category = new Category(this, categoryStr);
|
||||
for (String settingStr : fileConfiguration.getConfigurationSection(categoryStr).getKeys(true)) {
|
||||
Object object = fileConfiguration.get(categoryStr + "." + settingStr);
|
||||
if (!(object instanceof MemorySection))
|
||||
category.addSetting(settingStr, object);
|
||||
}
|
||||
addCategory(category);
|
||||
}
|
||||
}
|
||||
|
||||
public void reload() {
|
||||
if (this.configFile == null)
|
||||
this.configFile = new File(plugin.getDataFolder() + folderName, fileName);
|
||||
|
||||
this.fileConfiguration = YamlConfiguration.loadConfiguration(configFile);
|
||||
|
||||
if (allowUserExpansion)
|
||||
this.loadExisting();
|
||||
}
|
||||
|
||||
public void setup() {
|
||||
if (fileConfiguration.getKeys(false).size() == 0 || !allowUserExpansion) {
|
||||
for (FoundSetting setting : getDefaultSettings()) {
|
||||
fileConfiguration.addDefault(setting.getCompleteKey(), setting.getDefaultValue());
|
||||
setting.getCategory().addSetting(setting);
|
||||
}
|
||||
fileConfiguration.options().copyDefaults(true);
|
||||
}
|
||||
this.save();
|
||||
}
|
||||
|
||||
public void save() {
|
||||
|
||||
// Delete old config values.
|
||||
if (!allowUserExpansion) {
|
||||
for (String line : fileConfiguration.getKeys(true)) {
|
||||
if (line.contains(".") && getDefaultSetting(line) == null)
|
||||
fileConfiguration.set(line, null);
|
||||
else if (!line.contains(".")) {
|
||||
if (((MemorySection) fileConfiguration.get(line)).getKeys(true).size() == 0)
|
||||
fileConfiguration.set(line, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add comments.
|
||||
String dump = fileConfiguration.saveToString();
|
||||
StringBuilder config = new StringBuilder();
|
||||
BufferedReader bufReader = new BufferedReader(new StringReader(dump));
|
||||
|
||||
try {
|
||||
boolean first = true;
|
||||
|
||||
String line;
|
||||
int currentTab = 0;
|
||||
String category = "";
|
||||
|
||||
while ((line = bufReader.readLine()) != null) {
|
||||
if (line.trim().startsWith("#")) continue;
|
||||
|
||||
int tabChange = line.length() - line.trim().length();
|
||||
if (currentTab != tabChange) {
|
||||
category = category.contains(".") && tabChange != 0 ? category.substring(0, category.indexOf(".")) : "";
|
||||
currentTab = tabChange;
|
||||
}
|
||||
|
||||
if (line.endsWith(":")) {
|
||||
bufReader.mark(1000);
|
||||
String found = bufReader.readLine();
|
||||
bufReader.reset();
|
||||
|
||||
if (!found.trim().startsWith("-")) {
|
||||
|
||||
String newCategory = line.substring(0, line.length() - 1).trim();
|
||||
|
||||
if (category.equals(""))
|
||||
category = newCategory;
|
||||
else
|
||||
category += "." + newCategory;
|
||||
|
||||
currentTab = tabChange + 2;
|
||||
|
||||
if (!first) {
|
||||
if (categorySpacing)
|
||||
config.append("\n\n");
|
||||
} else {
|
||||
first = false;
|
||||
}
|
||||
|
||||
if (!category.contains("."))
|
||||
config.append("#").append("\n");
|
||||
try {
|
||||
String categoryStr = category;
|
||||
String commentKey = null;
|
||||
if (category.contains(".")) {
|
||||
String[] split = category.split("\\.", 2);
|
||||
commentKey = split[1];
|
||||
categoryStr = split[0];
|
||||
}
|
||||
|
||||
Category categoryObj = getCategory(categoryStr);
|
||||
if (categoryObj.getComments(commentKey).size() == 0)
|
||||
throw new NullPointerException();
|
||||
for (String l : categoryObj.getComments(commentKey)) {
|
||||
config.append(new String(new char[tabChange]).replace('\0', ' '));
|
||||
config.append("# ").append(l).append("\n");
|
||||
}
|
||||
} catch (IllegalArgumentException | NullPointerException e) {
|
||||
if (showNullCategoryComments) {
|
||||
config.append(new String(new char[tabChange]).replace('\0', ' '));
|
||||
config.append("# ").append(category).append("\n");
|
||||
}
|
||||
}
|
||||
if (!category.contains("."))
|
||||
config.append("#").append("\n");
|
||||
|
||||
config.append(line).append("\n");
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (line.trim().startsWith("-")) {
|
||||
config.append(line).append("\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
String key = category + "." + (line.split(":")[0].trim());
|
||||
for (FoundSetting setting : getSettings()) {
|
||||
if (!setting.getCompleteKey().equals(key) || setting.getComments().length == 0) continue;
|
||||
if (commentSpacing)
|
||||
config.append(" ").append("\n");
|
||||
for (String l : setting.getComments()) {
|
||||
config.append(new String(new char[currentTab]).replace('\0', ' '));
|
||||
config.append("# ").append(l).append("\n");
|
||||
}
|
||||
}
|
||||
config.append(line).append("\n");
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
try {
|
||||
if (!plugin.getDataFolder().exists())
|
||||
plugin.getDataFolder().mkdir();
|
||||
BufferedWriter writer = new BufferedWriter(new FileWriter(configFile));
|
||||
|
||||
writer.write(config.toString());
|
||||
writer.flush();
|
||||
writer.close();
|
||||
|
||||
fileConfiguration.load(configFile);
|
||||
} catch (IOException | InvalidConfigurationException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public FileConfiguration getFileConfiguration() {
|
||||
return fileConfiguration;
|
||||
}
|
||||
|
||||
public String getConfigName() {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public Plugin getPlugin() {
|
||||
return plugin;
|
||||
}
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
package com.songoda.core.settingsv1;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
public class FoundSetting extends Setting {
|
||||
|
||||
private final Category category;
|
||||
|
||||
private final String key;
|
||||
private final Object defaultValue;
|
||||
private final String[] comments;
|
||||
|
||||
public FoundSetting(Category category, String key, Object defaultValue, String... comments) {
|
||||
this.category = category;
|
||||
this.key = key;
|
||||
this.defaultValue = defaultValue;
|
||||
this.comments = comments;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCompleteKey() {
|
||||
return category.getKey() + "." + key;
|
||||
}
|
||||
|
||||
public Object getDefaultValue() {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public String[] getComments() {
|
||||
if (comments.length == 0 && category.getDefaultSetting(key) != null
|
||||
&& category.getDefaultSetting(key) instanceof FoundSetting)
|
||||
return ((FoundSetting)category.getDefaultSetting(key)).comments;
|
||||
return comments;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileConfiguration getConfig() {
|
||||
return category.getConfig().getFileConfiguration();
|
||||
}
|
||||
|
||||
public Category getCategory() {
|
||||
return category;
|
||||
}
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
package com.songoda.core.settingsv1;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class Narrow {
|
||||
|
||||
protected final Map<String, FoundSetting> settings = new LinkedHashMap<>();
|
||||
|
||||
public Narrow() {
|
||||
}
|
||||
|
||||
public Narrow(Set<FoundSetting> settings) {
|
||||
for (FoundSetting setting : settings)
|
||||
this.settings.put(setting.getKey(), setting);
|
||||
}
|
||||
|
||||
public Narrow narrow(String key) {
|
||||
Set<FoundSetting> settings = new HashSet<>();
|
||||
for (FoundSetting setting : this.settings.values()) {
|
||||
if (setting.getKey().startsWith(key))
|
||||
settings.add(setting);
|
||||
}
|
||||
return new Narrow(settings);
|
||||
}
|
||||
|
||||
public Collection<Section> getSection() {
|
||||
Map<String, Section> sections = new HashMap<>();
|
||||
for (FoundSetting setting : settings.values()) {
|
||||
String section = setting.getKey().contains(".") ? setting.getKey().split("\\.")[0] : setting.getKey();
|
||||
if (!sections.containsKey(section))
|
||||
sections.put(section, new Section(section));
|
||||
sections.get(section).getNarrow().addSetting(setting);
|
||||
}
|
||||
return sections.values();
|
||||
}
|
||||
|
||||
public void addSetting(FoundSetting setting) {
|
||||
this.settings.put(setting.getKey(), setting);
|
||||
}
|
||||
|
||||
public List<FoundSetting> getSettings() {
|
||||
return new ArrayList<>(settings.values());
|
||||
}
|
||||
|
||||
public Setting getSetting(String setting) {
|
||||
for (String string : settings.keySet())
|
||||
if (string.equalsIgnoreCase(setting))
|
||||
return settings.get(string);
|
||||
return new Setting();
|
||||
}
|
||||
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package com.songoda.core.settingsv1;
|
||||
|
||||
public class Section {
|
||||
|
||||
private final String key;
|
||||
private final Narrow narrow = new Narrow();
|
||||
|
||||
public Section(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
public Narrow getNarrow() {
|
||||
return narrow;
|
||||
}
|
||||
|
||||
public Setting narrow(String setting) {
|
||||
return narrow.getSetting(key + "." + setting);
|
||||
}
|
||||
}
|
@ -1,109 +0,0 @@
|
||||
package com.songoda.core.settingsv1;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Setting {
|
||||
|
||||
public String getKey() {
|
||||
return "";
|
||||
}
|
||||
|
||||
public String getCompleteKey() {
|
||||
return "";
|
||||
}
|
||||
|
||||
public List<Integer> getIntegerList() {
|
||||
if (getConfig() == null) return new ArrayList<>();
|
||||
return getConfig().getIntegerList(getCompleteKey());
|
||||
}
|
||||
|
||||
public List<String> getStringList() {
|
||||
if (getConfig() == null) return new ArrayList<>();
|
||||
return getConfig().getStringList(getCompleteKey());
|
||||
}
|
||||
|
||||
public boolean getBoolean() {
|
||||
return getBoolean(false);
|
||||
}
|
||||
|
||||
public boolean getBoolean(boolean def) {
|
||||
if (getConfig() == null) return def;
|
||||
return getConfig().getBoolean(getCompleteKey(), def);
|
||||
}
|
||||
|
||||
public int getInt() {
|
||||
return getInt(0);
|
||||
}
|
||||
|
||||
public int getInt(int def) {
|
||||
if (getConfig() == null) return def;
|
||||
return getConfig().getInt(getCompleteKey(), def);
|
||||
}
|
||||
|
||||
public long getLong() {
|
||||
return getLong(0L);
|
||||
}
|
||||
|
||||
public long getLong(long def) {
|
||||
if (getConfig() == null) return def;
|
||||
return getConfig().getLong(getCompleteKey(), def);
|
||||
}
|
||||
|
||||
public double getDouble() {
|
||||
return getDouble(0D);
|
||||
}
|
||||
|
||||
public double getDouble(double def) {
|
||||
if (getConfig() == null) return def;
|
||||
return getConfig().getDouble(getCompleteKey(), def);
|
||||
}
|
||||
|
||||
public String getString() {
|
||||
return getString(null);
|
||||
}
|
||||
|
||||
public String getString(String def) {
|
||||
if (getConfig() == null) return def;
|
||||
return getConfig().getString(getCompleteKey());
|
||||
}
|
||||
|
||||
public Object getObject() {
|
||||
return getString(null);
|
||||
}
|
||||
|
||||
public Object getObject(Object def) {
|
||||
return getConfig().get(getCompleteKey());
|
||||
}
|
||||
|
||||
public char getChar() {
|
||||
return getChar('0');
|
||||
}
|
||||
|
||||
public char getChar(char def) {
|
||||
if (getConfig() == null) return def;
|
||||
return getConfig().getString(getCompleteKey()).charAt(def);
|
||||
}
|
||||
|
||||
public Material getMaterial() {
|
||||
return getMaterial(Material.STONE);
|
||||
}
|
||||
|
||||
public Material getMaterial(Material def) {
|
||||
String materialStr = getConfig().getString(getCompleteKey());
|
||||
Material material = Material.getMaterial(materialStr);
|
||||
|
||||
if (material == null) {
|
||||
System.out.println(String.format("Config value \"%s\" has an invalid material name: \"%s\"", getCompleteKey(), materialStr));
|
||||
}
|
||||
|
||||
return material != null ? material : def;
|
||||
}
|
||||
|
||||
public FileConfiguration getConfig() {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -1,193 +0,0 @@
|
||||
package com.songoda.core.settingsv1;
|
||||
|
||||
import com.songoda.core.compatibility.ServerVersion;
|
||||
import com.songoda.core.utils.TextUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.*;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
/**
|
||||
* Created by songoda on 6/4/2017.
|
||||
*/
|
||||
public class SettingsManagerOld implements Listener {
|
||||
|
||||
private final Plugin plugin;
|
||||
private final Config config;
|
||||
|
||||
private Map<Player, String> cat = new HashMap<>();
|
||||
private Map<Player, String> current = new HashMap<>();
|
||||
|
||||
public SettingsManagerOld(Config config) {
|
||||
this.plugin = config.getPlugin();
|
||||
this.config = config;
|
||||
Bukkit.getPluginManager().registerEvents(this, plugin);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClick(InventoryClickEvent event) {
|
||||
if (event.getView().getType() != InventoryType.CHEST) return;
|
||||
ItemStack clickedItem = event.getCurrentItem();
|
||||
|
||||
if (event.getInventory() != event.getWhoClicked().getOpenInventory().getTopInventory()
|
||||
|| clickedItem == null || !clickedItem.hasItemMeta()
|
||||
|| !clickedItem.getItemMeta().hasDisplayName()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getView().getTitle().equals(plugin.getName() + " Settings Manager")) {
|
||||
event.setCancelled(true);
|
||||
if (clickedItem.getType().name().contains("STAINED_GLASS")) return;
|
||||
|
||||
String type = ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
|
||||
this.cat.put((Player) event.getWhoClicked(), type);
|
||||
this.openEditor((Player) event.getWhoClicked());
|
||||
} else if (event.getView().getTitle().equals(plugin.getName() + " Settings Editor")) {
|
||||
event.setCancelled(true);
|
||||
if (clickedItem.getType().name().contains("STAINED_GLASS")) return;
|
||||
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
|
||||
String key = cat.get(player) + "." + ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
|
||||
|
||||
if (config.getFileConfiguration().get(key).getClass().getName().equals("java.lang.Boolean")) {
|
||||
this.config.getFileConfiguration().set(key, !config.getFileConfiguration().getBoolean(key));
|
||||
this.finishEditing(player);
|
||||
} else {
|
||||
this.editObject(player, key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onChat(AsyncPlayerChatEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if (!current.containsKey(player)) return;
|
||||
|
||||
String value = current.get(player);
|
||||
FileConfiguration config = this.config.getFileConfiguration();
|
||||
if (config.isLong(value)) {
|
||||
config.set(value, Long.parseLong(event.getMessage()));
|
||||
} else if (config.isInt(value)) {
|
||||
config.set(value, Integer.parseInt(event.getMessage()));
|
||||
} else if (config.isDouble(value)) {
|
||||
config.set(value, Double.parseDouble(event.getMessage()));
|
||||
} else if (config.isString(value)) {
|
||||
config.set(value, event.getMessage());
|
||||
}
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () ->
|
||||
this.finishEditing(player), 0L);
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
private void finishEditing(Player player) {
|
||||
this.current.remove(player);
|
||||
this.config.save();
|
||||
this.openEditor(player);
|
||||
}
|
||||
|
||||
private void editObject(Player player, String current) {
|
||||
this.current.put(player, ChatColor.stripColor(current));
|
||||
|
||||
player.closeInventory();
|
||||
player.sendMessage("");
|
||||
player.sendMessage(TextUtils.formatText("&7Please enter a value for &6" + current + "&7."));
|
||||
if (config.getFileConfiguration().isInt(current) || config.getFileConfiguration().isDouble(current)) {
|
||||
player.sendMessage(TextUtils.formatText("&cUse only numbers."));
|
||||
}
|
||||
player.sendMessage("");
|
||||
}
|
||||
|
||||
public void openSettingsManager(Player player) {
|
||||
Inventory inventory = Bukkit.createInventory(null, 27, plugin.getName() + " Settings Manager");
|
||||
|
||||
int slot = 10;
|
||||
for (Category category : config.getCategories()) {
|
||||
ItemStack item = new ItemStack(ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.LEGACY_WOOL : Material.valueOf("WOOL"), 1, (byte) (slot - 9));
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setLore(Collections.singletonList(TextUtils.formatText("&6Click To Edit This Category.")));
|
||||
meta.setDisplayName(TextUtils.formatText("&f&l" + category.getKey()));
|
||||
item.setItemMeta(meta);
|
||||
inventory.setItem(slot, item);
|
||||
slot++;
|
||||
}
|
||||
|
||||
player.openInventory(inventory);
|
||||
}
|
||||
|
||||
private void openEditor(Player player) {
|
||||
Inventory inventory = Bukkit.createInventory(null, 54, plugin.getName() + " Settings Editor");
|
||||
FileConfiguration config = this.config.getFileConfiguration();
|
||||
|
||||
int slot = 0;
|
||||
for (String key : config.getConfigurationSection(cat.get(player)).getKeys(true)) {
|
||||
String fKey = cat.get(player) + "." + key;
|
||||
ItemStack item = new ItemStack(Material.DIAMOND_HELMET);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(TextUtils.formatText("&6" + key));
|
||||
|
||||
List<String> lore = new ArrayList<>();
|
||||
if (config.isBoolean(fKey)) {
|
||||
item.setType(Material.LEVER);
|
||||
lore.add(TextUtils.formatText(config.getBoolean(fKey) ? "&atrue" : "&cfalse"));
|
||||
} else if (config.isString(fKey)) {
|
||||
item.setType(Material.PAPER);
|
||||
lore.add(TextUtils.formatText("&7" + config.getString(fKey)));
|
||||
} else if (config.isInt(fKey)) {
|
||||
item.setType(ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.CLOCK : Material.valueOf("WATCH"));
|
||||
lore.add(TextUtils.formatText("&7" + config.getInt(fKey)));
|
||||
} else if (config.isLong(fKey)) {
|
||||
item.setType(ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.CLOCK : Material.valueOf("WATCH"));
|
||||
lore.add(TextUtils.formatText("&7" + config.getLong(fKey)));
|
||||
} else if (config.isDouble(fKey)) {
|
||||
item.setType(ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.CLOCK : Material.valueOf("WATCH"));
|
||||
lore.add(TextUtils.formatText("&7" + config.getDouble(fKey)));
|
||||
}
|
||||
|
||||
Setting setting = this.config.getSetting(fKey);
|
||||
|
||||
if (setting instanceof FoundSetting && ((FoundSetting)setting).getComments() != null) {
|
||||
lore.add("");
|
||||
|
||||
String comment = String.join(" ", ((FoundSetting)setting).getComments());
|
||||
|
||||
int lastIndex = 0;
|
||||
for (int n = 0; n < comment.length(); n++) {
|
||||
if (n - lastIndex < 30)
|
||||
continue;
|
||||
|
||||
if (comment.charAt(n) == ' ') {
|
||||
lore.add(TextUtils.formatText("&8" + comment.substring(lastIndex, n).trim()));
|
||||
lastIndex = n;
|
||||
}
|
||||
}
|
||||
|
||||
if (lastIndex - comment.length() < 30)
|
||||
lore.add(TextUtils.formatText("&8" + comment.substring(lastIndex).trim()));
|
||||
|
||||
}
|
||||
|
||||
meta.setLore(lore);
|
||||
item.setItemMeta(meta);
|
||||
|
||||
inventory.setItem(slot, item);
|
||||
slot++;
|
||||
}
|
||||
|
||||
player.openInventory(inventory);
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
package com.songoda.core.settingsv1.editor;
|
||||
|
||||
import com.songoda.core.compatibility.LegacyMaterials;
|
||||
import com.songoda.core.settingsv1.Category;
|
||||
import com.songoda.core.settingsv1.Config;
|
||||
import com.songoda.core.utils.gui.AbstractGUI;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class ConfigCategoriesGUI extends AbstractGUI {
|
||||
|
||||
private final JavaPlugin plugin;
|
||||
private final Config config;
|
||||
private final ConfigSelectionGUI selection;
|
||||
|
||||
public ConfigCategoriesGUI(JavaPlugin plugin, Player player, Config config, ConfigSelectionGUI selection) {
|
||||
super(player);
|
||||
this.plugin = plugin;
|
||||
this.config = config;
|
||||
this.selection = selection;
|
||||
init("Settings Editor", 54);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void constructGUI() {
|
||||
createButton(0, LegacyMaterials.getMaterial("OAK_FENCE_GATE").getMaterial(), "Back");
|
||||
registerClickable(0, ((player1, inventory1, cursor, slot, type) ->
|
||||
selection.init("Settings Editor", selection.getInventory().getSize())));
|
||||
|
||||
for (int i = 9; i - 9 < config.getCategories().size(); i++) {
|
||||
Category category = config.getCategories().get(i - 9);
|
||||
createButton(i, LegacyMaterials.WRITABLE_BOOK.getMaterial(), "&9&l" + category.getKey());
|
||||
registerClickable(i, ((player1, inventory1, cursor, slot, type) ->
|
||||
new ConfigEditorGUI(plugin, player, category, null, this)));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerClickables() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerOnCloses() {
|
||||
|
||||
}
|
||||
|
||||
public Config getConfig() {
|
||||
return config;
|
||||
}
|
||||
}
|
@ -1,143 +0,0 @@
|
||||
package com.songoda.core.settingsv1.editor;
|
||||
|
||||
import com.songoda.core.input.ChatPrompt;
|
||||
import com.songoda.core.compatibility.LegacyMaterials;
|
||||
import com.songoda.core.settingsv1.FoundSetting;
|
||||
import com.songoda.core.settingsv1.Narrow;
|
||||
import com.songoda.core.settingsv1.Setting;
|
||||
import com.songoda.core.utils.gui.AbstractGUI;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import us.myles.viaversion.libs.bungeecordchat.api.ChatColor;
|
||||
|
||||
public class ConfigEditorGUI extends AbstractGUI {
|
||||
|
||||
private final JavaPlugin plugin;
|
||||
private final Narrow narrow;
|
||||
private final String narrowed;
|
||||
private final ConfigCategoriesGUI categories;
|
||||
|
||||
public ConfigEditorGUI(JavaPlugin plugin, Player player, Narrow narrow, String narrowed, ConfigCategoriesGUI categories) {
|
||||
super(player);
|
||||
this.plugin = plugin;
|
||||
this.narrow = narrow;
|
||||
this.narrowed = narrowed;
|
||||
this.categories = categories;
|
||||
init("Settings Editor", 54);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void constructGUI() {
|
||||
resetClickables();
|
||||
|
||||
createButton(0, LegacyMaterials.getMaterial("OAK_FENCE_GATE").getMaterial(), "Back");
|
||||
registerClickable(0, ((player1, inventory1, cursor, slot, type) ->
|
||||
categories.init("Settings Editor", categories.getInventory().getSize())));
|
||||
|
||||
List<String> ran = new ArrayList<>();
|
||||
int j = 9;
|
||||
for (int i = 0; i < narrow.getSettings().size(); i++) {
|
||||
FoundSetting setting = narrow.getSettings().get(i);
|
||||
boolean canNarrow = setting.getKey().replace(narrowed == null ? "" : narrowed + ".", "").contains(".");
|
||||
String key = canNarrow ? splitByLast(setting.getKey()) : setting.getKey();
|
||||
|
||||
if (!ran.contains(key)) {
|
||||
if (canNarrow) {
|
||||
createButton(j, LegacyMaterials.BOOK.getMaterial(), "&9&l" + key);
|
||||
registerClickable(j, ((player1, inventory1, cursor, slot, type) ->
|
||||
new ConfigEditorGUI(plugin, player1, narrow.narrow(key), key, categories)));
|
||||
} else {
|
||||
FileConfiguration config = setting.getConfig();
|
||||
Material material = Material.STONE;
|
||||
|
||||
ArrayList<String> list = new ArrayList<>();
|
||||
StringBuilder value = new StringBuilder("&a");
|
||||
if (config.isString(setting.getCompleteKey())) {
|
||||
value.append(setting.getString());
|
||||
material = LegacyMaterials.PAPER.getMaterial();
|
||||
registerClickable(j, ((player1, inventory1, cursor, slot, type) -> {
|
||||
ChatPrompt prompt = ChatPrompt.showPrompt(plugin, player, "Enter your new value.", event ->
|
||||
config.set(setting.getCompleteKey(), event.getMessage().trim()));
|
||||
prompt.setOnClose(() -> init("Settings Editor", inventory.getSize()));
|
||||
}));
|
||||
} else if (isNumber(setting)) {
|
||||
material = LegacyMaterials.CLOCK.getMaterial();
|
||||
registerClickable(j, ((player1, inventory1, cursor, slot, type) -> {
|
||||
ChatPrompt prompt = ChatPrompt.showPrompt(plugin, player, "Enter your new value.", event -> {
|
||||
try {
|
||||
if (config.isInt(setting.getCompleteKey())) {
|
||||
config.set(setting.getCompleteKey(), Integer.parseInt(event.getMessage().trim()));
|
||||
} else if (config.isDouble(setting.getCompleteKey())) {
|
||||
config.set(setting.getCompleteKey(), Double.parseDouble(event.getMessage().trim()));
|
||||
} else if (config.isLong(setting.getCompleteKey())) {
|
||||
config.set(setting.getCompleteKey(), Long.parseLong(event.getMessage().trim()));
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
player1.sendMessage(ChatColor.RED + "Error: \"" + event.getMessage().trim() + "\" is not a number!");
|
||||
}
|
||||
});
|
||||
prompt.setOnClose(() -> init("Settings Editor", inventory.getSize()));
|
||||
}));
|
||||
if (config.isInt(setting.getCompleteKey())) {
|
||||
value.append(setting.getInt());
|
||||
} else if (config.isDouble(setting.getCompleteKey())) {
|
||||
value.append(setting.getDouble());
|
||||
} else if (config.isLong(setting.getCompleteKey())) {
|
||||
value.append(setting.getLong());
|
||||
}
|
||||
} else if (config.isBoolean(setting.getCompleteKey())) {
|
||||
value.append(setting.getBoolean());
|
||||
material = LegacyMaterials.LEVER.getMaterial();
|
||||
registerClickable(j, ((player1, inventory1, cursor, slot, type) -> {
|
||||
config.set(setting.getCompleteKey(), !setting.getBoolean());
|
||||
constructGUI();
|
||||
}));
|
||||
} else if (config.isList(setting.getCompleteKey())) {
|
||||
value.append(setting.getStringList());
|
||||
material = LegacyMaterials.WRITABLE_BOOK.getMaterial();
|
||||
registerClickable(j, ((player1, inventory1, cursor, slot, type) -> {
|
||||
new ConfigListEditorGUI(plugin, player, setting, this);
|
||||
}));
|
||||
} else {
|
||||
value.append("&cPreview Failed");
|
||||
}
|
||||
list.add(value.toString());
|
||||
|
||||
list.addAll(Arrays.asList(setting.getComments()));
|
||||
createButton(j, material, "&c&l" + key, list);
|
||||
}
|
||||
ran.add(key);
|
||||
j++;
|
||||
}
|
||||
}
|
||||
categories.getConfig().save();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerClickables() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerOnCloses() {
|
||||
|
||||
}
|
||||
|
||||
private boolean isNumber(Setting setting) {
|
||||
FileConfiguration config = setting.getConfig();
|
||||
return config.isInt(setting.getCompleteKey())
|
||||
|| config.isDouble(setting.getCompleteKey())
|
||||
|| config.isLong(setting.getCompleteKey());
|
||||
}
|
||||
|
||||
private String splitByLast(String toSplit) {
|
||||
int index = toSplit.lastIndexOf(".");
|
||||
return toSplit.substring(0, index);
|
||||
}
|
||||
}
|
@ -1,71 +0,0 @@
|
||||
package com.songoda.core.settingsv1.editor;
|
||||
|
||||
import com.songoda.core.input.ChatPrompt;
|
||||
import com.songoda.core.compatibility.LegacyMaterials;
|
||||
import com.songoda.core.settingsv1.Setting;
|
||||
import com.songoda.core.utils.gui.AbstractGUI;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ConfigListEditorGUI extends AbstractGUI {
|
||||
|
||||
private final JavaPlugin plugin;
|
||||
private final Setting setting;
|
||||
private final ConfigEditorGUI editor;
|
||||
|
||||
private final List<String> stringList;
|
||||
|
||||
public ConfigListEditorGUI(JavaPlugin plugin, Player player, Setting setting, ConfigEditorGUI editor) {
|
||||
super(player);
|
||||
this.plugin = plugin;
|
||||
this.setting = setting;
|
||||
this.stringList = setting.getStringList();
|
||||
this.editor = editor;
|
||||
init("Settings Editor", 54);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void constructGUI() {
|
||||
resetClickables();
|
||||
inventory.clear();
|
||||
for (int i = 0; i < stringList.size(); i++) {
|
||||
int j = i;
|
||||
String item = stringList.get(i);
|
||||
createButton(i, LegacyMaterials.PAPER.getMaterial(), "&7" + item, "&cClick to remove.");
|
||||
registerClickable(i, ((player1, inventory1, cursor, slot, type) -> {
|
||||
stringList.remove(j);
|
||||
constructGUI();
|
||||
}));
|
||||
}
|
||||
createButton(45, LegacyMaterials.LAVA_BUCKET.getMaterial(), "&cDiscard Changes");
|
||||
registerClickable(45, ((player1, inventory1, cursor, slot, type) -> {
|
||||
editor.init("Settings Editor", editor.getInventory().getSize());
|
||||
}));
|
||||
|
||||
createButton(49, LegacyMaterials.CHEST.getMaterial(), "&9Add Item");
|
||||
registerClickable(49, ((player1, inventory1, cursor, slot, type) -> {
|
||||
ChatPrompt prompt = ChatPrompt.showPrompt(plugin, player, "Enter your value.", event ->
|
||||
stringList.add(event.getMessage().trim()));
|
||||
prompt.setOnClose(() -> init("Settings Editor", inventory.getSize()));
|
||||
}));
|
||||
|
||||
createButton(53, LegacyMaterials.REDSTONE.getMaterial(), "&aSave");
|
||||
registerClickable(53, ((player1, inventory1, cursor, slot, type) -> {
|
||||
setting.getConfig().set(setting.getCompleteKey(), stringList);
|
||||
editor.init("Settings Editor", editor.getInventory().getSize());
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerClickables() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerOnCloses() {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
package com.songoda.core.settingsv1.editor;
|
||||
|
||||
import com.songoda.core.compatibility.LegacyMaterials;
|
||||
import com.songoda.core.settingsv1.Config;
|
||||
import com.songoda.core.utils.gui.AbstractGUI;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class ConfigSelectionGUI extends AbstractGUI {
|
||||
|
||||
private final JavaPlugin plugin;
|
||||
|
||||
private final List<Config> configs = new ArrayList<>();
|
||||
|
||||
public ConfigSelectionGUI(JavaPlugin plugin, Player player, Config... configs) {
|
||||
super(player);
|
||||
this.plugin = plugin;
|
||||
this.configs.addAll(Arrays.asList(configs));
|
||||
init("Settings Editor", 9);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void constructGUI() {
|
||||
for (int i = 0; i < configs.size(); i++) {
|
||||
Config config = configs.get(i);
|
||||
createButton(i, LegacyMaterials.WRITABLE_BOOK.getMaterial(), "&9&l" + config.getConfigName());
|
||||
registerClickable(i, ((player1, inventory1, cursor, slot, type) ->
|
||||
new ConfigCategoriesGUI(plugin, player, config, this)));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerClickables() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerOnCloses() {
|
||||
|
||||
}
|
||||
}
|
@ -1,253 +0,0 @@
|
||||
package com.songoda.core.utils.gui;
|
||||
|
||||
import com.songoda.core.SongodaCore;
|
||||
import com.songoda.core.utils.TextUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@Deprecated
|
||||
public abstract class AbstractGUI implements Listener {
|
||||
|
||||
private static boolean listenersInitialized = false;
|
||||
protected final Player player;
|
||||
protected Inventory inventory = null;
|
||||
protected String setTitle = null;
|
||||
protected boolean cancelBottom = false;
|
||||
private Map<Range, Clickable> clickables = new HashMap<>();
|
||||
private List<OnClose> onCloses = new ArrayList<>();
|
||||
private Map<Range, Boolean> draggableRanges = new HashMap<>();
|
||||
|
||||
public AbstractGUI(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
public static void initializeListeners(JavaPlugin plugin) {
|
||||
if (listenersInitialized) return;
|
||||
|
||||
Bukkit.getPluginManager().registerEvents(new Listener() {
|
||||
@EventHandler
|
||||
public void onClickGUI(InventoryClickEvent event) {
|
||||
Inventory inventory = event.getClickedInventory();
|
||||
if (inventory == null) return;
|
||||
AbstractGUI gui = getGUIFromInventory(inventory);
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
|
||||
boolean bottom = false;
|
||||
|
||||
InventoryType type = event.getClickedInventory().getType();
|
||||
if (type != InventoryType.CHEST && type != InventoryType.PLAYER) return;
|
||||
|
||||
if (gui == null && event.getWhoClicked().getOpenInventory().getTopInventory() != null) {
|
||||
Inventory top = event.getWhoClicked().getOpenInventory().getTopInventory();
|
||||
gui = getGUIFromInventory(top);
|
||||
|
||||
if (gui != null && gui.cancelBottom) event.setCancelled(true);
|
||||
bottom = true;
|
||||
}
|
||||
|
||||
if (gui == null) return;
|
||||
|
||||
if (!bottom) event.setCancelled(true);
|
||||
|
||||
if (!gui.draggableRanges.isEmpty() && !bottom) {
|
||||
for (Map.Entry<Range, Boolean> entry : gui.draggableRanges.entrySet()) {
|
||||
Range range = entry.getKey();
|
||||
if (range.getMax() == range.getMin() && event.getSlot() == range.getMin()
|
||||
|| event.getSlot() >= range.getMin() && event.getSlot() <= range.getMax()) {
|
||||
event.setCancelled(!entry.getValue());
|
||||
if (!entry.getValue()) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Map<Range, Clickable> entries = new HashMap<>(gui.clickables);
|
||||
|
||||
for (Map.Entry<Range, Clickable> entry : entries.entrySet()) {
|
||||
Range range = entry.getKey();
|
||||
if (range.isBottom() && !bottom || !range.isBottom() && bottom || range.getClickType() != null && range.getClickType() != event.getClick())
|
||||
continue;
|
||||
if (event.getSlot() >= range.getMin() && event.getSlot() <= range.getMax()) {
|
||||
entry.getValue().Clickable(player, inventory, event.getCursor(), event.getSlot(), event.getClick());
|
||||
player.playSound(player.getLocation(), entry.getKey().getOnClickSound(), 1F, 1F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onCloseGUI(InventoryCloseEvent event) {
|
||||
Inventory inventory = event.getInventory();
|
||||
AbstractGUI gui = getGUIFromInventory(inventory);
|
||||
|
||||
if (gui == null || gui.inventory == null) return;
|
||||
|
||||
for (OnClose onClose : gui.onCloses) {
|
||||
onClose.OnClose((Player) event.getPlayer(), inventory);
|
||||
}
|
||||
}
|
||||
|
||||
private AbstractGUI getGUIFromInventory(Inventory inventory) {
|
||||
if (inventory.getHolder() == null) return null;
|
||||
InventoryHolder holder = inventory.getHolder();
|
||||
if (!(holder instanceof GUIHolder)) return null;
|
||||
|
||||
return ((AbstractGUI.GUIHolder) holder).getGUI();
|
||||
}
|
||||
}, plugin);
|
||||
listenersInitialized = true;
|
||||
}
|
||||
|
||||
public void init(String title, int slots) {
|
||||
if (inventory == null
|
||||
|| inventory.getSize() != slots
|
||||
|| ChatColor.translateAlternateColorCodes('&', title) != player.getOpenInventory().getTitle()) {
|
||||
this.inventory = Bukkit.getServer().createInventory(new GUIHolder(), slots, TextUtils.formatText(title));
|
||||
this.setTitle = TextUtils.formatText(title);
|
||||
if (this.clickables.size() == 0)
|
||||
registerClickables();
|
||||
if (this.onCloses.size() == 0)
|
||||
registerOnCloses();
|
||||
}
|
||||
constructGUI();
|
||||
initializeListeners(SongodaCore.getHijackedPlugin());
|
||||
player.openInventory(inventory);
|
||||
}
|
||||
|
||||
protected abstract void constructGUI();
|
||||
|
||||
protected void addDraggable(Range range, boolean option) {
|
||||
this.draggableRanges.put(range, option);
|
||||
}
|
||||
|
||||
protected void removeDraggable() {
|
||||
this.draggableRanges.clear();
|
||||
}
|
||||
|
||||
protected abstract void registerClickables();
|
||||
|
||||
protected abstract void registerOnCloses();
|
||||
|
||||
protected ItemStack createButton(int slot, Inventory inventory, ItemStack item, String name, String... lore) {
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(TextUtils.formatText(name));
|
||||
if (lore != null && lore.length != 0) {
|
||||
List<String> newLore = new ArrayList<>();
|
||||
for (String line : lore) {
|
||||
if (line == null) continue;
|
||||
for (String string : line.split("\\s*\\r?\\n\\s*")) {
|
||||
int lastIndex = 0;
|
||||
for (int n = 0; n < string.length(); n++) {
|
||||
if (n - lastIndex < 35)
|
||||
continue;
|
||||
|
||||
if (string.charAt(n) == ' ') {
|
||||
newLore.add(TextUtils.formatText("&7" + string.substring(lastIndex, n).trim()));
|
||||
lastIndex = n;
|
||||
}
|
||||
}
|
||||
|
||||
if (lastIndex - string.length() < 35)
|
||||
newLore.add(TextUtils.formatText("&7" + string.substring(lastIndex, string.length()).trim()));
|
||||
}
|
||||
}
|
||||
meta.setLore(newLore);
|
||||
}
|
||||
item.setItemMeta(meta);
|
||||
inventory.setItem(slot, item);
|
||||
return item;
|
||||
}
|
||||
|
||||
protected ItemStack createButton(int slot, ItemStack item, String name, ArrayList<String> lore) {
|
||||
return createButton(slot, inventory, item, name, lore.toArray(new String[0]));
|
||||
}
|
||||
|
||||
|
||||
protected ItemStack createButton(int slot, ItemStack item, String name, String... lore) {
|
||||
return createButton(slot, inventory, item, name, lore);
|
||||
}
|
||||
|
||||
protected ItemStack createButton(int slot, Object item, String name, String... lore) {
|
||||
if (item instanceof ItemStack)
|
||||
return createButton(slot, inventory, (ItemStack) item, name, lore);
|
||||
else
|
||||
return createButton(slot, inventory, (Material) item, name, lore);
|
||||
}
|
||||
|
||||
protected ItemStack createButton(int slot, Inventory inventory, Material material, String name, String... lore) {
|
||||
return createButton(slot, inventory, new ItemStack(material), name, lore);
|
||||
}
|
||||
|
||||
protected ItemStack createButton(int slot, Material material, String name, String... lore) {
|
||||
return createButton(slot, inventory, new ItemStack(material), name, lore);
|
||||
}
|
||||
|
||||
protected ItemStack createButton(int slot, Material material, String name, ArrayList<String> lore) {
|
||||
return createButton(slot, material, name, lore.toArray(new String[0]));
|
||||
}
|
||||
|
||||
protected void registerClickable(int min, int max, ClickType clickType, boolean bottom, Clickable clickable) {
|
||||
clickables.put(new Range(min, max, clickType, bottom), clickable);
|
||||
}
|
||||
|
||||
protected void registerClickable(int min, int max, ClickType clickType, Clickable clickable) {
|
||||
registerClickable(min, max, clickType, false, clickable);
|
||||
}
|
||||
|
||||
protected void registerClickable(int slot, ClickType clickType, Clickable clickable) {
|
||||
registerClickable(slot, slot, clickType, false, clickable);
|
||||
}
|
||||
|
||||
protected void registerClickable(int min, int max, Clickable clickable) {
|
||||
registerClickable(min, max, null, false, clickable);
|
||||
}
|
||||
|
||||
protected void registerClickable(int slot, boolean bottom, Clickable clickable) {
|
||||
registerClickable(slot, slot, null, bottom, clickable);
|
||||
}
|
||||
|
||||
protected void registerClickable(int slot, Clickable clickable) {
|
||||
registerClickable(slot, slot, null, false, clickable);
|
||||
}
|
||||
|
||||
protected void resetClickables() {
|
||||
clickables.clear();
|
||||
}
|
||||
|
||||
protected void registerOnClose(OnClose onClose) {
|
||||
onCloses.add(onClose);
|
||||
}
|
||||
|
||||
public Inventory getInventory() {
|
||||
return inventory;
|
||||
}
|
||||
|
||||
public class GUIHolder implements InventoryHolder {
|
||||
|
||||
@Override
|
||||
public Inventory getInventory() {
|
||||
return inventory;
|
||||
}
|
||||
|
||||
public AbstractGUI getGUI() {
|
||||
return AbstractGUI.this;
|
||||
}
|
||||
}
|
||||
|
||||
public String getSetTitle() {
|
||||
return setTitle;
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
package com.songoda.core.utils.gui;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@Deprecated
|
||||
public interface Clickable {
|
||||
|
||||
void Clickable(Player player, Inventory inventory, ItemStack cursor, int slot, ClickType type);
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
package com.songoda.core.utils.gui;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
@Deprecated
|
||||
public interface OnClose {
|
||||
|
||||
void OnClose(Player player, Inventory inventory);
|
||||
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
package com.songoda.core.utils.gui;
|
||||
|
||||
import com.songoda.core.compatibility.ServerVersion;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
|
||||
@Deprecated
|
||||
public class Range {
|
||||
|
||||
private int min;
|
||||
private int max;
|
||||
private ClickType clickType;
|
||||
private boolean bottom;
|
||||
private Sound onClickSound;
|
||||
|
||||
public Range(int min, int max, ClickType clickType, boolean bottom) {
|
||||
this.min = min;
|
||||
this.max = max;
|
||||
this.clickType = clickType;
|
||||
this.bottom = bottom;
|
||||
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) onClickSound = Sound.UI_BUTTON_CLICK;
|
||||
}
|
||||
|
||||
public Range(int min, int max, Sound onClickSound, ClickType clickType, boolean bottom) {
|
||||
this.min = min;
|
||||
this.max = max;
|
||||
this.onClickSound = onClickSound;
|
||||
this.clickType = clickType;
|
||||
this.bottom = bottom;
|
||||
}
|
||||
|
||||
public int getMin() {
|
||||
return min;
|
||||
}
|
||||
|
||||
public int getMax() {
|
||||
return max;
|
||||
}
|
||||
|
||||
public ClickType getClickType() {
|
||||
return clickType;
|
||||
}
|
||||
|
||||
public boolean isBottom() {
|
||||
return bottom;
|
||||
}
|
||||
|
||||
public Sound getOnClickSound() {
|
||||
return onClickSound;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user