mirror of
https://github.com/filoghost/ChestCommands.git
synced 2025-02-21 14:01:21 +01:00
Refactoring
This commit is contained in:
parent
6a00d49e06
commit
cf8e5da6bf
@ -48,6 +48,7 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ChestCommands extends BaseJavaPlugin {
|
public class ChestCommands extends BaseJavaPlugin {
|
||||||
@ -55,8 +56,8 @@ public class ChestCommands extends BaseJavaPlugin {
|
|||||||
|
|
||||||
public static final String CHAT_PREFIX = ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "ChestCommands" + ChatColor.DARK_GREEN + "] " + ChatColor.GREEN;
|
public static final String CHAT_PREFIX = ChatColor.DARK_GREEN + "[" + ChatColor.GREEN + "ChestCommands" + ChatColor.DARK_GREEN + "] " + ChatColor.GREEN;
|
||||||
|
|
||||||
|
|
||||||
private static ChestCommands instance;
|
private static ChestCommands instance;
|
||||||
|
private static Path dataFolderPath;
|
||||||
|
|
||||||
private ConfigManager configManager;
|
private ConfigManager configManager;
|
||||||
private MenuManager menuManager;
|
private MenuManager menuManager;
|
||||||
@ -85,10 +86,11 @@ public class ChestCommands extends BaseJavaPlugin {
|
|||||||
System.setProperty("ChestCommandsLoaded", "true");
|
System.setProperty("ChestCommandsLoaded", "true");
|
||||||
|
|
||||||
instance = this;
|
instance = this;
|
||||||
|
dataFolderPath = getDataFolder().toPath();
|
||||||
Log.setLogger(getLogger());
|
Log.setLogger(getLogger());
|
||||||
BackendAPI.setImplementation(new DefaultBackendAPI());
|
BackendAPI.setImplementation(new DefaultBackendAPI());
|
||||||
|
|
||||||
configManager = new ConfigManager(getDataFolder().toPath());
|
configManager = new ConfigManager(getDataFolderPath());
|
||||||
menuManager = new MenuManager();
|
menuManager = new MenuManager();
|
||||||
settings = new Settings();
|
settings = new Settings();
|
||||||
lang = new Lang();
|
lang = new Lang();
|
||||||
@ -148,13 +150,15 @@ public class ChestCommands extends BaseJavaPlugin {
|
|||||||
Bukkit.getScheduler().runTaskTimer(this, new TickingTask(), 1L, 1L);
|
Bukkit.getScheduler().runTaskTimer(this, new TickingTask(), 1L, 1L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Path getDataFolderPath() {
|
||||||
|
return dataFolderPath;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
closeAllMenus();
|
closeAllMenus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public ErrorCollector load() {
|
public ErrorCollector load() {
|
||||||
ErrorCollector errorCollector = new PrintableErrorCollector();
|
ErrorCollector errorCollector = new PrintableErrorCollector();
|
||||||
menuManager.clear();
|
menuManager.clear();
|
||||||
|
@ -23,8 +23,8 @@ public class BroadcastAction extends Action {
|
|||||||
|
|
||||||
private final RelativeString message;
|
private final RelativeString message;
|
||||||
|
|
||||||
public BroadcastAction(String action) {
|
public BroadcastAction(String serializedAction) {
|
||||||
message = RelativeString.of(Colors.addColors(action));
|
message = RelativeString.of(Colors.addColors(serializedAction));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -24,11 +24,11 @@ public class GiveMoneyAction extends Action {
|
|||||||
|
|
||||||
private double moneyToGive;
|
private double moneyToGive;
|
||||||
|
|
||||||
public GiveMoneyAction(String action) {
|
public GiveMoneyAction(String serializedAction) {
|
||||||
try {
|
try {
|
||||||
moneyToGive = NumberParser.getStrictlyPositiveDouble(action);
|
moneyToGive = NumberParser.getStrictlyPositiveDouble(serializedAction);
|
||||||
} catch (ParseException e) {
|
} catch (ParseException e) {
|
||||||
disable(ChatColor.RED + "Invalid money amount \"" + action + "\": " + e.getMessage());
|
disable(ChatColor.RED + "Invalid money amount \"" + serializedAction + "\": " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,8 +22,8 @@ public class SendMessageAction extends Action {
|
|||||||
|
|
||||||
private final RelativeString message;
|
private final RelativeString message;
|
||||||
|
|
||||||
public SendMessageAction(String action) {
|
public SendMessageAction(String serializedAction) {
|
||||||
message = RelativeString.of(Colors.addColors(action));
|
message = RelativeString.of(Colors.addColors(serializedAction));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -92,16 +92,11 @@ public class ConfigManager extends BaseConfigManager {
|
|||||||
return rootDataFolder.resolve("menu");
|
return rootDataFolder.resolve("menu");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public List<Path> getMenuFiles() throws IOException {
|
||||||
* Returns a list of YML menu files.
|
|
||||||
*/
|
|
||||||
public List<Path> getMenuPaths() throws IOException {
|
|
||||||
Preconditions.checkState(Files.isDirectory(getMenusFolder()), "menus folder doesn't exist");
|
Preconditions.checkState(Files.isDirectory(getMenusFolder()), "menus folder doesn't exist");
|
||||||
|
|
||||||
try (Stream<Path> paths = Files.walk(getMenusFolder(), FileVisitOption.FOLLOW_LINKS)) {
|
try (Stream<Path> paths = Files.walk(getMenusFolder(), FileVisitOption.FOLLOW_LINKS)) {
|
||||||
return paths.filter(Files::isRegularFile)
|
return paths.filter(this::isYamlFile).collect(Collectors.toList());
|
||||||
.filter(this::isYmlPath)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,16 +106,16 @@ public class ConfigManager extends BaseConfigManager {
|
|||||||
|
|
||||||
public List<LoadedMenu> tryLoadMenus(ErrorCollector errorCollector) {
|
public List<LoadedMenu> tryLoadMenus(ErrorCollector errorCollector) {
|
||||||
List<LoadedMenu> loadedMenus = new ArrayList<>();
|
List<LoadedMenu> loadedMenus = new ArrayList<>();
|
||||||
List<Path> menuPaths;
|
List<Path> menuFiles;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
menuPaths = getMenuPaths();
|
menuFiles = getMenuFiles();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
errorCollector.add(ErrorMessages.Config.menuListIOException(getMenusFolder()), e);
|
errorCollector.add(ErrorMessages.Config.menuListIOException(getMenusFolder()), e);
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Path menuFile : menuPaths) {
|
for (Path menuFile : menuFiles) {
|
||||||
ConfigLoader menuConfigLoader = new ConfigLoader(rootDataFolder, menuFile);
|
ConfigLoader menuConfigLoader = new ConfigLoader(rootDataFolder, menuFile);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -134,8 +129,8 @@ public class ConfigManager extends BaseConfigManager {
|
|||||||
return loadedMenus;
|
return loadedMenus;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isYmlPath(Path path) {
|
private boolean isYamlFile(Path path) {
|
||||||
return path.getFileName().toString().toLowerCase().endsWith(".yml");
|
return Files.isRegularFile(path) && path.getFileName().toString().toLowerCase().endsWith(".yml");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -32,9 +32,8 @@ public class CustomPlaceholders {
|
|||||||
public void load(Config config, ErrorCollector errorCollector) {
|
public void load(Config config, ErrorCollector errorCollector) {
|
||||||
placeholders.clear();
|
placeholders.clear();
|
||||||
|
|
||||||
for (String key : config.getKeys(false)) {
|
for (String placeholder : config.getKeys(false)) {
|
||||||
String placeholder = key;
|
String replacement = Colors.addColors(config.getString(placeholder));
|
||||||
String replacement = Colors.addColors(config.getString(key));
|
|
||||||
|
|
||||||
if (placeholder.length() == 0) {
|
if (placeholder.length() == 0) {
|
||||||
errorCollector.add(ErrorMessages.Config.emptyPlaceholder(config.getSourceFile()));
|
errorCollector.add(ErrorMessages.Config.emptyPlaceholder(config.getSourceFile()));
|
||||||
@ -50,14 +49,14 @@ public class CustomPlaceholders {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> replaceAll(List<String> input) {
|
public List<String> replacePlaceholders(List<String> input) {
|
||||||
if (input == null) {
|
if (input == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return CollectionUtils.transform(input, this::replaceAll);
|
return CollectionUtils.transform(input, this::replacePlaceholders);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String replaceAll(String input) {
|
public String replacePlaceholders(String input) {
|
||||||
if (input == null) {
|
if (input == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,5 @@ public interface PluginHook {
|
|||||||
default void checkEnabledState() {
|
default void checkEnabledState() {
|
||||||
Preconditions.checkState(isEnabled(), "Plugin hook " + getClass().getSimpleName() + " is not enabled");
|
Preconditions.checkState(isEnabled(), "Plugin hook " + getClass().getSimpleName() + " is not enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,11 +18,11 @@ import me.filoghost.chestcommands.action.Action;
|
|||||||
import me.filoghost.chestcommands.action.OpenMenuAction;
|
import me.filoghost.chestcommands.action.OpenMenuAction;
|
||||||
import me.filoghost.chestcommands.api.ClickResult;
|
import me.filoghost.chestcommands.api.ClickResult;
|
||||||
import me.filoghost.chestcommands.api.MenuInventory;
|
import me.filoghost.chestcommands.api.MenuInventory;
|
||||||
import me.filoghost.chestcommands.icon.requirement.PermissionChecker;
|
|
||||||
import me.filoghost.chestcommands.icon.requirement.RequiredExpLevel;
|
import me.filoghost.chestcommands.icon.requirement.RequiredExpLevel;
|
||||||
import me.filoghost.chestcommands.icon.requirement.RequiredItem;
|
import me.filoghost.chestcommands.icon.requirement.RequiredItem;
|
||||||
import me.filoghost.chestcommands.icon.requirement.RequiredItems;
|
import me.filoghost.chestcommands.icon.requirement.RequiredItems;
|
||||||
import me.filoghost.chestcommands.icon.requirement.RequiredMoney;
|
import me.filoghost.chestcommands.icon.requirement.RequiredMoney;
|
||||||
|
import me.filoghost.chestcommands.icon.requirement.RequiredPermission;
|
||||||
import me.filoghost.chestcommands.icon.requirement.Requirement;
|
import me.filoghost.chestcommands.icon.requirement.Requirement;
|
||||||
import me.filoghost.chestcommands.util.Preconditions;
|
import me.filoghost.chestcommands.util.Preconditions;
|
||||||
import me.filoghost.chestcommands.util.collection.CollectionUtils;
|
import me.filoghost.chestcommands.util.collection.CollectionUtils;
|
||||||
@ -35,9 +35,9 @@ import java.util.List;
|
|||||||
|
|
||||||
public class InternalConfigurableIcon extends BaseConfigurableIcon implements RefreshableIcon {
|
public class InternalConfigurableIcon extends BaseConfigurableIcon implements RefreshableIcon {
|
||||||
|
|
||||||
private PermissionChecker viewPermission;
|
private RequiredPermission viewPermission;
|
||||||
|
|
||||||
private PermissionChecker clickPermission;
|
private RequiredPermission clickPermission;
|
||||||
private RequiredMoney requiredMoney;
|
private RequiredMoney requiredMoney;
|
||||||
private RequiredExpLevel requiredExpLevel;
|
private RequiredExpLevel requiredExpLevel;
|
||||||
private RequiredItems requiredItems;
|
private RequiredItems requiredItems;
|
||||||
@ -60,7 +60,7 @@ public class InternalConfigurableIcon extends BaseConfigurableIcon implements Re
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setClickPermission(String permission) {
|
public void setClickPermission(String permission) {
|
||||||
this.clickPermission = new PermissionChecker(permission);
|
this.clickPermission = new RequiredPermission(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNoClickPermissionMessage(String clickNoPermissionMessage) {
|
public void setNoClickPermissionMessage(String clickNoPermissionMessage) {
|
||||||
@ -68,7 +68,7 @@ public class InternalConfigurableIcon extends BaseConfigurableIcon implements Re
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setViewPermission(String viewPermission) {
|
public void setViewPermission(String viewPermission) {
|
||||||
this.viewPermission = new PermissionChecker(viewPermission);
|
this.viewPermission = new RequiredPermission(viewPermission);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRequiredMoney(double requiredMoney) {
|
public void setRequiredMoney(double requiredMoney) {
|
||||||
@ -123,13 +123,14 @@ public class InternalConfigurableIcon extends BaseConfigurableIcon implements Re
|
|||||||
@Override
|
@Override
|
||||||
public ClickResult onClick(MenuInventory menuInventory, Player player) {
|
public ClickResult onClick(MenuInventory menuInventory, Player player) {
|
||||||
// Check all the requirements
|
// Check all the requirements
|
||||||
boolean hasAllRequirements = Requirement.hasAll(player, clickPermission, requiredMoney, requiredExpLevel, requiredItems);
|
Requirement[] requirements = {clickPermission, requiredMoney, requiredExpLevel, requiredItems};
|
||||||
|
boolean hasAllRequirements = Requirement.hasAllCosts(player, requirements);
|
||||||
if (!hasAllRequirements) {
|
if (!hasAllRequirements) {
|
||||||
return clickResult;
|
return clickResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If all requirements are satisfied, take their cost
|
// If all requirements are satisfied, take their cost
|
||||||
boolean takenAllCosts = Requirement.takeAllCosts(player, clickPermission, requiredMoney, requiredExpLevel, requiredItems);
|
boolean takenAllCosts = Requirement.takeAllCosts(player, requirements);
|
||||||
if (!takenAllCosts) {
|
if (!takenAllCosts) {
|
||||||
return clickResult;
|
return clickResult;
|
||||||
}
|
}
|
||||||
|
@ -26,10 +26,6 @@ public class RequiredExpLevel implements Requirement {
|
|||||||
Preconditions.checkArgument(levels > 0, "levels must be positive");
|
Preconditions.checkArgument(levels > 0, "levels must be positive");
|
||||||
this.levels = levels;
|
this.levels = levels;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLevels() {
|
|
||||||
return levels;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasCost(Player player) {
|
public boolean hasCost(Player player) {
|
||||||
|
@ -30,10 +30,6 @@ public class RequiredItems implements Requirement {
|
|||||||
Preconditions.notEmpty(items, "items");
|
Preconditions.notEmpty(items, "items");
|
||||||
this.items = ImmutableList.copyOf(items);
|
this.items = ImmutableList.copyOf(items);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<RequiredItem> geItems() {
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasCost(Player player) {
|
public boolean hasCost(Player player) {
|
||||||
|
@ -28,10 +28,6 @@ public class RequiredMoney implements Requirement {
|
|||||||
Preconditions.checkArgument(moneyAmount > 0.0, "money amount must be positive");
|
Preconditions.checkArgument(moneyAmount > 0.0, "money amount must be positive");
|
||||||
this.moneyAmount = moneyAmount;
|
this.moneyAmount = moneyAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getAmount() {
|
|
||||||
return moneyAmount;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasCost(Player player) {
|
public boolean hasCost(Player player) {
|
||||||
|
@ -18,13 +18,13 @@ import me.filoghost.chestcommands.ChestCommands;
|
|||||||
import me.filoghost.chestcommands.util.Strings;
|
import me.filoghost.chestcommands.util.Strings;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class PermissionChecker implements Requirement {
|
public class RequiredPermission implements Requirement {
|
||||||
|
|
||||||
private final String permission;
|
private final String permission;
|
||||||
private final boolean negated;
|
private final boolean negated;
|
||||||
private String noPermissionMessage;
|
private String noPermissionMessage;
|
||||||
|
|
||||||
public PermissionChecker(String permission) {
|
public RequiredPermission(String permission) {
|
||||||
if (permission != null) {
|
if (permission != null) {
|
||||||
permission = permission.trim();
|
permission = permission.trim();
|
||||||
}
|
}
|
@ -22,7 +22,7 @@ public interface Requirement {
|
|||||||
|
|
||||||
boolean takeCost(Player player);
|
boolean takeCost(Player player);
|
||||||
|
|
||||||
static boolean hasAll(Player player, Requirement... requirements) {
|
static boolean hasAllCosts(Player player, Requirement... requirements) {
|
||||||
for (Requirement requirement : requirements) {
|
for (Requirement requirement : requirements) {
|
||||||
if (requirement != null && !requirement.hasCost(player)) {
|
if (requirement != null && !requirement.hasCost(player)) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -80,7 +80,7 @@ public enum Upgrade {
|
|||||||
|
|
||||||
private static List<Path> getMenuFiles(ConfigManager configManager) throws UpgradeTaskException {
|
private static List<Path> getMenuFiles(ConfigManager configManager) throws UpgradeTaskException {
|
||||||
try {
|
try {
|
||||||
return configManager.getMenuPaths();
|
return configManager.getMenuFiles();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new UpgradeTaskException(ErrorMessages.Upgrade.menuListIOException, e);
|
throw new UpgradeTaskException(ErrorMessages.Upgrade.menuListIOException, e);
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@ public class MenuNodeExpandUpgradeTask extends UpgradeTask {
|
|||||||
private void expandInlineList(ConfigSection config, String node, String separator) {
|
private void expandInlineList(ConfigSection config, String node, String separator) {
|
||||||
if (config.isSet(node)) {
|
if (config.isSet(node)) {
|
||||||
if (config.isString(node)) {
|
if (config.isString(node)) {
|
||||||
config.set(node, getSeparatedValues(config.getString(node), separator));
|
config.set(node, splitListElements(config.getString(node), separator));
|
||||||
setSaveRequired();
|
setSaveRequired();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -144,7 +144,7 @@ public class MenuNodeExpandUpgradeTask extends UpgradeTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> getSeparatedValues(String input, String separator) {
|
private List<String> splitListElements(String input, String separator) {
|
||||||
if (separator == null || separator.length() == 0) {
|
if (separator == null || separator.length() == 0) {
|
||||||
separator = ";";
|
separator = ";";
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ package me.filoghost.chestcommands.listener;
|
|||||||
import me.filoghost.chestcommands.ChestCommands;
|
import me.filoghost.chestcommands.ChestCommands;
|
||||||
import me.filoghost.chestcommands.Permissions;
|
import me.filoghost.chestcommands.Permissions;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
@ -25,14 +26,17 @@ public class JoinListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onJoin(PlayerJoinEvent event) {
|
public void onJoin(PlayerJoinEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (ChestCommands.getLastLoadErrors().hasErrors() && event.getPlayer().hasPermission(Permissions.SEE_ERRORS)) {
|
if (ChestCommands.getLastLoadErrors().hasErrors() && player.hasPermission(Permissions.SEE_ERRORS)) {
|
||||||
event.getPlayer().sendMessage(ChestCommands.CHAT_PREFIX + ChatColor.RED + "The plugin found " + ChestCommands.getLastLoadErrors().getErrorsCount() + " error(s) last time it was loaded. You can see them by doing \"/cc reload\" in the console.");
|
player.sendMessage(
|
||||||
|
ChestCommands.CHAT_PREFIX + ChatColor.RED + "The plugin found " + ChestCommands.getLastLoadErrors().getErrorsCount()
|
||||||
|
+ " error(s) last time it was loaded. You can see them by doing \"/cc reload\" in the console.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ChestCommands.hasNewVersion() && ChestCommands.getSettings().update_notifications && event.getPlayer().hasPermission(Permissions.UPDATE_NOTIFICATIONS)) {
|
if (ChestCommands.hasNewVersion() && ChestCommands.getSettings().update_notifications && player.hasPermission(Permissions.UPDATE_NOTIFICATIONS)) {
|
||||||
event.getPlayer().sendMessage(ChestCommands.CHAT_PREFIX + "Found an update: " + ChestCommands.getNewVersion() + ". Download:");
|
player.sendMessage(ChestCommands.CHAT_PREFIX + "Found an update: " + ChestCommands.getNewVersion() + ". Download:");
|
||||||
event.getPlayer().sendMessage(ChatColor.DARK_GREEN + ">> " + ChatColor.GREEN + "http://dev.bukkit.org/bukkit-plugins/chest-commands");
|
player.sendMessage(ChatColor.DARK_GREEN + ">> " + ChatColor.GREEN + "http://dev.bukkit.org/bukkit-plugins/chest-commands");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.logging;
|
package me.filoghost.chestcommands.logging;
|
||||||
|
|
||||||
|
import me.filoghost.chestcommands.ChestCommands;
|
||||||
import me.filoghost.chestcommands.config.framework.mapped.MappedConfig;
|
import me.filoghost.chestcommands.config.framework.mapped.MappedConfig;
|
||||||
import me.filoghost.chestcommands.parsing.icon.IconSettings;
|
import me.filoghost.chestcommands.parsing.icon.IconSettings;
|
||||||
|
|
||||||
@ -26,7 +27,7 @@ public class ErrorMessages {
|
|||||||
public static final String readIOException = "I/O exception while reading file";
|
public static final String readIOException = "I/O exception while reading file";
|
||||||
public static final String createDefaultIOException = "I/O exception while creating default file";
|
public static final String createDefaultIOException = "I/O exception while creating default file";
|
||||||
public static final String writeDataIOException = "I/O exception while writing data to file";
|
public static final String writeDataIOException = "I/O exception while writing data to file";
|
||||||
public static final String createDataFolderIOException = "Plugin failed to load, couldn't create data folder";
|
public static final String createDataFolderIOException = "plugin failed to load, couldn't create data folder";
|
||||||
public static final String invalidYamlSyntax = "invalid YAML syntax";
|
public static final String invalidYamlSyntax = "invalid YAML syntax";
|
||||||
|
|
||||||
public static final String valueNotSet = "value is not set";
|
public static final String valueNotSet = "value is not set";
|
||||||
@ -202,8 +203,14 @@ public class ErrorMessages {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static String formatPath(Path path) {
|
private static String formatPath(Path path) {
|
||||||
return path.subpath(2, path.getNameCount()).toString(); // Remove "/plugins/ChestCommands" prefix
|
if (path.startsWith(ChestCommands.getDataFolderPath())) {
|
||||||
|
// Remove "/plugins/ChestCommands" prefix
|
||||||
|
return path.subpath(ChestCommands.getDataFolderPath().getNameCount(), path.getNameCount()).toString();
|
||||||
|
} else {
|
||||||
|
return path.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
public class ActionParser {
|
public class ActionParser {
|
||||||
|
|
||||||
private static final Map<Pattern, IconCommandFactory> actionsByPrefix = new HashMap<>();
|
private static final Map<Pattern, ActionFactory> actionsByPrefix = new HashMap<>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
actionsByPrefix.put(actionPattern("console:"), ConsoleCommandAction::new);
|
actionsByPrefix.put(actionPattern("console:"), ConsoleCommandAction::new);
|
||||||
@ -56,20 +56,20 @@ public class ActionParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Action parseAction(String input) {
|
public static Action parseAction(String input) {
|
||||||
for (Entry<Pattern, IconCommandFactory> entry : actionsByPrefix.entrySet()) {
|
for (Entry<Pattern, ActionFactory> entry : actionsByPrefix.entrySet()) {
|
||||||
Matcher matcher = entry.getKey().matcher(input);
|
Matcher matcher = entry.getKey().matcher(input);
|
||||||
if (matcher.find()) {
|
if (matcher.find()) {
|
||||||
// Remove the action prefix and trim the spaces
|
// Remove the action prefix and trim the spaces
|
||||||
String serializedAction = matcher.replaceFirst("").trim();
|
String serializedAction = matcher.replaceFirst("").trim();
|
||||||
return entry.getValue().create(ChestCommands.getCustomPlaceholders().replaceAll(serializedAction));
|
return entry.getValue().create(ChestCommands.getCustomPlaceholders().replacePlaceholders(serializedAction));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new PlayerCommandAction(ChestCommands.getCustomPlaceholders().replaceAll(input)); // Default action, no match found
|
return new PlayerCommandAction(ChestCommands.getCustomPlaceholders().replacePlaceholders(input)); // Default action, no match found
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private interface IconCommandFactory {
|
private interface ActionFactory {
|
||||||
|
|
||||||
Action create(String actionString);
|
Action create(String actionString);
|
||||||
|
|
||||||
|
@ -12,13 +12,11 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.action.Action;
|
import me.filoghost.chestcommands.action.Action;
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.ActionParser;
|
import me.filoghost.chestcommands.parsing.ActionParser;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -27,7 +25,7 @@ public class ActionsAttribute implements ApplicableIconAttribute {
|
|||||||
|
|
||||||
private final List<Action> actions;
|
private final List<Action> actions;
|
||||||
|
|
||||||
public ActionsAttribute(List<String> serializedActions, AttributeErrorCollector attributeErrorCollector) {
|
public ActionsAttribute(List<String> serializedActions, AttributeErrorHandler errorHandler) {
|
||||||
actions = new ArrayList<>();
|
actions = new ArrayList<>();
|
||||||
|
|
||||||
for (String serializedAction : serializedActions) {
|
for (String serializedAction : serializedActions) {
|
@ -12,19 +12,17 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.logging.ErrorMessages;
|
import me.filoghost.chestcommands.logging.ErrorMessages;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
|
|
||||||
public class AmountAttribute implements ApplicableIconAttribute {
|
public class AmountAttribute implements ApplicableIconAttribute {
|
||||||
|
|
||||||
private final int amount;
|
private final int amount;
|
||||||
|
|
||||||
public AmountAttribute(int amount, AttributeErrorCollector attributeErrorCollector) throws ParseException {
|
public AmountAttribute(int amount, AttributeErrorHandler errorHandler) throws ParseException {
|
||||||
if (amount < 0) {
|
if (amount < 0) {
|
||||||
throw new ParseException(ErrorMessages.Parsing.zeroOrPositive);
|
throw new ParseException(ErrorMessages.Parsing.zeroOrPositive);
|
||||||
}
|
}
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
|
|
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
|
|
||||||
|
public interface AttributeErrorHandler {
|
||||||
|
|
||||||
|
void onListElementError(String listElement, ParseException e);
|
||||||
|
|
||||||
|
}
|
@ -12,20 +12,18 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.ItemMetaParser;
|
import me.filoghost.chestcommands.parsing.ItemMetaParser;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
import org.bukkit.DyeColor;
|
import org.bukkit.DyeColor;
|
||||||
|
|
||||||
public class BannerColorAttribute implements ApplicableIconAttribute {
|
public class BannerColorAttribute implements ApplicableIconAttribute {
|
||||||
|
|
||||||
private final DyeColor dyeColor;
|
private final DyeColor dyeColor;
|
||||||
|
|
||||||
public BannerColorAttribute(String serializedDyeColor, AttributeErrorCollector attributeErrorCollector) throws ParseException {
|
public BannerColorAttribute(String serializedDyeColor, AttributeErrorHandler errorHandler) throws ParseException {
|
||||||
this.dyeColor = ItemMetaParser.parseDyeColor(serializedDyeColor);
|
this.dyeColor = ItemMetaParser.parseDyeColor(serializedDyeColor);
|
||||||
}
|
}
|
||||||
|
|
@ -12,13 +12,11 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.ItemMetaParser;
|
import me.filoghost.chestcommands.parsing.ItemMetaParser;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
import org.bukkit.block.banner.Pattern;
|
import org.bukkit.block.banner.Pattern;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -28,7 +26,7 @@ public class BannerPatternsAttribute implements ApplicableIconAttribute {
|
|||||||
|
|
||||||
private final List<Pattern> patterns;
|
private final List<Pattern> patterns;
|
||||||
|
|
||||||
public BannerPatternsAttribute(List<String> serializedPatterns, AttributeErrorCollector attributeErrorCollector) {
|
public BannerPatternsAttribute(List<String> serializedPatterns, AttributeErrorHandler errorHandler) {
|
||||||
patterns = new ArrayList<>();
|
patterns = new ArrayList<>();
|
||||||
|
|
||||||
for (String serializedPattern : serializedPatterns) {
|
for (String serializedPattern : serializedPatterns) {
|
||||||
@ -40,7 +38,7 @@ public class BannerPatternsAttribute implements ApplicableIconAttribute {
|
|||||||
Pattern pattern = ItemMetaParser.parseBannerPattern(serializedPattern);
|
Pattern pattern = ItemMetaParser.parseBannerPattern(serializedPattern);
|
||||||
patterns.add(pattern);
|
patterns.add(pattern);
|
||||||
} catch (ParseException e) {
|
} catch (ParseException e) {
|
||||||
attributeErrorCollector.addListElementError(serializedPattern, e);
|
errorHandler.onListElementError(serializedPattern, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -12,17 +12,15 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
|
|
||||||
public class ClickPermissionAttribute implements ApplicableIconAttribute {
|
public class ClickPermissionAttribute implements ApplicableIconAttribute {
|
||||||
|
|
||||||
private final String clickPermission;
|
private final String clickPermission;
|
||||||
|
|
||||||
public ClickPermissionAttribute(String clickPermission, AttributeErrorCollector attributeErrorCollector) {
|
public ClickPermissionAttribute(String clickPermission, AttributeErrorHandler errorHandler) {
|
||||||
this.clickPermission = clickPermission;
|
this.clickPermission = clickPermission;
|
||||||
}
|
}
|
||||||
|
|
@ -12,17 +12,15 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
|
|
||||||
public class ClickPermissionMessageAttribute implements ApplicableIconAttribute {
|
public class ClickPermissionMessageAttribute implements ApplicableIconAttribute {
|
||||||
|
|
||||||
private final String clickPermissionMessage;
|
private final String clickPermissionMessage;
|
||||||
|
|
||||||
public ClickPermissionMessageAttribute(String clickPermissionMessage, AttributeErrorCollector attributeErrorCollector) {
|
public ClickPermissionMessageAttribute(String clickPermissionMessage, AttributeErrorHandler errorHandler) {
|
||||||
this.clickPermissionMessage = clickPermissionMessage;
|
this.clickPermissionMessage = clickPermissionMessage;
|
||||||
}
|
}
|
||||||
|
|
@ -12,17 +12,15 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
|
|
||||||
public class DurabilityAttribute implements ApplicableIconAttribute {
|
public class DurabilityAttribute implements ApplicableIconAttribute {
|
||||||
|
|
||||||
private final short durability;
|
private final short durability;
|
||||||
|
|
||||||
public DurabilityAttribute(short durability, AttributeErrorCollector attributeErrorCollector) {
|
public DurabilityAttribute(short durability, AttributeErrorHandler errorHandler) {
|
||||||
this.durability = durability;
|
this.durability = durability;
|
||||||
}
|
}
|
||||||
|
|
@ -12,13 +12,11 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.EnchantmentParser;
|
import me.filoghost.chestcommands.parsing.EnchantmentParser;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -29,7 +27,7 @@ public class EnchantmentsAttribute implements ApplicableIconAttribute {
|
|||||||
|
|
||||||
private final Map<Enchantment, Integer> enchantments;
|
private final Map<Enchantment, Integer> enchantments;
|
||||||
|
|
||||||
public EnchantmentsAttribute(List<String> serializedEnchantments, AttributeErrorCollector attributeErrorCollector) {
|
public EnchantmentsAttribute(List<String> serializedEnchantments, AttributeErrorHandler errorHandler) {
|
||||||
enchantments = new HashMap<>();
|
enchantments = new HashMap<>();
|
||||||
|
|
||||||
for (String serializedEnchantment : serializedEnchantments) {
|
for (String serializedEnchantment : serializedEnchantments) {
|
||||||
@ -41,7 +39,7 @@ public class EnchantmentsAttribute implements ApplicableIconAttribute {
|
|||||||
EnchantmentParser.EnchantmentDetails enchantment = EnchantmentParser.parseEnchantment(serializedEnchantment);
|
EnchantmentParser.EnchantmentDetails enchantment = EnchantmentParser.parseEnchantment(serializedEnchantment);
|
||||||
enchantments.put(enchantment.getEnchantment(), enchantment.getLevel());
|
enchantments.put(enchantment.getEnchantment(), enchantment.getLevel());
|
||||||
} catch (ParseException e) {
|
} catch (ParseException e) {
|
||||||
attributeErrorCollector.addListElementError(serializedEnchantment, e);
|
errorHandler.onListElementError(serializedEnchantment, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,19 +12,17 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.logging.ErrorMessages;
|
import me.filoghost.chestcommands.logging.ErrorMessages;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
|
|
||||||
public class ExpLevelsAttribute implements ApplicableIconAttribute {
|
public class ExpLevelsAttribute implements ApplicableIconAttribute {
|
||||||
|
|
||||||
private final int expLevels;
|
private final int expLevels;
|
||||||
|
|
||||||
public ExpLevelsAttribute(int expLevels, AttributeErrorCollector attributeErrorCollector) throws ParseException {
|
public ExpLevelsAttribute(int expLevels, AttributeErrorHandler errorHandler) throws ParseException {
|
||||||
if (expLevels < 0) {
|
if (expLevels < 0) {
|
||||||
throw new ParseException(ErrorMessages.Parsing.zeroOrPositive);
|
throw new ParseException(ErrorMessages.Parsing.zeroOrPositive);
|
||||||
}
|
}
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
public interface IconAttribute {
|
public interface IconAttribute {
|
||||||
|
|
@ -12,18 +12,16 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.api.ClickResult;
|
import me.filoghost.chestcommands.api.ClickResult;
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
|
|
||||||
public class KeepOpenAttribute implements ApplicableIconAttribute {
|
public class KeepOpenAttribute implements ApplicableIconAttribute {
|
||||||
|
|
||||||
private final ClickResult clickResult;
|
private final ClickResult clickResult;
|
||||||
|
|
||||||
public KeepOpenAttribute(boolean keepOpen, AttributeErrorCollector attributeErrorCollector) {
|
public KeepOpenAttribute(boolean keepOpen, AttributeErrorHandler errorHandler) {
|
||||||
if (keepOpen) {
|
if (keepOpen) {
|
||||||
this.clickResult = ClickResult.KEEP_OPEN;
|
this.clickResult = ClickResult.KEEP_OPEN;
|
||||||
} else {
|
} else {
|
@ -12,20 +12,18 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.ItemMetaParser;
|
import me.filoghost.chestcommands.parsing.ItemMetaParser;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
|
|
||||||
public class LeatherColorAttribute implements ApplicableIconAttribute {
|
public class LeatherColorAttribute implements ApplicableIconAttribute {
|
||||||
|
|
||||||
private final Color color;
|
private final Color color;
|
||||||
|
|
||||||
public LeatherColorAttribute(String serializedColor, AttributeErrorCollector attributeErrorCollector) throws ParseException {
|
public LeatherColorAttribute(String serializedColor, AttributeErrorHandler errorHandler) throws ParseException {
|
||||||
this.color = ItemMetaParser.parseRGBColor(serializedColor);
|
this.color = ItemMetaParser.parseRGBColor(serializedColor);
|
||||||
}
|
}
|
||||||
|
|
@ -12,12 +12,10 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.ChestCommands;
|
import me.filoghost.chestcommands.ChestCommands;
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
import me.filoghost.chestcommands.util.Colors;
|
import me.filoghost.chestcommands.util.Colors;
|
||||||
import me.filoghost.chestcommands.util.collection.CollectionUtils;
|
import me.filoghost.chestcommands.util.collection.CollectionUtils;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -28,8 +26,8 @@ public class LoreAttribute implements ApplicableIconAttribute {
|
|||||||
|
|
||||||
private final List<String> lore;
|
private final List<String> lore;
|
||||||
|
|
||||||
public LoreAttribute(List<String> lore, AttributeErrorCollector attributeErrorCollector) {
|
public LoreAttribute(List<String> lore, AttributeErrorHandler errorHandler) {
|
||||||
this.lore = ChestCommands.getCustomPlaceholders().replaceAll(colorLore(lore));
|
this.lore = ChestCommands.getCustomPlaceholders().replacePlaceholders(colorLore(lore));
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> colorLore(List<String> input) {
|
private List<String> colorLore(List<String> input) {
|
@ -12,13 +12,11 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.logging.ErrorMessages;
|
import me.filoghost.chestcommands.logging.ErrorMessages;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
import me.filoghost.chestcommands.util.MaterialsHelper;
|
import me.filoghost.chestcommands.util.MaterialsHelper;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
@ -28,7 +26,7 @@ public class MaterialAttribute implements ApplicableIconAttribute {
|
|||||||
|
|
||||||
private final Material material;
|
private final Material material;
|
||||||
|
|
||||||
public MaterialAttribute(String serializedMaterial, AttributeErrorCollector attributeErrorCollector) throws ParseException {
|
public MaterialAttribute(String serializedMaterial, AttributeErrorHandler errorHandler) throws ParseException {
|
||||||
Optional<Material> material = MaterialsHelper.matchMaterial(serializedMaterial);
|
Optional<Material> material = MaterialsHelper.matchMaterial(serializedMaterial);
|
||||||
|
|
||||||
if (!material.isPresent() || MaterialsHelper.isAir(material.get())) {
|
if (!material.isPresent() || MaterialsHelper.isAir(material.get())) {
|
@ -12,12 +12,10 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
import me.filoghost.chestcommands.util.nbt.parser.MojangsonParseException;
|
import me.filoghost.chestcommands.util.nbt.parser.MojangsonParseException;
|
||||||
import me.filoghost.chestcommands.util.nbt.parser.MojangsonParser;
|
import me.filoghost.chestcommands.util.nbt.parser.MojangsonParser;
|
||||||
|
|
||||||
@ -25,7 +23,7 @@ public class NBTDataAttribute implements ApplicableIconAttribute {
|
|||||||
|
|
||||||
private final String nbtData;
|
private final String nbtData;
|
||||||
|
|
||||||
public NBTDataAttribute(String nbtData, AttributeErrorCollector attributeErrorCollector) throws ParseException {
|
public NBTDataAttribute(String nbtData, AttributeErrorHandler errorHandler) throws ParseException {
|
||||||
try {
|
try {
|
||||||
// Check that NBT syntax is valid before applying it to the icon
|
// Check that NBT syntax is valid before applying it to the icon
|
||||||
MojangsonParser.parse(nbtData);
|
MojangsonParser.parse(nbtData);
|
@ -12,12 +12,10 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.ChestCommands;
|
import me.filoghost.chestcommands.ChestCommands;
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
import me.filoghost.chestcommands.util.Colors;
|
import me.filoghost.chestcommands.util.Colors;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
|
||||||
@ -25,8 +23,8 @@ public class NameAttribute implements ApplicableIconAttribute {
|
|||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
public NameAttribute(String name, AttributeErrorCollector attributeErrorCollector) {
|
public NameAttribute(String name, AttributeErrorHandler errorHandler) {
|
||||||
this.name = ChestCommands.getCustomPlaceholders().replaceAll(colorName(name));
|
this.name = ChestCommands.getCustomPlaceholders().replacePlaceholders(colorName(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
private String colorName(String input) {
|
private String colorName(String input) {
|
@ -12,16 +12,13 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.IconAttribute;
|
|
||||||
|
|
||||||
public class PositionAttribute implements IconAttribute {
|
public class PositionAttribute implements IconAttribute {
|
||||||
|
|
||||||
private final int position;
|
private final int position;
|
||||||
|
|
||||||
public PositionAttribute(int position, AttributeErrorCollector attributeErrorCollector) {
|
public PositionAttribute(int position, AttributeErrorHandler errorHandler) {
|
||||||
this.position = position;
|
this.position = position;
|
||||||
}
|
}
|
||||||
|
|
@ -12,19 +12,17 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.logging.ErrorMessages;
|
import me.filoghost.chestcommands.logging.ErrorMessages;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
|
|
||||||
public class PriceAttribute implements ApplicableIconAttribute {
|
public class PriceAttribute implements ApplicableIconAttribute {
|
||||||
|
|
||||||
private final double price;
|
private final double price;
|
||||||
|
|
||||||
public PriceAttribute(double price, AttributeErrorCollector attributeErrorCollector) throws ParseException {
|
public PriceAttribute(double price, AttributeErrorHandler errorHandler) throws ParseException {
|
||||||
if (price < 0) {
|
if (price < 0) {
|
||||||
throw new ParseException(ErrorMessages.Parsing.zeroOrPositive);
|
throw new ParseException(ErrorMessages.Parsing.zeroOrPositive);
|
||||||
}
|
}
|
@ -12,14 +12,12 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.icon.requirement.RequiredItem;
|
import me.filoghost.chestcommands.icon.requirement.RequiredItem;
|
||||||
import me.filoghost.chestcommands.parsing.ItemStackParser;
|
import me.filoghost.chestcommands.parsing.ItemStackParser;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -28,7 +26,7 @@ public class RequiredItemsAttribute implements ApplicableIconAttribute {
|
|||||||
|
|
||||||
private final List<RequiredItem> requiredItems;
|
private final List<RequiredItem> requiredItems;
|
||||||
|
|
||||||
public RequiredItemsAttribute(List<String> serializedRequiredItems, AttributeErrorCollector attributeErrorCollector) {
|
public RequiredItemsAttribute(List<String> serializedRequiredItems, AttributeErrorHandler errorHandler) {
|
||||||
requiredItems = new ArrayList<>();
|
requiredItems = new ArrayList<>();
|
||||||
|
|
||||||
for (String serializedItem : serializedRequiredItems) {
|
for (String serializedItem : serializedRequiredItems) {
|
||||||
@ -40,7 +38,7 @@ public class RequiredItemsAttribute implements ApplicableIconAttribute {
|
|||||||
}
|
}
|
||||||
requiredItems.add(requiredItem);
|
requiredItems.add(requiredItem);
|
||||||
} catch (ParseException e) {
|
} catch (ParseException e) {
|
||||||
attributeErrorCollector.addListElementError(serializedItem, e);
|
errorHandler.onListElementError(serializedItem, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,17 +12,15 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
|
|
||||||
public class SkullOwnerAttribute implements ApplicableIconAttribute {
|
public class SkullOwnerAttribute implements ApplicableIconAttribute {
|
||||||
|
|
||||||
private final String skullOwner;
|
private final String skullOwner;
|
||||||
|
|
||||||
public SkullOwnerAttribute(String skullOwner, AttributeErrorCollector attributeErrorCollector) {
|
public SkullOwnerAttribute(String skullOwner, AttributeErrorHandler errorHandler) {
|
||||||
this.skullOwner = skullOwner;
|
this.skullOwner = skullOwner;
|
||||||
}
|
}
|
||||||
|
|
@ -12,17 +12,15 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.parsing.icon.attributes;
|
package me.filoghost.chestcommands.parsing.attribute;
|
||||||
|
|
||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.parsing.icon.ApplicableIconAttribute;
|
|
||||||
import me.filoghost.chestcommands.parsing.icon.AttributeErrorCollector;
|
|
||||||
|
|
||||||
public class ViewPermissionAttribute implements ApplicableIconAttribute {
|
public class ViewPermissionAttribute implements ApplicableIconAttribute {
|
||||||
|
|
||||||
private final String viewPermission;
|
private final String viewPermission;
|
||||||
|
|
||||||
public ViewPermissionAttribute(String viewPermission, AttributeErrorCollector attributeErrorCollector) {
|
public ViewPermissionAttribute(String viewPermission, AttributeErrorHandler errorHandler) {
|
||||||
this.viewPermission = viewPermission;
|
this.viewPermission = viewPermission;
|
||||||
}
|
}
|
||||||
|
|
@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package me.filoghost.chestcommands.parsing.icon;
|
|
||||||
|
|
||||||
import me.filoghost.chestcommands.logging.ErrorMessages;
|
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
|
||||||
import me.filoghost.chestcommands.util.logging.ErrorCollector;
|
|
||||||
|
|
||||||
public class AttributeErrorCollector {
|
|
||||||
|
|
||||||
private final ErrorCollector errorCollector;
|
|
||||||
private final IconSettings iconSettings;
|
|
||||||
private final String attributeName;
|
|
||||||
|
|
||||||
public AttributeErrorCollector(ErrorCollector errorCollector, IconSettings iconSettings, String attributeName) {
|
|
||||||
this.errorCollector = errorCollector;
|
|
||||||
this.iconSettings = iconSettings;
|
|
||||||
this.attributeName = attributeName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addListElementError(String listElement, ParseException e) {
|
|
||||||
errorCollector.add(ErrorMessages.Menu.invalidAttributeListElement(iconSettings, attributeName, listElement), e);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -19,26 +19,29 @@ import me.filoghost.chestcommands.config.framework.exception.ConfigValueExceptio
|
|||||||
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
import me.filoghost.chestcommands.icon.InternalConfigurableIcon;
|
||||||
import me.filoghost.chestcommands.logging.ErrorMessages;
|
import me.filoghost.chestcommands.logging.ErrorMessages;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.ActionsAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.ActionsAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.AmountAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.AmountAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.BannerColorAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.ApplicableIconAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.BannerPatternsAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.AttributeErrorHandler;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.ClickPermissionAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.BannerColorAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.ClickPermissionMessageAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.BannerPatternsAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.DurabilityAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.ClickPermissionAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.EnchantmentsAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.ClickPermissionMessageAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.ExpLevelsAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.DurabilityAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.KeepOpenAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.EnchantmentsAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.LeatherColorAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.ExpLevelsAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.LoreAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.IconAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.MaterialAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.KeepOpenAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.NBTDataAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.LeatherColorAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.NameAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.LoreAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.PositionAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.MaterialAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.PriceAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.NBTDataAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.RequiredItemsAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.NameAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.SkullOwnerAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.PositionAttribute;
|
||||||
import me.filoghost.chestcommands.parsing.icon.attributes.ViewPermissionAttribute;
|
import me.filoghost.chestcommands.parsing.attribute.PriceAttribute;
|
||||||
|
import me.filoghost.chestcommands.parsing.attribute.RequiredItemsAttribute;
|
||||||
|
import me.filoghost.chestcommands.parsing.attribute.SkullOwnerAttribute;
|
||||||
|
import me.filoghost.chestcommands.parsing.attribute.ViewPermissionAttribute;
|
||||||
import me.filoghost.chestcommands.util.Preconditions;
|
import me.filoghost.chestcommands.util.Preconditions;
|
||||||
import me.filoghost.chestcommands.util.logging.ErrorCollector;
|
import me.filoghost.chestcommands.util.logging.ErrorCollector;
|
||||||
|
|
||||||
@ -58,7 +61,7 @@ public class IconSettings {
|
|||||||
private MaterialAttribute materialAttribute;
|
private MaterialAttribute materialAttribute;
|
||||||
private final List<ApplicableIconAttribute> applicableAttributes;
|
private final List<ApplicableIconAttribute> applicableAttributes;
|
||||||
|
|
||||||
public static final Map<String, IconNodeHandler> iconNodeHandlers = new HashMap<>();
|
public static final Map<String, AttributeParser> iconNodeHandlers = new HashMap<>();
|
||||||
static {
|
static {
|
||||||
addIconNodeHandler(IconSettingsNode.POSITION_X, ValueExtractor.INT, PositionAttribute::new, IconSettings::setPositionX);
|
addIconNodeHandler(IconSettingsNode.POSITION_X, ValueExtractor.INT, PositionAttribute::new, IconSettings::setPositionX);
|
||||||
addIconNodeHandler(IconSettingsNode.POSITION_Y, ValueExtractor.INT, PositionAttribute::new, IconSettings::setPositionY);
|
addIconNodeHandler(IconSettingsNode.POSITION_Y, ValueExtractor.INT, PositionAttribute::new, IconSettings::setPositionY);
|
||||||
@ -141,7 +144,7 @@ public class IconSettings {
|
|||||||
String node,
|
String node,
|
||||||
ValueExtractor<V> valueExtractor,
|
ValueExtractor<V> valueExtractor,
|
||||||
AttributeFactory<V, A> attributeFactory,
|
AttributeFactory<V, A> attributeFactory,
|
||||||
AttributeCallback<A> callback) {
|
AttributeApplier<A> callback) {
|
||||||
addIconNodeHandler(node, (iconSettings, config, configNode, parseContext) -> {
|
addIconNodeHandler(node, (iconSettings, config, configNode, parseContext) -> {
|
||||||
V value = valueExtractor.getValue(config, configNode);
|
V value = valueExtractor.getValue(config, configNode);
|
||||||
A iconAttribute = attributeFactory.create(value, parseContext);
|
A iconAttribute = attributeFactory.create(value, parseContext);
|
||||||
@ -149,7 +152,7 @@ public class IconSettings {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addIconNodeHandler(String node, IconNodeHandler iconNodeHandler) {
|
private static void addIconNodeHandler(String node, AttributeParser iconNodeHandler) {
|
||||||
Preconditions.checkState(!iconNodeHandlers.containsKey(node), "Handler already exists for attribute " + node);
|
Preconditions.checkState(!iconNodeHandlers.containsKey(node), "Handler already exists for attribute " + node);
|
||||||
iconNodeHandlers.put(node, iconNodeHandler);
|
iconNodeHandlers.put(node, iconNodeHandler);
|
||||||
}
|
}
|
||||||
@ -161,22 +164,24 @@ public class IconSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void loadFrom(ConfigSection config, ErrorCollector errorCollector) {
|
public void loadFrom(ConfigSection config, ErrorCollector errorCollector) {
|
||||||
for (String attributeKey : config.getKeys(false)) {
|
for (String attributeName : config.getKeys(false)) {
|
||||||
try {
|
try {
|
||||||
IconNodeHandler nodeHandler = iconNodeHandlers.get(attributeKey);
|
AttributeParser attributeParser = iconNodeHandlers.get(attributeName);
|
||||||
if (nodeHandler == null) {
|
if (attributeParser == null) {
|
||||||
throw new ParseException(ErrorMessages.Parsing.unknownAttribute);
|
throw new ParseException(ErrorMessages.Parsing.unknownAttribute);
|
||||||
}
|
}
|
||||||
|
|
||||||
AttributeErrorCollector attributeErrorCollector = new AttributeErrorCollector(errorCollector, this, attributeKey);
|
attributeParser.parse(this, config, attributeName, (String listElement, ParseException e) -> {
|
||||||
nodeHandler.handle(this, config, attributeKey, attributeErrorCollector);
|
errorCollector.add(ErrorMessages.Menu.invalidAttributeListElement(this, attributeName, listElement), e);
|
||||||
|
});
|
||||||
|
|
||||||
} catch (ParseException | ConfigValueException e) {
|
} catch (ParseException | ConfigValueException e) {
|
||||||
errorCollector.add(ErrorMessages.Menu.invalidAttribute(this, attributeKey), e);
|
errorCollector.add(ErrorMessages.Menu.invalidAttribute(this, attributeName), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private interface ValueExtractor<V> {
|
private interface ValueExtractor<V> {
|
||||||
|
|
||||||
V getValue(ConfigSection config, String key) throws ConfigValueException;
|
V getValue(ConfigSection config, String key) throws ConfigValueException;
|
||||||
@ -192,21 +197,20 @@ public class IconSettings {
|
|||||||
|
|
||||||
private interface AttributeFactory<V, A extends IconAttribute> {
|
private interface AttributeFactory<V, A extends IconAttribute> {
|
||||||
|
|
||||||
A create(V value, AttributeErrorCollector attributeErrorCollector) throws ParseException;
|
A create(V value, AttributeErrorHandler errorHandler) throws ParseException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private interface AttributeCallback<A extends IconAttribute> {
|
private interface AttributeApplier<A extends IconAttribute> {
|
||||||
|
|
||||||
void apply(IconSettings iconSettings, A attribute);
|
void apply(IconSettings iconSettings, A attribute);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private interface IconNodeHandler {
|
private interface AttributeParser {
|
||||||
|
|
||||||
void handle(IconSettings iconSettings, ConfigSection config, String node, AttributeErrorCollector attributeErrorCollector) throws ParseException, ConfigValueException;
|
void parse(IconSettings iconSettings, ConfigSection config, String node, AttributeErrorHandler errorHandler) throws ParseException, ConfigValueException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -39,22 +39,22 @@ public enum DefaultPlaceholders implements Placeholder {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
private final String text;
|
private final String placeholderText;
|
||||||
private final Function<Player, String> getReplacementFunction;
|
private final Function<Player, String> placeholderReplacer;
|
||||||
|
|
||||||
DefaultPlaceholders(String text, Function<Player, String> getReplacementFunction) {
|
DefaultPlaceholders(String placeholderText, Function<Player, String> placeholderReplacer) {
|
||||||
this.text = text;
|
this.placeholderText = placeholderText;
|
||||||
this.getReplacementFunction = getReplacementFunction;
|
this.placeholderReplacer = placeholderReplacer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPlaceholderText() {
|
public String getPlaceholderText() {
|
||||||
return text;
|
return placeholderText;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getReplacementText(Player player) {
|
public String getReplacementText(Player player) {
|
||||||
return getReplacementFunction.apply(player);
|
return placeholderReplacer.apply(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user