diff --git a/pom.xml b/pom.xml index 7016046..a6edb0b 100644 --- a/pom.xml +++ b/pom.xml @@ -18,10 +18,6 @@ papermc https://repo.papermc.io/repository/maven-public/ - - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - placeholderapi https://repo.extendedclip.com/content/repositories/placeholderapi/ @@ -64,12 +60,6 @@ 1.21.11-R0.1-SNAPSHOT provided - - org.spigotmc - spigot-api - 1.21.11-R0.1-SNAPSHOT - provided - me.clip placeholderapi @@ -117,6 +107,12 @@ 1.26.0 provided + + com.zaxxer + HikariCP + 4.0.3 + compile + diff --git a/src/main/java/ce/ajneb97/ConditionalEvents.java b/src/main/java/ce/ajneb97/ConditionalEvents.java index 8cb1118..4db2dcd 100644 --- a/src/main/java/ce/ajneb97/ConditionalEvents.java +++ b/src/main/java/ce/ajneb97/ConditionalEvents.java @@ -1,8 +1,8 @@ package ce.ajneb97; - import ce.ajneb97.api.ConditionalEventsAPI; import ce.ajneb97.api.ExpansionCE; +import ce.ajneb97.command.MainCommand; import ce.ajneb97.configs.ConfigsManager; import ce.ajneb97.libs.armorequipevent.ArmorListener; import ce.ajneb97.libs.itemselectevent.ItemSelectListener; @@ -10,256 +10,302 @@ import ce.ajneb97.libs.offhandevent.OffHandListener; import ce.ajneb97.listeners.*; import ce.ajneb97.listeners.dependencies.CitizensListener; -import ce.ajneb97.managers.dependencies.Metrics; import ce.ajneb97.listeners.dependencies.WGRegionEventsListener; -import ce.ajneb97.managers.*; -import ce.ajneb97.managers.commandregister.CommandRegisterManager; +import ce.ajneb97.manager.*; +import ce.ajneb97.manager.commandregister.CommandRegisterManager; +import ce.ajneb97.manager.data.FilePlayerDataManager; +import ce.ajneb97.manager.data.PlayerDataManager; +import ce.ajneb97.manager.data.mysql.MySQLPlayerDataManager; +import ce.ajneb97.manager.dependencies.Metrics; import ce.ajneb97.model.EventType; import ce.ajneb97.model.internal.ConditionEvent; import ce.ajneb97.model.internal.UpdateCheckerResult; +import ce.ajneb97.tasks.PlayOneMinuteTask; import ce.ajneb97.tasks.PlayerDataSaveTask; import ce.ajneb97.utils.ServerVersion; import org.bukkit.Bukkit; +import org.bukkit.command.PluginCommand; +import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.event.HandlerList; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; + import java.util.ArrayList; +@SuppressWarnings("deprecation") public class ConditionalEvents extends JavaPlugin { - - PluginDescriptionFile pdfFile = getDescription(); - public String version = pdfFile.getVersion(); - public static ServerVersion serverVersion; - public static String prefix; - - private EventsManager eventsManager; - private DependencyManager dependencyManager; - private PlayerManager playerManager; - private ConfigsManager configsManager; - private DebugManager debugManager; - private BungeeMessagingManager bungeeMessagingManager; - private MessagesManager messagesManager; - private VerifyManager verifyManager; - private UpdateCheckerManager updateCheckerManager; - private CommandRegisterManager commandRegisterManager; - private SavedItemsManager savedItemsManager; - private APIManager apiManager; - private InterruptEventManager interruptEventManager; - - private PlayerDataSaveTask playerDataSaveTask; - - - public void onEnable(){ - setVersion(); - setPrefix(); - - this.eventsManager = new EventsManager(this); - this.dependencyManager = new DependencyManager(this); - this.bungeeMessagingManager = new BungeeMessagingManager(this); - this.debugManager = new DebugManager(this); - this.playerManager = new PlayerManager(this); - this.savedItemsManager = new SavedItemsManager(this); - this.apiManager = new APIManager(this); - this.interruptEventManager = new InterruptEventManager(this); - this.configsManager = new ConfigsManager(this); - this.configsManager.configure(); - - registerEvents(); - registerCommands(); - - this.verifyManager = new VerifyManager(this); - this.verifyManager.verifyEvents(); - - this.commandRegisterManager = new CommandRegisterManager(this); - commandRegisterManager.registerCommands(); - - - - reloadPlayerDataSaveTask(); - - ConditionalEventsAPI api = new ConditionalEventsAPI(this); - if(getServer().getPluginManager().getPlugin("PlaceholderAPI") != null){ - new ExpansionCE(this).register(); - } - Metrics metrics = new Metrics(this, 19371); - - Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage(prefix+" &eHas been enabled! &fVersion: "+version)); - Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage(prefix+" &eThanks for using my plugin! &f~Ajneb97")); - - updateCheckerManager = new UpdateCheckerManager(version); - if(configsManager.getMainConfigManager().isUpdateNotifications()){ - updateMessage(updateCheckerManager.check()); - } - - new ConditionEvent(this, null, null, EventType.SERVER_START, null) - .checkEvent(); - } - - public void onDisable(){ - new ConditionEvent(this, null, null, EventType.SERVER_STOP, null) - .checkEvent(); - this.configsManager.getPlayerConfigsManager().saveConfigs(); - Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage(prefix+" &eHas been disabled! &fVersion: "+version)); - } - - public void registerEvents() { - PluginManager pm = getServer().getPluginManager(); - pm.registerEvents(new PlayerEventsListener(this), this); - pm.registerEvents(new ItemEventsListener(this), this); - pm.registerEvents(new ArmorListener(new ArrayList<>()), this); - pm.registerEvents(new ItemSelectListener(this), this); - pm.registerEvents(new OtherEventsListener(this), this); - pm.registerEvents(new CustomEventListener(this), this); - - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_9_R1)){ - pm.registerEvents(new ItemSelectListenerNew(), this); - pm.registerEvents(new PlayerEventsListenerNew1_9(this), this); - pm.registerEvents(new OffHandListener(this), this); - } - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_16_R1)){ - pm.registerEvents(new PlayerEventsListenerNew1_16(this), this); - } - - if(dependencyManager.isCitizens()){ - pm.registerEvents(new CitizensListener(this), this); - } - if(dependencyManager.isWorldGuardEvents()){ - pm.registerEvents(new WGRegionEventsListener(this), this); - } - } - - public void setPrefix(){ - prefix = MessagesManager.getLegacyColoredMessage("&4[&bConditionalEvents&4]"); - } - - public void setVersion(){ - String packageName = Bukkit.getServer().getClass().getPackage().getName(); - String bukkitVersion = Bukkit.getServer().getBukkitVersion().split("-")[0]; - switch(bukkitVersion){ - case "1.20.5": - case "1.20.6": - serverVersion = ServerVersion.v1_20_R4; - break; - case "1.21": - case "1.21.1": - serverVersion = ServerVersion.v1_21_R1; - break; - case "1.21.2": - case "1.21.3": - serverVersion = ServerVersion.v1_21_R2; - break; - case "1.21.4": - serverVersion = ServerVersion.v1_21_R3; - break; - case "1.21.5": - serverVersion = ServerVersion.v1_21_R4; - break; - case "1.21.6": - case "1.21.7": - case "1.21.8": - serverVersion = ServerVersion.v1_21_R5; - break; - case "1.21.9": - case "1.21.10": - serverVersion = ServerVersion.v1_21_R6; - break; - case "1.21.11": - serverVersion = ServerVersion.v1_21_R7; - break; - default: - try{ - serverVersion = ServerVersion.valueOf(packageName.replace("org.bukkit.craftbukkit.", "")); - }catch(Exception e){ - serverVersion = ServerVersion.v1_21_R7; - } - } - } - - public void reloadEvents(){ - HandlerList.unregisterAll(this); - registerEvents(); - } - - public void reloadPlayerDataSaveTask() { - if(playerDataSaveTask != null) { - playerDataSaveTask.end(); - } - playerDataSaveTask = new PlayerDataSaveTask(this); - playerDataSaveTask.start(configsManager.getMainConfigManager().getConfig().getInt("Config.data_save_time")); - } - - public void registerCommands(){ - this.getCommand("conditionalevents").setExecutor(new MainCommand(this)); - } - - public EventsManager getEventsManager() { - return eventsManager; - } - - public DependencyManager getDependencyManager() { - return dependencyManager; - } - - public ConfigsManager getConfigsManager() { - return configsManager; - } - - public DebugManager getDebugManager() { - return debugManager; - } - - public BungeeMessagingManager getBungeeMessagingManager() { - return bungeeMessagingManager; - } - - public PlayerManager getPlayerManager() { - return playerManager; - } - - public MessagesManager getMessagesManager() { - return messagesManager; - } - - public void setMessagesManager(MessagesManager messagesManager) { - this.messagesManager = messagesManager; - } - - public VerifyManager getVerifyManager() { - return verifyManager; - } - - public UpdateCheckerManager getUpdateCheckerManager() { - return updateCheckerManager; - } - - public CommandRegisterManager getCommandRegisterManager() { - return commandRegisterManager; - } - - public APIManager getApiManager() { - return apiManager; - } - - public SavedItemsManager getSavedItemsManager() { - return savedItemsManager; - } - - public InterruptEventManager getInterruptEventManager() { - return interruptEventManager; - } - - public void updateMessage(UpdateCheckerResult result){ - if(!result.isError()){ - String latestVersion = result.getLatestVersion(); - if(latestVersion != null){ - Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage("&cThere is a new version available. &e(&7"+latestVersion+"&e)")); - Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage("&cYou can download it at: &fhttps://modrinth.com/plugin/conditionalevents")); - } - }else{ - Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage(prefix+" &cError while checking update.")); - } - - } + PluginDescriptionFile pdfFile = getDescription(); + public String version = pdfFile.getVersion(); + public static ServerVersion serverVersion; + public static String prefix; + private EventsManager eventsManager; + private DependencyManager dependencyManager; + private PlayerManager playerManager; + private ConfigsManager configsManager; + private PlayerDataManager playerDataManager; + private DebugManager debugManager; + private BungeeMessagingManager bungeeMessagingManager; + private MessagesManager messagesManager; + private VerifyManager verifyManager; + private UpdateCheckerManager updateCheckerManager; + private SavedItemsManager savedItemsManager; + private APIManager apiManager; + private InterruptEventManager interruptEventManager; + private PlayerDataSaveTask playerDataSaveTask; + private PlayOneMinuteTask playOneMinuteTask; + public final boolean isFolia = checkFolia(); + + public void onEnable() { + setVersion(); + setPrefix(); + + this.eventsManager = new EventsManager(this); + this.dependencyManager = new DependencyManager(this); + this.bungeeMessagingManager = new BungeeMessagingManager(this); + this.debugManager = new DebugManager(); + this.playerManager = new PlayerManager(this); + this.savedItemsManager = new SavedItemsManager(this); + this.apiManager = new APIManager(this); + this.interruptEventManager = new InterruptEventManager(); + this.configsManager = new ConfigsManager(this); + this.configsManager.configure(); + + FileConfiguration mainConfig = configsManager.getMainConfigManager().getConfig(); + if (mainConfig.getBoolean("Config.mysql_database.enabled")) { + MySQLPlayerDataManager mysqlManager = new MySQLPlayerDataManager(this); + this.playerDataManager = mysqlManager; + + if (mainConfig.getBoolean("Config.mysql_database.migrate")) { + getLogger().info("Starting MySQL migration..."); + mysqlManager.migrate(configsManager.getPlayerConfigsManager()).thenAccept(count -> { + getLogger().info("Successfully migrated " + count + " players to MySQL."); + mainConfig.set("Config.mysql_database.migrate", false); + configsManager.getMainConfigManager().saveConfig(); + }).exceptionally(ex -> { + getLogger().severe("Error during MySQL migration: " + ex.getMessage()); + return null; + }); + } + } else { + this.playerDataManager = new FilePlayerDataManager(configsManager.getPlayerConfigsManager()); + } + + registerEvents(); + registerCommands(); + + this.verifyManager = new VerifyManager(this); + this.verifyManager.verifyEvents(); + + CommandRegisterManager commandRegisterManager = new CommandRegisterManager(this); + commandRegisterManager.registerCommands(); + + reloadPlayerDataSaveTask(); + reloadPlayOneMinuteTask(); + + ConditionalEventsAPI.init(this); + + if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { + new ExpansionCE(this).register(); + } + + new Metrics(this, 19371); + + Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage(prefix + " &eHas been enabled! &fVersion: " + version)); + Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage(prefix + " &eThanks for using my plugin! &f~Ajneb97")); + + updateCheckerManager = new UpdateCheckerManager(version); + if (configsManager.getMainConfigManager().isUpdateNotifications()) { + updateMessage(updateCheckerManager.check()); + } + + new ConditionEvent(this, null, null, EventType.SERVER_START, null).checkEvent(); + } + + public void onDisable() { + new ConditionEvent(this, null, null, EventType.SERVER_STOP, null).checkEvent(); + + playerDataManager.saveAllData(); + + if (playerDataManager instanceof MySQLPlayerDataManager) { + ((MySQLPlayerDataManager) playerDataManager).close(); + } + + Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage(prefix + " &eHas been disabled! &fVersion: " + version)); + } + + public void registerEvents() { + PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(new PlayerEventsListener(this), this); + pm.registerEvents(new ItemEventsListener(this), this); + pm.registerEvents(new ArmorListener(new ArrayList<>()), this); + pm.registerEvents(new ItemSelectListener(this), this); + pm.registerEvents(new OtherEventsListener(this), this); + pm.registerEvents(new CustomEventListener(this), this); + + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_9_R1)) { + pm.registerEvents(new ItemSelectListenerNew(), this); + pm.registerEvents(new PlayerEventsListenerNew1_9(this), this); + pm.registerEvents(new OffHandListener(), this); + } + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_16_R1)) { + pm.registerEvents(new PlayerEventsListenerNew1_16(this), this); + } + + if (dependencyManager.isCitizens()) { + pm.registerEvents(new CitizensListener(this), this); + } + if (dependencyManager.isWorldGuardEvents()) { + pm.registerEvents(new WGRegionEventsListener(this), this); + } + } + + public void setPrefix() { + prefix = MessagesManager.getLegacyColoredMessage("&4[&bConditionalEvents&4]"); + } + + public void setVersion() { + String packageName = Bukkit.getServer().getClass().getPackage().getName(); + String bukkitVersion = Bukkit.getServer().getBukkitVersion().split("-")[0]; + switch (bukkitVersion) { + case "1.20.5": + case "1.20.6": + serverVersion = ServerVersion.v1_20_R4; + break; + case "1.21": + case "1.21.1": + serverVersion = ServerVersion.v1_21_R1; + break; + case "1.21.2": + case "1.21.3": + serverVersion = ServerVersion.v1_21_R2; + break; + case "1.21.4": + serverVersion = ServerVersion.v1_21_R3; + break; + case "1.21.5": + serverVersion = ServerVersion.v1_21_R4; + break; + case "1.21.6": + case "1.21.7": + case "1.21.8": + serverVersion = ServerVersion.v1_21_R5; + break; + case "1.21.9": + case "1.21.10": + serverVersion = ServerVersion.v1_21_R6; + break; + case "1.21.11": + serverVersion = ServerVersion.v1_21_R7; + break; + default: + try { + serverVersion = ServerVersion.valueOf(packageName.replace("org.bukkit.craftbukkit.", "")); + } catch (Exception e) { + serverVersion = ServerVersion.v1_21_R7; + } + } + } + + public void reloadEvents() { + HandlerList.unregisterAll(this); + registerEvents(); + } + + public void reloadPlayerDataSaveTask() { + if (playerDataSaveTask != null) playerDataSaveTask.stop(); + playerDataSaveTask = new PlayerDataSaveTask(this); + playerDataSaveTask.start(configsManager.getMainConfigManager().getConfig().getInt("Config.data_save_time")); + } + + public void reloadPlayOneMinuteTask() { + if (playOneMinuteTask != null) playOneMinuteTask.stop(); + playOneMinuteTask = new PlayOneMinuteTask(this); + playOneMinuteTask.start(); + } + + public void registerCommands() { + PluginCommand command = getCommand("conditionalevents"); + if (command != null) { + command.setExecutor(new MainCommand(this)); + } + } + + public EventsManager getEventsManager() { + return eventsManager; + } + + public DependencyManager getDependencyManager() { + return dependencyManager; + } + + public ConfigsManager getConfigsManager() { + return configsManager; + } + + public PlayerDataManager getPlayerDataManager() { + return playerDataManager; + } + + public DebugManager getDebugManager() { + return debugManager; + } + + public BungeeMessagingManager getBungeeMessagingManager() { + return bungeeMessagingManager; + } + + public PlayerManager getPlayerManager() { + return playerManager; + } + + public MessagesManager getMessagesManager() { + return messagesManager; + } + + public void setMessagesManager(MessagesManager messagesManager) { + this.messagesManager = messagesManager; + } + + public VerifyManager getVerifyManager() { + return verifyManager; + } + + public UpdateCheckerManager getUpdateCheckerManager() { + return updateCheckerManager; + } + + public APIManager getApiManager() { + return apiManager; + } + + public SavedItemsManager getSavedItemsManager() { + return savedItemsManager; + } + + public InterruptEventManager getInterruptEventManager() { + return interruptEventManager; + } + + public void updateMessage(UpdateCheckerResult result) { + if (!result.isError()) { + String latestVersion = result.getLatestVersion(); + if (latestVersion != null) { + Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage("&cThere is a new version available. &e(&7" + latestVersion + "&e)")); + Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage("&cYou can download it at: &fhttps://modrinth.com/plugin/conditionalevents")); + } + } else { + Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage(prefix + " &cError while checking update.")); + } + } + + private boolean checkFolia() { + try { + Class.forName("io.papermc.paper.threadedregions.RegionizedServer"); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } } diff --git a/src/main/java/ce/ajneb97/MainCommand.java b/src/main/java/ce/ajneb97/MainCommand.java deleted file mode 100644 index da67983..0000000 --- a/src/main/java/ce/ajneb97/MainCommand.java +++ /dev/null @@ -1,466 +0,0 @@ -package ce.ajneb97; - - - - -import ce.ajneb97.configs.MainConfigManager; -import ce.ajneb97.managers.MessagesManager; -import ce.ajneb97.managers.PlayerManager; -import ce.ajneb97.managers.SavedItemsManager; -import ce.ajneb97.model.CEEvent; -import ce.ajneb97.model.EventType; -import ce.ajneb97.model.player.PlayerData; -import ce.ajneb97.utils.ActionUtils; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.UUID; - - -public class MainCommand implements CommandExecutor, TabCompleter { - - private ConditionalEvents plugin; - private MainConfigManager mainConfigManager; - public MainCommand(ConditionalEvents plugin) { - this.plugin = plugin; - this.mainConfigManager = plugin.getConfigsManager().getMainConfigManager(); - } - - public boolean onCommand(CommandSender sender, Command command, String label, String[] args){ - FileConfiguration config = mainConfigManager.getConfig(); - MessagesManager msgManager = plugin.getMessagesManager(); - - if(sender.isOp() || sender.hasPermission("conditionalevents.admin")) { - if(args.length >= 1) { - if(args[0].equalsIgnoreCase("reload")) { - if(!plugin.getConfigsManager().reload()){ - sender.sendMessage(ConditionalEvents.prefix+MessagesManager.getLegacyColoredMessage(" &cThere was an error reloading the config, check the console.")); - return true; - } - msgManager.sendMessage(sender,config.getString("Messages.commandReload"),true); - }else if(args[0].equalsIgnoreCase("help")) { - help(sender); - }else if(args[0].equalsIgnoreCase("reset")) { - reset(args,sender,config,msgManager); - }else if(args[0].equalsIgnoreCase("enable")) { - enable(args,sender,config,msgManager); - }else if(args[0].equalsIgnoreCase("disable")) { - disable(args,sender,config,msgManager); - }else if(args[0].equalsIgnoreCase("debug")) { - debug(args,sender,config,msgManager); - }else if(args[0].equalsIgnoreCase("verify")) { - if(sender instanceof Player){ - plugin.getVerifyManager().sendVerification((Player)sender); - }else{ - msgManager.sendMessage(sender,config.getString("Messages.onlyPlayerCommand"),true); - } - }else if(args[0].equalsIgnoreCase("call")) { - call(args,sender,config,msgManager); - }else if(args[0].equalsIgnoreCase("item")) { - if(sender instanceof Player){ - item(args,(Player)sender,config,msgManager); - }else{ - msgManager.sendMessage(sender,config.getString("Messages.onlyPlayerCommand"),true); - } - }else if(args[0].equalsIgnoreCase("interrupt")) { - interrupt(args,sender,config,msgManager); - } - else { - help(sender); - } - }else { - help(sender); - } - }else { - msgManager.sendMessage(sender,config.getString("Messages.commandNoPermissions"),true); - } - - return true; - } - - public void reset(String[] args,CommandSender sender,FileConfiguration config,MessagesManager msgManager){ - // /ce reset - if(args.length <= 2){ - msgManager.sendMessage(sender,config.getString("Messages.commandResetError"),true); - return; - } - - String player = args[1]; - String eventName = args[2]; - boolean silent = args.length >= 4 && args[3].equals("silent:true"); - - PlayerManager playerManager = plugin.getPlayerManager(); - if(player.equals("*")){ - playerManager.resetDataForAllPlayers(eventName,config,result -> { - if(silent){ - return; - } - msgManager.sendMessage(sender,result,true); - }); - }else{ - String result = playerManager.resetDataForPlayer(player,eventName,config); - if(silent){ - return; - } - msgManager.sendMessage(sender,result,true); - } - } - - public void enable(String[] args,CommandSender sender,FileConfiguration config,MessagesManager msgManager) { - // /ce enable - if(args.length <= 1) { - msgManager.sendMessage(sender,config.getString("Messages.eventEnableError"),true); - return; - } - - String eventName = args[1]; - CEEvent e = plugin.getEventsManager().getEvent(eventName); - if(e == null) { - msgManager.sendMessage(sender,config.getString("Messages.eventDoesNotExists"),true); - return; - } - - boolean silent = args.length >= 3 && args[2].equals("silent:true"); - - e.enable(); - plugin.getConfigsManager().saveEvent(e); - - if(silent){ - return; - } - msgManager.sendMessage(sender,config.getString("Messages.eventEnabled") - .replace("%event%", eventName),true); - } - - public void disable(String[] args,CommandSender sender,FileConfiguration config,MessagesManager msgManager) { - // /ce disable - if(args.length <= 1) { - msgManager.sendMessage(sender,config.getString("Messages.eventDisableError"),true); - return; - } - - String eventName = args[1]; - CEEvent e = plugin.getEventsManager().getEvent(eventName); - if(e == null) { - msgManager.sendMessage(sender,config.getString("Messages.eventDoesNotExists"),true); - return; - } - - boolean silent = args.length >= 3 && args[2].equals("silent:true"); - - e.disable(); - plugin.getInterruptEventManager().interruptEvent(eventName,null); - - plugin.getConfigsManager().saveEvent(e); - - if(silent){ - return; - } - msgManager.sendMessage(sender,config.getString("Messages.eventDisabled").replace("%event%", eventName),true); - } - - public void debug(String[] args,CommandSender sender,FileConfiguration config,MessagesManager msgManager) { - // /ce debug (optional) - if(args.length <= 1) { - msgManager.sendMessage(sender,config.getString("Messages.commandDebugError"),true); - return; - } - - String eventName = args[1]; - CEEvent e = plugin.getEventsManager().getEvent(eventName); - if(e == null) { - msgManager.sendMessage(sender,config.getString("Messages.eventDoesNotExists"),true); - return; - } - - String playerName = null; - if(args.length >= 3){ - playerName = args[2]; - } - - boolean result = plugin.getDebugManager().setDebugSender(sender,eventName,playerName); - if(result){ - if(playerName != null){ - msgManager.sendMessage(sender,config.getString("Messages.debugEnabledPlayer") - .replace("%event%", eventName).replace("%player%",playerName),true); - }else{ - msgManager.sendMessage(sender,config.getString("Messages.debugEnabled").replace("%event%", eventName),true); - } - }else{ - if(playerName != null){ - msgManager.sendMessage(sender,config.getString("Messages.debugDisabledPlayer") - .replace("%event%", eventName).replace("%player%",playerName),true); - }else{ - msgManager.sendMessage(sender,config.getString("Messages.debugDisabled").replace("%event%", eventName),true); - } - } - } - - public void call(String[] args,CommandSender sender,FileConfiguration config,MessagesManager msgManager) { - // /ce call (optional)%variable1%=;%variable2%= (optional)player: (optional)silent:true - if(args.length <= 1) { - msgManager.sendMessage(sender,config.getString("Messages.commandCallError"),true); - return; - } - - String eventName = args[1]; - CEEvent e = plugin.getEventsManager().getEvent(eventName); - if(e == null) { - msgManager.sendMessage(sender,config.getString("Messages.eventDoesNotExists"),true); - return; - } - if(!e.getEventType().equals(EventType.CALL)){ - msgManager.sendMessage(sender,config.getString("Messages.commandCallInvalidEvent"),true); - return; - } - if(!e.isEnabled()){ - msgManager.sendMessage(sender,config.getString("Messages.eventIsNotEnabled"),true); - return; - } - - String actionLine = eventName; - String playerName = null; - boolean silent = false; - - if(args.length >= 3){ - for(int i=2;i - if(args.length <= 2){ - msgManager.sendMessage(player,config.getString("Messages.commandItemError"),true); - return; - } - - SavedItemsManager savedItemsManager = plugin.getSavedItemsManager(); - String type = args[1]; - String name = args[2]; - - if(type.equals("save")){ - if(savedItemsManager.getItem(name,player) != null){ - msgManager.sendMessage(player,config.getString("Messages.savedItemAlreadyExists"),true); - return; - } - - ItemStack item = player.getItemInHand(); - if(item == null || item.getType().equals(Material.AIR)) { - msgManager.sendMessage(player, config.getString("Messages.mustHaveItemInHand"), true); - return; - } - - savedItemsManager.addItem(name,item.clone()); - msgManager.sendMessage(player,config.getString("Messages.savedItemAdded") - .replace("%name%",name),true); - }else if(type.equals("remove")){ - if(savedItemsManager.getItem(name,player) == null){ - msgManager.sendMessage(player,config.getString("Messages.savedItemDoesNotExists"),true); - return; - } - - savedItemsManager.removeItem(name); - msgManager.sendMessage(player,config.getString("Messages.savedItemRemoved") - .replace("%name%",name),true); - }else{ - msgManager.sendMessage(player,config.getString("Messages.commandItemError"),true); - } - } - - public void interrupt(String[] args,CommandSender sender,FileConfiguration config,MessagesManager msgManager) { - // /ce interrupt (optional) - if (args.length <= 1) { - msgManager.sendMessage(sender, config.getString("Messages.commandInterruptError"), true); - return; - } - - String eventName = args[1]; - CEEvent e = plugin.getEventsManager().getEvent(eventName); - if (e == null) { - msgManager.sendMessage(sender, config.getString("Messages.eventDoesNotExists"), true); - return; - } - - String playerName = null; - if (args.length >= 3 && !args[2].equals("silent:true")) { - playerName = args[2]; - } - - boolean silent = args[args.length-1].equals("silent:true"); - - plugin.getInterruptEventManager().interruptEvent(eventName,playerName); - if(silent){ - return; - } - if(playerName == null){ - msgManager.sendMessage(sender, config.getString("Messages.commandInterruptCorrect") - .replace("%event%",eventName), true); - }else{ - msgManager.sendMessage(sender, config.getString("Messages.commandInterruptCorrectPlayer") - .replace("%event%",eventName).replace("%player%",playerName), true); - } - } - - public static void help(CommandSender sender) { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"&7[ [ &8[&bConditionalEvents&8] &7] ]")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/ce help &8Shows this message.")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/ce reload &8Reloads the config.")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/ce verify &8Checks ALL events for errors.")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/ce debug (optional) &8Enables/disables debug information for an event.")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/ce reset /* /all &8Resets an event data for a player.")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/ce enable/disable &8Enable or disables an event.")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/ce call (optional)%variable1%=;%variableN%= (optional)player: (optional)silent:true &8Executes a 'call' event.")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/ce item &8Save and remove items for some actions.")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/ce interrupt (optional) &8Stops the execution of actions for an event.")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"")); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',"&7[ [ &8[&bConditionalEvents&8] &7] ]")); - } - - @Override - public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { - if(sender.isOp() || sender.hasPermission("conditionalevents.admin")) { - if(args.length == 1) { - List completions = new ArrayList(); - List commands = new ArrayList(); - commands.add("help");commands.add("reload");commands.add("verify"); - commands.add("reset");commands.add("debug");commands.add("enable"); - commands.add("disable");commands.add("call");commands.add("item"); - commands.add("interrupt"); - for(String c : commands) { - if(args[0].isEmpty() || c.startsWith(args[0].toLowerCase())) { - completions.add(c); - } - } - return completions; - }else { - if((args[0].equalsIgnoreCase("debug") || args[0].equalsIgnoreCase("enable") - || args[0].equalsIgnoreCase("disable") || args[0].equalsIgnoreCase("interrupt")) - && args.length == 2) { - return getEventsCompletions(args,1,false,null); - }else if(args[0].equalsIgnoreCase("call") && args.length == 2) { - return getEventsCompletions(args,1,false,EventType.CALL); - }else if(args[0].equalsIgnoreCase("reset") && args.length == 3) { - return getEventsCompletions(args,2,true,null); - }else if(args[0].equalsIgnoreCase("reset") && args.length == 2) { - List completions = new ArrayList<>(); - for(Player p : Bukkit.getOnlinePlayers()) { - if(args[1].isEmpty() || p.getName().toLowerCase().startsWith(args[1].toLowerCase())){ - completions.add(p.getName()); - } - } - if(args[1].isEmpty() || "*".startsWith(args[1].toLowerCase())) { - completions.add("*"); - } - return completions; - }else if(args[0].equalsIgnoreCase("item") && args.length == 2) { - List completions = new ArrayList<>(); - completions.add("remove");completions.add("save"); - return completions; - }else if(args.length == 3 && args[0].equalsIgnoreCase("item") && args[1].equalsIgnoreCase("remove")) { - return getSavedItemsCompletions(args,2); - } - } - } - - - return null; - } - - public List getEventsCompletions(String[] args,int argEventPos,boolean addAll,EventType eventType){ - List completions = new ArrayList(); - - String argEvent = args[argEventPos]; - - if(addAll) { - if(argEvent.isEmpty() || "all".startsWith(argEvent.toLowerCase())) { - completions.add("all"); - } - } - - ArrayList events = plugin.getEventsManager().getEvents(); - for(CEEvent event : events) { - if(argEvent.isEmpty() || event.getName().toLowerCase().startsWith(argEvent.toLowerCase())) { - if(eventType != null){ - if(event.getEventType().equals(eventType)){ - completions.add(event.getName()); - } - }else{ - completions.add(event.getName()); - } - } - } - - if(completions.isEmpty()){ - return null; - } - return completions; - } - - public List getSavedItemsCompletions(String[] args,int argItemPos){ - List completions = new ArrayList<>(); - - String argItem = args[argItemPos]; - for(Map.Entry entry : plugin.getSavedItemsManager().getSavedItems().entrySet()){ - if(argItem.isEmpty() || entry.getKey().toLowerCase().startsWith(argItem.toLowerCase())) { - completions.add(entry.getKey()); - } - } - - if(completions.isEmpty()){ - return null; - } - return completions; - } -} diff --git a/src/main/java/ce/ajneb97/api/ConditionalEventsAPI.java b/src/main/java/ce/ajneb97/api/ConditionalEventsAPI.java index d024e9a..a2a2797 100644 --- a/src/main/java/ce/ajneb97/api/ConditionalEventsAPI.java +++ b/src/main/java/ce/ajneb97/api/ConditionalEventsAPI.java @@ -1,17 +1,19 @@ package ce.ajneb97.api; import ce.ajneb97.ConditionalEvents; -import ce.ajneb97.managers.MessagesManager; +import ce.ajneb97.manager.MessagesManager; import ce.ajneb97.model.CEEvent; import ce.ajneb97.utils.TimeUtils; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; +@SuppressWarnings("unused") public class ConditionalEventsAPI { private static ConditionalEvents plugin; - public ConditionalEventsAPI(ConditionalEvents plugin){ - this.plugin = plugin; + + public static void init(ConditionalEvents plugin) { + ConditionalEventsAPI.plugin = plugin; } public static String getEventCooldown(Player player, String event){ diff --git a/src/main/java/ce/ajneb97/api/ConditionalEventsAction.java b/src/main/java/ce/ajneb97/api/ConditionalEventsAction.java index 4dc5544..e8a8dd0 100644 --- a/src/main/java/ce/ajneb97/api/ConditionalEventsAction.java +++ b/src/main/java/ce/ajneb97/api/ConditionalEventsAction.java @@ -9,9 +9,10 @@ public abstract class ConditionalEventsAction { protected String name; protected JavaPlugin plugin; - public ConditionalEventsAction(String name){ + public ConditionalEventsAction(String name) { this.name = name; } + public abstract void execute(Player player, String actionLine, Event minecraftEvent); public String getName() { diff --git a/src/main/java/ce/ajneb97/api/ConditionalEventsCallEvent.java b/src/main/java/ce/ajneb97/api/ConditionalEventsCallEvent.java index 971c7b1..ed12f43 100644 --- a/src/main/java/ce/ajneb97/api/ConditionalEventsCallEvent.java +++ b/src/main/java/ce/ajneb97/api/ConditionalEventsCallEvent.java @@ -4,44 +4,42 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.List; - - -public class ConditionalEventsCallEvent extends Event{ - - private Player player; - private ArrayList variables; - private String event; - private static final HandlerList handlers = new HandlerList(); - - public ConditionalEventsCallEvent(Player player, ArrayList variables, String event){ - this.player = player; - this.variables = variables; - this.event = event; - } - - public Player getPlayer() { - return player; - } - - public String getEvent() { - return event; - } - - public ArrayList getVariables() { - return variables; - } - - @Override - public HandlerList getHandlers() { - // TODO Auto-generated method stub - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } + +public class ConditionalEventsCallEvent extends Event { + + private final Player player; + private final ArrayList variables; + private final String event; + private static final HandlerList handlers = new HandlerList(); + + public ConditionalEventsCallEvent(Player player, ArrayList variables, String event) { + this.player = player; + this.variables = variables; + this.event = event; + } + + public Player getPlayer() { + return player; + } + + public String getEvent() { + return event; + } + + public ArrayList getVariables() { + return variables; + } + + @Override + public @NotNull HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } } diff --git a/src/main/java/ce/ajneb97/api/ConditionalEventsEvent.java b/src/main/java/ce/ajneb97/api/ConditionalEventsEvent.java index 8779e26..b4dbe30 100644 --- a/src/main/java/ce/ajneb97/api/ConditionalEventsEvent.java +++ b/src/main/java/ce/ajneb97/api/ConditionalEventsEvent.java @@ -3,42 +3,41 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; - - -public class ConditionalEventsEvent extends Event{ - - private Player player; - private String event; - private String actionGroup; - private static final HandlerList handlers = new HandlerList(); - - //Event called when conditions for an event are accomplished - public ConditionalEventsEvent(Player player,String event,String actionGroup){ - this.player = player; - this.event = event; - this.actionGroup = actionGroup; - } - - public Player getPlayer() { - return player; - } - - public String getEvent() { - return event; - } - - public String getActionGroup() { - return actionGroup; - } - - @Override - public HandlerList getHandlers() { - // TODO Auto-generated method stub - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } +import org.jetbrains.annotations.NotNull; + +public class ConditionalEventsEvent extends Event { + + private final Player player; + private final String event; + private final String actionGroup; + private static final HandlerList handlers = new HandlerList(); + + //Event called when conditions for an event are achieved + public ConditionalEventsEvent(Player player, String event, String actionGroup) { + this.player = player; + this.event = event; + this.actionGroup = actionGroup; + } + + public Player getPlayer() { + return player; + } + + public String getEvent() { + return event; + } + + public String getActionGroup() { + return actionGroup; + } + + @Override + public @NotNull HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } } diff --git a/src/main/java/ce/ajneb97/api/ExpansionCE.java b/src/main/java/ce/ajneb97/api/ExpansionCE.java index 6ccf95c..e14a8cf 100644 --- a/src/main/java/ce/ajneb97/api/ExpansionCE.java +++ b/src/main/java/ce/ajneb97/api/ExpansionCE.java @@ -4,60 +4,62 @@ import org.bukkit.entity.Player; import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.jetbrains.annotations.NotNull; +@SuppressWarnings("deprecation") public class ExpansionCE extends PlaceholderExpansion { // We get an instance of the plugin later. - private ConditionalEvents plugin; + private final ConditionalEvents plugin; public ExpansionCE(ConditionalEvents plugin) { - this.plugin = plugin; + this.plugin = plugin; } @Override - public boolean persist(){ + public boolean persist() { return true; } @Override - public boolean canRegister(){ + public boolean canRegister() { return true; } @Override - public String getAuthor(){ + public @NotNull String getAuthor() { return "Ajneb97"; } @Override - public String getIdentifier(){ + public @NotNull String getIdentifier() { return "conditionalevents"; } @Override - public String getVersion(){ + public @NotNull String getVersion() { return plugin.getDescription().getVersion(); } @Override - public String onPlaceholderRequest(Player player, String identifier){ + public String onPlaceholderRequest(Player player, @NotNull String identifier) { - if(player == null){ + if (player == null) { return ""; } - if(identifier.startsWith("cooldown_")){ - // %conditionalevents_cooldown_% - String event = identifier.replace("cooldown_", ""); - return ConditionalEventsAPI.getEventCooldown(player,event); - }else if(identifier.startsWith("onetime_ready_")){ + if (identifier.startsWith("cooldown_")) { + // %conditionalevents_cooldown_% + String event = identifier.replace("cooldown_", ""); + return ConditionalEventsAPI.getEventCooldown(player, event); + } else if (identifier.startsWith("onetime_ready_")) { // %conditionalevents_onetime_ready_% String event = identifier.replace("onetime_ready_", ""); - return ConditionalEventsAPI.getOneTimeReady(player,event); - }else if(identifier.startsWith("is_enabled_")){ + return ConditionalEventsAPI.getOneTimeReady(player, event); + } else if (identifier.startsWith("is_enabled_")) { // %conditionalevents_is_enabled_% String event = identifier.replace("is_enabled_", ""); - return ConditionalEventsAPI.isEventEnabled(event)+""; + return ConditionalEventsAPI.isEventEnabled(event) + ""; } return null; diff --git a/src/main/java/ce/ajneb97/command/MainCommand.java b/src/main/java/ce/ajneb97/command/MainCommand.java new file mode 100644 index 0000000..5398e0a --- /dev/null +++ b/src/main/java/ce/ajneb97/command/MainCommand.java @@ -0,0 +1,476 @@ +package ce.ajneb97.command; + + +import ce.ajneb97.ConditionalEvents; +import ce.ajneb97.configs.MainConfigManager; +import ce.ajneb97.manager.MessagesManager; +import ce.ajneb97.manager.PlayerManager; +import ce.ajneb97.manager.SavedItemsManager; +import ce.ajneb97.model.CEEvent; +import ce.ajneb97.model.EventType; +import ce.ajneb97.utils.ActionUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + + +@SuppressWarnings({"DataFlowIssue", "deprecation"}) +public class MainCommand implements CommandExecutor, TabCompleter { + + private final ConditionalEvents plugin; + private final MainConfigManager mainConfigManager; + + public MainCommand(ConditionalEvents plugin) { + this.plugin = plugin; + this.mainConfigManager = plugin.getConfigsManager().getMainConfigManager(); + } + + public boolean onCommand(CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + FileConfiguration config = mainConfigManager.getConfig(); + MessagesManager msgManager = plugin.getMessagesManager(); + + if (sender.isOp() || sender.hasPermission("conditionalevents.admin")) { + if (args.length >= 1) { + if (args[0].equalsIgnoreCase("reload")) { + if (!plugin.getConfigsManager().reload()) { + sender.sendMessage(ConditionalEvents.prefix + MessagesManager.getLegacyColoredMessage(" &cThere was an error reloading the config, check the console.")); + return true; + } + msgManager.sendMessage(sender, config.getString("Messages.commandReload"), true); + } else if (args[0].equalsIgnoreCase("help")) { + help(sender); + } else if (args[0].equalsIgnoreCase("reset")) { + reset(args, sender, config, msgManager); + } else if (args[0].equalsIgnoreCase("enable")) { + enable(args, sender, config, msgManager); + } else if (args[0].equalsIgnoreCase("disable")) { + disable(args, sender, config, msgManager); + } else if (args[0].equalsIgnoreCase("debug")) { + debug(args, sender, config, msgManager); + } else if (args[0].equalsIgnoreCase("verify")) { + if (sender instanceof Player) { + plugin.getVerifyManager().sendVerification((Player) sender); + } else { + msgManager.sendMessage(sender, config.getString("Messages.onlyPlayerCommand"), true); + } + } else if (args[0].equalsIgnoreCase("call")) { + call(args, sender, config, msgManager); + } else if (args[0].equalsIgnoreCase("item")) { + if (sender instanceof Player) { + item(args, (Player) sender, config, msgManager); + } else { + msgManager.sendMessage(sender, config.getString("Messages.onlyPlayerCommand"), true); + } + } else if (args[0].equalsIgnoreCase("interrupt")) { + interrupt(args, sender, config, msgManager); + } else { + help(sender); + } + } else { + help(sender); + } + } else { + msgManager.sendMessage(sender, config.getString("Messages.commandNoPermissions"), true); + } + + return true; + } + + public void reset(String[] args, CommandSender sender, FileConfiguration config, MessagesManager msgManager) { + // /ce reset + if (args.length <= 2) { + msgManager.sendMessage(sender, config.getString("Messages.commandResetError"), true); + return; + } + + String player = args[1]; + String eventName = args[2]; + boolean silent = args.length >= 4 && args[3].equals("silent:true"); + + PlayerManager playerManager = plugin.getPlayerManager(); + if (player.equals("*")) { + playerManager.resetDataForAllPlayers(eventName, config, result -> { + if (silent) { + return; + } + msgManager.sendMessage(sender, result, true); + }); + } else { + String result = playerManager.resetDataForPlayer(player, eventName, config); + if (silent) { + return; + } + msgManager.sendMessage(sender, result, true); + } + } + + public void enable(String[] args, CommandSender sender, FileConfiguration config, MessagesManager msgManager) { + // /ce enable + if (args.length <= 1) { + msgManager.sendMessage(sender, config.getString("Messages.eventEnableError"), true); + return; + } + + String eventName = args[1]; + CEEvent e = plugin.getEventsManager().getEvent(eventName); + if (e == null) { + msgManager.sendMessage(sender, config.getString("Messages.eventDoesNotExists"), true); + return; + } + + boolean silent = args.length >= 3 && args[2].equals("silent:true"); + + e.enable(); + plugin.getConfigsManager().saveEvent(e); + + if (silent) { + return; + } + msgManager.sendMessage(sender, config.getString("Messages.eventEnabled") + .replace("%event%", eventName), true); + } + + public void disable(String[] args, CommandSender sender, FileConfiguration config, MessagesManager msgManager) { + // /ce disable + if (args.length <= 1) { + msgManager.sendMessage(sender, config.getString("Messages.eventDisableError"), true); + return; + } + + String eventName = args[1]; + CEEvent e = plugin.getEventsManager().getEvent(eventName); + if (e == null) { + msgManager.sendMessage(sender, config.getString("Messages.eventDoesNotExists"), true); + return; + } + + boolean silent = args.length >= 3 && args[2].equals("silent:true"); + + e.disable(); + plugin.getInterruptEventManager().interruptEvent(eventName, null); + + plugin.getConfigsManager().saveEvent(e); + + if (silent) { + return; + } + msgManager.sendMessage(sender, config.getString("Messages.eventDisabled").replace("%event%", eventName), true); + } + + public void debug(String[] args, CommandSender sender, FileConfiguration config, MessagesManager msgManager) { + // /ce debug (optional) + if (args.length <= 1) { + msgManager.sendMessage(sender, config.getString("Messages.commandDebugError"), true); + return; + } + + String eventName = args[1]; + CEEvent e = plugin.getEventsManager().getEvent(eventName); + if (e == null) { + msgManager.sendMessage(sender, config.getString("Messages.eventDoesNotExists"), true); + return; + } + + String playerName = null; + if (args.length >= 3) { + playerName = args[2]; + } + + boolean result = plugin.getDebugManager().setDebugSender(sender, eventName, playerName); + if (result) { + if (playerName != null) { + msgManager.sendMessage(sender, config.getString("Messages.debugEnabledPlayer") + .replace("%event%", eventName).replace("%player%", playerName), true); + } else { + msgManager.sendMessage(sender, config.getString("Messages.debugEnabled").replace("%event%", eventName), true); + } + } else { + if (playerName != null) { + msgManager.sendMessage(sender, config.getString("Messages.debugDisabledPlayer") + .replace("%event%", eventName).replace("%player%", playerName), true); + } else { + msgManager.sendMessage(sender, config.getString("Messages.debugDisabled").replace("%event%", eventName), true); + } + } + } + + public void call(String[] args, CommandSender sender, FileConfiguration config, MessagesManager msgManager) { + // /ce call (optional)%variable1%=;%variable2%= (optional)player: (optional)silent:true + if (args.length <= 1) { + msgManager.sendMessage(sender, config.getString("Messages.commandCallError"), true); + return; + } + + String eventName = args[1]; + CEEvent e = plugin.getEventsManager().getEvent(eventName); + if (e == null) { + msgManager.sendMessage(sender, config.getString("Messages.eventDoesNotExists"), true); + return; + } + if (!e.getEventType().equals(EventType.CALL)) { + msgManager.sendMessage(sender, config.getString("Messages.commandCallInvalidEvent"), true); + return; + } + if (!e.isEnabled()) { + msgManager.sendMessage(sender, config.getString("Messages.eventIsNotEnabled"), true); + return; + } + + StringBuilder actionLine = new StringBuilder(eventName); + String playerName = null; + boolean silent = false; + + if (args.length >= 3) { + for (int i = 2; i < args.length; i++) { + String arg = args[i]; + if (arg.contains("%")) { + actionLine.append(";").append(args[i]); + } else if (arg.startsWith("player:")) { + playerName = args[i].replace("player:", ""); + } else if (args[i].equals("silent:true")) { + silent = true; + } + } + } + + Player player = null; + if (playerName != null) { + player = Bukkit.getPlayer(playerName); + if (player == null) { + msgManager.sendMessage(sender, config.getString("Messages.playerNotOnline"), true); + return; + } + } else if (sender instanceof Player) { + player = (Player) sender; + } + + if (ActionUtils.callEvent(actionLine.toString(), player, plugin, null)) { + if (silent) { + return; + } + if (player != null) { + msgManager.sendMessage(sender, config.getString("Messages.commandCallCorrectPlayer") + .replace("%event%", eventName).replace("%player%", player.getName()), true); + } else { + msgManager.sendMessage(sender, config.getString("Messages.commandCallCorrect") + .replace("%event%", eventName), true); + } + } else { + if (silent) { + return; + } + msgManager.sendMessage(sender, config.getString("Messages.commandCallFailed") + .replace("%event%", eventName), true); + } + + } + + public void item(String[] args, Player player, FileConfiguration config, MessagesManager msgManager) { + // /ce item + if (args.length <= 2) { + msgManager.sendMessage(player, config.getString("Messages.commandItemError"), true); + return; + } + + SavedItemsManager savedItemsManager = plugin.getSavedItemsManager(); + String type = args[1]; + String name = args[2]; + + if (type.equals("save")) { + if (savedItemsManager.getItem(name, player) != null) { + msgManager.sendMessage(player, config.getString("Messages.savedItemAlreadyExists"), true); + return; + } + + ItemStack item = player.getItemInHand(); + if (item.getType().equals(Material.AIR)) { + msgManager.sendMessage(player, config.getString("Messages.mustHaveItemInHand"), true); + return; + } + + savedItemsManager.addItem(name, item.clone()); + msgManager.sendMessage(player, config.getString("Messages.savedItemAdded") + .replace("%name%", name), true); + } else if (type.equals("remove")) { + if (savedItemsManager.getItem(name, player) == null) { + msgManager.sendMessage(player, config.getString("Messages.savedItemDoesNotExists"), true); + return; + } + + savedItemsManager.removeItem(name); + msgManager.sendMessage(player, config.getString("Messages.savedItemRemoved") + .replace("%name%", name), true); + } else { + msgManager.sendMessage(player, config.getString("Messages.commandItemError"), true); + } + } + + public void interrupt(String[] args, CommandSender sender, FileConfiguration config, MessagesManager msgManager) { + // /ce interrupt (optional) + if (args.length <= 1) { + msgManager.sendMessage(sender, config.getString("Messages.commandInterruptError"), true); + return; + } + + String eventName = args[1]; + CEEvent e = plugin.getEventsManager().getEvent(eventName); + if (e == null) { + msgManager.sendMessage(sender, config.getString("Messages.eventDoesNotExists"), true); + return; + } + + String playerName = null; + if (args.length >= 3 && !args[2].equals("silent:true")) { + playerName = args[2]; + } + + boolean silent = args[args.length - 1].equals("silent:true"); + + plugin.getInterruptEventManager().interruptEvent(eventName, playerName); + if (silent) { + return; + } + if (playerName == null) { + msgManager.sendMessage(sender, config.getString("Messages.commandInterruptCorrect") + .replace("%event%", eventName), true); + } else { + msgManager.sendMessage(sender, config.getString("Messages.commandInterruptCorrectPlayer") + .replace("%event%", eventName).replace("%player%", playerName), true); + } + } + + public static void help(CommandSender sender) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7[ [ &8[&bConditionalEvents&8] &7] ]")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6/ce help &8Shows this message.")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6/ce reload &8Reloads the config.")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6/ce verify &8Checks ALL events for errors.")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6/ce debug (optional) &8Enables/disables debug information for an event.")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6/ce reset /* /all &8Resets an event data for a player.")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6/ce enable/disable &8Enable or disables an event.")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6/ce call (optional)%variable1%=;%variableN%= (optional)player: (optional)silent:true &8Executes a 'call' event.")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6/ce item &8Save and remove items for some actions.")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6/ce interrupt (optional) &8Stops the execution of actions for an event.")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7[ [ &8[&bConditionalEvents&8] &7] ]")); + } + + @Override + public List onTabComplete(CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + if (sender.isOp() || sender.hasPermission("conditionalevents.admin")) { + if (args.length == 1) { + return getStrings(args); + } else { + if ((args[0].equalsIgnoreCase("debug") || args[0].equalsIgnoreCase("enable") + || args[0].equalsIgnoreCase("disable") || args[0].equalsIgnoreCase("interrupt")) + && args.length == 2) { + return getEventsCompletions(args, 1, false, null); + } else if (args[0].equalsIgnoreCase("call") && args.length == 2) { + return getEventsCompletions(args, 1, false, EventType.CALL); + } else if (args[0].equalsIgnoreCase("reset") && args.length == 3) { + return getEventsCompletions(args, 2, true, null); + } else if (args[0].equalsIgnoreCase("reset") && args.length == 2) { + List completions = new ArrayList<>(); + for (Player p : Bukkit.getOnlinePlayers()) { + if (args[1].isEmpty() || p.getName().toLowerCase().startsWith(args[1].toLowerCase())) { + completions.add(p.getName()); + } + } + if (args[1].isEmpty() || "*".startsWith(args[1].toLowerCase())) { + completions.add("*"); + } + return completions; + } else if (args[0].equalsIgnoreCase("item") && args.length == 2) { + List completions = new ArrayList<>(); + completions.add("remove"); + completions.add("save"); + return completions; + } else if (args.length == 3 && args[0].equalsIgnoreCase("item") && args[1].equalsIgnoreCase("remove")) { + return getSavedItemsCompletions(args, 2); + } + } + } + + + return null; + } + + private static @NotNull List getStrings(String[] args) { + List completions = new ArrayList<>(); + List commands = new ArrayList<>(); + commands.add("help"); + commands.add("reload"); + commands.add("verify"); + commands.add("reset"); + commands.add("debug"); + commands.add("enable"); + commands.add("disable"); + commands.add("call"); + commands.add("item"); + commands.add("interrupt"); + for (String c : commands) { + if (args[0].isEmpty() || c.startsWith(args[0].toLowerCase())) { + completions.add(c); + } + } + return completions; + } + + public List getEventsCompletions(String[] args, int argEventPos, boolean addAll, EventType eventType) { + List completions = new ArrayList<>(); + + String argEvent = args[argEventPos]; + + if (addAll) { + if (argEvent.isEmpty() || "all".startsWith(argEvent.toLowerCase())) { + completions.add("all"); + } + } + + ArrayList events = plugin.getEventsManager().getEvents(); + for (CEEvent event : events) { + if (argEvent.isEmpty() || event.getName().toLowerCase().startsWith(argEvent.toLowerCase())) { + if (eventType != null) { + if (event.getEventType().equals(eventType)) { + completions.add(event.getName()); + } + } else { + completions.add(event.getName()); + } + } + } + + if (completions.isEmpty()) { + return null; + } + return completions; + } + + public List getSavedItemsCompletions(String[] args, int argItemPos) { + List completions = new ArrayList<>(); + + String argItem = args[argItemPos]; + for (Map.Entry entry : plugin.getSavedItemsManager().getSavedItems().entrySet()) { + if (argItem.isEmpty() || entry.getKey().toLowerCase().startsWith(argItem.toLowerCase())) { + completions.add(entry.getKey()); + } + } + + if (completions.isEmpty()) { + return null; + } + return completions; + } +} diff --git a/src/main/java/ce/ajneb97/configs/ConfigsManager.java b/src/main/java/ce/ajneb97/configs/ConfigsManager.java index d3b30b2..a9228b4 100644 --- a/src/main/java/ce/ajneb97/configs/ConfigsManager.java +++ b/src/main/java/ce/ajneb97/configs/ConfigsManager.java @@ -2,33 +2,36 @@ import ce.ajneb97.ConditionalEvents; import ce.ajneb97.configs.model.CommonConfig; -import ce.ajneb97.managers.RepetitiveManager; +import ce.ajneb97.manager.RepetitiveManager; import ce.ajneb97.model.CEEvent; import ce.ajneb97.model.CustomEventProperties; import ce.ajneb97.model.EventType; import ce.ajneb97.model.actions.*; import org.bukkit.configuration.file.FileConfiguration; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; +@SuppressWarnings("DataFlowIssue") public class ConfigsManager { - private MainConfigManager mainConfigManager; - private PlayersConfigsManager playerConfigsManager; - private EventsFolderConfigManager eventsFolderConfigManager; - private SavedItemsConfigManager savedItemsConfigManager; - private ConditionalEvents plugin; - public ConfigsManager(ConditionalEvents plugin){ + private final MainConfigManager mainConfigManager; + private final PlayerConfigsManager playerConfigsManager; + private final EventsFolderConfigManager eventsFolderConfigManager; + private final SavedItemsConfigManager savedItemsConfigManager; + private final ConditionalEvents plugin; + + public ConfigsManager(ConditionalEvents plugin) { mainConfigManager = new MainConfigManager(plugin); - playerConfigsManager = new PlayersConfigsManager(plugin,"players"); - eventsFolderConfigManager = new EventsFolderConfigManager(plugin,"events"); + playerConfigsManager = new PlayerConfigsManager(plugin, "players"); + eventsFolderConfigManager = new EventsFolderConfigManager(plugin, "events"); savedItemsConfigManager = new SavedItemsConfigManager(plugin); this.plugin = plugin; } - public void configure(){ + public void configure() { mainConfigManager.configure(); playerConfigsManager.configure(); eventsFolderConfigManager.configure(); @@ -40,7 +43,7 @@ public MainConfigManager getMainConfigManager() { return mainConfigManager; } - public PlayersConfigsManager getPlayerConfigsManager() { + public PlayerConfigsManager getPlayerConfigsManager() { return playerConfigsManager; } @@ -48,21 +51,21 @@ public SavedItemsConfigManager getSavedItemsConfigManager() { return savedItemsConfigManager; } - public void configureEvents(){ + public void configureEvents() { ArrayList ceConfigs = getEventConfigs(); ArrayList events = new ArrayList<>(); - for(CommonConfig configFile : ceConfigs){ + for (CommonConfig configFile : ceConfigs) { FileConfiguration config = configFile.getConfig(); - if(config.contains("Events")){ - for(String key : config.getConfigurationSection("Events").getKeys(false)){ - String path = "Events."+key; + if (config.contains("Events")) { + for (String key : config.getConfigurationSection("Events").getKeys(false)) { + String path = "Events." + key; String filePath = configFile.getPath(); - List conditions = new ArrayList(); - List actionGroups = new ArrayList(); + List conditions = new ArrayList<>(); + List actionGroups = new ArrayList<>(); boolean oneTime = false; String ignoreWithPermission = null; long cooldown = 0; @@ -70,117 +73,108 @@ public void configureEvents(){ boolean ignoreIfCancelled = false; boolean allowMathFormulasInConditions = false; - List preventCooldownActivationActionGroups = new ArrayList(); - List preventOneTimeActivationActionGroups = new ArrayList(); + List preventCooldownActivationActionGroups = new ArrayList<>(); + List preventOneTimeActivationActionGroups = new ArrayList<>(); CEEvent event = new CEEvent(key); - EventType eventType = null; - try{ - eventType = EventType.valueOf(config.getString(path+".type").toUpperCase()); - }catch(Exception e){ + EventType eventType; + try { + eventType = EventType.valueOf(config.getString(path + ".type").toUpperCase()); + } catch (Exception e) { continue; } - if(config.contains(path+".conditions")) { - conditions = config.getStringList(path+".conditions"); + if (config.contains(path + ".conditions")) { + conditions = config.getStringList(path + ".conditions"); } - if(config.contains(path+".actions")) { - for(String groupName : config.getConfigurationSection(path+".actions").getKeys(false)) { - List actionsList = config.getStringList(path+".actions."+groupName); - List ceActions = new ArrayList(); - for(String action : actionsList){ + if (config.contains(path + ".actions")) { + for (String groupName : config.getConfigurationSection(path + ".actions").getKeys(false)) { + List actionsList = config.getStringList(path + ".actions." + groupName); + List ceActions = new ArrayList<>(); + for (String action : actionsList) { ActionTargeter targeter = new ActionTargeter(ActionTargeterType.NORMAL); - if(action.startsWith("to_all: ")){ + if (action.startsWith("to_all: ")) { // to_all: message: hi - action = action.replace("to_all: ",""); + action = action.replace("to_all: ", ""); targeter.setType(ActionTargeterType.TO_ALL); - }else if(action.startsWith("to_target: ")){ + } else if (action.startsWith("to_target: ")) { // to_target: message: hi - action = action.replace("to_target: ",""); + action = action.replace("to_target: ", ""); targeter.setType(ActionTargeterType.TO_TARGET); - }else if(action.startsWith("to_world: ") || action.startsWith("to_range: ") - || action.startsWith("to_condition: ") || action.startsWith("to_player: ")){ + } else if (action.startsWith("to_world: ") || action.startsWith("to_range: ") + || action.startsWith("to_condition: ") || action.startsWith("to_player: ")) { // to_world: parkour: message: hi // to_range: 5;true: message: hi // to_condition: toConditionGroup1: message: hi // to_player: : message: hi - ActionTargeterType targeterType = null; - if(action.startsWith("to_world: ")){ - targeterType = ActionTargeterType.TO_WORLD; - }else if(action.startsWith("to_range: ")){ - targeterType = ActionTargeterType.TO_RANGE; - }else if(action.startsWith("to_condition: ")){ - targeterType = ActionTargeterType.TO_CONDITION; - }else if(action.startsWith("to_player: ")){ - targeterType = ActionTargeterType.TO_PLAYER; - } + ActionTargeterType targeterType = getActionTargeterType(action); targeter.setType(targeterType); - action = action.replace(targeterType.name().toLowerCase()+": ",""); + action = action.replace(targeterType.name().toLowerCase() + ": ", ""); String[] sep = action.split(" "); - String parameter = sep[0].substring(0,sep[0].length()-1); - action = action.replace(sep[0]+" ", ""); + String parameter = sep[0].substring(0, sep[0].length() - 1); + action = action.replace(sep[0] + " ", ""); targeter.setParameter(parameter); } - String actionTypeText = null; - ActionType actionType = null; + String actionTypeText; + ActionType actionType; String actionApiType = null; - try{ - if(action.equalsIgnoreCase("close_inventory") - || action.equalsIgnoreCase("clear_inventory")){ + try { + if (action.equalsIgnoreCase("close_inventory") + || action.equalsIgnoreCase("clear_inventory")) { actionTypeText = action; - }else{ - actionTypeText = action.substring(0,action.indexOf(":")); + } else { + actionTypeText = action.substring(0, action.indexOf(":")); } //Check API actions - if(plugin.getApiManager().getApiAction(actionTypeText) != null){ + if (plugin.getApiManager().getApiAction(actionTypeText) != null) { actionType = ActionType.API; actionApiType = actionTypeText; - }else{ + } else { actionType = ActionType.valueOf(actionTypeText.toUpperCase()); } - }catch(Exception e){ + } catch (Exception e) { continue; } - String actionLine = action.replace(actionTypeText+": ",""); + String actionLine = action.replace(actionTypeText + ": ", ""); - CEAction ceAction = new CEAction(actionType,actionLine,targeter); + CEAction ceAction = new CEAction(actionType, actionLine, targeter); ceAction.setApiType(actionApiType); ceActions.add(ceAction); } - ActionGroup actionGroup = new ActionGroup(groupName,ceActions); + ActionGroup actionGroup = new ActionGroup(groupName, ceActions); actionGroups.add(actionGroup); } } - if(config.contains(path+".cooldown")) { - cooldown = Long.valueOf(config.getString(path+".cooldown")); + if (config.contains(path + ".cooldown")) { + cooldown = Long.parseLong(config.getString(path + ".cooldown")); } - if(config.contains(path+".ignore_with_permission")) { - ignoreWithPermission = config.getString(path+".ignore_with_permission"); + if (config.contains(path + ".ignore_with_permission")) { + ignoreWithPermission = config.getString(path + ".ignore_with_permission"); } - if(config.contains(path+".one_time")) { - oneTime = Boolean.valueOf(config.getString(path+".one_time")); + if (config.contains(path + ".one_time")) { + oneTime = Boolean.parseBoolean(config.getString(path + ".one_time")); } - if(config.contains(path+".enabled")) { - enabled = Boolean.valueOf(config.getString(path+".enabled")); + if (config.contains(path + ".enabled")) { + enabled = Boolean.parseBoolean(config.getString(path + ".enabled")); } - if(config.contains(path+".ignore_if_cancelled")) { - ignoreIfCancelled = Boolean.valueOf(config.getString(path+".ignore_if_cancelled")); + if (config.contains(path + ".ignore_if_cancelled")) { + ignoreIfCancelled = Boolean.parseBoolean(config.getString(path + ".ignore_if_cancelled")); } - if(config.contains(path+".prevent_cooldown_activation")){ - preventCooldownActivationActionGroups = config.getStringList(path+".prevent_cooldown_activation"); + if (config.contains(path + ".prevent_cooldown_activation")) { + preventCooldownActivationActionGroups = config.getStringList(path + ".prevent_cooldown_activation"); } - if(config.contains(path+".prevent_one_time_activation")){ - preventOneTimeActivationActionGroups = config.getStringList(path+".prevent_one_time_activation"); + if (config.contains(path + ".prevent_one_time_activation")) { + preventOneTimeActivationActionGroups = config.getStringList(path + ".prevent_one_time_activation"); } - if(config.contains(path+".allow_math_formulas_in_conditions")) { - allowMathFormulasInConditions = Boolean.valueOf(config.getString(path+".allow_math_formulas_in_conditions")); + if (config.contains(path + ".allow_math_formulas_in_conditions")) { + allowMathFormulasInConditions = Boolean.parseBoolean(config.getString(path + ".allow_math_formulas_in_conditions")); } event.setFilePath(filePath); @@ -196,27 +190,27 @@ public void configureEvents(){ event.setPreventOneTimeActivationActionGroups(preventOneTimeActivationActionGroups); event.setAllowMathFormulasInConditions(allowMathFormulasInConditions); - if(event.getEventType().equals(EventType.CUSTOM)) { - String eventPackage = config.getString(path+".custom_event_data.event"); + if (event.getEventType().equals(EventType.CUSTOM)) { + String eventPackage = config.getString(path + ".custom_event_data.event"); String playerVariable = null; - if(config.contains(path+".custom_event_data.player_variable")) { - playerVariable = config.getString(path+".custom_event_data.player_variable"); + if (config.contains(path + ".custom_event_data.player_variable")) { + playerVariable = config.getString(path + ".custom_event_data.player_variable"); } - List variablesToCapture = new ArrayList(); - if(config.contains(path+".custom_event_data.variables_to_capture")) { - variablesToCapture = config.getStringList(path+".custom_event_data.variables_to_capture"); + List variablesToCapture = new ArrayList<>(); + if (config.contains(path + ".custom_event_data.variables_to_capture")) { + variablesToCapture = config.getStringList(path + ".custom_event_data.variables_to_capture"); } event.setCustomEventProperties(new CustomEventProperties( - eventPackage,playerVariable,variablesToCapture + eventPackage, playerVariable, variablesToCapture )); } - if(event.getEventType().equals(EventType.REPETITIVE) || event.getEventType().equals(EventType.REPETITIVE_SERVER)){ - int repetitiveTime = config.getInt(path+".repetitive_time"); + if (event.getEventType().equals(EventType.REPETITIVE) || event.getEventType().equals(EventType.REPETITIVE_SERVER)) { + int repetitiveTime = config.getInt(path + ".repetitive_time"); RepetitiveManager repetitiveManager = new RepetitiveManager(plugin, event, repetitiveTime); event.setRepetitiveManager(repetitiveManager); - if(event.isEnabled()){ + if (event.isEnabled()) { repetitiveManager.start(); } } @@ -229,19 +223,33 @@ public void configureEvents(){ plugin.getEventsManager().setEvents(events); } - public void saveEvent(CEEvent event){ + private static @Nullable ActionTargeterType getActionTargeterType(String action) { + ActionTargeterType targeterType = null; + if (action.startsWith("to_world: ")) { + targeterType = ActionTargeterType.TO_WORLD; + } else if (action.startsWith("to_range: ")) { + targeterType = ActionTargeterType.TO_RANGE; + } else if (action.startsWith("to_condition: ")) { + targeterType = ActionTargeterType.TO_CONDITION; + } else if (action.startsWith("to_player: ")) { + targeterType = ActionTargeterType.TO_PLAYER; + } + return targeterType; + } + + public void saveEvent(CEEvent event) { String eventName = event.getName(); String path = event.getFilePath(); CommonConfig commonConfig; - if(path.equals("config.yml")){ + if (path.equals("config.yml")) { commonConfig = mainConfigManager.getConfigFile(); - }else{ - commonConfig = eventsFolderConfigManager.getConfigFile(path,true); + } else { + commonConfig = eventsFolderConfigManager.getConfigFile(path, true); } FileConfiguration config = commonConfig.getConfig(); - config.set("Events."+eventName+".enabled",event.isEnabled()); + config.set("Events." + eventName + ".enabled", event.isEnabled()); commonConfig.saveConfig(); } @@ -254,18 +262,18 @@ public ArrayList getEventConfigs() { return configs; } - public void endRepetitiveEvents(){ - for(CEEvent event : plugin.getEventsManager().getEvents()){ - if(event.getRepetitiveManager() != null){ - event.getRepetitiveManager().end(); + public void endRepetitiveEvents() { + for (CEEvent event : plugin.getEventsManager().getEvents()) { + if (event.getRepetitiveManager() != null) { + event.getRepetitiveManager().stop(); } } } - public boolean reload(){ + public boolean reload() { endRepetitiveEvents(); - if(!mainConfigManager.reloadConfig()){ + if (!mainConfigManager.reloadConfig()) { return false; } diff --git a/src/main/java/ce/ajneb97/configs/DataFolderConfigManager.java b/src/main/java/ce/ajneb97/configs/DataFolderConfigManager.java index 488ea4b..f3fa3ce 100644 --- a/src/main/java/ce/ajneb97/configs/DataFolderConfigManager.java +++ b/src/main/java/ce/ajneb97/configs/DataFolderConfigManager.java @@ -6,11 +6,13 @@ import java.io.File; import java.util.ArrayList; +@SuppressWarnings("ResultOfMethodCallIgnored") public abstract class DataFolderConfigManager { + protected String folderName; protected ConditionalEvents plugin; - public DataFolderConfigManager(ConditionalEvents plugin, String folderName){ + public DataFolderConfigManager(ConditionalEvents plugin, String folderName) { this.plugin = plugin; this.folderName = folderName; } @@ -20,24 +22,23 @@ public void configure() { loadConfigs(); } - public void createFolder(){ + public void createFolder() { File folder; try { folder = new File(plugin.getDataFolder() + File.separator + folderName); - if(!folder.exists()){ + if (!folder.exists()) { folder.mkdirs(); createFiles(); } - } catch(SecurityException e) { - folder = null; + } catch (SecurityException ignored) { } } - public CommonConfig getConfigFile(String pathName,boolean create) { + public CommonConfig getConfigFile(String pathName, boolean create) { String pathFile = plugin.getDataFolder() + File.separator + folderName; File folder = new File(pathFile); File file = new File(folder, pathName); - if(!file.exists() && !create) { + if (!file.exists() && !create) { return null; } @@ -46,12 +47,15 @@ public CommonConfig getConfigFile(String pathName,boolean create) { return commonConfig; } - public ArrayList getConfigs(){ + public ArrayList getConfigs() { ArrayList configs = new ArrayList<>(); String pathFile = plugin.getDataFolder() + File.separator + folderName; File folder = new File(pathFile); File[] listOfFiles = folder.listFiles(); + + if (listOfFiles == null) return configs; + for (File file : listOfFiles) { if (file.isFile()) { String pathName = file.getName(); @@ -68,5 +72,5 @@ public ArrayList getConfigs(){ public abstract void loadConfigs(); - public abstract void saveConfigs(); + public abstract void saveAllData(); } diff --git a/src/main/java/ce/ajneb97/configs/EventsFolderConfigManager.java b/src/main/java/ce/ajneb97/configs/EventsFolderConfigManager.java index 9480a1a..2b60c28 100644 --- a/src/main/java/ce/ajneb97/configs/EventsFolderConfigManager.java +++ b/src/main/java/ce/ajneb97/configs/EventsFolderConfigManager.java @@ -1,10 +1,9 @@ package ce.ajneb97.configs; - import ce.ajneb97.ConditionalEvents; import ce.ajneb97.configs.model.CommonConfig; -public class EventsFolderConfigManager extends DataFolderConfigManager{ +public class EventsFolderConfigManager extends DataFolderConfigManager { public EventsFolderConfigManager(ConditionalEvents plugin, String folderName) { super(plugin, folderName); @@ -12,7 +11,7 @@ public EventsFolderConfigManager(ConditionalEvents plugin, String folderName) { @Override public void createFiles() { - new CommonConfig("more_events.yml",plugin,folderName,false).registerConfig(); + new CommonConfig("events.yml", plugin, folderName, false).registerConfig(); } @Override @@ -21,9 +20,7 @@ public void loadConfigs() { } @Override - public void saveConfigs() { + public void saveAllData() { } - - } diff --git a/src/main/java/ce/ajneb97/configs/MainConfigManager.java b/src/main/java/ce/ajneb97/configs/MainConfigManager.java index c1feccb..fdf338c 100644 --- a/src/main/java/ce/ajneb97/configs/MainConfigManager.java +++ b/src/main/java/ce/ajneb97/configs/MainConfigManager.java @@ -2,7 +2,7 @@ import ce.ajneb97.ConditionalEvents; import ce.ajneb97.configs.model.CommonConfig; -import ce.ajneb97.managers.MessagesManager; +import ce.ajneb97.manager.MessagesManager; import ce.ajneb97.model.ToConditionGroup; import org.bukkit.configuration.file.FileConfiguration; @@ -12,11 +12,13 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; +@SuppressWarnings("DataFlowIssue") public class MainConfigManager { - private CommonConfig configFile; - private ConditionalEvents plugin; + private final CommonConfig configFile; + private final ConditionalEvents plugin; private boolean updateNotifications; private boolean debugActions; @@ -24,14 +26,15 @@ public class MainConfigManager { private boolean itemMetaVariableEnabled; private boolean useMiniMessage; private ArrayList toConditionGroups; - public MainConfigManager(ConditionalEvents plugin){ + + public MainConfigManager(ConditionalEvents plugin) { this.plugin = plugin; - this.configFile = new CommonConfig("config.yml",plugin,null,false); + this.configFile = new CommonConfig("config.yml", plugin, null, false); configFile.registerConfig(); checkMessagesUpdate(); } - public void configure(){ + public void configure() { FileConfiguration config = configFile.getConfig(); updateNotifications = config.getBoolean("Config.update_notification"); @@ -41,9 +44,9 @@ public void configure(){ useMiniMessage = config.getBoolean("Config.use_minimessage"); toConditionGroups = new ArrayList<>(); String path = "Config.to_condition_groups"; - if(config.contains(path)){ - for(String key : config.getConfigurationSection(path).getKeys(false)){ - ToConditionGroup group = new ToConditionGroup(key,config.getStringList(path+"."+key)); + if (config.contains(path)) { + for (String key : config.getConfigurationSection(path).getKeys(false)) { + ToConditionGroup group = new ToConditionGroup(key, config.getStringList(path + "." + key)); toConditionGroups.add(group); } } @@ -61,53 +64,53 @@ public void configure(){ this.plugin.setMessagesManager(msgManager); } - public boolean reloadConfig(){ - if(!configFile.reloadConfig()){ + public boolean reloadConfig() { + if (!configFile.reloadConfig()) { return false; } configure(); return true; } - public FileConfiguration getConfig(){ + public FileConfiguration getConfig() { return configFile.getConfig(); } - public CommonConfig getConfigFile(){ + public CommonConfig getConfigFile() { return this.configFile; } - public void saveConfig(){ + public void saveConfig() { configFile.saveConfig(); } - public void checkMessagesUpdate(){ + public void checkMessagesUpdate() { Path pathConfig = Paths.get(configFile.getRoute()); - try{ + try { String text = new String(Files.readAllBytes(pathConfig)); - if(!text.contains("use_minimessage:")){ - getConfig().set("Config.use_minimessage",false); + if (!text.contains("use_minimessage:")) { + getConfig().set("Config.use_minimessage", false); configFile.saveConfig(); } - if(!text.contains("eventIsNotEnabled:")){ + if (!text.contains("eventIsNotEnabled:")) { getConfig().set("Messages.eventIsNotEnabled", "&cThat event is not enabled."); saveConfig(); } - if(!text.contains("item_meta_variable_enabled:")){ + if (!text.contains("item_meta_variable_enabled:")) { getConfig().set("Config.item_meta_variable_enabled", false); saveConfig(); } - if(!text.contains("commandInterruptError:")){ + if (!text.contains("commandInterruptError:")) { getConfig().set("Messages.commandInterruptError", "&cUse &7/ce interrupt (optional)"); getConfig().set("Messages.commandInterruptCorrect", "&aActions of event &7%event% &ainterrupted."); getConfig().set("Messages.commandInterruptCorrectPlayer", "&aActions of event &7%event% &ainterrupted for player &7%player%&a."); saveConfig(); } - if(!text.contains("variable_replacement:")){ + if (!text.contains("variable_replacement:")) { getConfig().set("Config.experimental.variable_replacement", false); saveConfig(); } - if(!text.contains("commandItemError:")){ + if (!text.contains("commandItemError:")) { getConfig().set("Messages.commandItemError", "&cUse &7/ce item "); getConfig().set("Messages.savedItemDoesNotExists", "&cThat saved item doesn't exists."); getConfig().set("Messages.savedItemRemoved", "&aItem &7%name% &aremoved."); @@ -116,55 +119,55 @@ public void checkMessagesUpdate(){ getConfig().set("Messages.savedItemAdded", "&aItem &7%name% &asaved."); saveConfig(); } - if(!text.contains("commandCallCorrectPlayer:")){ + if (!text.contains("commandCallCorrectPlayer:")) { getConfig().set("Messages.commandCallCorrectPlayer", "&aEvent &7%event% &asuccessfully executed for player &7%player%&a."); saveConfig(); } - if(!text.contains("playerNotOnline:")){ + if (!text.contains("playerNotOnline:")) { getConfig().set("Messages.playerNotOnline", "&cThat player is not online."); saveConfig(); } - if(!text.contains("debugEnabledPlayer:")){ + if (!text.contains("debugEnabledPlayer:")) { getConfig().set("Messages.debugEnabledPlayer", "&aDebug now enabled for event &7%event% &aand player &7%player%&a!"); getConfig().set("Messages.debugDisabledPlayer", "&aDebug disabled for event &7%event% &aand player &7%player%&a!"); getConfig().set("Config.debug_actions", true); saveConfig(); } - if(!text.contains("eventDataResetForAllPlayers:")){ + if (!text.contains("eventDataResetForAllPlayers:")) { getConfig().set("Messages.eventDataResetForAllPlayers", "&aData reset for &eall players &aon event &e%event%&a!"); getConfig().set("Messages.eventDataResetAllForAllPlayers", "&aAll player data reset."); saveConfig(); } - if(!text.contains("commandCallError:")){ + if (!text.contains("commandCallError:")) { getConfig().set("Messages.commandCallError", "&cUse &7/ce call (optional)%variable1%=;%variableN%="); getConfig().set("Messages.commandCallInvalidEvent", "&cYou can only execute a CALL event."); getConfig().set("Messages.commandCallCorrect", "&aEvent &7%event% &asuccessfully executed."); getConfig().set("Messages.commandCallFailed", "&cEvent &7%event% &ccould not be executed. Maybe a format error?"); saveConfig(); } - if(!text.contains("register_commands:")){ + if (!text.contains("register_commands:")) { List commands = new ArrayList<>(); getConfig().set("Config.register_commands", commands); saveConfig(); } - if(!text.contains("placeholderAPICooldownReady:")){ + if (!text.contains("placeholderAPICooldownReady:")) { getConfig().set("Messages.placeholderAPICooldownReady", "Ready!"); getConfig().set("Messages.placeholderAPICooldownNameError", "No event with that name!"); saveConfig(); } - if(!text.contains("eventDataResetAll:")){ + if (!text.contains("eventDataResetAll:")) { getConfig().set("Messages.eventDataResetAll", "&aAll data reset for player &e%player%&a!"); saveConfig(); } - if(!text.contains("eventDataReset:")){ + if (!text.contains("eventDataReset:")) { getConfig().set("Messages.eventDataReset", "&aData reset for player &e%player% &aon event &e%event%&a!"); saveConfig(); } - if(!text.contains("data_save_time:")){ + if (!text.contains("data_save_time:")) { getConfig().set("Config.data_save_time", 5); saveConfig(); } - if(!text.contains("commandDebugError:")){ + if (!text.contains("commandDebugError:")) { getConfig().set("Messages.commandDebugError", "&cUse &7/ce debug "); getConfig().set("Messages.debugEnabled", "&aDebug now enabled for event &7%event%&a!"); getConfig().set("Messages.debugDisabled", "&aDebug disabled for event &7%event%&a!"); @@ -172,8 +175,8 @@ public void checkMessagesUpdate(){ getConfig().set("Messages.playerDoesNotExists", "&cThat player doesn''t have any data."); saveConfig(); } - }catch(IOException e){ - e.printStackTrace(); + } catch (IOException e) { + plugin.getLogger().log(Level.WARNING, "Error while checking messages update.", e); } } @@ -185,9 +188,9 @@ public boolean isDebugActions() { return debugActions; } - public ToConditionGroup getToConditionGroup(String name){ - for(ToConditionGroup group : toConditionGroups){ - if(group.getName().equals(name)) { + public ToConditionGroup getToConditionGroup(String name) { + for (ToConditionGroup group : toConditionGroups) { + if (group.getName().equals(name)) { return group; } } diff --git a/src/main/java/ce/ajneb97/configs/PlayerConfigsManager.java b/src/main/java/ce/ajneb97/configs/PlayerConfigsManager.java new file mode 100644 index 0000000..d0efbc5 --- /dev/null +++ b/src/main/java/ce/ajneb97/configs/PlayerConfigsManager.java @@ -0,0 +1,119 @@ +package ce.ajneb97.configs; + +import ce.ajneb97.ConditionalEvents; +import ce.ajneb97.configs.model.CommonConfig; +import ce.ajneb97.model.player.EventData; +import ce.ajneb97.model.player.GenericCallback; +import ce.ajneb97.model.player.PlayerData; +import org.bukkit.configuration.file.FileConfiguration; + +import java.util.ArrayList; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicReference; + +@SuppressWarnings("DataFlowIssue") +public class PlayerConfigsManager extends DataFolderConfigManager { + + private final boolean isFolia; + + public PlayerConfigsManager(ConditionalEvents plugin, String folderName) { + super(plugin, folderName); + this.isFolia = plugin.isFolia; + } + + @Override + public void createFiles() { + } + + @Override + public void loadConfigs() { + // No use for player config + } + + public void loadData(UUID uuid, GenericCallback callback) { + Runnable asyncTask = () -> { + AtomicReference playerData = new AtomicReference<>(); + + CommonConfig playerConfig = getConfigFile(uuid + ".yml", false); + if (playerConfig != null) { + // If config exists + FileConfiguration config = playerConfig.getConfig(); + String name = config.getString("name"); + + playerData.set(new PlayerData(uuid, name)); + ArrayList eventData = new ArrayList<>(); + if (config.contains("events")) { + for (String key : config.getConfigurationSection("events").getKeys(false)) { + boolean oneTime = config.getBoolean("events." + key + ".one_time"); + long cooldown = config.getLong("events." + key + ".cooldown"); + EventData event = new EventData(key, cooldown, oneTime); + + eventData.add(event); + } + } + playerData.get().setEventData(eventData); + } + + Runnable mainThreadTask = () -> callback.onDone(playerData.get()); + + if (isFolia) { + plugin.getServer().getGlobalRegionScheduler().execute(plugin, mainThreadTask); + } else { + plugin.getServer().getScheduler().runTask(plugin, mainThreadTask); + } + }; + + if (isFolia) { + plugin.getServer().getAsyncScheduler().runNow(plugin, scheduledTask -> asyncTask.run()); + } else { + plugin.getServer().getScheduler().runTaskAsynchronously(plugin, asyncTask); + } + } + + public void saveData(PlayerData player) { + String playerName = player.getName(); + CommonConfig playerConfig = getConfigFile(player.getUuid().toString() + ".yml", true); + FileConfiguration players = playerConfig.getConfig(); + + players.set("name", playerName); + players.set("events", null); + + for (EventData event : player.getEventData()) { + String path = "events." + event.getName(); + players.set(path + ".one_time", event.isOneTime()); + players.set(path + ".cooldown", event.getCooldown()); + } + + playerConfig.saveConfig(); + } + + @Override + public void saveAllData() { + Map players = plugin.getPlayerManager().getPlayers(); + for (Map.Entry entry : players.entrySet()) { + PlayerData playerData = entry.getValue(); + if (playerData.isModified()) { + saveData(playerData); + } + playerData.setModified(false); + } + } + + public void resetDataForAllPlayers(String eventName) { + ArrayList configs = getConfigs(); + for (CommonConfig commonConfig : configs) { + FileConfiguration config = commonConfig.getConfig(); + if (eventName.equals("all")) { + config.set("events", null); + } else { + if (!config.contains("events." + eventName)) { + continue; + } + config.set("events." + eventName, null); + } + + commonConfig.saveConfig(); + } + } +} \ No newline at end of file diff --git a/src/main/java/ce/ajneb97/configs/PlayersConfigsManager.java b/src/main/java/ce/ajneb97/configs/PlayersConfigsManager.java deleted file mode 100644 index 7e6a995..0000000 --- a/src/main/java/ce/ajneb97/configs/PlayersConfigsManager.java +++ /dev/null @@ -1,113 +0,0 @@ -package ce.ajneb97.configs; - -import ce.ajneb97.ConditionalEvents; -import ce.ajneb97.configs.model.CommonConfig; -import ce.ajneb97.model.player.EventData; -import ce.ajneb97.model.player.GenericCallback; -import ce.ajneb97.model.player.PlayerData; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.scheduler.BukkitRunnable; - -import java.util.ArrayList; -import java.util.Map; -import java.util.UUID; - -public class PlayersConfigsManager extends DataFolderConfigManager{ - - public PlayersConfigsManager(ConditionalEvents plugin, String folderName) { - super(plugin, folderName); - } - - @Override - public void createFiles() { - - } - - @Override - public void loadConfigs() { - // No use for player config - } - - public void loadConfig(UUID uuid, GenericCallback callback){ - new BukkitRunnable(){ - @Override - public void run() { - PlayerData playerData = null; - CommonConfig playerConfig = getConfigFile(uuid+".yml",false); - if(playerConfig != null){ - // If config exists - FileConfiguration config = playerConfig.getConfig(); - String name = config.getString("name"); - - playerData = new PlayerData(uuid,name); - ArrayList eventData = new ArrayList<>(); - if(config.contains("events")){ - for(String key : config.getConfigurationSection("events").getKeys(false)){ - boolean oneTime = config.getBoolean("events."+key+".one_time"); - long cooldown = config.getLong("events."+key+".cooldown"); - EventData event = new EventData(key,cooldown,oneTime); - - eventData.add(event); - } - } - playerData.setEventData(eventData); - } - - PlayerData finalPlayer = playerData; - - new BukkitRunnable(){ - @Override - public void run() { - callback.onDone(finalPlayer); - } - }.runTask(plugin); - } - }.runTaskAsynchronously(plugin); - } - - public void saveConfig(PlayerData player){ - String playerName = player.getName(); - CommonConfig playerConfig = getConfigFile(player.getUuid().toString()+".yml",true); - FileConfiguration players = playerConfig.getConfig(); - - players.set("name", playerName); - players.set("events", null); - - for(EventData event : player.getEventData()){ - String path = "events."+event.getName(); - players.set(path+".one_time", event.isOneTime()); - players.set(path+".cooldown", event.getCooldown()); - } - - playerConfig.saveConfig(); - } - - @Override - public void saveConfigs() { - Map players = plugin.getPlayerManager().getPlayers(); - for(Map.Entry entry : players.entrySet()) { - PlayerData playerData = entry.getValue(); - if(playerData.isModified()){ - saveConfig(playerData); - } - playerData.setModified(false); - } - } - - public void resetDataForAllPlayers(String eventName){ - ArrayList configs = getConfigs(); - for(CommonConfig commonConfig : configs) { - FileConfiguration config = commonConfig.getConfig(); - if(eventName.equals("all")){ - config.set("events",null); - }else{ - if(!config.contains("events."+eventName)){ - continue; - } - config.set("events."+eventName,null); - } - - commonConfig.saveConfig(); - } - } -} diff --git a/src/main/java/ce/ajneb97/configs/SavedItemsConfigManager.java b/src/main/java/ce/ajneb97/configs/SavedItemsConfigManager.java index f573b56..166a41f 100644 --- a/src/main/java/ce/ajneb97/configs/SavedItemsConfigManager.java +++ b/src/main/java/ce/ajneb97/configs/SavedItemsConfigManager.java @@ -4,63 +4,53 @@ import ce.ajneb97.configs.model.CommonConfig; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.inventory.ItemStack; + import java.util.HashMap; import java.util.Map; +@SuppressWarnings("DataFlowIssue") public class SavedItemsConfigManager { - private CommonConfig configFile; - private ConditionalEvents plugin; + private final CommonConfig configFile; + private final ConditionalEvents plugin; - public SavedItemsConfigManager(ConditionalEvents plugin){ + public SavedItemsConfigManager(ConditionalEvents plugin) { this.plugin = plugin; - this.configFile = new CommonConfig("saved_items.yml",plugin,null,false); + this.configFile = new CommonConfig("saved_items.yml", plugin, null, false); configFile.registerConfig(); } - public void configure(){ + public void configure() { Map savedItems = new HashMap<>(); FileConfiguration config = configFile.getConfig(); - if(config.contains("items")){ - for(String key : config.getConfigurationSection("items").getKeys(false)){ - ItemStack item = config.getItemStack("items."+key); - savedItems.put(key,item); + if (config.contains("items")) { + for (String key : config.getConfigurationSection("items").getKeys(false)) { + ItemStack item = config.getItemStack("items." + key); + savedItems.put(key, item); } } plugin.getSavedItemsManager().setSavedItems(savedItems); } - public void saveItem(String name,ItemStack item){ + public void saveItem(String name, ItemStack item) { FileConfiguration config = configFile.getConfig(); - config.set("items."+name,item); + config.set("items." + name, item); saveConfig(); } - public void removeItem(String name){ + public void removeItem(String name) { FileConfiguration config = configFile.getConfig(); - config.set("items."+name,null); + config.set("items." + name, null); saveConfig(); } - public boolean reloadConfig(){ - if(!configFile.reloadConfig()){ - return false; - } - configure(); - return true; - } - - public FileConfiguration getConfig(){ + public FileConfiguration getConfig() { return configFile.getConfig(); } - public CommonConfig getConfigFile(){ - return this.configFile; - } - - public void saveConfig(){ + public void saveConfig() { configFile.saveConfig(); } } diff --git a/src/main/java/ce/ajneb97/configs/model/CommonConfig.java b/src/main/java/ce/ajneb97/configs/model/CommonConfig.java index 270f89e..65219a0 100644 --- a/src/main/java/ce/ajneb97/configs/model/CommonConfig.java +++ b/src/main/java/ce/ajneb97/configs/model/CommonConfig.java @@ -8,18 +8,19 @@ import java.io.File; import java.io.IOException; +@SuppressWarnings("ResultOfMethodCallIgnored") public class CommonConfig { - private String fileName; + private final String fileName; private FileConfiguration fileConfiguration = null; private File file = null; private String route; - private ConditionalEvents plugin; - private String folderName; - private boolean newFile; + private final ConditionalEvents plugin; + private final String folderName; + private final boolean newFile; private boolean isFirstTime; - public CommonConfig(String fileName, ConditionalEvents plugin, String folderName, boolean newFile){ + public CommonConfig(String fileName, ConditionalEvents plugin, String folderName, boolean newFile) { this.fileName = fileName; this.plugin = plugin; this.newFile = newFile; @@ -27,31 +28,31 @@ public CommonConfig(String fileName, ConditionalEvents plugin, String folderName this.isFirstTime = false; } - public String getPath(){ + public String getPath() { return this.fileName; } - public void registerConfig(){ - if(folderName != null){ - file = new File(plugin.getDataFolder() +File.separator + folderName,fileName); - }else{ + public void registerConfig() { + if (folderName != null) { + file = new File(plugin.getDataFolder() + File.separator + folderName, fileName); + } else { file = new File(plugin.getDataFolder(), fileName); } route = file.getPath(); - if(!file.exists()){ + if (!file.exists()) { isFirstTime = true; - if(newFile) { + if (newFile) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } - }else { - if(folderName != null){ - plugin.saveResource(folderName+File.separator+fileName, false); - }else{ + } else { + if (folderName != null) { + plugin.saveResource(folderName + File.separator + fileName, false); + } else { plugin.saveResource(fileName, false); } @@ -61,12 +62,11 @@ public void registerConfig(){ fileConfiguration = new YamlConfiguration(); try { fileConfiguration.load(file); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { + } catch (IOException | InvalidConfigurationException e) { e.printStackTrace(); } } + public void saveConfig() { try { fileConfiguration.save(file); @@ -84,16 +84,16 @@ public FileConfiguration getConfig() { public boolean reloadConfig() { if (fileConfiguration == null) { - if(folderName != null){ - file = new File(plugin.getDataFolder() +File.separator + folderName, fileName); - }else{ + if (folderName != null) { + file = new File(plugin.getDataFolder() + File.separator + folderName, fileName); + } else { file = new File(plugin.getDataFolder(), fileName); } } fileConfiguration = YamlConfiguration.loadConfiguration(file); - if(file != null) { + if (file != null) { YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(file); fileConfiguration.setDefaults(defConfig); } @@ -104,11 +104,7 @@ public String getRoute() { return route; } - public boolean isFirstTime() { - return isFirstTime; - } - - public void setFirstTime(boolean firstTime) { - isFirstTime = firstTime; + public File getFile() { + return file; } } diff --git a/src/main/java/ce/ajneb97/libs/actionbar/ActionBarAPI.java b/src/main/java/ce/ajneb97/libs/actionbar/ActionBarAPI.java index 69102e8..c7843eb 100644 --- a/src/main/java/ce/ajneb97/libs/actionbar/ActionBarAPI.java +++ b/src/main/java/ce/ajneb97/libs/actionbar/ActionBarAPI.java @@ -4,7 +4,7 @@ import java.lang.reflect.Method; import ce.ajneb97.api.ConditionalEventsAPI; -import ce.ajneb97.managers.MessagesManager; +import ce.ajneb97.manager.MessagesManager; import ce.ajneb97.utils.MiniMessageUtils; import ce.ajneb97.utils.OtherUtils; import org.bukkit.Bukkit; @@ -14,96 +14,104 @@ import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.TextComponent; -public class ActionBarAPI -{ - +@SuppressWarnings("deprecation") +public class ActionBarAPI { public static void sendActionBar(Player player, String message) { - if(OtherUtils.isNew()) { - if(ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()){ - MiniMessageUtils.actionbar(player,message); - }else{ - player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(MessagesManager.getLegacyColoredMessage(message))); - } - return; - } - message = MessagesManager.getLegacyColoredMessage(message); - boolean useOldMethods = false; - String nmsver = Bukkit.getServer().getClass().getPackage().getName(); - nmsver = nmsver.substring(nmsver.lastIndexOf(".") + 1); - if ((nmsver.equalsIgnoreCase("v1_8_R1")) || (nmsver.startsWith("v1_7_"))) { - useOldMethods = true; - } - if (!player.isOnline()) { - return; // Player may have logged out - } + if (OtherUtils.isNew()) { + if (ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + MiniMessageUtils.actionbar(player, message); + } else { + player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(MessagesManager.getLegacyColoredMessage(message))); + } + return; + } + message = MessagesManager.getLegacyColoredMessage(message); + boolean useOldMethods = false; + String nmsver = Bukkit.getServer().getClass().getPackage().getName(); + nmsver = nmsver.substring(nmsver.lastIndexOf(".") + 1); + if ((nmsver.equalsIgnoreCase("v1_8_R1")) || (nmsver.startsWith("v1_7_"))) { + useOldMethods = true; + } + if (!player.isOnline()) { + return; // Player may have logged out + } - try { - Class craftPlayerClass = Class.forName("org.bukkit.craftbukkit." + nmsver + ".entity.CraftPlayer"); - Object craftPlayer = craftPlayerClass.cast(player); - Object packet; - Class packetPlayOutChatClass = Class.forName("net.minecraft.server." + nmsver + ".PacketPlayOutChat"); - Class packetClass = Class.forName("net.minecraft.server." + nmsver + ".Packet"); - if (useOldMethods) { - Class chatSerializerClass = Class.forName("net.minecraft.server." + nmsver + ".ChatSerializer"); - Class iChatBaseComponentClass = Class.forName("net.minecraft.server." + nmsver + ".IChatBaseComponent"); - Method m3 = chatSerializerClass.getDeclaredMethod("a", String.class); - Object cbc = iChatBaseComponentClass.cast(m3.invoke(chatSerializerClass, "{\"text\": \"" + message + "\"}")); - packet = packetPlayOutChatClass.getConstructor(new Class[]{iChatBaseComponentClass, byte.class}).newInstance(cbc, (byte) 2); - } else { - Class chatComponentTextClass = Class.forName("net.minecraft.server." + nmsver + ".ChatComponentText"); - Class iChatBaseComponentClass = Class.forName("net.minecraft.server." + nmsver + ".IChatBaseComponent"); - try { + try { + Class craftPlayerClass = Class.forName("org.bukkit.craftbukkit." + nmsver + ".entity.CraftPlayer"); + Object craftPlayer = craftPlayerClass.cast(player); + Object packet; + Class packetPlayOutChatClass = Class.forName("net.minecraft.server." + nmsver + ".PacketPlayOutChat"); + Class packetClass = Class.forName("net.minecraft.server." + nmsver + ".Packet"); + if (useOldMethods) { + Class chatSerializerClass = Class.forName("net.minecraft.server." + nmsver + ".ChatSerializer"); + Class iChatBaseComponentClass = Class.forName("net.minecraft.server." + nmsver + ".IChatBaseComponent"); + Method m3 = chatSerializerClass.getDeclaredMethod("a", String.class); + Object cbc = iChatBaseComponentClass.cast(m3.invoke(chatSerializerClass, "{\"text\": \"" + message + "\"}")); + packet = packetPlayOutChatClass.getConstructor(new Class[]{iChatBaseComponentClass, byte.class}).newInstance(cbc, (byte) 2); + } else { + Class chatComponentTextClass = Class.forName("net.minecraft.server." + nmsver + ".ChatComponentText"); + Class iChatBaseComponentClass = Class.forName("net.minecraft.server." + nmsver + ".IChatBaseComponent"); + try { - Class chatMessageTypeClass = Class.forName("net.minecraft.server." + nmsver + ".ChatMessageType"); - Object[] chatMessageTypes = chatMessageTypeClass.getEnumConstants(); - Object chatMessageType = null; - for (Object obj : chatMessageTypes) { - if (obj.toString().equals("GAME_INFO")) { - chatMessageType = obj; - } - } - Object chatCompontentText = chatComponentTextClass.getConstructor(new Class[]{String.class}).newInstance(message); - packet = packetPlayOutChatClass.getConstructor(new Class[]{iChatBaseComponentClass, chatMessageTypeClass}).newInstance(chatCompontentText, chatMessageType); - } catch (ClassNotFoundException cnfe) { - Object chatCompontentText = chatComponentTextClass.getConstructor(new Class[]{String.class}).newInstance(message); - packet = packetPlayOutChatClass.getConstructor(new Class[]{iChatBaseComponentClass, byte.class}).newInstance(chatCompontentText, (byte) 2); - } - } - Method craftPlayerHandleMethod = craftPlayerClass.getDeclaredMethod("getHandle"); - Object craftPlayerHandle = craftPlayerHandleMethod.invoke(craftPlayer); - Field playerConnectionField = craftPlayerHandle.getClass().getDeclaredField("playerConnection"); - Object playerConnection = playerConnectionField.get(craftPlayerHandle); - Method sendPacketMethod = playerConnection.getClass().getDeclaredMethod("sendPacket", packetClass); - sendPacketMethod.invoke(playerConnection, packet); - } catch (Exception e) { - e.printStackTrace(); - } + Class chatMessageTypeClass = Class.forName("net.minecraft.server." + nmsver + ".ChatMessageType"); + Object[] chatMessageTypes = chatMessageTypeClass.getEnumConstants(); + Object chatMessageType = null; + for (Object obj : chatMessageTypes) { + if (obj.toString().equals("GAME_INFO")) { + chatMessageType = obj; + } + } + Object chatCompontentText = chatComponentTextClass.getConstructor(new Class[]{String.class}).newInstance(message); + packet = packetPlayOutChatClass.getConstructor(new Class[]{iChatBaseComponentClass, chatMessageTypeClass}).newInstance(chatCompontentText, chatMessageType); + } catch (ClassNotFoundException cnfe) { + Object chatCompontentText = chatComponentTextClass.getConstructor(new Class[]{String.class}).newInstance(message); + packet = packetPlayOutChatClass.getConstructor(new Class[]{iChatBaseComponentClass, byte.class}).newInstance(chatCompontentText, (byte) 2); + } + } + Method craftPlayerHandleMethod = craftPlayerClass.getDeclaredMethod("getHandle"); + Object craftPlayerHandle = craftPlayerHandleMethod.invoke(craftPlayer); + Field playerConnectionField = craftPlayerHandle.getClass().getDeclaredField("playerConnection"); + Object playerConnection = playerConnectionField.get(craftPlayerHandle); + Method sendPacketMethod = playerConnection.getClass().getDeclaredMethod("sendPacket", packetClass); + sendPacketMethod.invoke(playerConnection, packet); + } catch (Exception e) { + e.printStackTrace(); + } } - - public static void sendActionBar(final Player player, final String message, int duration,ConditionalEvents plugin) { - sendActionBar(player, message); - - if (duration > 0) { - // Sends empty message at the end of the duration. Allows messages shorter than 3 seconds, ensures precision. - new BukkitRunnable() { - @Override - public void run() { - sendActionBar(player, ""); - } - }.runTaskLater(plugin, duration + 1); - } - // Re-sends the messages every 3 seconds so it doesn't go away from the player's screen. - while (duration > 40) { - duration -= 40; - new BukkitRunnable() { - @Override - public void run() { - sendActionBar(player, message); - } - }.runTaskLater(plugin, (long) duration); - } - } + public static void sendActionBar(final Player player, final String message, int duration, ConditionalEvents plugin) { + sendActionBar(player, message); + + if (duration > 0) { + // Sends an empty message at the end of the duration. Allows messages shorter than 3 seconds, ensures precision. + if (plugin.isFolia) { + player.getScheduler().runDelayed(plugin, (t) -> sendActionBar(player, ""), null, duration + 1); + } else { + new BukkitRunnable() { + @Override + public void run() { + sendActionBar(player, ""); + } + }.runTaskLater(plugin, duration + 1); + } + } + + // Re-sends the messages every 3 seconds so it doesn't go away from the player's screen. + while (duration > 40) { + duration -= 40; + final int finalDuration = duration; + if (plugin.isFolia) { + player.getScheduler().runDelayed(plugin, (t) -> sendActionBar(player, message), null, finalDuration); + } else { + new BukkitRunnable() { + @Override + public void run() { + sendActionBar(player, message); + } + }.runTaskLater(plugin, finalDuration); + } + } + } } diff --git a/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorEquipEvent.java b/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorEquipEvent.java index 23552de..b08520a 100644 --- a/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorEquipEvent.java +++ b/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorEquipEvent.java @@ -5,137 +5,139 @@ import org.bukkit.event.HandlerList; import org.bukkit.event.player.PlayerEvent; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; /** * @author Arnah * @since Jul 30, 2015 */ -public final class ArmorEquipEvent extends PlayerEvent implements Cancellable{ +@SuppressWarnings("unused") +public final class ArmorEquipEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private final EquipMethod equipType; - private final ArmorType type; - private ItemStack oldArmorPiece, newArmorPiece; + private static final HandlerList handlers = new HandlerList(); + private boolean cancel = false; + private final EquipMethod equipType; + private final ArmorType type; + private ItemStack oldArmorPiece, newArmorPiece; - /** - * @param player The player who put on / removed the armor. - * @param type The ArmorType of the armor added - * @param oldArmorPiece The ItemStack of the armor removed. - * @param newArmorPiece The ItemStack of the armor added. - */ - public ArmorEquipEvent(final Player player, final EquipMethod equipType, final ArmorType type, final ItemStack oldArmorPiece, final ItemStack newArmorPiece){ - super(player); - this.equipType = equipType; - this.type = type; - this.oldArmorPiece = oldArmorPiece; - this.newArmorPiece = newArmorPiece; - } + /** + * @param player The player who put on / removed the armor. + * @param type The ArmorType of the armor added + * @param oldArmorPiece The ItemStack of the armor removed. + * @param newArmorPiece The ItemStack of the armor added. + */ + public ArmorEquipEvent(final Player player, final EquipMethod equipType, final ArmorType type, final ItemStack oldArmorPiece, final ItemStack newArmorPiece) { + super(player); + this.equipType = equipType; + this.type = type; + this.oldArmorPiece = oldArmorPiece; + this.newArmorPiece = newArmorPiece; + } - /** - * Gets a list of handlers handling this event. - * - * @return A list of handlers handling this event. - */ - public static HandlerList getHandlerList(){ - return handlers; - } + /** + * Gets a list of handlers handling this event. + * + * @return A list of handlers handling this event. + */ + public static HandlerList getHandlerList() { + return handlers; + } - /** - * Gets a list of handlers handling this event. - * - * @return A list of handlers handling this event. - */ - @Override - public final HandlerList getHandlers(){ - return handlers; - } + /** + * Gets a list of handlers handling this event. + * + * @return A list of handlers handling this event. + */ + @Override + public @NotNull HandlerList getHandlers() { + return handlers; + } - /** - * Sets if this event should be cancelled. - * - * @param cancel If this event should be cancelled. - */ - public final void setCancelled(final boolean cancel){ - this.cancel = cancel; - } + /** + * Sets if this event should be canceled. + * + * @param cancel If this event should be canceled. + */ + public void setCancelled(final boolean cancel) { + this.cancel = cancel; + } - /** - * Gets if this event is cancelled. - * - * @return If this event is cancelled - */ - public final boolean isCancelled(){ - return cancel; - } + /** + * Gets if this event is canceled. + * + * @return If this event is canceled + */ + public boolean isCancelled() { + return cancel; + } - public final ArmorType getType(){ - return type; - } + public ArmorType getType() { + return type; + } - /** - * Returns the last equipped armor piece, could be a piece of armor, or null - */ - public final ItemStack getOldArmorPiece(){ - return oldArmorPiece; - } + /** + * Returns the last equipped armor piece, could be a piece of armor, or null + */ + public ItemStack getOldArmorPiece() { + return oldArmorPiece; + } - public final void setOldArmorPiece(final ItemStack oldArmorPiece){ - this.oldArmorPiece = oldArmorPiece; - } + public void setOldArmorPiece(final ItemStack oldArmorPiece) { + this.oldArmorPiece = oldArmorPiece; + } - /** - * Returns the newly equipped armor, could be a piece of armor, or null - */ - public final ItemStack getNewArmorPiece(){ - return newArmorPiece; - } + /** + * Returns the newly equipped armor, could be a piece of armor, or null + */ + public ItemStack getNewArmorPiece() { + return newArmorPiece; + } - public final void setNewArmorPiece(final ItemStack newArmorPiece){ - this.newArmorPiece = newArmorPiece; - } + public void setNewArmorPiece(final ItemStack newArmorPiece) { + this.newArmorPiece = newArmorPiece; + } - /** - * Gets the method used to either equip or unequip an armor piece. - */ - public EquipMethod getMethod(){ - return equipType; - } + /** + * Gets the method used to either equip or unequip an armor piece. + */ + public EquipMethod getMethod() { + return equipType; + } - public enum EquipMethod{// These have got to be the worst documentations ever. - /** - * When you shift click an armor piece to equip or unequip - */ - SHIFT_CLICK, - /** - * When you drag and drop the item to equip or unequip - */ - DRAG, - /** - * When you manually equip or unequip the item. Use to be DRAG - */ - PICK_DROP, - /** - * When you right click an armor piece in the hotbar without the inventory open to equip. - */ - HOTBAR, - /** - * When you press the hotbar slot number while hovering over the armor slot to equip or unequip - */ - HOTBAR_SWAP, - /** - * When in range of a dispenser that shoots an armor piece to equip.
- * Requires the spigot version to have {@link org.bukkit.event.block.BlockDispenseArmorEvent} implemented. - */ - DISPENSER, - /** - * When an armor piece is removed due to it losing all durability. - */ - BROKE, - /** - * When you die causing all armor to unequip - */ - DEATH, - ; - } + @SuppressWarnings("unused") + public enum EquipMethod {// These have got to be the worst documentations ever. + /** + * When you shift click an armor piece to equip or unequip + */ + SHIFT_CLICK, + /** + * When you drag and drop the item to equip or unequip + */ + DRAG, + /** + * When you manually equip or unequip the item. Use to be DRAG + */ + PICK_DROP, + /** + * When you right-click an armor piece in the hotbar without the inventory open to equip. + */ + HOTBAR, + /** + * When you press the hotbar slot number while hovering over the armor slot to equip or unequip + */ + HOTBAR_SWAP, + /** + * When in range of a dispenser that shoots an armor piece to equip.
+ * Requires the spigot version to have {@link org.bukkit.event.block.BlockDispenseArmorEvent} implemented. + */ + DISPENSER, + /** + * When an armor piece is removed due to it losing all durability. + */ + BROKE, + /** + * When you die causing all armor to unequip + */ + DEATH, + } } diff --git a/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorListener.java b/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorListener.java index d298e6b..72d888b 100644 --- a/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorListener.java +++ b/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorListener.java @@ -27,224 +27,226 @@ * @author Arnah * @since Jul 30, 2015 */ -public class ArmorListener implements Listener{ - - private final List blockedMaterials; - - public ArmorListener(List blockedMaterials){ - this.blockedMaterials = blockedMaterials; - } - //Event Priority is highest because other plugins might cancel the events before we check. - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public final void inventoryClick(final InventoryClickEvent e){ - boolean shift = false, numberkey = false; - if(e.isCancelled()) return; - if(e.getAction() == InventoryAction.NOTHING) return;// Why does this get called if nothing happens?? - if(e.getClick().equals(ClickType.SHIFT_LEFT) || e.getClick().equals(ClickType.SHIFT_RIGHT)){ - shift = true; - } - if(e.getClick().equals(ClickType.NUMBER_KEY)){ - numberkey = true; - } - if(e.getSlotType() != SlotType.ARMOR && e.getSlotType() != SlotType.QUICKBAR && e.getSlotType() != SlotType.CONTAINER) return; - if(e.getClickedInventory() != null && !e.getClickedInventory().getType().equals(InventoryType.PLAYER)) return; - if (!e.getInventory().getType().equals(InventoryType.CRAFTING) && !e.getInventory().getType().equals(InventoryType.PLAYER)) return; - if(!(e.getWhoClicked() instanceof Player)) return; - ArmorType newArmorType = ArmorType.matchType(shift ? e.getCurrentItem() : e.getCursor()); - if(!shift && newArmorType != null && e.getRawSlot() != newArmorType.getSlot()){ - // Used for drag and drop checking to make sure you aren't trying to place a helmet in the boots slot. - return; - } - if(shift){ - newArmorType = ArmorType.matchType(e.getCurrentItem()); - if(newArmorType != null){ - boolean equipping = true; - if(e.getRawSlot() == newArmorType.getSlot()){ - equipping = false; - } - if(newArmorType.equals(ArmorType.HELMET) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getHelmet()) : !isAirOrNull(e.getWhoClicked().getInventory().getHelmet())) || newArmorType.equals(ArmorType.CHESTPLATE) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getChestplate()) : !isAirOrNull(e.getWhoClicked().getInventory().getChestplate())) || newArmorType.equals(ArmorType.LEGGINGS) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getLeggings()) : !isAirOrNull(e.getWhoClicked().getInventory().getLeggings())) || newArmorType.equals(ArmorType.BOOTS) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getBoots()) : !isAirOrNull(e.getWhoClicked().getInventory().getBoots()))){ - ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), EquipMethod.SHIFT_CLICK, newArmorType, equipping ? null : e.getCurrentItem(), equipping ? e.getCurrentItem() : null); - Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); - if(armorEquipEvent.isCancelled()){ - e.setCancelled(true); - } - } - } - }else{ - ItemStack newArmorPiece = e.getCursor(); - ItemStack oldArmorPiece = e.getCurrentItem(); - if(numberkey){ - if(e.getClickedInventory().getType().equals(InventoryType.PLAYER)){// Prevents shit in the 2by2 crafting - // e.getClickedInventory() == The players inventory - // e.getHotBarButton() == key people are pressing to equip or unequip the item to or from. - // e.getRawSlot() == The slot the item is going to. - // e.getSlot() == Armor slot, can't use e.getRawSlot() as that gives a hotbar slot ;-; - ItemStack hotbarItem = e.getClickedInventory().getItem(e.getHotbarButton()); - if(!isAirOrNull(hotbarItem)){// Equipping - newArmorType = ArmorType.matchType(hotbarItem); - newArmorPiece = hotbarItem; - oldArmorPiece = e.getClickedInventory().getItem(e.getSlot()); - }else{// Unequipping - newArmorType = ArmorType.matchType(!isAirOrNull(e.getCurrentItem()) ? e.getCurrentItem() : e.getCursor()); - } - } - }else{ - ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(isAirOrNull(e.getCursor()) && !isAirOrNull(e.getCurrentItem())){// unequip with no new item going into the slot. - newArmorType = ArmorType.matchType(e.getCurrentItem()); - } - if(ConditionalEvents.serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_9_R1)){ - ItemStack offhandItem = e.getWhoClicked().getInventory().getItemInOffHand(); - if(e.getSlotType() == SlotType.ARMOR && !isAirOrNull(offhandItem)){ - ArmorType offhandArmorType = ArmorType.matchType(offhandItem); - if(offhandArmorType != null){ - newArmorType = offhandArmorType; - newArmorPiece = offhandItem; - } - } - } - } - if(newArmorType != null && e.getRawSlot() == newArmorType.getSlot()){ - EquipMethod method = EquipMethod.PICK_DROP; - if(e.getAction().equals(InventoryAction.HOTBAR_SWAP) || numberkey) method = EquipMethod.HOTBAR_SWAP; - ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), method, newArmorType, oldArmorPiece, newArmorPiece); - Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); - if(armorEquipEvent.isCancelled()){ - e.setCancelled(true); - } - } - } - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void playerInteractEvent(PlayerInteractEvent e){ - if(e.useItemInHand().equals(Result.DENY))return; - // - if(e.getAction() == Action.PHYSICAL) return; - if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK){ - Player player = e.getPlayer(); - if(!e.useInteractedBlock().equals(Result.DENY)){ - if(e.getClickedBlock() != null && e.getAction() == Action.RIGHT_CLICK_BLOCK && !player.isSneaking()){// Having both of these checks is useless, might as well do it though. - // Some blocks have actions when you right click them which stops the client from equipping the armor in hand. - Material mat = e.getClickedBlock().getType(); - for(String s : blockedMaterials){ - if(mat.name().equalsIgnoreCase(s)) return; - } - } - } - - ArmorType newArmorType = ArmorType.matchType(e.getItem()); - if(newArmorType != null && !isHead(e.getItem())){ - ServerVersion serverVersion = ConditionalEvents.serverVersion; - - ItemStack newArmorPiece = e.getItem(); - ItemStack oldArmorPiece = null; - - if(ConditionalEvents.serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_20_R1)){ - switch(newArmorType){ - case HELMET: - oldArmorPiece = player.getInventory().getHelmet(); - break; - case CHESTPLATE: - oldArmorPiece = player.getInventory().getChestplate(); - break; - case LEGGINGS: - oldArmorPiece = player.getInventory().getLeggings(); - break; - case BOOTS: - oldArmorPiece = player.getInventory().getBoots(); - break; - } - }else{ - if(!(newArmorType.equals(ArmorType.HELMET) && isAirOrNull(e.getPlayer().getInventory().getHelmet()) || newArmorType.equals(ArmorType.CHESTPLATE) && isAirOrNull(e.getPlayer().getInventory().getChestplate()) || newArmorType.equals(ArmorType.LEGGINGS) && isAirOrNull(e.getPlayer().getInventory().getLeggings()) || newArmorType.equals(ArmorType.BOOTS) && isAirOrNull(e.getPlayer().getInventory().getBoots()))){ - return; - } - } - - ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(e.getPlayer(), EquipMethod.HOTBAR, ArmorType.matchType(newArmorPiece), oldArmorPiece, newArmorPiece); - Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); - if(armorEquipEvent.isCancelled()){ - e.setCancelled(true); - PlayerUtils.updatePlayerInventory(player); - } - } - } - } - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void inventoryDrag(InventoryDragEvent event){ - // getType() seems to always be even. - // Old Cursor gives the item you are equipping - // Raw slot is the ArmorType slot - // Can't replace armor using this method making getCursor() useless. - ArmorType type = ArmorType.matchType(event.getOldCursor()); - if(event.getRawSlots().isEmpty()) return;// Idk if this will ever happen - if(type != null && type.getSlot() == event.getRawSlots().stream().findFirst().orElse(0)){ - ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) event.getWhoClicked(), EquipMethod.DRAG, type, null, event.getOldCursor()); - Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); - if(armorEquipEvent.isCancelled()){ - event.setResult(Result.DENY); - event.setCancelled(true); - } - } - } - - @EventHandler - public void itemBreakEvent(PlayerItemBreakEvent e){ - ArmorType type = ArmorType.matchType(e.getBrokenItem()); - if(type != null){ - Player p = e.getPlayer(); - ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(p, EquipMethod.BROKE, type, e.getBrokenItem(), null); - Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); - if(armorEquipEvent.isCancelled()){ - ItemStack i = e.getBrokenItem().clone(); - i.setAmount(1); - i.setDurability((short) (i.getDurability() - 1)); - if(type.equals(ArmorType.HELMET)){ - p.getInventory().setHelmet(i); - }else if(type.equals(ArmorType.CHESTPLATE)){ - p.getInventory().setChestplate(i); - }else if(type.equals(ArmorType.LEGGINGS)){ - p.getInventory().setLeggings(i); - }else if(type.equals(ArmorType.BOOTS)){ - p.getInventory().setBoots(i); - } - } - } - } - - @EventHandler - public void playerDeathEvent(PlayerDeathEvent e){ - Player p = e.getEntity(); - if(e.getKeepInventory()) return; - for(ItemStack i : p.getInventory().getArmorContents()){ - if(!isAirOrNull(i)){ - Bukkit.getServer().getPluginManager().callEvent(new ArmorEquipEvent(p, EquipMethod.DEATH, ArmorType.matchType(i), i, null)); - // No way to cancel a death event. - } - } - } - - /** - * A utility method to support versions that use null or air ItemStacks. - */ - public static boolean isAirOrNull(ItemStack item){ - return item == null || item.getType().equals(Material.AIR); - } - - public static boolean isHead(ItemStack item) { - String materialName = item.getType().name(); - ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_13_R1)){ - if(materialName.equals("CARVED_PUMPKIN")){ - return true; - } - }else{ - if(materialName.equals("PUMPKIN")){ - return true; - } - } - return materialName.endsWith("_HEAD") || materialName.startsWith("SKULL_") || materialName.endsWith("_SKULL"); - } +@SuppressWarnings("deprecation") +public class ArmorListener implements Listener { + + private final List blockedMaterials; + + public ArmorListener(List blockedMaterials) { + this.blockedMaterials = blockedMaterials; + } + + //Event Priority is highest because other plugins might cancel the events before we check. + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public final void inventoryClick(final InventoryClickEvent e) { + boolean shift = false, numberkey = false; + if (e.getAction() == InventoryAction.NOTHING) return;// Why does this get called if nothing happens?? + if (e.getClick().equals(ClickType.SHIFT_LEFT) || e.getClick().equals(ClickType.SHIFT_RIGHT)) { + shift = true; + } + if (e.getClick().equals(ClickType.NUMBER_KEY)) { + numberkey = true; + } + if (e.getSlotType() != SlotType.ARMOR && e.getSlotType() != SlotType.QUICKBAR && e.getSlotType() != SlotType.CONTAINER) + return; + if (e.getClickedInventory() != null && !e.getClickedInventory().getType().equals(InventoryType.PLAYER)) return; + if (!e.getInventory().getType().equals(InventoryType.CRAFTING) && !e.getInventory().getType().equals(InventoryType.PLAYER)) + return; + if (!(e.getWhoClicked() instanceof Player)) return; + ArmorType newArmorType = ArmorType.matchType(shift ? e.getCurrentItem() : e.getCursor()); + if (!shift && newArmorType != null && e.getRawSlot() != newArmorType.getSlot()) { + // Used for drag and drop checking to make sure you aren't trying to place a helmet in the boots slot. + return; + } + if (shift) { + newArmorType = ArmorType.matchType(e.getCurrentItem()); + if (newArmorType != null) { + boolean equipping = e.getRawSlot() != newArmorType.getSlot(); + if (newArmorType.equals(ArmorType.HELMET) && (equipping == isAirOrNull(e.getWhoClicked().getInventory().getHelmet())) || newArmorType.equals(ArmorType.CHESTPLATE) && (equipping == isAirOrNull(e.getWhoClicked().getInventory().getChestplate())) || newArmorType.equals(ArmorType.LEGGINGS) && (equipping == isAirOrNull(e.getWhoClicked().getInventory().getLeggings())) || newArmorType.equals(ArmorType.BOOTS) && (equipping == isAirOrNull(e.getWhoClicked().getInventory().getBoots()))) { + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), EquipMethod.SHIFT_CLICK, newArmorType, equipping ? null : e.getCurrentItem(), equipping ? e.getCurrentItem() : null); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if (armorEquipEvent.isCancelled()) { + e.setCancelled(true); + } + } + } + } else { + ItemStack newArmorPiece = e.getCursor(); + ItemStack oldArmorPiece = e.getCurrentItem(); + if (numberkey) { + if (e.getClickedInventory().getType().equals(InventoryType.PLAYER)) {// Prevents shit in the 2by2 crafting + // e.getClickedInventory() == The players inventory + // e.getHotBarButton() == key people are pressing to equip or unequip the item to or from. + // e.getRawSlot() == The slot the item is going to. + // e.getSlot() == Armor slot, can't use e.getRawSlot() as that gives a hotbar slot; -; + ItemStack hotbarItem = e.getClickedInventory().getItem(e.getHotbarButton()); + if (!isAirOrNull(hotbarItem)) {// Equipping + newArmorType = ArmorType.matchType(hotbarItem); + newArmorPiece = hotbarItem; + oldArmorPiece = e.getClickedInventory().getItem(e.getSlot()); + } else {// Unequipping + newArmorType = ArmorType.matchType(!isAirOrNull(e.getCurrentItem()) ? e.getCurrentItem() : e.getCursor()); + } + } + } else { + ServerVersion serverVersion = ConditionalEvents.serverVersion; + if (isAirOrNull(e.getCursor()) && !isAirOrNull(e.getCurrentItem())) {// unequip with no new item going into the slot. + newArmorType = ArmorType.matchType(e.getCurrentItem()); + } + if (ConditionalEvents.serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_9_R1)) { + ItemStack offhandItem = e.getWhoClicked().getInventory().getItemInOffHand(); + if (e.getSlotType() == SlotType.ARMOR && !isAirOrNull(offhandItem)) { + ArmorType offhandArmorType = ArmorType.matchType(offhandItem); + if (offhandArmorType != null) { + newArmorType = offhandArmorType; + newArmorPiece = offhandItem; + } + } + } + } + if (newArmorType != null && e.getRawSlot() == newArmorType.getSlot()) { + EquipMethod method = EquipMethod.PICK_DROP; + if (e.getAction().equals(InventoryAction.HOTBAR_SWAP) || numberkey) method = EquipMethod.HOTBAR_SWAP; + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), method, newArmorType, oldArmorPiece, newArmorPiece); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if (armorEquipEvent.isCancelled()) { + e.setCancelled(true); + } + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void playerInteractEvent(PlayerInteractEvent e) { + if (e.useItemInHand().equals(Result.DENY)) return; + // + if (e.getAction() == Action.PHYSICAL) return; + if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { + Player player = e.getPlayer(); + if (!e.useInteractedBlock().equals(Result.DENY)) { + if (e.getClickedBlock() != null && e.getAction() == Action.RIGHT_CLICK_BLOCK && !player.isSneaking()) {// Having both of these checks is useless, might as well do it though. + // Some blocks have actions when you right-click them, which stops the client from equipping the armor in the hand. + Material mat = e.getClickedBlock().getType(); + for (String s : blockedMaterials) { + if (mat.name().equalsIgnoreCase(s)) return; + } + } + } + + ArmorType newArmorType = ArmorType.matchType(e.getItem()); + if (newArmorType != null) { + assert e.getItem() != null; + if (!isHead(e.getItem())) { + ServerVersion serverVersion = ConditionalEvents.serverVersion; + + ItemStack newArmorPiece = e.getItem(); + ItemStack oldArmorPiece = null; + + if (ConditionalEvents.serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_20_R1)) { + switch (newArmorType) { + case HELMET: + oldArmorPiece = player.getInventory().getHelmet(); + break; + case CHESTPLATE: + oldArmorPiece = player.getInventory().getChestplate(); + break; + case LEGGINGS: + oldArmorPiece = player.getInventory().getLeggings(); + break; + case BOOTS: + oldArmorPiece = player.getInventory().getBoots(); + break; + } + } else { + if (!(newArmorType.equals(ArmorType.HELMET) && isAirOrNull(e.getPlayer().getInventory().getHelmet()) || newArmorType.equals(ArmorType.CHESTPLATE) && isAirOrNull(e.getPlayer().getInventory().getChestplate()) || newArmorType.equals(ArmorType.LEGGINGS) && isAirOrNull(e.getPlayer().getInventory().getLeggings()) || newArmorType.equals(ArmorType.BOOTS) && isAirOrNull(e.getPlayer().getInventory().getBoots()))) { + return; + } + } + + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(e.getPlayer(), EquipMethod.HOTBAR, ArmorType.matchType(newArmorPiece), oldArmorPiece, newArmorPiece); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if (armorEquipEvent.isCancelled()) { + e.setCancelled(true); + PlayerUtils.updatePlayerInventory(player); + } + } + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void inventoryDrag(InventoryDragEvent event) { + // getType() seems to always be even. + // Old Cursor gives the item you are equipping + // Raw slot is the ArmorType slot + // Can't replace armor using this method making getCursor() useless. + ArmorType type = ArmorType.matchType(event.getOldCursor()); + if (event.getRawSlots().isEmpty()) return;// IDK if this will ever happen + if (type != null && type.getSlot() == event.getRawSlots().stream().findFirst().orElse(0)) { + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) event.getWhoClicked(), EquipMethod.DRAG, type, null, event.getOldCursor()); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if (armorEquipEvent.isCancelled()) { + event.setResult(Result.DENY); + event.setCancelled(true); + } + } + } + + @EventHandler + public void itemBreakEvent(PlayerItemBreakEvent e) { + ArmorType type = ArmorType.matchType(e.getBrokenItem()); + if (type != null) { + Player p = e.getPlayer(); + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(p, EquipMethod.BROKE, type, e.getBrokenItem(), null); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if (armorEquipEvent.isCancelled()) { + ItemStack i = e.getBrokenItem().clone(); + i.setAmount(1); + i.setDurability((short) (i.getDurability() - 1)); + if (type.equals(ArmorType.HELMET)) { + p.getInventory().setHelmet(i); + } else if (type.equals(ArmorType.CHESTPLATE)) { + p.getInventory().setChestplate(i); + } else if (type.equals(ArmorType.LEGGINGS)) { + p.getInventory().setLeggings(i); + } else if (type.equals(ArmorType.BOOTS)) { + p.getInventory().setBoots(i); + } + } + } + } + + @EventHandler + public void playerDeathEvent(PlayerDeathEvent e) { + Player p = e.getEntity(); + if (e.getKeepInventory()) return; + for (ItemStack i : p.getInventory().getArmorContents()) { + if (!isAirOrNull(i)) { + Bukkit.getServer().getPluginManager().callEvent(new ArmorEquipEvent(p, EquipMethod.DEATH, ArmorType.matchType(i), i, null)); + // No way to cancel a death event. + } + } + } + + /** + * A utility method to support versions that use null or air ItemStacks. + */ + public static boolean isAirOrNull(ItemStack item) { + return item == null || item.getType().equals(Material.AIR); + } + + public static boolean isHead(ItemStack item) { + String materialName = item.getType().name(); + ServerVersion serverVersion = ConditionalEvents.serverVersion; + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_13_R1)) { + if (materialName.equals("CARVED_PUMPKIN")) { + return true; + } + } else { + if (materialName.equals("PUMPKIN")) { + return true; + } + } + return materialName.endsWith("_HEAD") || materialName.startsWith("SKULL_") || materialName.endsWith("_SKULL"); + } } diff --git a/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorType.java b/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorType.java index bb817b5..383886e 100644 --- a/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorType.java +++ b/src/main/java/ce/ajneb97/libs/armorequipevent/ArmorType.java @@ -2,51 +2,58 @@ import ce.ajneb97.ConditionalEvents; import ce.ajneb97.utils.ServerVersion; -import org.bukkit.Material; import org.bukkit.inventory.ItemStack; /** * @author Arnah * @since Jul 30, 2015 */ -public enum ArmorType{ - HELMET(5), CHESTPLATE(6), LEGGINGS(7), BOOTS(8); - - private final int slot; - - ArmorType(int slot){ - this.slot = slot; - } - - /** - * Attempts to match the ArmorType for the specified ItemStack. - * - * @param itemStack The ItemStack to parse the type of. - * @return The parsed ArmorType, or null if not found. - */ - public static ArmorType matchType(final ItemStack itemStack){ - if(ArmorListener.isAirOrNull(itemStack)) return null; - String type = itemStack.getType().name(); - - ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_13_R1)){ - if(type.equals("CARVED_PUMPKIN")){ - return HELMET; - } - }else{ - if(type.equals("PUMPKIN")){ - return HELMET; - } - } - - if(type.endsWith("_HELMET") || type.startsWith("SKULL_") || type.endsWith("_HEAD") || type.endsWith("_SKULL")) return HELMET; - else if(type.endsWith("_CHESTPLATE") || type.equals("ELYTRA")) return CHESTPLATE; - else if(type.endsWith("_LEGGINGS")) return LEGGINGS; - else if(type.endsWith("_BOOTS")) return BOOTS; - else return null; - } - - public int getSlot(){ - return slot; - } +public enum ArmorType { + + HELMET(5), + + CHESTPLATE(6), + + LEGGINGS(7), + + BOOTS(8); + + private final int slot; + + ArmorType(int slot) { + this.slot = slot; + } + + /** + * Attempts to match the ArmorType for the specified ItemStack. + * + * @param itemStack The ItemStack to parse the type of. + * @return The parsed ArmorType, or null if not found. + */ + public static ArmorType matchType(final ItemStack itemStack) { + if (ArmorListener.isAirOrNull(itemStack)) return null; + String type = itemStack.getType().name(); + + ServerVersion serverVersion = ConditionalEvents.serverVersion; + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_13_R1)) { + if (type.equals("CARVED_PUMPKIN")) { + return HELMET; + } + } else { + if (type.equals("PUMPKIN")) { + return HELMET; + } + } + + if (type.endsWith("_HELMET") || type.startsWith("SKULL_") || type.endsWith("_HEAD") || type.endsWith("_SKULL")) + return HELMET; + else if (type.endsWith("_CHESTPLATE") || type.equals("ELYTRA")) return CHESTPLATE; + else if (type.endsWith("_LEGGINGS")) return LEGGINGS; + else if (type.endsWith("_BOOTS")) return BOOTS; + else return null; + } + + public int getSlot() { + return slot; + } } diff --git a/src/main/java/ce/ajneb97/libs/centeredmessages/DefaultFontInfo.java b/src/main/java/ce/ajneb97/libs/centeredmessages/DefaultFontInfo.java index cc74e3a..969bbd2 100644 --- a/src/main/java/ce/ajneb97/libs/centeredmessages/DefaultFontInfo.java +++ b/src/main/java/ce/ajneb97/libs/centeredmessages/DefaultFontInfo.java @@ -1,7 +1,7 @@ package ce.ajneb97.libs.centeredmessages; -public enum DefaultFontInfo{ - +public enum DefaultFontInfo { + A('A', 5), a('a', 5), B('B', 5), @@ -98,32 +98,32 @@ public enum DefaultFontInfo{ COMMA(',', 1), SPACE(' ', 3), DEFAULT('a', 4); - - private char character; - private int length; - + + private final char character; + private final int length; + DefaultFontInfo(char character, int length) { - this.character = character; - this.length = length; + this.character = character; + this.length = length; } - - public char getCharacter(){ - return this.character; + + public char getCharacter() { + return this.character; } - - public int getLength(){ - return this.length; + + public int getLength() { + return this.length; } - - public int getBoldLength(){ - if(this == DefaultFontInfo.SPACE) return this.getLength(); - return this.length + 1; + + public int getBoldLength() { + if (this == DefaultFontInfo.SPACE) return this.getLength(); + return this.length + 1; } - - public static DefaultFontInfo getDefaultFontInfo(char c){ - for(DefaultFontInfo dFI : DefaultFontInfo.values()){ - if(dFI.getCharacter() == c) return dFI; - } - return DefaultFontInfo.DEFAULT; + + public static DefaultFontInfo getDefaultFontInfo(char c) { + for (DefaultFontInfo dFI : DefaultFontInfo.values()) { + if (dFI.getCharacter() == c) return dFI; + } + return DefaultFontInfo.DEFAULT; } } diff --git a/src/main/java/ce/ajneb97/libs/itemselectevent/DropType.java b/src/main/java/ce/ajneb97/libs/itemselectevent/DropType.java index ab73b3e..2157117 100644 --- a/src/main/java/ce/ajneb97/libs/itemselectevent/DropType.java +++ b/src/main/java/ce/ajneb97/libs/itemselectevent/DropType.java @@ -3,5 +3,6 @@ public enum DropType { PLAYER, + INVENTORY } diff --git a/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectEvent.java b/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectEvent.java index de90294..d8c824d 100644 --- a/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectEvent.java +++ b/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectEvent.java @@ -5,33 +5,32 @@ import org.bukkit.event.player.PlayerEvent; import org.bukkit.inventory.ItemStack; -public class ItemSelectEvent extends PlayerEvent{ - - private static final HandlerList handlers = new HandlerList(); - private SelectType selectType; - private ItemStack item; - - public ItemSelectEvent(Player player,ItemStack item,SelectType selectType) { - super(player); - this.item = item; - this.selectType = selectType; - } - - public SelectType getSelectType() { - return selectType; - } - - public ItemStack getItem() { - return item; - } - - @Override - public HandlerList getHandlers() { - // TODO Auto-generated method stub - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } +public class ItemSelectEvent extends PlayerEvent { + + private static final HandlerList handlers = new HandlerList(); + private final SelectType selectType; + private final ItemStack item; + + public ItemSelectEvent(Player player, ItemStack item, SelectType selectType) { + super(player); + this.item = item; + this.selectType = selectType; + } + + public SelectType getSelectType() { + return selectType; + } + + public ItemStack getItem() { + return item; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } } diff --git a/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectListener.java b/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectListener.java index 53b1a06..65e51cd 100644 --- a/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectListener.java +++ b/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectListener.java @@ -1,6 +1,7 @@ package ce.ajneb97.libs.itemselectevent; import java.util.ArrayList; + import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -14,158 +15,160 @@ import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.scheduler.BukkitRunnable; import ce.ajneb97.ConditionalEvents; -public class ItemSelectListener implements Listener{ - - private ArrayList players = new ArrayList(); - private ConditionalEvents plugin; - public ItemSelectListener(ConditionalEvents plugin) { - this.plugin = plugin; - } - - @EventHandler - public void onItemChanged(PlayerItemHeldEvent event) { - if(event.isCancelled()) { - return; - } - - Player player = event.getPlayer(); - - int previousSlot = event.getPreviousSlot(); - int newSlot = event.getNewSlot(); - ItemStack newItem = player.getInventory().getItem(newSlot); - ItemStack previousItem = player.getInventory().getItem(previousSlot); - ArrayList items = new ArrayList(); - items.add(newItem);items.add(previousItem); - for(int i=0;i items = new ArrayList(); - if(selectedSlot == slot) { - items.add(current);items.add(cursor); - }else if(selectedSlot == slotHotbar) { - items.add(cursor);items.add(current); - } - for(int i=0;i players = new ArrayList<>(); + private final ConditionalEvents plugin; + + public ItemSelectListener(ConditionalEvents plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onItemChanged(PlayerItemHeldEvent event) { + if (event.isCancelled()) { + return; + } + + Player player = event.getPlayer(); + + int previousSlot = event.getPreviousSlot(); + int newSlot = event.getNewSlot(); + ItemStack newItem = player.getInventory().getItem(newSlot); + ItemStack previousItem = player.getInventory().getItem(previousSlot); + ArrayList items = new ArrayList<>(); + items.add(newItem); + items.add(previousItem); + for (int i = 0; i < items.size(); i++) { + ItemStack item = items.get(i); + if (item != null && !item.getType().equals(Material.AIR)) { + SelectType action; + if (i == 0) { + action = SelectType.SELECT; + } else { + action = SelectType.DESELECT; + } + + ItemSelectEvent selectEvent = new ItemSelectEvent(player, item, action); + Bukkit.getServer().getPluginManager().callEvent(selectEvent); + } + } + } + + @EventHandler + public void onItemDrop(PlayerDropItemEvent event) { + if (event.isCancelled()) { + return; + } + + Player player = event.getPlayer(); + ItemStack item = event.getItemDrop().getItemStack(); + if (!players.contains(player)) { + players.add(player); + PlayerCustomDropEvent dropEvent = new PlayerCustomDropEvent(player, item, DropType.PLAYER, player.getInventory().getHeldItemSlot()); + Bukkit.getServer().getPluginManager().callEvent(dropEvent); + } + } + + @EventHandler + public void onCustomItemDrop(PlayerCustomDropEvent event) { + Player player = event.getPlayer(); + ItemStack item = event.getItem(); + int slot = event.getSlot(); + int selectedSlot = player.getInventory().getHeldItemSlot(); + + if (slot == selectedSlot) { + SelectType action = SelectType.DESELECT; + ItemSelectEvent selectEvent = new ItemSelectEvent(player, item, action); + Bukkit.getServer().getPluginManager().callEvent(selectEvent); + } + + if (plugin.isFolia) { + player.getScheduler().runDelayed(plugin, (task) -> players.remove(player), null, 3L); + } else { + Bukkit.getScheduler().runTaskLater(plugin, () -> players.remove(player), 3L); + } + } + + @SuppressWarnings("deprecation") + @EventHandler + public void onItemPickup(PlayerPickupItemEvent event) { + if (event.isCancelled()) { + return; + } + + Player player = event.getPlayer(); + ItemStack item = event.getItem().getItemStack(); + int selectedSlot = player.getInventory().getHeldItemSlot(); + int newSlot = player.getInventory().firstEmpty(); + if (newSlot == selectedSlot) { + SelectType action = SelectType.SELECT; + ItemSelectEvent selectEvent = new ItemSelectEvent(player, item, action); + Bukkit.getServer().getPluginManager().callEvent(selectEvent); + } + } + + @EventHandler + public void onItemInventoryClick(InventoryClickEvent event) { + if (event.isCancelled()) { + return; + } + Player player = (Player) event.getWhoClicked(); + InventoryAction action = event.getAction(); + int slot = event.getSlot(); + int selectedSlot = player.getInventory().getHeldItemSlot(); + if (action.name().contains("DROP")) { + players.add(player); + PlayerCustomDropEvent dropEvent = new PlayerCustomDropEvent(player, event.getCurrentItem(), DropType.INVENTORY, slot); + Bukkit.getServer().getPluginManager().callEvent(dropEvent); + return; + } + + ItemStack current = event.getCurrentItem(); + ItemStack cursor = event.getCursor(); + int slotHotbar = event.getHotbarButton(); + if (event.getClick().equals(ClickType.NUMBER_KEY)) { + ItemStack item2 = player.getInventory().getItem(slotHotbar); + if (item2 != null && !item2.getType().equals(Material.AIR)) { + cursor = item2; + } else if (current == null || current.getType().equals(Material.AIR)) { + current = item2; + } + } + + ArrayList items = new ArrayList<>(); + if (selectedSlot == slot) { + items.add(current); + items.add(cursor); + } else if (selectedSlot == slotHotbar) { + items.add(cursor); + items.add(current); + } + for (int i = 0; i < items.size(); i++) { + ItemStack item = items.get(i); + if (item != null && !item.getType().equals(Material.AIR)) { + SelectType select; + if (i == 0) { + select = SelectType.DESELECT; + } else { + select = SelectType.SELECT; + } + + ItemSelectEvent selectEvent = new ItemSelectEvent(player, item, select); + Bukkit.getServer().getPluginManager().callEvent(selectEvent); + } + } + } + + @EventHandler + public void onItemBreak(PlayerItemBreakEvent event) { + Player player = event.getPlayer(); + ItemStack item = event.getBrokenItem(); + + SelectType action = SelectType.DESELECT; + ItemSelectEvent selectEvent = new ItemSelectEvent(player, item, action); + Bukkit.getServer().getPluginManager().callEvent(selectEvent); + } +} \ No newline at end of file diff --git a/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectListenerNew.java b/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectListenerNew.java index f68b360..411b90f 100644 --- a/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectListenerNew.java +++ b/src/main/java/ce/ajneb97/libs/itemselectevent/ItemSelectListenerNew.java @@ -10,32 +10,34 @@ import org.bukkit.event.player.PlayerSwapHandItemsEvent; import org.bukkit.inventory.ItemStack; -public class ItemSelectListenerNew implements Listener{ +public class ItemSelectListenerNew implements Listener { - @EventHandler - public void onChangeHand(PlayerSwapHandItemsEvent event) { - if(event.isCancelled()) { - return; - } - - Player player = event.getPlayer(); - ItemStack itemMain = event.getMainHandItem(); - ItemStack itemOff = event.getOffHandItem(); - ArrayList items = new ArrayList(); - items.add(itemMain);items.add(itemOff); - for(int i=0;i items = new ArrayList<>(); + items.add(itemMain); + items.add(itemOff); + for (int i = 0; i < items.size(); i++) { + ItemStack item = items.get(i); + if (item != null && !item.getType().equals(Material.AIR)) { + + SelectType action; + if (i == 0) { + action = SelectType.SELECT; + } else { + action = SelectType.DESELECT; + } + + ItemSelectEvent selectEvent = new ItemSelectEvent(player, item, action); + Bukkit.getServer().getPluginManager().callEvent(selectEvent); + } + } + } } diff --git a/src/main/java/ce/ajneb97/libs/itemselectevent/PlayerCustomDropEvent.java b/src/main/java/ce/ajneb97/libs/itemselectevent/PlayerCustomDropEvent.java index 28069d5..ca530f0 100644 --- a/src/main/java/ce/ajneb97/libs/itemselectevent/PlayerCustomDropEvent.java +++ b/src/main/java/ce/ajneb97/libs/itemselectevent/PlayerCustomDropEvent.java @@ -4,40 +4,40 @@ import org.bukkit.event.HandlerList; import org.bukkit.event.player.PlayerEvent; import org.bukkit.inventory.ItemStack; - -public class PlayerCustomDropEvent extends PlayerEvent{ - - private static final HandlerList handlers = new HandlerList(); - private DropType dropType; - private ItemStack item; - private int slot; - - public PlayerCustomDropEvent(Player player,ItemStack item,DropType dropType,int slot) { - super(player); - this.item = item; - this.dropType = dropType; - this.slot = slot; - } - - public DropType getDropType() { - return dropType; - } - - public int getSlot() { - return slot; - } - - public ItemStack getItem() { - return item; - } - - @Override - public HandlerList getHandlers() { - // TODO Auto-generated method stub - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } +import org.jetbrains.annotations.NotNull; + +public class PlayerCustomDropEvent extends PlayerEvent { + + private static final HandlerList handlers = new HandlerList(); + private final DropType dropType; + private final ItemStack item; + private final int slot; + + public PlayerCustomDropEvent(Player player, ItemStack item, DropType dropType, int slot) { + super(player); + this.item = item; + this.dropType = dropType; + this.slot = slot; + } + + public DropType getDropType() { + return dropType; + } + + public int getSlot() { + return slot; + } + + public ItemStack getItem() { + return item; + } + + @Override + public @NotNull HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } } diff --git a/src/main/java/ce/ajneb97/libs/itemselectevent/SelectType.java b/src/main/java/ce/ajneb97/libs/itemselectevent/SelectType.java index 870fe68..b267097 100644 --- a/src/main/java/ce/ajneb97/libs/itemselectevent/SelectType.java +++ b/src/main/java/ce/ajneb97/libs/itemselectevent/SelectType.java @@ -2,6 +2,7 @@ public enum SelectType { - SELECT, - DESELECT + SELECT, + + DESELECT } diff --git a/src/main/java/ce/ajneb97/libs/offhandevent/OffHandEvent.java b/src/main/java/ce/ajneb97/libs/offhandevent/OffHandEvent.java index 32f7446..7f88960 100644 --- a/src/main/java/ce/ajneb97/libs/offhandevent/OffHandEvent.java +++ b/src/main/java/ce/ajneb97/libs/offhandevent/OffHandEvent.java @@ -6,70 +6,70 @@ import org.bukkit.event.HandlerList; import org.bukkit.event.player.PlayerEvent; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; public class OffHandEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private MovementType movementType; - private ItemStack placedInOffhand; - private ItemStack recoveredFromOffhand; + private static final HandlerList handlers = new HandlerList(); + private boolean cancel = false; + private final MovementType movementType; + private final ItemStack placedInOffhand; + private final ItemStack recoveredFromOffhand; - public OffHandEvent(Player player, ItemStack placedInOffhand, ItemStack recoveredFromOffhand) { - super(player); - this.placedInOffhand = placedInOffhand; - this.recoveredFromOffhand = recoveredFromOffhand; + public OffHandEvent(Player player, ItemStack placedInOffhand, ItemStack recoveredFromOffhand) { + super(player); + this.placedInOffhand = placedInOffhand; + this.recoveredFromOffhand = recoveredFromOffhand; - boolean wasPlaced = placedInOffhand != null && !placedInOffhand.getType().equals(Material.AIR); - boolean wasRecovered = recoveredFromOffhand != null && !recoveredFromOffhand.getType().equals(Material.AIR); + boolean wasPlaced = placedInOffhand != null && !placedInOffhand.getType().equals(Material.AIR); + boolean wasRecovered = recoveredFromOffhand != null && !recoveredFromOffhand.getType().equals(Material.AIR); - if(wasPlaced && wasRecovered){ - movementType = MovementType.SWAP; - }else if(wasPlaced){ - movementType = MovementType.PLACE; - }else if(wasRecovered){ - movementType = MovementType.RECOVER; - }else{ - movementType = MovementType.NOTHING; - } - } + if (wasPlaced && wasRecovered) { + movementType = MovementType.SWAP; + } else if (wasPlaced) { + movementType = MovementType.PLACE; + } else if (wasRecovered) { + movementType = MovementType.RECOVER; + } else { + movementType = MovementType.NOTHING; + } + } - public MovementType getMovementType() { - return movementType; - } + public MovementType getMovementType() { + return movementType; + } - public ItemStack getPlacedInOffhand() { - return placedInOffhand; - } + public ItemStack getPlacedInOffhand() { + return placedInOffhand; + } - public ItemStack getRecoveredFromOffhand() { - return recoveredFromOffhand; - } + public ItemStack getRecoveredFromOffhand() { + return recoveredFromOffhand; + } - @Override - public HandlerList getHandlers() { - // TODO Auto-generated method stub - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } + @Override + public @NotNull HandlerList getHandlers() { + return handlers; + } - @Override - public boolean isCancelled() { - return this.cancel; - } + public static HandlerList getHandlerList() { + return handlers; + } - @Override - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } + @Override + public boolean isCancelled() { + return this.cancel; + } - public enum MovementType { - PLACE, - RECOVER, - SWAP, - NOTHING - } + @Override + public void setCancelled(boolean cancel) { + this.cancel = cancel; + } + + public enum MovementType { + PLACE, + RECOVER, + SWAP, + NOTHING + } } diff --git a/src/main/java/ce/ajneb97/libs/offhandevent/OffHandListener.java b/src/main/java/ce/ajneb97/libs/offhandevent/OffHandListener.java index c7f7a74..bc47890 100644 --- a/src/main/java/ce/ajneb97/libs/offhandevent/OffHandListener.java +++ b/src/main/java/ce/ajneb97/libs/offhandevent/OffHandListener.java @@ -14,30 +14,25 @@ public class OffHandListener implements Listener { - private ConditionalEvents plugin; - public OffHandListener(ConditionalEvents plugin){ - this.plugin = plugin; - } - @EventHandler - public void onPlayerSwapHand(PlayerSwapHandItemsEvent event){ - if(event.isCancelled()){ + public void onPlayerSwapHand(PlayerSwapHandItemsEvent event) { + if (event.isCancelled()) { return; } Player player = event.getPlayer(); ItemStack item = event.getMainHandItem(); ItemStack itemOffHand = event.getOffHandItem(); - OffHandEvent swapEvent = new OffHandEvent(player,itemOffHand,item); + OffHandEvent swapEvent = new OffHandEvent(player, itemOffHand, item); Bukkit.getServer().getPluginManager().callEvent(swapEvent); - if(swapEvent.isCancelled()){ + if (swapEvent.isCancelled()) { event.setCancelled(true); } } @EventHandler public void onMoveOffHand(InventoryClickEvent event) { - if(event.isCancelled()){ + if (event.isCancelled()) { return; } @@ -58,21 +53,21 @@ public void onMoveOffHand(InventoryClickEvent event) { OffHandEvent swapEvent = null; ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(slotType.equals(InventoryType.SlotType.QUICKBAR) && slot == 40){ - if(click.equals(ClickType.NUMBER_KEY)){ - swapEvent = new OffHandEvent(player,item2,itemInOffhand); - }else{ - swapEvent = new OffHandEvent(player,cursorItem,itemInOffhand); + if (slotType.equals(InventoryType.SlotType.QUICKBAR) && slot == 40) { + if (click.equals(ClickType.NUMBER_KEY)) { + swapEvent = new OffHandEvent(player, item2, itemInOffhand); + } else { + swapEvent = new OffHandEvent(player, cursorItem, itemInOffhand); } - }else if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_16_R3)){ - if(click.equals(ClickType.SWAP_OFFHAND)){ - swapEvent = new OffHandEvent(player,clickedItem,itemInOffhand); + } else if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_16_R3)) { + if (click.equals(ClickType.SWAP_OFFHAND)) { + swapEvent = new OffHandEvent(player, clickedItem, itemInOffhand); } } - if(swapEvent != null){ + if (swapEvent != null) { Bukkit.getServer().getPluginManager().callEvent(swapEvent); - if(swapEvent.isCancelled()){ + if (swapEvent.isCancelled()) { event.setCancelled(true); } } diff --git a/src/main/java/ce/ajneb97/libs/titles/TitleAPI.java b/src/main/java/ce/ajneb97/libs/titles/TitleAPI.java index 7844629..8510446 100644 --- a/src/main/java/ce/ajneb97/libs/titles/TitleAPI.java +++ b/src/main/java/ce/ajneb97/libs/titles/TitleAPI.java @@ -1,7 +1,7 @@ package ce.ajneb97.libs.titles; import ce.ajneb97.api.ConditionalEventsAPI; -import ce.ajneb97.managers.MessagesManager; +import ce.ajneb97.manager.MessagesManager; import ce.ajneb97.utils.MiniMessageUtils; import ce.ajneb97.utils.OtherUtils; import org.bukkit.Bukkit; @@ -12,6 +12,7 @@ import java.lang.reflect.Constructor; +@SuppressWarnings({"deprecation", "DataFlowIssue", "rawtypes"}) public class TitleAPI implements Listener { public static void sendPacket(Player player, Object packet) { @@ -35,21 +36,21 @@ public static Class getNMSClass(String name) { } public static void sendTitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle) { - if(OtherUtils.isNew()) { - if(title.isEmpty()) { - title = " "; - } - if(subtitle.isEmpty()) { - subtitle = " "; - } - if(ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()){ - MiniMessageUtils.title(player,title,subtitle); - }else{ + if (OtherUtils.isNew()) { + if (title.isEmpty()) { + title = " "; + } + if (subtitle.isEmpty()) { + subtitle = " "; + } + if (ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + MiniMessageUtils.title(player, title, subtitle); + } else { player.sendTitle(MessagesManager.getLegacyColoredMessage(title), MessagesManager.getLegacyColoredMessage(subtitle), fadeIn, stay, fadeOut); } - return; - } - try { + return; + } + try { Object e; Object chatTitle; Object chatSubtitle; @@ -61,16 +62,16 @@ public static void sendTitle(Player player, Integer fadeIn, Integer stay, Intege title = ChatColor.translateAlternateColorCodes('&', title); title = title.replaceAll("%player%", player.getDisplayName()); // Times packets - e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get((Object) null); - chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"}); - subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE}); - titlePacket = subtitleConstructor.newInstance(new Object[]{e, chatTitle, fadeIn, stay, fadeOut}); + e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get(null); + chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke(null, "{\"text\":\"" + title + "\"}"); + subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE); + titlePacket = subtitleConstructor.newInstance(e, chatTitle, fadeIn, stay, fadeOut); sendPacket(player, titlePacket); - e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get((Object) null); - chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"}); - subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent")}); - titlePacket = subtitleConstructor.newInstance(new Object[]{e, chatTitle}); + e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get(null); + chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke(null, "{\"text\":\"" + title + "\"}"); + subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent")); + titlePacket = subtitleConstructor.newInstance(e, chatTitle); sendPacket(player, titlePacket); } @@ -78,16 +79,16 @@ public static void sendTitle(Player player, Integer fadeIn, Integer stay, Intege subtitle = ChatColor.translateAlternateColorCodes('&', subtitle); subtitle = subtitle.replaceAll("%player%", player.getDisplayName()); // Times packets - e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get((Object) null); - chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"}); - subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE}); - subtitlePacket = subtitleConstructor.newInstance(new Object[]{e, chatSubtitle, fadeIn, stay, fadeOut}); + e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get(null); + chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke(null, "{\"text\":\"" + title + "\"}"); + subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE); + subtitlePacket = subtitleConstructor.newInstance(e, chatSubtitle, fadeIn, stay, fadeOut); sendPacket(player, subtitlePacket); - e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get((Object) null); - chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + subtitle + "\"}"}); - subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE}); - subtitlePacket = subtitleConstructor.newInstance(new Object[]{e, chatSubtitle, fadeIn, stay, fadeOut}); + e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get(null); + chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke(null, "{\"text\":\"" + subtitle + "\"}"); + subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE); + subtitlePacket = subtitleConstructor.newInstance(e, chatSubtitle, fadeIn, stay, fadeOut); sendPacket(player, subtitlePacket); } } catch (Exception var11) { diff --git a/src/main/java/ce/ajneb97/listeners/CustomEventListener.java b/src/main/java/ce/ajneb97/listeners/CustomEventListener.java index 6ce917e..fa991a3 100644 --- a/src/main/java/ce/ajneb97/listeners/CustomEventListener.java +++ b/src/main/java/ce/ajneb97/listeners/CustomEventListener.java @@ -1,7 +1,7 @@ package ce.ajneb97.listeners; import ce.ajneb97.ConditionalEvents; -import ce.ajneb97.managers.MessagesManager; +import ce.ajneb97.manager.MessagesManager; import ce.ajneb97.model.CEEvent; import ce.ajneb97.model.CustomEventProperties; import ce.ajneb97.model.EventType; @@ -19,17 +19,19 @@ import java.util.ArrayList; import java.util.List; +@SuppressWarnings({"unchecked", "DataFlowIssue"}) public class CustomEventListener implements Listener { public ConditionalEvents plugin; + public CustomEventListener(ConditionalEvents plugin) { this.plugin = plugin; configure(); } - public void configure(){ + public void configure() { ArrayList validEvents = plugin.getEventsManager().getEventsByType(EventType.CUSTOM); - for(CEEvent ceEvent : validEvents) { + for (CEEvent ceEvent : validEvents) { CustomEventProperties properties = ceEvent.getCustomEventProperties(); String eventPackage = properties.getEventPackage(); try { @@ -38,16 +40,16 @@ public void configure(){ plugin.getServer().getPluginManager().registerEvent(eventClass, this, EventPriority.MONITOR, eventExecutor, plugin); } catch (ClassNotFoundException ex) { Bukkit.getConsoleSender().sendMessage(ConditionalEvents.prefix - + MessagesManager.getLegacyColoredMessage("&cClass "+eventPackage+" &cdoesn't exists for custom event &e"+ceEvent.getName()+"&c.")); + + MessagesManager.getLegacyColoredMessage("&cClass " + eventPackage + " &cdoesn't exists for custom event &e" + ceEvent.getName() + "&c.")); } } } - public void executeEvent(Event event,String ceEventName) { + public void executeEvent(Event event, String ceEventName) { Class classObject = event.getClass(); CEEvent ceEvent = plugin.getEventsManager().getEvent(ceEventName); - if(ceEvent == null || !ceEvent.isEnabled()){ + if (ceEvent == null || !ceEvent.isEnabled()) { return; } @@ -62,101 +64,96 @@ public void executeEvent(Event event,String ceEventName) { //Get variables List variablesToCapture = properties.getVariablesToCapture(); - ArrayList storedVariables = new ArrayList(); - for(String line : variablesToCapture) { + ArrayList storedVariables = new ArrayList<>(); + for (String line : variablesToCapture) { String[] sepLine = line.split(";"); String variable = sepLine[0]; String methodName = sepLine[1].replace("(", "").replace(")", ""); - Object objectFinal = null; - if(methodName.contains(".")) { - objectFinal = getFinalObjectFromMultipleMethods(methodName,event,classObject); - }else { - Method m = obtainMethod(classObject,methodName); - objectFinal = obtainObjectFromEvent(m,event); + Object objectFinal; + if (methodName.contains(".")) { + objectFinal = getFinalObjectFromMultipleMethods(methodName, event, classObject); + } else { + Method m = obtainMethod(classObject, methodName); + objectFinal = obtainObjectFromEvent(m, event); } - if(objectFinal != null){ - storedVariables.add(new StoredVariable(variable,objectFinal.toString())); + if (objectFinal != null) { + storedVariables.add(new StoredVariable(variable, objectFinal.toString())); } } //Get player Object playerObjectFinal = null; - if(properties.getPlayerVariable() != null) { + if (properties.getPlayerVariable() != null) { String methodName = properties.getPlayerVariable().replace("(", "").replace(")", ""); - if(methodName.contains(".")) { - playerObjectFinal = getFinalObjectFromMultipleMethods(methodName,event,classObject); - }else { - Method m = obtainMethod(classObject,methodName); - playerObjectFinal = obtainObjectFromEvent(m,event); + if (methodName.contains(".")) { + playerObjectFinal = getFinalObjectFromMultipleMethods(methodName, event, classObject); + } else { + Method m = obtainMethod(classObject, methodName); + playerObjectFinal = obtainObjectFromEvent(m, event); } } try { Player player = null; - if(playerObjectFinal != null) { + if (playerObjectFinal != null) { player = (Player) playerObjectFinal; } ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.CUSTOM, null) .addVariables(storedVariables); - plugin.getEventsManager().checkSingularEvent(conditionEvent,ceEvent); - }catch(Exception ex) { - + plugin.getEventsManager().checkSingularEvent(conditionEvent, ceEvent); + } catch (Exception ignored) { } } - private Object getFinalObjectFromMultipleMethods(String method,Event event,Class classObject){ + private Object getFinalObjectFromMultipleMethods(String method, Event event, Class classObject) { Object objectFinal = null; String[] methods = method.split("\\."); Class newClass = classObject; - try{ - for(int i=0;i classObject,String methodName) { + private Method obtainMethod(Class classObject, String methodName) { try { return classObject.getMethod(methodName); } catch (NoSuchMethodException e) { e.printStackTrace(); - } catch (Exception e) { - + } catch (Exception ignored) { } return null; } - private Object obtainObjectFromEvent(Method m,Event event) { + private Object obtainObjectFromEvent(Method m, Event event) { try { m.setAccessible(true); return m.invoke(event); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ignored) { } return null; } - private Object obtainObjectFromObject(Method m,Object object) { + private Object obtainObjectFromObject(Method m, Object object) { try { m.setAccessible(true); return m.invoke(object); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ignored) { } return null; } - } diff --git a/src/main/java/ce/ajneb97/listeners/ItemEventsListener.java b/src/main/java/ce/ajneb97/listeners/ItemEventsListener.java index 25f7459..eeed127 100644 --- a/src/main/java/ce/ajneb97/listeners/ItemEventsListener.java +++ b/src/main/java/ce/ajneb97/listeners/ItemEventsListener.java @@ -25,42 +25,44 @@ import org.bukkit.event.player.*; import org.bukkit.inventory.AnvilInventory; import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.view.AnvilView; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; import java.util.Map; +@SuppressWarnings({"removal", "deprecation", "UnstableApiUsage"}) public class ItemEventsListener implements Listener { public ConditionalEvents plugin; + public ItemEventsListener(ConditionalEvents plugin) { this.plugin = plugin; } @EventHandler(priority = EventPriority.HIGHEST) - public void onItemInteract(PlayerInteractEvent event){ + public void onItemInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); ItemStack item = event.getItem(); ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_10_R1)) { - if(!event.getAction().equals(Action.PHYSICAL) && (event.getHand() == null || (!event.getHand().equals(EquipmentSlot.HAND) + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_10_R1)) { + if (!event.getAction().equals(Action.PHYSICAL) && (event.getHand() == null || (!event.getHand().equals(EquipmentSlot.HAND) && !event.getHand().equals(EquipmentSlot.OFF_HAND)))) { return; } } - if(item == null){ + if (item == null) { return; } ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.ITEM_INTERACT, null); - if(!conditionEvent.containsValidEvents()) return; - conditionEvent.setCommonActionVariables(event.getAction(),player) - .setCommonItemVariables(item,null) + if (!conditionEvent.containsValidEvents()) return; + conditionEvent.setCommonActionVariables(event.getAction(), player) + .setCommonItemVariables(item, null) .checkEvent(); } @@ -70,8 +72,8 @@ public void onItemConsume(PlayerItemConsumeEvent event) { ItemStack item = event.getItem(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.ITEM_CONSUME, null); - if(!conditionEvent.containsValidEvents()) return; - conditionEvent.setCommonItemVariables(item,null) + if (!conditionEvent.containsValidEvents()) return; + conditionEvent.setCommonItemVariables(item, null) .checkEvent(); } @@ -81,43 +83,43 @@ public void onItemPickUp(PlayerPickupItemEvent event) { ItemStack item = event.getItem().getItemStack(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.ITEM_PICKUP, null); - if(!conditionEvent.containsValidEvents()) return; - conditionEvent.setCommonItemVariables(item,null) + if (!conditionEvent.containsValidEvents()) return; + conditionEvent.setCommonItemVariables(item, null) .checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) public void onItemRepair(InventoryClickEvent event) { - if(!event.getInventory().getType().equals(InventoryType.ANVIL)){ + if (!event.getInventory().getType().equals(InventoryType.ANVIL)) { return; } - if(OtherUtils.isLegacy()){ + if (OtherUtils.isLegacy()) { return; } - if(!(event.getInventory() instanceof AnvilInventory)){ + if (!(event.getInventory() instanceof AnvilInventory)) { return; } AnvilInventory inv = (AnvilInventory) event.getInventory(); Player player = (Player) event.getWhoClicked(); - if(!inv.equals(InventoryUtils.getTopInventory(player))){ + if (!inv.equals(InventoryUtils.getTopInventory(player))) { return; } - if(event.getRawSlot() != 2){ + if (event.getRawSlot() != 2) { return; } - String renameText = ""; + String renameText; ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_21_R3)){ + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_21_R3)) { AnvilView view = (AnvilView) event.getView(); - if(player.getLevel() < view.getRepairCost()){ + if (player.getLevel() < view.getRepairCost()) { return; } renameText = view.getRenameText(); - }else{ - if(player.getLevel() < inv.getRepairCost()){ + } else { + if (player.getLevel() < inv.getRepairCost()) { return; } renameText = inv.getRenameText(); @@ -125,16 +127,16 @@ public void onItemRepair(InventoryClickEvent event) { ItemStack resultItem = inv.getItem(2); - if(resultItem == null || resultItem.getType().equals(Material.AIR)){ + if (resultItem == null || resultItem.getType().equals(Material.AIR)) { return; } ItemStack item = inv.getItem(0); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.ITEM_REPAIR, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%rename_text%",renameText) - ).setCommonItemVariables(item,null) + new StoredVariable("%rename_text%", renameText) + ).setCommonItemVariables(item, null) .checkEvent(); } @@ -146,34 +148,31 @@ public void onItemMove(InventoryClickEvent event) { ArrayList items = new ArrayList<>(); items.add(item); - if(event.getClick().equals(ClickType.NUMBER_KEY)) { + if (event.getClick().equals(ClickType.NUMBER_KEY)) { int slotHotbar = event.getHotbarButton(); ItemStack item2 = player.getInventory().getItem(slotHotbar); //Two items swap places items.add(item2); } - String inventoryType = ""; - String inventoryTitle = ""; - InventoryView view = player.getOpenInventory(); - if(view != null) { - inventoryType = InventoryUtils.getOpenInventoryViewType(player).name(); - if(plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()){ - inventoryTitle = MiniMessageUtils.getOpenInventoryViewTitlePlain(player); - }else{ - inventoryTitle = ChatColor.stripColor(InventoryUtils.getOpenInventoryViewTitle(player)); - } + String inventoryType; + String inventoryTitle; + inventoryType = InventoryUtils.getOpenInventoryViewType(player).name(); + if (plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + inventoryTitle = MiniMessageUtils.getOpenInventoryViewTitlePlain(player); + } else { + inventoryTitle = ChatColor.stripColor(InventoryUtils.getOpenInventoryViewTitle(player)); } int slot = event.getSlot(); - for(ItemStack i : items){ + for (ItemStack i : items) { ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.ITEM_MOVE, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%inventory_type%",inventoryType), - new StoredVariable("%slot%",slot+""), + new StoredVariable("%inventory_type%", inventoryType), + new StoredVariable("%slot%", slot + ""), new StoredVariable("%inventory_title%", inventoryTitle) - ).setCommonItemVariables(i,null) + ).setCommonItemVariables(i, null) .checkEvent(); } } @@ -184,8 +183,8 @@ public void onItemCraft(CraftItemEvent event) { ItemStack item = event.getRecipe().getResult(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.ITEM_CRAFT, null); - if(!conditionEvent.containsValidEvents()) return; - conditionEvent.setCommonItemVariables(item,null) + if (!conditionEvent.containsValidEvents()) return; + conditionEvent.setCommonItemVariables(item, null) .checkEvent(); } @@ -195,8 +194,8 @@ public void onItemDrop(PlayerDropItemEvent event) { ItemStack item = event.getItemDrop().getItemStack(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.ITEM_DROP, null); - if(!conditionEvent.containsValidEvents()) return; - conditionEvent.setCommonItemVariables(item,null) + if (!conditionEvent.containsValidEvents()) return; + conditionEvent.setCommonItemVariables(item, null) .checkEvent(); } @@ -206,10 +205,10 @@ public void onItemSelect(ItemSelectEvent event) { ItemStack item = event.getItem(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.ITEM_SELECT, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%select_type%",event.getSelectType().name()) - ).setCommonItemVariables(item,null) + new StoredVariable("%select_type%", event.getSelectType().name()) + ).setCommonItemVariables(item, null) .checkEvent(); } @@ -219,21 +218,26 @@ public void onItemEnchant(EnchantItemEvent event) { ItemStack item = event.getItem(); - String enchantmentStringList = ""; - List> enchantmentList = new ArrayList<>(event.getEnchantsToAdd().entrySet()); - for(int i=0;i> enchantmentList = new ArrayList<>(event.getEnchantsToAdd().entrySet()); + for (int i = 0; i < enchantmentList.size(); i++) { + String enchant = enchantmentList.get(i).getKey().getName() + ":" + enchantmentList.get(i).getValue(); + enchantmentStringList.append(enchant); + if (i < enchantmentList.size() - 1) { + enchantmentStringList.append(";"); + } + } + return enchantmentStringList; + } } diff --git a/src/main/java/ce/ajneb97/listeners/OtherEventsListener.java b/src/main/java/ce/ajneb97/listeners/OtherEventsListener.java index 6b1f70d..99b82c9 100644 --- a/src/main/java/ce/ajneb97/listeners/OtherEventsListener.java +++ b/src/main/java/ce/ajneb97/listeners/OtherEventsListener.java @@ -2,7 +2,7 @@ import ce.ajneb97.ConditionalEvents; import ce.ajneb97.api.ConditionalEventsCallEvent; -import ce.ajneb97.managers.EventsManager; +import ce.ajneb97.manager.EventsManager; import ce.ajneb97.model.CEEvent; import ce.ajneb97.model.EventType; import ce.ajneb97.model.StoredVariable; @@ -22,19 +22,21 @@ import java.util.ArrayList; +@SuppressWarnings("deprecation") public class OtherEventsListener implements Listener { public ConditionalEvents plugin; + public OtherEventsListener(ConditionalEvents plugin) { this.plugin = plugin; } @EventHandler(priority = EventPriority.HIGHEST) - public void onEntitySpawn(CreatureSpawnEvent event){ + public void onEntitySpawn(CreatureSpawnEvent event) { Entity entity = event.getEntity(); new ConditionEvent(plugin, null, event, EventType.ENTITY_SPAWN, null) .addVariables( - new StoredVariable("%reason%",event.getSpawnReason().name()) + new StoredVariable("%reason%", event.getSpawnReason().name()) ) .setCommonEntityVariables(entity).checkEvent(); } @@ -44,60 +46,56 @@ public void onConsoleCommand(ServerCommandEvent event) { String command = event.getCommand(); String[] args = command.split(" "); - ArrayList eventVariables = new ArrayList(); - for(int i=1;i eventVariables = new ArrayList<>(); + for (int i = 1; i < args.length; i++) { + eventVariables.add(new StoredVariable("%arg_" + (i) + "%", args[i])); } new ConditionEvent(plugin, null, event, EventType.CONSOLE_COMMAND, null) .addVariables( - new StoredVariable("%command%",command), - new StoredVariable("%main_command%",args[0]), - new StoredVariable("%args_length%",(args.length-1)+"") + new StoredVariable("%command%", command), + new StoredVariable("%main_command%", args[0]), + new StoredVariable("%args_length%", (args.length - 1) + "") ).addVariables(eventVariables) .checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onConditionalEventsCallEvent(ConditionalEventsCallEvent event){ + public void onConditionalEventsCallEvent(ConditionalEventsCallEvent event) { Player player = event.getPlayer(); String eventName = event.getEvent(); EventsManager eventsManager = plugin.getEventsManager(); CEEvent ceEvent = eventsManager.getEvent(eventName); - if(!ceEvent.getEventType().equals(EventType.CALL)){ + if (!ceEvent.getEventType().equals(EventType.CALL)) { return; } - if(!ceEvent.isEnabled()){ + if (!ceEvent.isEnabled()) { return; } ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.CALL, null) .addVariables(event.getVariables()); - eventsManager.checkSingularEvent(conditionEvent,ceEvent); + eventsManager.checkSingularEvent(conditionEvent, ceEvent); } - //Not for CE events @EventHandler(priority = EventPriority.HIGHEST) - public void onProjectileLaunch(ProjectileLaunchEvent event){ + public void onProjectileLaunch(ProjectileLaunchEvent event) { Projectile projectile = event.getEntity(); - if(projectile.getShooter() instanceof Player) { + if (projectile.getShooter() instanceof Player) { Player player = (Player) projectile.getShooter(); ItemStack usedItem = player.getItemInHand(); - if(usedItem == null){ - return; - } - projectile.setMetadata("conditionaleventes_projectile_item",new FixedMetadataValue(plugin,usedItem.clone())); + projectile.setMetadata("conditionaleventes_projectile_item", new FixedMetadataValue(plugin, usedItem.clone())); } } @EventHandler public void fireworkDamage(EntityDamageByEntityEvent event) { Entity damager = event.getDamager(); - if(event.getEntity() instanceof Player && damager.getType().name().contains("FIREWORK")) { - if(damager.hasMetadata("conditionalevents")) { + if (event.getEntity() instanceof Player && damager.getType().name().contains("FIREWORK")) { + if (damager.hasMetadata("conditionalevents")) { event.setCancelled(true); } } diff --git a/src/main/java/ce/ajneb97/listeners/PlayerEventsListener.java b/src/main/java/ce/ajneb97/listeners/PlayerEventsListener.java index 90d366b..08faee6 100644 --- a/src/main/java/ce/ajneb97/listeners/PlayerEventsListener.java +++ b/src/main/java/ce/ajneb97/listeners/PlayerEventsListener.java @@ -3,11 +3,10 @@ import ce.ajneb97.ConditionalEvents; import ce.ajneb97.libs.armorequipevent.ArmorEquipEvent; import ce.ajneb97.libs.offhandevent.OffHandEvent; -import ce.ajneb97.managers.MessagesManager; +import ce.ajneb97.manager.MessagesManager; import ce.ajneb97.model.EventType; import ce.ajneb97.model.StoredVariable; import ce.ajneb97.model.internal.ConditionEvent; -import ce.ajneb97.model.player.PlayerData; import ce.ajneb97.utils.*; import org.bukkit.*; import org.bukkit.block.Block; @@ -28,26 +27,29 @@ import java.util.ArrayList; +@SuppressWarnings("deprecation") public class PlayerEventsListener implements Listener { - public ConditionalEvents plugin; + private final ConditionalEvents plugin; + private final String prefix = ConditionalEvents.prefix; + public PlayerEventsListener(ConditionalEvents plugin) { this.plugin = plugin; } @EventHandler(priority = EventPriority.HIGHEST) - public void onPreJoin(AsyncPlayerPreLoginEvent event){ + public void onPreJoin(AsyncPlayerPreLoginEvent event) { new ConditionEvent(plugin, null, event, EventType.PLAYER_PRE_JOIN, null) .addVariables( - new StoredVariable("%name%",event.getName()), + new StoredVariable("%name%", event.getName()), new StoredVariable("%ip%", event.getAddress().getHostAddress()), - new StoredVariable("%uuid%",event.getUniqueId().toString()) + new StoredVariable("%uuid%", event.getUniqueId().toString()) ) .checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onJoin(PlayerJoinEvent event){ + public void onJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); new ConditionEvent(plugin, player, event, EventType.PLAYER_JOIN, null) .checkEvent(); @@ -56,15 +58,15 @@ public void onJoin(PlayerJoinEvent event){ //Update notification String latestVersion = plugin.getUpdateCheckerManager().getLatestVersion(); - if(player.isOp() && !(plugin.version.equals(latestVersion)) && - plugin.getConfigsManager().getMainConfigManager().isUpdateNotifications()){ - player.sendMessage(MessagesManager.getLegacyColoredMessage(plugin.prefix+" &cThere is a new version available. &e(&7"+latestVersion+"&e)")); + if (player.isOp() && !(plugin.version.equals(latestVersion)) && + plugin.getConfigsManager().getMainConfigManager().isUpdateNotifications()) { + player.sendMessage(MessagesManager.getLegacyColoredMessage(prefix + " &cThere is a new version available. &e(&7" + latestVersion + "&e)")); player.sendMessage(MessagesManager.getLegacyColoredMessage("&cYou can download it at: &ahttps://modrinth.com/plugin/conditionalevents")); } } @EventHandler(priority = EventPriority.HIGHEST) - public void onLeave(PlayerQuitEvent event){ + public void onLeave(PlayerQuitEvent event) { Player player = event.getPlayer(); plugin.getPlayerManager().manageLeave(player); @@ -74,14 +76,14 @@ public void onLeave(PlayerQuitEvent event){ } @EventHandler(priority = EventPriority.HIGHEST) - public void onRespawn(PlayerRespawnEvent event){ + public void onRespawn(PlayerRespawnEvent event) { Player player = event.getPlayer(); new ConditionEvent(plugin, player, event, EventType.PLAYER_RESPAWN, null) .checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onDeath(PlayerDeathEvent event){ + public void onDeath(PlayerDeathEvent event) { Player player = event.getEntity(); String cause = ""; String killerType = ""; @@ -89,19 +91,19 @@ public void onDeath(PlayerDeathEvent event){ String killerNameColorFormat = ""; EntityDamageEvent entityDamageEvent = player.getLastDamageCause(); - if(entityDamageEvent != null) { + if (entityDamageEvent != null) { EntityDamageEvent.DamageCause damageCause = entityDamageEvent.getCause(); cause = damageCause.name(); - if(entityDamageEvent instanceof EntityDamageByEntityEvent) { + if (entityDamageEvent instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent event2 = (EntityDamageByEntityEvent) entityDamageEvent; Entity killer = event2.getDamager(); killerType = killer.getType().name(); - if(killer.getCustomName() != null) { - if(plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()){ + if (killer.getCustomName() != null) { + if (plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()) { killerName = MiniMessageUtils.getEntityCustomNamePlain(killer); killerNameColorFormat = MiniMessageUtils.getEntityCustomNameMiniMessage(killer); - }else{ + } else { killerName = ChatColor.stripColor(killer.getCustomName()); killerNameColorFormat = killer.getCustomName().replace("§", "&"); } @@ -111,129 +113,122 @@ public void onDeath(PlayerDeathEvent event){ new ConditionEvent(plugin, player, event, EventType.PLAYER_DEATH, null) .addVariables( - new StoredVariable("%cause%",cause), - new StoredVariable("%killer_type%",killerType), - new StoredVariable("%killer_name%",killerName), - new StoredVariable("%killer_color_format_name%",killerNameColorFormat) + new StoredVariable("%cause%", cause), + new StoredVariable("%killer_type%", killerType), + new StoredVariable("%killer_name%", killerName), + new StoredVariable("%killer_color_format_name%", killerNameColorFormat) ) .checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onBlockInteract(PlayerInteractEvent event){ + public void onBlockInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); Block block = event.getClickedBlock(); ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_10_R1)) { - if(!event.getAction().equals(Action.PHYSICAL) && (event.getHand() == null || !event.getHand().equals(EquipmentSlot.HAND))) { + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_10_R1)) { + if (!event.getAction().equals(Action.PHYSICAL) && (event.getHand() == null || !event.getHand().equals(EquipmentSlot.HAND))) { return; } } - if(block == null){ + if (block == null) { return; } ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.BLOCK_INTERACT, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.setCommonBlockVariables(block) - .setCommonActionVariables(event.getAction(),player) - .setCommonItemVariables(player.getItemInHand(),null) + .setCommonActionVariables(event.getAction(), player) + .setCommonItemVariables(player.getItemInHand(), null) .checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onEntityInteract(PlayerInteractEntityEvent event){ + public void onEntityInteract(PlayerInteractEntityEvent event) { Player player = event.getPlayer(); Entity entity = event.getRightClicked(); ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_9_R1) && !event.getHand().equals(EquipmentSlot.HAND)) { - return; - } - if(entity == null){ + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_9_R1) && !event.getHand().equals(EquipmentSlot.HAND)) { return; } LivingEntity target = null; - if(entity instanceof LivingEntity) { + if (entity instanceof LivingEntity) { target = (LivingEntity) entity; } new ConditionEvent(plugin, player, event, EventType.ENTITY_INTERACT, target) .setCommonEntityVariables(entity) - .setCommonItemVariables(player.getItemInHand(),null) + .setCommonItemVariables(player.getItemInHand(), null) .checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerAttack(EntityDamageByEntityEvent event){ + public void onPlayerAttack(EntityDamageByEntityEvent event) { Entity attacker = event.getDamager(); Entity damaged = event.getEntity(); - Player player = null; - if(attacker == null || damaged == null) { - return; - } + Player player; //For projectiles must be the used item to shoot. ItemStack item = null; String attackType = "PLAYER"; - if(attacker instanceof Projectile) { + if (attacker instanceof Projectile) { Projectile projectile = (Projectile) attacker; - if(projectile.getShooter() instanceof Player) { + if (projectile.getShooter() instanceof Player) { attackType = projectile.getType().name(); player = (Player) projectile.getShooter(); - if(projectile.hasMetadata("conditionaleventes_projectile_item")){ + if (projectile.hasMetadata("conditionaleventes_projectile_item")) { item = (ItemStack) projectile.getMetadata("conditionaleventes_projectile_item").get(0).value(); } - }else{ + } else { return; } - }else if(attacker instanceof Player) { + } else if (attacker instanceof Player) { player = (Player) attacker; item = player.getItemInHand(); - }else{ + } else { return; } LivingEntity target = null; - if(damaged instanceof LivingEntity) { + if (damaged instanceof LivingEntity) { target = (LivingEntity) damaged; } - ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.PLAYER_ATTACK, target); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%damage%",MathUtils.truncate(event.getFinalDamage())+""), - new StoredVariable("%original_damage%",MathUtils.truncate(event.getDamage())+""), - new StoredVariable("%attack_type%", attackType) - ).setCommonItemVariables(item,null) + new StoredVariable("%damage%", MathUtils.truncate(event.getFinalDamage()) + ""), + new StoredVariable("%original_damage%", MathUtils.truncate(event.getDamage()) + ""), + new StoredVariable("%attack_type%", attackType) + ).setCommonItemVariables(item, null) .setCommonVictimVariables(damaged) .checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onWorldChange(PlayerChangedWorldEvent event){ + public void onWorldChange(PlayerChangedWorldEvent event) { Player player = event.getPlayer(); new ConditionEvent(plugin, player, event, EventType.PLAYER_WORLD_CHANGE, null) .addVariables( - new StoredVariable("%world_from%",event.getFrom().getName()), - new StoredVariable("%world_to%",player.getWorld().getName()), - new StoredVariable("%online_players_from%",event.getFrom().getPlayers().size()+""), - new StoredVariable("%online_players_to%",player.getWorld().getPlayers().size()+"") + new StoredVariable("%world_from%", event.getFrom().getName()), + new StoredVariable("%world_to%", player.getWorld().getName()), + new StoredVariable("%online_players_from%", event.getFrom().getPlayers().size() + ""), + new StoredVariable("%online_players_to%", player.getWorld().getPlayers().size() + "") ).checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerDamaged(EntityDamageEvent event){ + public void onPlayerDamaged(EntityDamageEvent event) { Entity damaged = event.getEntity(); - if(damaged == null || !(damaged instanceof Player) || event.getCause() == null) { + if (!(damaged instanceof Player)) { return; } @@ -242,15 +237,15 @@ public void onPlayerDamaged(EntityDamageEvent event){ String damagerType = ""; String damagerName = ""; String damagerNameColorFormat = ""; - if(event instanceof EntityDamageByEntityEvent) { + if (event instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent event2 = (EntityDamageByEntityEvent) event; Entity damager = event2.getDamager(); damagerType = damager.getType().name(); - if(damager != null && damager.getCustomName() != null) { - if(plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()){ + if (damager.getCustomName() != null) { + if (plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()) { damagerName = MiniMessageUtils.getEntityCustomNamePlain(damager); damagerNameColorFormat = MiniMessageUtils.getEntityCustomNameMiniMessage(damager); - }else{ + } else { damagerName = ChatColor.stripColor(damager.getCustomName()); damagerNameColorFormat = damager.getCustomName().replace("§", "&"); } @@ -259,51 +254,51 @@ public void onPlayerDamaged(EntityDamageEvent event){ new ConditionEvent(plugin, player, event, EventType.PLAYER_DAMAGE, null) .addVariables( - new StoredVariable("%damager_type%",damagerType), - new StoredVariable("%damager_name%",damagerName), - new StoredVariable("%damager_color_format_name%",damagerNameColorFormat), - new StoredVariable("%damage%", MathUtils.truncate(event.getFinalDamage())+""), - new StoredVariable("%original_damage%",MathUtils.truncate(event.getDamage())+""), - new StoredVariable("%cause%",cause) + new StoredVariable("%damager_type%", damagerType), + new StoredVariable("%damager_name%", damagerName), + new StoredVariable("%damager_color_format_name%", damagerNameColorFormat), + new StoredVariable("%damage%", MathUtils.truncate(event.getFinalDamage()) + ""), + new StoredVariable("%original_damage%", MathUtils.truncate(event.getDamage()) + ""), + new StoredVariable("%cause%", cause) ).checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerKill(EntityDeathEvent event){ + public void onPlayerKill(EntityDeathEvent event) { LivingEntity entity = event.getEntity(); - if(entity == null || entity.getKiller() == null) { + if (entity.getKiller() == null) { return; } Player player = entity.getKiller(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.PLAYER_KILL, entity); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.setCommonVictimVariables(entity). - setCommonItemVariables(player.getItemInHand(),null) + setCommonItemVariables(player.getItemInHand(), null) .checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onBlockPlace(BlockPlaceEvent event){ + public void onBlockPlace(BlockPlaceEvent event) { Player player = event.getPlayer(); Block block = event.getBlock(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.BLOCK_PLACE, null); - if(!conditionEvent.containsValidEvents()) return; - conditionEvent.setCommonItemVariables(player.getItemInHand(),null) + if (!conditionEvent.containsValidEvents()) return; + conditionEvent.setCommonItemVariables(player.getItemInHand(), null) .setCommonBlockVariables(block) .checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onBlockBreak(BlockBreakEvent event){ + public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); Block block = event.getBlock(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.BLOCK_BREAK, null); - if(!conditionEvent.containsValidEvents()) return; - conditionEvent.setCommonItemVariables(player.getItemInHand(),null) + if (!conditionEvent.containsValidEvents()) return; + conditionEvent.setCommonItemVariables(player.getItemInHand(), null) .setCommonBlockVariables(block) .checkEvent(); } @@ -314,16 +309,16 @@ public void onCommandUse(PlayerCommandPreprocessEvent event) { String command = event.getMessage(); String[] args = command.split(" "); - ArrayList eventVariables = new ArrayList(); - for(int i=1;i eventVariables = new ArrayList<>(); + for (int i = 1; i < args.length; i++) { + eventVariables.add(new StoredVariable("%arg_" + (i) + "%", args[i])); } new ConditionEvent(plugin, player, event, EventType.PLAYER_COMMAND, null) .addVariables( - new StoredVariable("%command%",command), - new StoredVariable("%main_command%",args[0]), - new StoredVariable("%args_length%",(args.length-1)+"") + new StoredVariable("%command%", command), + new StoredVariable("%main_command%", args[0]), + new StoredVariable("%args_length%", (args.length - 1) + "") ).addVariables(eventVariables) .checkEvent(); } @@ -334,7 +329,7 @@ public void onChat(AsyncPlayerChatEvent event) { new ConditionEvent(plugin, player, event, EventType.PLAYER_CHAT, null) .addVariables( - new StoredVariable("%message%",event.getMessage()) + new StoredVariable("%message%", event.getMessage()) ).setAsync(true).checkEvent(); } @@ -344,8 +339,8 @@ public void onPlayerLevelChange(PlayerLevelChangeEvent event) { new ConditionEvent(plugin, player, event, EventType.PLAYER_LEVELUP, null) .addVariables( - new StoredVariable("%old_level%",event.getOldLevel()+""), - new StoredVariable("%new_level%",event.getNewLevel()+"") + new StoredVariable("%old_level%", event.getOldLevel() + ""), + new StoredVariable("%new_level%", event.getNewLevel() + "") ).checkEvent(); } @@ -356,34 +351,34 @@ public void onArmorEquip(ArmorEquipEvent event) { String equipType = "EQUIP"; ItemStack newItem = event.getNewArmorPiece(); ItemStack previousItem = event.getOldArmorPiece(); - ItemStack selectedItem = null; - if(newItem == null || newItem.getType().name().equals("AIR")) { + ItemStack selectedItem; + if (newItem == null || newItem.getType().name().equals("AIR")) { equipType = "UNEQUIP"; selectedItem = previousItem; - }else { + } else { selectedItem = newItem; } String type = ""; - if(event.getType() != null) { + if (event.getType() != null) { type = event.getType().name(); } - if(newItem != null && !newItem.getType().name().equals("AIR") + if (newItem != null && !newItem.getType().name().equals("AIR") && previousItem != null && !previousItem.getType().name().equals("AIR")) { ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.PLAYER_ARMOR, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%armor_type%",type), - new StoredVariable("%equip_type%","UNEQUIP") - ).setCommonItemVariables(previousItem,null) + new StoredVariable("%armor_type%", type), + new StoredVariable("%equip_type%", "UNEQUIP") + ).setCommonItemVariables(previousItem, null) .checkEvent(); } ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.PLAYER_ARMOR, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%armor_type%",type), - new StoredVariable("%equip_type%",equipType) - ).setCommonItemVariables(selectedItem,null) + new StoredVariable("%armor_type%", type), + new StoredVariable("%equip_type%", equipType) + ).setCommonItemVariables(selectedItem, null) .checkEvent(); @@ -399,19 +394,19 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { new ConditionEvent(plugin, player, event, EventType.PLAYER_TELEPORT, null) .addVariables( - new StoredVariable("%cause%",event.getCause()+""), - new StoredVariable("%from_x%",locationFrom.getX()+""), - new StoredVariable("%from_y%",locationFrom.getY()+""), - new StoredVariable("%from_z%",locationFrom.getZ()+""), - new StoredVariable("%from_world%",locationFrom.getWorld().getName()+""), - new StoredVariable("%from_yaw%",locationFrom.getYaw()+""), - new StoredVariable("%from_pitch%",locationFrom.getPitch()+""), - new StoredVariable("%to_x%",locationTo.getX()+""), - new StoredVariable("%to_y%",locationTo.getY()+""), - new StoredVariable("%to_z%",locationTo.getZ()+""), - new StoredVariable("%to_world%",locationTo.getWorld().getName()+""), - new StoredVariable("%to_yaw%",locationTo.getYaw()+""), - new StoredVariable("%to_pitch%",locationTo.getPitch()+"") + new StoredVariable("%cause%", event.getCause() + ""), + new StoredVariable("%from_x%", locationFrom.getX() + ""), + new StoredVariable("%from_y%", locationFrom.getY() + ""), + new StoredVariable("%from_z%", locationFrom.getZ() + ""), + new StoredVariable("%from_world%", locationFrom.getWorld().getName()), + new StoredVariable("%from_yaw%", locationFrom.getYaw() + ""), + new StoredVariable("%from_pitch%", locationFrom.getPitch() + ""), + new StoredVariable("%to_x%", locationTo.getX() + ""), + new StoredVariable("%to_y%", locationTo.getY() + ""), + new StoredVariable("%to_z%", locationTo.getZ() + ""), + new StoredVariable("%to_world%", locationTo.getWorld().getName()), + new StoredVariable("%to_yaw%", locationTo.getYaw() + ""), + new StoredVariable("%to_pitch%", locationTo.getPitch() + "") ).checkEvent(); } @@ -419,13 +414,13 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { public void onBedEnter(PlayerBedEnterEvent event) { Player player = event.getPlayer(); - if(OtherUtils.isLegacy()){ + if (OtherUtils.isLegacy()) { return; } new ConditionEvent(plugin, player, event, EventType.PLAYER_BED_ENTER, null) .addVariables( - new StoredVariable("%result%",event.getBedEnterResult()+"") + new StoredVariable("%result%", event.getBedEnterResult() + "") ).checkEvent(); } @@ -442,30 +437,30 @@ public void onFishEvent(PlayerFishEvent event) { ItemStack caughtItem = null; LivingEntity target = null; - if(caught != null){ + if (caught != null) { caughtType = caught.getType().name(); Location l = caught.getLocation(); x = l.getX(); y = l.getY(); z = l.getZ(); - if(caught instanceof Item){ + if (caught instanceof Item) { caughtItem = ((Item) caught).getItemStack(); } - if(caught instanceof LivingEntity) { + if (caught instanceof LivingEntity) { target = (LivingEntity) caught; } } new ConditionEvent(plugin, player, event, EventType.PLAYER_FISH, target) .addVariables( - new StoredVariable("%state%",state.name()+""), - new StoredVariable("%caught_type%",caughtType), - new StoredVariable("%caught_x%",x+""), - new StoredVariable("%caught_y%",y+""), - new StoredVariable("%caught_z%",z+"") - ).setCommonItemVariables(caughtItem,null).checkEvent(); + new StoredVariable("%state%", state.name()), + new StoredVariable("%caught_type%", caughtType), + new StoredVariable("%caught_x%", x + ""), + new StoredVariable("%caught_y%", y + ""), + new StoredVariable("%caught_z%", z + "") + ).setCommonItemVariables(caughtItem, null).checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) @@ -473,16 +468,16 @@ public void onOpenInventory(InventoryOpenEvent event) { Player player = (Player) event.getPlayer(); String inventoryTitle; - if(plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()){ + if (plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()) { inventoryTitle = MiniMessageUtils.getInventoryTitlePlain(event); - }else{ + } else { inventoryTitle = ChatColor.stripColor(InventoryUtils.getViewTitle(event)); } new ConditionEvent(plugin, player, event, EventType.PLAYER_OPEN_INVENTORY, null) .addVariables( - new StoredVariable("%inventory_type%",event.getInventory().getType().name()), - new StoredVariable("%inventory_title%",inventoryTitle) + new StoredVariable("%inventory_type%", event.getInventory().getType().name()), + new StoredVariable("%inventory_title%", inventoryTitle) ).checkEvent(); } @@ -491,16 +486,16 @@ public void onCloseInventory(InventoryCloseEvent event) { Player player = (Player) event.getPlayer(); String inventoryTitle; - if(plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()){ + if (plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()) { inventoryTitle = MiniMessageUtils.getInventoryTitlePlain(event); - }else{ + } else { inventoryTitle = ChatColor.stripColor(InventoryUtils.getViewTitle(event)); } new ConditionEvent(plugin, player, event, EventType.PLAYER_CLOSE_INVENTORY, null) .addVariables( - new StoredVariable("%inventory_type%",event.getInventory().getType().name()), - new StoredVariable("%inventory_title%",inventoryTitle) + new StoredVariable("%inventory_type%", event.getInventory().getType().name()), + new StoredVariable("%inventory_title%", inventoryTitle) ).checkEvent(); } @@ -509,104 +504,100 @@ public void onClickInventory(InventoryClickEvent event) { Player player = (Player) event.getWhoClicked(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.PLAYER_CLICK_INVENTORY, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; String clickType = event.getClick().name(); String action = event.getAction().name(); - String slotType = ""; - if(event.getSlotType() != null){ - slotType = event.getSlotType().name(); - } - String title = ""; - String titleColorFormat = ""; - if(event.getView() != null){ - if(plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()){ - title = MiniMessageUtils.getInventoryTitlePlain(event); - titleColorFormat = MiniMessageUtils.getInventoryTitleMiniMessage(event); - }else{ - title = InventoryUtils.getViewTitle(event); - titleColorFormat = title.replace("§", "&"); - title = ChatColor.stripColor(title); - } + String slotType; + slotType = event.getSlotType().name(); + String title; + String titleColorFormat; + if (plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + title = MiniMessageUtils.getInventoryTitlePlain(event); + titleColorFormat = MiniMessageUtils.getInventoryTitleMiniMessage(event); + } else { + title = InventoryUtils.getViewTitle(event); + titleColorFormat = title.replace("§", "&"); + title = ChatColor.stripColor(title); } String inventoryType = ""; int slot = event.getSlot(); - if(event.getClickedInventory() != null){ + if (event.getClickedInventory() != null) { inventoryType = event.getClickedInventory().getType().name(); } conditionEvent.addVariables( - new StoredVariable("%inventory_type%",inventoryType), - new StoredVariable("%inventory_title%",title), - new StoredVariable("%inventory_title_color_format%",titleColorFormat), - new StoredVariable("%click_type%",clickType), - new StoredVariable("%action_type%",action), - new StoredVariable("%slot_type%",slotType), - new StoredVariable("%slot%",slot+"") - ).setCommonItemVariables(event.getCurrentItem(),null) - .setCommonItemVariables(event.getCursor(),"cursor") + new StoredVariable("%inventory_type%", inventoryType), + new StoredVariable("%inventory_title%", title), + new StoredVariable("%inventory_title_color_format%", titleColorFormat), + new StoredVariable("%click_type%", clickType), + new StoredVariable("%action_type%", action), + new StoredVariable("%slot_type%", slotType), + new StoredVariable("%slot%", slot + "") + ).setCommonItemVariables(event.getCurrentItem(), null) + .setCommonItemVariables(event.getCursor(), "cursor") .checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onStatisticIncrement(PlayerStatisticIncrementEvent event){ + public void onStatisticIncrement(PlayerStatisticIncrementEvent event) { Player player = event.getPlayer(); String material = ""; - if(event.getMaterial() != null){ + if (event.getMaterial() != null) { material = event.getMaterial().name(); } String entityType = ""; - if(event.getEntityType() != null){ + if (event.getEntityType() != null) { entityType = event.getEntityType().name(); } ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.PLAYER_STATISTIC, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%statistic_name%",event.getStatistic().name()), - new StoredVariable("%previous_value%",event.getPreviousValue()+""), - new StoredVariable("%new_value%",event.getNewValue()+""), - new StoredVariable("%entity%",entityType), - new StoredVariable("%block%",material) + new StoredVariable("%statistic_name%", event.getStatistic().name()), + new StoredVariable("%previous_value%", event.getPreviousValue() + ""), + new StoredVariable("%new_value%", event.getNewValue() + ""), + new StoredVariable("%entity%", entityType), + new StoredVariable("%block%", material) ).checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onSneak(PlayerToggleSneakEvent event){ + public void onSneak(PlayerToggleSneakEvent event) { Player player = event.getPlayer(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.PLAYER_SNEAK, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%is_sneaking%",event.isSneaking()+"") + new StoredVariable("%is_sneaking%", event.isSneaking() + "") ).checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onRun(PlayerToggleSprintEvent event){ + public void onRun(PlayerToggleSprintEvent event) { Player player = event.getPlayer(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.PLAYER_RUN, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%is_running%",event.isSprinting()+"") + new StoredVariable("%is_running%", event.isSprinting() + "") ).checkEvent(); } @EventHandler(priority = EventPriority.HIGHEST) - public void onHealthRegain(EntityRegainHealthEvent event){ + public void onHealthRegain(EntityRegainHealthEvent event) { Entity entity = event.getEntity(); - if(!(entity instanceof Player)){ + if (!(entity instanceof Player)) { return; } Player player = (Player) entity; ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.PLAYER_REGAIN_HEALTH, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%reason%",event.getRegainReason().name()), - new StoredVariable("%amount%",event.getAmount()+"") + new StoredVariable("%reason%", event.getRegainReason().name()), + new StoredVariable("%amount%", event.getAmount() + "") ).checkEvent(); } @@ -618,10 +609,10 @@ public void onPlayerOffHand(OffHandEvent event) { ItemStack recoveredItem = event.getRecoveredFromOffhand() != null ? event.getRecoveredFromOffhand() : new ItemStack(Material.AIR); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.PLAYER_OFFHAND, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%movement_type%",event.getMovementType().name()) - ).setCommonItemVariables(placedItem,null).setCommonItemVariables(recoveredItem,"offhand") + new StoredVariable("%movement_type%", event.getMovementType().name()) + ).setCommonItemVariables(placedItem, null).setCommonItemVariables(recoveredItem, "offhand") .checkEvent(); } } diff --git a/src/main/java/ce/ajneb97/listeners/PlayerEventsListenerNew1_16.java b/src/main/java/ce/ajneb97/listeners/PlayerEventsListenerNew1_16.java index c9f44fc..380f145 100644 --- a/src/main/java/ce/ajneb97/listeners/PlayerEventsListenerNew1_16.java +++ b/src/main/java/ce/ajneb97/listeners/PlayerEventsListenerNew1_16.java @@ -12,19 +12,20 @@ public class PlayerEventsListenerNew1_16 implements Listener { public ConditionalEvents plugin; + public PlayerEventsListenerNew1_16(ConditionalEvents plugin) { this.plugin = plugin; } @EventHandler - public void onPlayerFoodLevelChange(FoodLevelChangeEvent event){ + public void onPlayerFoodLevelChange(FoodLevelChangeEvent event) { Player player = (Player) event.getEntity(); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, event, EventType.PLAYER_CHANGE_FOOD, null); - if(!conditionEvent.containsValidEvents()) return; + if (!conditionEvent.containsValidEvents()) return; conditionEvent.addVariables( - new StoredVariable("%old_food_level%",player.getFoodLevel()+""), - new StoredVariable("%new_food_level%",event.getFoodLevel()+"") - ).checkEvent(); + new StoredVariable("%old_food_level%", player.getFoodLevel() + ""), + new StoredVariable("%new_food_level%", event.getFoodLevel() + "") + ).checkEvent(); } } diff --git a/src/main/java/ce/ajneb97/listeners/PlayerEventsListenerNew1_9.java b/src/main/java/ce/ajneb97/listeners/PlayerEventsListenerNew1_9.java index 771d46b..a5bded1 100644 --- a/src/main/java/ce/ajneb97/listeners/PlayerEventsListenerNew1_9.java +++ b/src/main/java/ce/ajneb97/listeners/PlayerEventsListenerNew1_9.java @@ -15,29 +15,30 @@ public class PlayerEventsListenerNew1_9 implements Listener { public ConditionalEvents plugin; + public PlayerEventsListenerNew1_9(ConditionalEvents plugin) { this.plugin = plugin; } @EventHandler(priority = EventPriority.HIGHEST) - public void onTabComplete(TabCompleteEvent event){ - if(!(event.getSender() instanceof Player)){ + public void onTabComplete(TabCompleteEvent event) { + if (!(event.getSender() instanceof Player)) { return; } Player player = (Player) event.getSender(); String command = event.getBuffer(); - String[] args = command.split(" ",-1); + String[] args = command.split(" ", -1); ArrayList eventVariables = new ArrayList<>(); - for(int i=1;i apiActions; - public APIManager(ConditionalEvents plugin){ + private final ConditionalEvents plugin; + private final ArrayList apiActions; + + public APIManager(ConditionalEvents plugin) { this.plugin = plugin; - apiActions = new ArrayList<>(); + this.apiActions = new ArrayList<>(); } - public void registerApiActions(JavaPlugin plugin, ConditionalEventsAction... actions){ - for(ConditionalEventsAction a : actions){ + public void registerApiActions(JavaPlugin plugin, ConditionalEventsAction... actions) { + for (ConditionalEventsAction a : actions) { a.setPlugin(plugin); - Bukkit.getConsoleSender().sendMessage(ConditionalEvents.prefix+ - MessagesManager.getLegacyColoredMessage(" &7Custom API Action &a"+a.getName()+" &7registered from plugin &e"+a.getPlugin().getName())); + Bukkit.getConsoleSender().sendMessage(ConditionalEvents.prefix + + MessagesManager.getLegacyColoredMessage(" &7Custom API Action &a" + a.getName() + " &7registered from plugin &e" + a.getPlugin().getName())); apiActions.add(a); } this.plugin.getConfigsManager().endRepetitiveEvents(); @@ -31,30 +32,30 @@ public void registerApiActions(JavaPlugin plugin, ConditionalEventsAction... act this.plugin.getVerifyManager().verifyEvents(); } - public void unregisterApiActions(JavaPlugin plugin){ + public void unregisterApiActions(JavaPlugin plugin) { apiActions.removeIf(a -> a.getPlugin() == plugin); this.plugin.getConfigsManager().endRepetitiveEvents(); this.plugin.getConfigsManager().configureEvents(); this.plugin.getVerifyManager().verifyEvents(); } - public ConditionalEventsAction getApiAction(String actionName){ - for(ConditionalEventsAction action : apiActions){ - if(action.getName().equals(actionName)){ + public ConditionalEventsAction getApiAction(String actionName) { + for (ConditionalEventsAction action : apiActions) { + if (action.getName().equals(actionName)) { return action; } } return null; } - public void executeAction(String actionName, LivingEntity livingEntity, String actionLine, Event minecraftEvent){ + public void executeAction(String actionName, LivingEntity livingEntity, String actionLine, Event minecraftEvent) { ConditionalEventsAction action = getApiAction(actionName); - if(action != null){ + if (action != null) { Player player = null; - if(livingEntity instanceof Player){ - player = (Player)livingEntity; + if (livingEntity instanceof Player) { + player = (Player) livingEntity; } - action.execute(player,actionLine,minecraftEvent); + action.execute(player, actionLine, minecraftEvent); } } } diff --git a/src/main/java/ce/ajneb97/managers/BungeeMessagingManager.java b/src/main/java/ce/ajneb97/manager/BungeeMessagingManager.java similarity index 68% rename from src/main/java/ce/ajneb97/managers/BungeeMessagingManager.java rename to src/main/java/ce/ajneb97/manager/BungeeMessagingManager.java index 4013972..ba5d123 100644 --- a/src/main/java/ce/ajneb97/managers/BungeeMessagingManager.java +++ b/src/main/java/ce/ajneb97/manager/BungeeMessagingManager.java @@ -1,4 +1,4 @@ -package ce.ajneb97.managers; +package ce.ajneb97.manager; import ce.ajneb97.ConditionalEvents; import com.google.common.io.ByteArrayDataOutput; @@ -6,24 +6,24 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; +import org.jetbrains.annotations.NotNull; public class BungeeMessagingManager implements PluginMessageListener { - private ConditionalEvents plugin; - public BungeeMessagingManager(ConditionalEvents plugin){ + private final ConditionalEvents plugin; + + public BungeeMessagingManager(ConditionalEvents plugin) { this.plugin = plugin; Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(plugin, "BungeeCord"); Bukkit.getServer().getMessenger().registerIncomingPluginChannel(plugin, "BungeeCord", this); } @Override - public void onPluginMessageReceived(String channel, Player player, byte[] bytes) { - if (!channel.equals("BungeeCord")) { - return; - } + public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, byte[] bytes) { + // } - public void sendToServer(Player player,String server){ + public void sendToServer(Player player, String server) { ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("Connect"); out.writeUTF(server); diff --git a/src/main/java/ce/ajneb97/manager/DebugManager.java b/src/main/java/ce/ajneb97/manager/DebugManager.java new file mode 100644 index 0000000..67a93c2 --- /dev/null +++ b/src/main/java/ce/ajneb97/manager/DebugManager.java @@ -0,0 +1,169 @@ +package ce.ajneb97.manager; + +import ce.ajneb97.model.actions.ActionTargeter; +import ce.ajneb97.model.actions.ActionTargeterType; +import ce.ajneb97.model.actions.ActionType; +import ce.ajneb97.model.internal.DebugSender; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; + +import java.util.ArrayList; + +public class DebugManager { + + private final ArrayList debugSenders; + + public DebugManager() { + this.debugSenders = new ArrayList<>(); + } + + public boolean setDebugSender(CommandSender sender, String event, String playerName) { + DebugSender debugSender = getDebugSender(sender); + if (debugSender == null) { + this.debugSenders.add(new DebugSender(sender, event, playerName)); + return true; + } + if (debugSender.getEvent().equals(event)) { + //If the same, then remove it + removeDebugSender(sender); + return false; + } + //If different, update it + debugSender.setEvent(event); + return true; + } + + public DebugSender getDebugSender(CommandSender sender) { + for (DebugSender debugSender : debugSenders) { + if (debugSender.getSender().equals(sender)) { + return debugSender; + } + } + return null; + } + + public void removeDebugSender(CommandSender sender) { + for (int i = 0; i < debugSenders.size(); i++) { + if (debugSenders.get(i).getSender().equals(sender)) { + debugSenders.remove(i); + return; + } + } + } + + public void sendConditionMessage(String event, String condition, boolean approved, Player player, boolean start) { + if (debugSenders.isEmpty()) { + return; + } + if (condition.endsWith(" or ")) { + condition = condition.substring(0, condition.length() - 4); + } else if (condition.endsWith(" and ")) { + condition = condition.substring(0, condition.length() - 5); + } + + String result = "&a&lAPPROVED"; + if (!approved) { + result = "&c&lDENIED"; + } + String playerInfo = ""; + if (player != null) { + playerInfo = "," + player.getName(); + } + String startText = ""; + if (start) { + startText = ",&estart"; + } + String debugMessage = MessagesManager.getLegacyColoredMessage("&8[&c" + event + playerInfo + startText + "&8] &7Checking for: &f") + + condition + MessagesManager.getLegacyColoredMessage(" &8| &7Result: " + result); + + for (DebugSender debugSender : debugSenders) { + if (debugSender.getEvent().equals(event)) { + if (player != null && debugSender.getPlayerName() != null) { + if (!debugSender.getPlayerName().equals(player.getName())) { + continue; + } + } + debugSender.getSender().sendMessage(debugMessage); + } + } + } + + public void sendActionsMessage(String event, String actionGroup, Player player) { + if (debugSenders.isEmpty()) { + return; + } + + String playerInfo = ""; + if (player != null) { + playerInfo = "," + player.getName(); + } + + //Fix actionGroup if parameters are present + int pos = actionGroup.indexOf("{"); + if (pos != -1) { + actionGroup = actionGroup.substring(0, pos); + } + + String debugMessage = "&8[&c" + event + playerInfo + "&8] "; + if (actionGroup.equals("cooldown")) { + debugMessage = MessagesManager.getLegacyColoredMessage(debugMessage + "&7Cooldown present, overriding."); + } else if (actionGroup.equals("one_time")) { + debugMessage = MessagesManager.getLegacyColoredMessage(debugMessage + "&7One Time present, overriding."); + } else { + debugMessage = MessagesManager.getLegacyColoredMessage(debugMessage + "&7Executing actions from action group: &f" + actionGroup); + } + + for (DebugSender debugSender : debugSenders) { + if (debugSender.getEvent().equals(event)) { + if (player != null && debugSender.getPlayerName() != null) { + if (!debugSender.getPlayerName().equals(player.getName())) { + continue; + } + } + debugSender.getSender().sendMessage(debugMessage); + } + } + } + + public void sendActionMessage(String event, String actionLine, LivingEntity livingEntity, ActionType actionType, ActionTargeter actionTargeter) { + if (debugSenders.isEmpty()) { + return; + } + + // Can be: + // [,] + // [,] + String playerInfo = ""; + if (livingEntity != null) { + if (livingEntity instanceof Player) { + playerInfo = "," + livingEntity.getName(); + } else { + playerInfo = "," + livingEntity.getType().name(); + } + } + + String actionTargeterInfo = ""; + if (!actionTargeter.getType().equals(ActionTargeterType.NORMAL)) { + if (actionTargeter.getParameter() == null) { + actionTargeterInfo = " &6(" + actionTargeter.getType() + ")"; + } else { + actionTargeterInfo = " &6(" + actionTargeter.getType() + " " + actionTargeter.getParameter() + ")"; + } + } + + String debugMessage = MessagesManager.getLegacyColoredMessage("&8[&c" + event + playerInfo + + ",&eaction&8] &7Executing action:" + actionTargeterInfo + " &6[" + actionType + "&6] &f") + actionLine; + + for (DebugSender debugSender : debugSenders) { + if (debugSender.getEvent().equals(event)) { + if (livingEntity instanceof Player && debugSender.getPlayerName() != null) { + if (!debugSender.getPlayerName().equals(livingEntity.getName())) { + continue; + } + } + debugSender.getSender().sendMessage(debugMessage); + } + } + } +} diff --git a/src/main/java/ce/ajneb97/managers/DependencyManager.java b/src/main/java/ce/ajneb97/manager/DependencyManager.java similarity index 58% rename from src/main/java/ce/ajneb97/managers/DependencyManager.java rename to src/main/java/ce/ajneb97/manager/DependencyManager.java index b855d39..d87b088 100644 --- a/src/main/java/ce/ajneb97/managers/DependencyManager.java +++ b/src/main/java/ce/ajneb97/manager/DependencyManager.java @@ -1,10 +1,11 @@ -package ce.ajneb97.managers; +package ce.ajneb97.manager; import ce.ajneb97.ConditionalEvents; -import ce.ajneb97.managers.dependencies.DiscordSRVManager; -import ce.ajneb97.managers.dependencies.ProtocolLibManager; +import ce.ajneb97.manager.dependencies.DiscordSRVManager; +import ce.ajneb97.manager.dependencies.ProtocolLibManager; import org.bukkit.Bukkit; +@SuppressWarnings("DataFlowIssue") public class DependencyManager { private boolean placeholderAPI; @@ -14,37 +15,36 @@ public class DependencyManager { private ProtocolLibManager protocolLibManager; private DiscordSRVManager discordSRVManager; - public DependencyManager(ConditionalEvents plugin){ + public DependencyManager(ConditionalEvents plugin) { placeholderAPI = false; citizens = false; worldGuardEvents = false; paper = false; - if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null - && Bukkit.getPluginManager().getPlugin("PlaceholderAPI").isEnabled()){ + if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null + && Bukkit.getPluginManager().getPlugin("PlaceholderAPI").isEnabled()) { placeholderAPI = true; } - if(Bukkit.getPluginManager().getPlugin("Citizens") != null - && Bukkit.getPluginManager().getPlugin("Citizens").isEnabled()){ + if (Bukkit.getPluginManager().getPlugin("Citizens") != null + && Bukkit.getPluginManager().getPlugin("Citizens").isEnabled()) { citizens = true; } - if(Bukkit.getPluginManager().getPlugin("WorldGuardEvents") != null - && Bukkit.getPluginManager().getPlugin("WorldGuardEvents").isEnabled()){ + if (Bukkit.getPluginManager().getPlugin("WorldGuardEvents") != null + && Bukkit.getPluginManager().getPlugin("WorldGuardEvents").isEnabled()) { worldGuardEvents = true; } - if(Bukkit.getPluginManager().getPlugin("ProtocolLib") != null - && Bukkit.getPluginManager().getPlugin("ProtocolLib").isEnabled()){ + if (Bukkit.getPluginManager().getPlugin("ProtocolLib") != null + && Bukkit.getPluginManager().getPlugin("ProtocolLib").isEnabled()) { protocolLibManager = new ProtocolLibManager(plugin); } - if(Bukkit.getPluginManager().getPlugin("DiscordSRV") != null - && Bukkit.getPluginManager().getPlugin("DiscordSRV").isEnabled()){ - discordSRVManager = new DiscordSRVManager(plugin); + if (Bukkit.getPluginManager().getPlugin("DiscordSRV") != null + && Bukkit.getPluginManager().getPlugin("DiscordSRV").isEnabled()) { + discordSRVManager = new DiscordSRVManager(); } - try{ + try { Class.forName("com.destroystokyo.paper.ParticleBuilder"); paper = true; - }catch(Exception e){ - + } catch (Exception ignored) { } } diff --git a/src/main/java/ce/ajneb97/managers/EventsManager.java b/src/main/java/ce/ajneb97/manager/EventsManager.java similarity index 50% rename from src/main/java/ce/ajneb97/managers/EventsManager.java rename to src/main/java/ce/ajneb97/manager/EventsManager.java index d83bf9c..c1eea62 100644 --- a/src/main/java/ce/ajneb97/managers/EventsManager.java +++ b/src/main/java/ce/ajneb97/manager/EventsManager.java @@ -1,4 +1,4 @@ -package ce.ajneb97.managers; +package ce.ajneb97.manager; import ce.ajneb97.ConditionalEvents; import ce.ajneb97.model.CEEvent; @@ -9,8 +9,6 @@ import ce.ajneb97.utils.MathUtils; import ce.ajneb97.utils.TimeUtils; import ce.ajneb97.utils.VariablesUtils; -import org.bukkit.Bukkit; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; @@ -20,11 +18,12 @@ public class EventsManager { - private ConditionalEvents plugin; + private final ConditionalEvents plugin; private ArrayList events; - public EventsManager(ConditionalEvents plugin){ + + public EventsManager(ConditionalEvents plugin) { this.plugin = plugin; - this.events = new ArrayList(); + this.events = new ArrayList<>(); } public void setEvents(ArrayList events) { @@ -35,46 +34,46 @@ public ArrayList getEvents() { return events; } - public CEEvent getEvent(String name){ - for(CEEvent event : events){ - if(event.getName().equals(name)){ + public CEEvent getEvent(String name) { + for (CEEvent event : events) { + if (event.getName().equals(name)) { return event; } } return null; } - public void checkEvent(ConditionEvent conditionEvent){ + public void checkEvent(ConditionEvent conditionEvent) { ArrayList validEvents = getValidEvents(conditionEvent.getEventType()); - for(CEEvent event : validEvents){ - checkSingularEvent(conditionEvent,event); + for (CEEvent event : validEvents) { + checkSingularEvent(conditionEvent, event); } } - public void checkSingularEvent(ConditionEvent conditionEvent,CEEvent event){ + public void checkSingularEvent(ConditionEvent conditionEvent, CEEvent event) { Player player = conditionEvent.getPlayer(); boolean isPlaceholderAPI = plugin.getDependencyManager().isPlaceholderAPI(); conditionEvent.setCurrentEvent(event); //Ignore with permission - if(player != null && event.getIgnoreWithPermission() != null && player.hasPermission(event.getIgnoreWithPermission())){ + if (player != null && event.getIgnoreWithPermission() != null && player.hasPermission(event.getIgnoreWithPermission())) { return; } //Ignore if cancelled - if(event.isIgnoreIfCancelled()){ + if (event.isIgnoreIfCancelled()) { Event minecraftEvent = conditionEvent.getMinecraftEvent(); - if(minecraftEvent instanceof Cancellable){ + if (minecraftEvent instanceof Cancellable) { Cancellable c = (Cancellable) minecraftEvent; - if(c.isCancelled()){ + if (c.isCancelled()) { return; } } } //Check condition list - CheckConditionsResult conditionsResult = checkConditions(conditionEvent,isPlaceholderAPI); - if(!conditionsResult.isConditionsAccomplished()){ + CheckConditionsResult conditionsResult = checkConditions(conditionEvent, isPlaceholderAPI); + if (!conditionsResult.isConditionsAccomplished()) { return; } String executeActionGroup = conditionsResult.getExecuteActionGroup(); @@ -84,56 +83,56 @@ public void checkSingularEvent(ConditionEvent conditionEvent,CEEvent event){ boolean bypassCooldown = false; - if(player != null){ - bypassCooldown = player.hasPermission("conditionalevents.bypasscooldown."+event.getName()); + if (player != null) { + bypassCooldown = player.hasPermission("conditionalevents.bypasscooldown." + event.getName()); //Check One time - if(event.isOneTime()){ - boolean isOneTime = playerManager.getEventOneTime(event.getName(),player); - if(isOneTime){ + if (event.isOneTime()) { + boolean isOneTime = playerManager.getEventOneTime(event.getName(), player); + if (isOneTime) { ExecutedEvent executedEvent = new ExecutedEvent(player, conditionEvent.getEventVariables(), event, - "one_time", conditionEvent.getMinecraftEvent(), conditionEvent.getTarget(), plugin); - plugin.getDebugManager().sendActionsMessage(event.getName(),"one_time",player); + "one_time", conditionEvent.getMinecraftEvent(), conditionEvent.getTarget(), plugin); + plugin.getDebugManager().sendActionsMessage(event.getName(), "one_time", player); executedEvent.executeActions(); return; } } //Check Cooldown - if(event.getCooldown() != 0 && !bypassCooldown){ - long eventCooldownMillis = playerManager.getEventCooldown(event.getName(),player)+(event.getCooldown()*1000); + if (event.getCooldown() != 0 && !bypassCooldown) { + long eventCooldownMillis = playerManager.getEventCooldown(event.getName(), player) + (event.getCooldown() * 1000); long currentTimeMillis = System.currentTimeMillis(); - if(eventCooldownMillis > currentTimeMillis){ - String timeString = TimeUtils.getTime((eventCooldownMillis-currentTimeMillis)/1000,messagesManager); - conditionEvent.getEventVariables().add(new StoredVariable("%time%",timeString)); + if (eventCooldownMillis > currentTimeMillis) { + String timeString = TimeUtils.getTime((eventCooldownMillis - currentTimeMillis) / 1000, messagesManager); + conditionEvent.getEventVariables().add(new StoredVariable("%time%", timeString)); ExecutedEvent executedEvent = new ExecutedEvent(player, conditionEvent.getEventVariables(), event, - "cooldown", conditionEvent.getMinecraftEvent(), conditionEvent.getTarget(), plugin); - plugin.getDebugManager().sendActionsMessage(event.getName(),"cooldown",player); + "cooldown", conditionEvent.getMinecraftEvent(), conditionEvent.getTarget(), plugin); + plugin.getDebugManager().sendActionsMessage(event.getName(), "cooldown", player); executedEvent.executeActions(); return; } } } - if(player != null){ + if (player != null) { // Ignore parameters String actionGroupWithoutParameters = executeActionGroup; int pos = actionGroupWithoutParameters.indexOf("{"); - if(pos != -1){ + if (pos != -1) { actionGroupWithoutParameters = actionGroupWithoutParameters.substring(0, pos); } //Set One Time - if(event.isOneTime()){ - if(!event.getPreventOneTimeActivationActionGroups().contains(actionGroupWithoutParameters)){ - playerManager.setEventOneTime(event.getName(),player); + if (event.isOneTime()) { + if (!event.getPreventOneTimeActivationActionGroups().contains(actionGroupWithoutParameters)) { + playerManager.setEventOneTime(event.getName(), player); } } //Set Cooldown - if(event.getCooldown() != 0 && !bypassCooldown){ - if(!event.getPreventCooldownActivationActionGroups().contains(actionGroupWithoutParameters)){ - playerManager.setEventCooldown(event.getName(),player); + if (event.getCooldown() != 0 && !bypassCooldown) { + if (!event.getPreventCooldownActivationActionGroups().contains(actionGroupWithoutParameters)) { + playerManager.setEventCooldown(event.getName(), player); } } } @@ -144,34 +143,34 @@ public void checkSingularEvent(ConditionEvent conditionEvent,CEEvent event){ executedEvent.executeActions(); } - public ArrayList getValidEvents(EventType eventType){ - ArrayList validEvents = new ArrayList(); - for(CEEvent event : events){ - if(event.getEventType().equals(eventType) && event.isEnabled()){ + public ArrayList getValidEvents(EventType eventType) { + ArrayList validEvents = new ArrayList<>(); + for (CEEvent event : events) { + if (event.getEventType().equals(eventType) && event.isEnabled()) { validEvents.add(event); } } return validEvents; } - public ArrayList getEventsByType(EventType eventType){ + public ArrayList getEventsByType(EventType eventType) { ArrayList validEvents = new ArrayList<>(); - for(CEEvent event : events){ - if(event.getEventType().equals(eventType)){ + for (CEEvent event : events) { + if (event.getEventType().equals(eventType)) { validEvents.add(event); } } return validEvents; } - private CheckConditionsResult checkConditions(ConditionEvent conditionEvent, boolean isPlaceholderAPI){ - List conditions = new ArrayList(conditionEvent.getCurrentEvent().getConditions()); + private CheckConditionsResult checkConditions(ConditionEvent conditionEvent, boolean isPlaceholderAPI) { + List conditions = new ArrayList<>(conditionEvent.getCurrentEvent().getConditions()); String eventName = conditionEvent.getCurrentEvent().getName(); Player player = conditionEvent.getPlayer(); Player target = null; - if(conditionEvent.getTarget() instanceof Player){ - target = (Player)conditionEvent.getTarget(); + if (conditionEvent.getTarget() instanceof Player) { + target = (Player) conditionEvent.getTarget(); } CEEvent event = conditionEvent.getCurrentEvent(); @@ -182,7 +181,7 @@ private CheckConditionsResult checkConditions(ConditionEvent conditionEvent, boo //Check condition lines ArrayList storedVariables = conditionEvent.getEventVariables(); - for(int i=0;i secondArgNum) approvedLine = true;break; + if (firstArgNum > secondArgNum) approvedLine = true; + break; case GREATER_EQUALS: - if(firstArgNum >= secondArgNum) approvedLine = true;break; + if (firstArgNum >= secondArgNum) approvedLine = true; + break; case LOWER: - if(firstArgNum < secondArgNum) approvedLine = true;break; + if (firstArgNum < secondArgNum) approvedLine = true; + break; case LOWER_EQUALS: - if(firstArgNum <= secondArgNum) approvedLine = true;break; + if (firstArgNum <= secondArgNum) approvedLine = true; + break; } } - if(approvedLine){ + if (approvedLine) { break; } } - if(separatorType.equals(SeparatorType.AND)){ - if(approvedLine){ - if(c != separatedConditions.length-1){ - //If not last condition, should verify again for the next + if (separatorType.equals(SeparatorType.AND)) { + if (approvedLine) { + if (c != separatedConditions.length - 1) { + //If not the last condition, should verify again for the next approvedLine = false; } continue; - }else{ + } else { break; } } - if(approvedLine){ + if (approvedLine) { break; } } - debugManager.sendConditionMessage(eventName,conditionLineWithReplacements,approvedLine,conditionEvent.getPlayer(),i==0); + debugManager.sendConditionMessage(eventName, conditionLineWithReplacements.toString(), approvedLine, conditionEvent.getPlayer(), i == 0); //If approvedLine is false, the conditions are not satisfied. Returns FALSE. //If approvedLine is false, but there is an executedActionGroup, it will continue with the next // condition line. //If approvedLine is true, it will continue with the next condition line. //If approvedLine is true and there is an executedActionGroup selected, the method // will return this action group. - if(!approvedLine){ - if(executedActionGroup == null){ - return new CheckConditionsResult(false,null); + if (!approvedLine) { + if (executedActionGroup == null) { + return new CheckConditionsResult(false, null); } continue; } - if(approvedLine && executedActionGroup != null){ - debugManager.sendActionsMessage(eventName,executedActionGroup,conditionEvent.getPlayer()); - return new CheckConditionsResult(true,executedActionGroup); + if (executedActionGroup != null) { + debugManager.sendActionsMessage(eventName, executedActionGroup, conditionEvent.getPlayer()); + return new CheckConditionsResult(true, executedActionGroup); } } //If all condition lines are approved, the event is executed with the default actions. - debugManager.sendActionsMessage(eventName,"default",conditionEvent.getPlayer()); - return new CheckConditionsResult(true,null); + debugManager.sendActionsMessage(eventName, "default", conditionEvent.getPlayer()); + return new CheckConditionsResult(true, null); } public boolean checkToConditionAction(List conditionGroup, Player player, boolean isPlaceholderAPI, - CEEvent event, Event minecraftEvent){ + CEEvent event, Event minecraftEvent) { boolean mathFormulas = event.isAllowMathFormulasInConditions(); - for(int i=0;i storedVariables = new ArrayList(); + ArrayList storedVariables = new ArrayList<>(); - String[] separatedConditions = null; + String[] separatedConditions; SeparatorType separatorType = SeparatorType.NONE; - if(conditionLine.contains(" or ")){ + if (conditionLine.contains(" or ")) { separatedConditions = conditionLine.split(" or "); separatorType = SeparatorType.OR; - }else if(conditionLine.contains(" and ")){ + } else if (conditionLine.contains(" and ")) { separatedConditions = conditionLine.split(" and "); separatorType = SeparatorType.AND; - }else{ + } else { separatedConditions = new String[]{conditionLine}; } - for(int c=0;c secondArgNum) approvedLine = true;break; + if (firstArgNum > secondArgNum) approvedLine = true; + break; case GREATER_EQUALS: - if(firstArgNum >= secondArgNum) approvedLine = true;break; + if (firstArgNum >= secondArgNum) approvedLine = true; + break; case LOWER: - if(firstArgNum < secondArgNum) approvedLine = true;break; + if (firstArgNum < secondArgNum) approvedLine = true; + break; case LOWER_EQUALS: - if(firstArgNum <= secondArgNum) approvedLine = true;break; + if (firstArgNum <= secondArgNum) approvedLine = true; + break; } } - if(approvedLine){ + if (approvedLine) { break; } } - if(separatorType.equals(SeparatorType.AND)){ - if(approvedLine){ - if(c != separatedConditions.length-1){ - //If not last condition, should verify again for the next + if (separatorType.equals(SeparatorType.AND)) { + if (approvedLine) { + if (c != separatedConditions.length - 1) { + //If not the last condition, should verify again for the next approvedLine = false; } continue; - }else{ + } else { break; } } - if(approvedLine){ + if (approvedLine) { break; } } - if(!approvedLine){ + if (!approvedLine) { return false; } } diff --git a/src/main/java/ce/ajneb97/manager/InterruptEventManager.java b/src/main/java/ce/ajneb97/manager/InterruptEventManager.java new file mode 100644 index 0000000..685ed6f --- /dev/null +++ b/src/main/java/ce/ajneb97/manager/InterruptEventManager.java @@ -0,0 +1,46 @@ +package ce.ajneb97.manager; + +import ce.ajneb97.model.internal.WaitActionTask; +import io.papermc.paper.threadedregions.scheduler.ScheduledTask; +import org.bukkit.scheduler.BukkitTask; + +import java.util.*; + +public class InterruptEventManager { + + private final ArrayList tasks; + + public InterruptEventManager() { + this.tasks = new ArrayList<>(); + } + + public void addTask(String playerName, String eventName, BukkitTask bukkitTask) { + tasks.add(new WaitActionTask(playerName, eventName, bukkitTask)); + } + + public void addTask(String playerName, String eventName, ScheduledTask scheduledTask) { + tasks.add(new WaitActionTask(playerName, eventName, scheduledTask)); + } + + public void removeTaskById(int taskId) { + tasks.removeIf(task -> task.getTaskId() == taskId); + } + + // Interrupt actions for a specific event, globally or per player + public void interruptEvent(String eventName, String playerName) { + tasks.removeIf(task -> { + if (playerName == null) { + if (task.getEventName().equals(eventName)) { + task.cancel(); + return true; + } + } else { + if (task.getPlayerName() != null && task.getPlayerName().equals(playerName) && task.getEventName().equals(eventName)) { + task.cancel(); + return true; + } + } + return false; + }); + } +} diff --git a/src/main/java/ce/ajneb97/manager/MessagesManager.java b/src/main/java/ce/ajneb97/manager/MessagesManager.java new file mode 100644 index 0000000..c4c217b --- /dev/null +++ b/src/main/java/ce/ajneb97/manager/MessagesManager.java @@ -0,0 +1,137 @@ +package ce.ajneb97.manager; + +import ce.ajneb97.api.ConditionalEventsAPI; +import ce.ajneb97.libs.centeredmessages.DefaultFontInfo; +import ce.ajneb97.utils.MiniMessageUtils; +import ce.ajneb97.utils.OtherUtils; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.command.CommandSender; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@SuppressWarnings("deprecation") +public class MessagesManager { + + private String timeSeconds; + private String timeMinutes; + private String timeHours; + private String timeDays; + private String prefix; + private String placeholderAPICooldownReady; + private String placeholderAPICooldownNameError; + + public String getTimeSeconds() { + return timeSeconds; + } + + public void setTimeSeconds(String timeSeconds) { + this.timeSeconds = timeSeconds; + } + + public String getTimeMinutes() { + return timeMinutes; + } + + public void setTimeMinutes(String timeMinutes) { + this.timeMinutes = timeMinutes; + } + + public String getTimeHours() { + return timeHours; + } + + public void setTimeHours(String timeHours) { + this.timeHours = timeHours; + } + + public String getTimeDays() { + return timeDays; + } + + public void setTimeDays(String timeDays) { + this.timeDays = timeDays; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public String getPlaceholderAPICooldownReady() { + return placeholderAPICooldownReady; + } + + public void setPlaceholderAPICooldownReady(String placeholderAPICooldownReady) { + this.placeholderAPICooldownReady = placeholderAPICooldownReady; + } + + public String getPlaceholderAPICooldownNameError() { + return placeholderAPICooldownNameError; + } + + public void setPlaceholderAPICooldownNameError(String placeholderAPICooldownNameError) { + this.placeholderAPICooldownNameError = placeholderAPICooldownNameError; + } + + public void sendMessage(CommandSender sender, String message, boolean prefix) { + if (!message.isEmpty()) { + if (ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + MiniMessageUtils.messagePrefix(sender, message, prefix, this.prefix); + } else { + if (prefix) { + sender.sendMessage(getLegacyColoredMessage(this.prefix + message)); + } else { + sender.sendMessage(getLegacyColoredMessage(message)); + } + } + } + } + + public static String getLegacyColoredMessage(String message) { + if (OtherUtils.isNew()) { + Pattern pattern = Pattern.compile("#[a-fA-F0-9]{6}"); + Matcher match = pattern.matcher(message); + + while (match.find()) { + String color = message.substring(match.start(), match.end()); + message = message.replace(color, ChatColor.of(color) + ""); + + match = pattern.matcher(message); + } + } + + message = ChatColor.translateAlternateColorCodes('&', message); + return message; + } + + public static String getCenteredMessage(String message) { + int CENTER_PX = 154; + int messagePxSize = 0; + boolean previousCode = false; + boolean isBold = false; + + for (char c : message.toCharArray()) { + if (c == '§') { + previousCode = true; + } else if (previousCode) { + previousCode = false; + isBold = c == 'l' || c == 'L'; + } else { + DefaultFontInfo dFI = DefaultFontInfo.getDefaultFontInfo(c); + messagePxSize += isBold ? dFI.getBoldLength() : dFI.getLength(); + messagePxSize++; + } + } + + int halvedMessageSize = messagePxSize / 2; + int toCompensate = CENTER_PX - halvedMessageSize; + int spaceLength = DefaultFontInfo.SPACE.getLength() + 1; + int compensated = 0; + StringBuilder sb = new StringBuilder(); + while (compensated < toCompensate) { + sb.append(" "); + compensated += spaceLength; + } + return (sb + message); + } +} diff --git a/src/main/java/ce/ajneb97/manager/PlayerManager.java b/src/main/java/ce/ajneb97/manager/PlayerManager.java new file mode 100644 index 0000000..d01ecf5 --- /dev/null +++ b/src/main/java/ce/ajneb97/manager/PlayerManager.java @@ -0,0 +1,193 @@ +package ce.ajneb97.manager; + +import ce.ajneb97.ConditionalEvents; +import ce.ajneb97.model.player.GenericCallback; +import ce.ajneb97.model.player.PlayerData; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +@SuppressWarnings("DataFlowIssue") +public class PlayerManager { + + private final ConditionalEvents plugin; + private final Map players; + private final Map playerNames; + + public PlayerManager(ConditionalEvents plugin) { + this.plugin = plugin; + this.players = new HashMap<>(); + this.playerNames = new HashMap<>(); + } + + public Map getPlayers() { + return players; + } + + public void addPlayer(PlayerData p) { + players.put(p.getUuid(), p); + playerNames.put(p.getName(), p.getUuid()); + } + + public PlayerData getPlayer(Player player, boolean create) { + PlayerData playerData = players.get(player.getUniqueId()); + if (playerData == null && create) { + playerData = new PlayerData(player.getUniqueId(), player.getName()); + addPlayer(playerData); + } + return playerData; + } + + private void updatePlayerName(String oldName, String newName, UUID uuid) { + if (oldName != null) { + playerNames.remove(oldName); + } + playerNames.put(newName, uuid); + } + + private UUID getPlayerUUID(String name) { + return playerNames.get(name); + } + + public PlayerData getPlayerByName(String name) { + UUID uuid = getPlayerUUID(name); + return players.get(uuid); + } + + public void removePlayer(PlayerData playerData) { + players.remove(playerData.getUuid()); + playerNames.remove(playerData.getName()); + } + + public void setEventCooldown(String eventName, Player player) { + PlayerData p = getPlayer(player, true); + p.setCooldown(eventName, System.currentTimeMillis()); + p.setModified(true); + } + + public long getEventCooldown(String eventName, Player player) { + PlayerData p = getPlayer(player, false); + if (p == null) { + return 0; + } else { + return p.getCooldown(eventName); + } + } + + public void setEventOneTime(String eventName, Player player) { + PlayerData p = getPlayer(player, true); + p.setOneTime(eventName, true); + p.setModified(true); + } + + public boolean getEventOneTime(String eventName, Player player) { + PlayerData p = getPlayer(player, false); + if (p == null) { + return false; + } else { + return p.isEventOneTime(eventName); + } + } + + public String resetDataForPlayer(String playerName, String eventName, FileConfiguration messagesConfig) { + if (Bukkit.getPlayer(playerName) == null) { + return messagesConfig.getString("Messages.playerNotOnline"); + } + + PlayerData playerData = getPlayerByName(playerName); + if (playerData == null) { + return messagesConfig.getString("Messages.playerDoesNotExists"); + } + + if (eventName.equals("all")) { + // All data + playerData.resetAll(); + return messagesConfig.getString("Messages.eventDataResetAll").replace("%player%", playerName); + } else { + // Specific event + playerData.resetEvent(eventName); + return messagesConfig.getString("Messages.eventDataReset").replace("%player%", playerName) + .replace("%event%", eventName); + } + } + + public void resetDataForAllPlayers(String eventName, FileConfiguration messagesConfig, GenericCallback callback) { + if (plugin.isFolia) { + plugin.getServer().getAsyncScheduler().runNow(plugin, scheduledTask -> { + plugin.getPlayerDataManager().resetDataForAllPlayers(eventName); + + plugin.getServer().getGlobalRegionScheduler().execute(plugin, () -> { + String result; + if (eventName.equals("all")) { + // All data, Online: + players.values().forEach(PlayerData::resetAll); + result = messagesConfig.getString("Messages.eventDataResetAllForAllPlayers"); + } else { + // Specific event, Online: + players.values().forEach(p -> p.resetEvent(eventName)); + result = messagesConfig.getString("Messages.eventDataResetForAllPlayers") + .replace("%event%", eventName); + } + + callback.onDone(result); + }); + }); + } else { + new BukkitRunnable() { + @Override + public void run() { + plugin.getPlayerDataManager().resetDataForAllPlayers(eventName); + + new BukkitRunnable() { + @Override + public void run() { + String result; + if (eventName.equals("all")) { + // All data, Online: + players.values().forEach(PlayerData::resetAll); + result = messagesConfig.getString("Messages.eventDataResetAllForAllPlayers"); + } else { + // Specific event, Online: + players.values().forEach(p -> p.resetEvent(eventName)); + result = messagesConfig.getString("Messages.eventDataResetForAllPlayers") + .replace("%event%", eventName); + } + + callback.onDone(result); + } + }.runTask(plugin); + } + }.runTaskAsynchronously(plugin); + } + } + + public void manageJoin(Player player) { + // Load player data from a file if exists + plugin.getPlayerDataManager().loadData(player.getUniqueId(), playerData -> { + if (playerData != null) { + addPlayer(playerData); + if (playerData.getName() == null || !playerData.getName().equals(player.getName())) { + updatePlayerName(playerData.getName(), player.getName(), player.getUniqueId()); + playerData.setName(player.getName()); + playerData.setModified(true); + } + } + }); + } + + public void manageLeave(Player player) { + // Save player data into file and remove from a map + PlayerData playerData = getPlayer(player, false); + if (playerData != null) { + if (playerData.isModified()) { + plugin.getPlayerDataManager().saveData(playerData); + } + removePlayer(playerData); + } + } +} \ No newline at end of file diff --git a/src/main/java/ce/ajneb97/manager/RepetitiveManager.java b/src/main/java/ce/ajneb97/manager/RepetitiveManager.java new file mode 100644 index 0000000..0fba8e7 --- /dev/null +++ b/src/main/java/ce/ajneb97/manager/RepetitiveManager.java @@ -0,0 +1,88 @@ +package ce.ajneb97.manager; + +import ce.ajneb97.ConditionalEvents; +import ce.ajneb97.model.CEEvent; +import ce.ajneb97.model.EventType; +import ce.ajneb97.model.internal.ConditionEvent; +import io.papermc.paper.threadedregions.scheduler.ScheduledTask; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitTask; + +import java.util.concurrent.TimeUnit; + +public class RepetitiveManager { + + private final ConditionalEvents plugin; + private final CEEvent ceEvent; + private final long ticks; + private boolean started; + private Runnable cancel; + + public RepetitiveManager(ConditionalEvents plugin, CEEvent ceEvent, long ticks) { + this.plugin = plugin; + this.ceEvent = ceEvent; + this.ticks = ticks; + } + + public boolean isStarted() { + return started; + } + + public void start() { + this.started = true; + Runnable runnable = () -> { + if (!execute()) { + stop(); + } + }; + + if (plugin.isFolia) { + long period = ticks * 50L; + ScheduledTask task = plugin.getServer().getAsyncScheduler().runAtFixedRate( + plugin, + t -> runnable.run(), + period, + period, + TimeUnit.MILLISECONDS + ); + cancel = task::cancel; + } else { + BukkitTask task = plugin.getServer().getScheduler().runTaskTimerAsynchronously( + plugin, + runnable, + 0L, + ticks + ); + cancel = task::cancel; + } + } + + public void stop() { + if (cancel != null) { + cancel.run(); + } + this.started = false; + } + + private boolean execute() { + if (ceEvent == null) { + return false; + } + + EventsManager eventsManager = plugin.getEventsManager(); + if (ceEvent.getEventType().equals(EventType.REPETITIVE)) { + for (Player player : Bukkit.getOnlinePlayers()) { + ConditionEvent conditionEvent = new ConditionEvent(plugin, player, null, EventType.REPETITIVE, null); + conditionEvent.setAsync(true); + eventsManager.checkSingularEvent(conditionEvent, ceEvent); + } + } else { + //Repetitive server + ConditionEvent conditionEvent = new ConditionEvent(plugin, null, null, EventType.REPETITIVE_SERVER, null); + conditionEvent.setAsync(true); + eventsManager.checkSingularEvent(conditionEvent, ceEvent); + } + return true; + } +} \ No newline at end of file diff --git a/src/main/java/ce/ajneb97/managers/SavedItemsManager.java b/src/main/java/ce/ajneb97/manager/SavedItemsManager.java similarity index 64% rename from src/main/java/ce/ajneb97/managers/SavedItemsManager.java rename to src/main/java/ce/ajneb97/manager/SavedItemsManager.java index 6ea2027..e6a35b2 100644 --- a/src/main/java/ce/ajneb97/managers/SavedItemsManager.java +++ b/src/main/java/ce/ajneb97/manager/SavedItemsManager.java @@ -1,4 +1,4 @@ -package ce.ajneb97.managers; +package ce.ajneb97.manager; import ce.ajneb97.ConditionalEvents; import ce.ajneb97.utils.OtherUtils; @@ -10,10 +10,13 @@ import java.util.List; import java.util.Map; +@SuppressWarnings("deprecation") public class SavedItemsManager { - private ConditionalEvents plugin; + + private final ConditionalEvents plugin; private Map savedItems; - public SavedItemsManager(ConditionalEvents plugin){ + + public SavedItemsManager(ConditionalEvents plugin) { this.plugin = plugin; this.savedItems = new HashMap<>(); } @@ -26,25 +29,29 @@ public void setSavedItems(Map savedItems) { this.savedItems = savedItems; } - public ItemStack getItem(String name, Player player){ - if(!savedItems.containsKey(name)){ + public ItemStack getItem(String name, Player player) { + if (!savedItems.containsKey(name)) { return null; } ItemStack item = savedItems.get(name).clone(); - if(player == null){ + if (player == null) { return item; } // Placeholders ItemMeta meta = item.getItemMeta(); - if(meta.hasDisplayName()){ - String displayName = OtherUtils.replaceGlobalVariables(meta.getDisplayName(),player,plugin); + if (meta.hasDisplayName()) { + String displayName = OtherUtils.replaceGlobalVariables(meta.getDisplayName(), player, plugin); meta.setDisplayName(displayName); } - if(meta.hasLore()){ + if (meta.hasLore()) { List lore = meta.getLore(); - lore.replaceAll(text -> OtherUtils.replaceGlobalVariables(text, player, plugin)); + + if (lore != null) { + lore.replaceAll(text -> OtherUtils.replaceGlobalVariables(text, player, plugin)); + } + meta.setLore(lore); } item.setItemMeta(meta); @@ -52,12 +59,12 @@ public ItemStack getItem(String name, Player player){ return item; } - public void addItem(String name,ItemStack item){ - savedItems.put(name,item); - plugin.getConfigsManager().getSavedItemsConfigManager().saveItem(name,item); + public void addItem(String name, ItemStack item) { + savedItems.put(name, item); + plugin.getConfigsManager().getSavedItemsConfigManager().saveItem(name, item); } - public void removeItem(String name){ + public void removeItem(String name) { savedItems.remove(name); plugin.getConfigsManager().getSavedItemsConfigManager().removeItem(name); } diff --git a/src/main/java/ce/ajneb97/managers/UpdateCheckerManager.java b/src/main/java/ce/ajneb97/manager/UpdateCheckerManager.java similarity index 83% rename from src/main/java/ce/ajneb97/managers/UpdateCheckerManager.java rename to src/main/java/ce/ajneb97/manager/UpdateCheckerManager.java index eba5ca0..753de3d 100644 --- a/src/main/java/ce/ajneb97/managers/UpdateCheckerManager.java +++ b/src/main/java/ce/ajneb97/manager/UpdateCheckerManager.java @@ -1,4 +1,4 @@ -package ce.ajneb97.managers; +package ce.ajneb97.manager; import ce.ajneb97.model.internal.UpdateCheckerResult; @@ -9,14 +9,14 @@ public class UpdateCheckerManager { - private String version; + private final String version; private String latestVersion; - public UpdateCheckerManager(String version){ + public UpdateCheckerManager(String version) { this.version = version; } - public UpdateCheckerResult check(){ + public UpdateCheckerResult check() { try { HttpURLConnection con = (HttpURLConnection) new URL( "https://api.spigotmc.org/legacy/update.php?resource=82271").openConnection(); @@ -25,7 +25,7 @@ public UpdateCheckerResult check(){ con.setReadTimeout(timed_out); latestVersion = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine(); if (latestVersion.length() <= 7) { - if(!version.equals(latestVersion)){ + if (!version.equals(latestVersion)) { return UpdateCheckerResult.noErrors(latestVersion); } } diff --git a/src/main/java/ce/ajneb97/managers/VerifyManager.java b/src/main/java/ce/ajneb97/manager/VerifyManager.java similarity index 63% rename from src/main/java/ce/ajneb97/managers/VerifyManager.java rename to src/main/java/ce/ajneb97/manager/VerifyManager.java index 4c20522..bec7ff6 100644 --- a/src/main/java/ce/ajneb97/managers/VerifyManager.java +++ b/src/main/java/ce/ajneb97/manager/VerifyManager.java @@ -1,4 +1,4 @@ -package ce.ajneb97.managers; +package ce.ajneb97.manager; import ce.ajneb97.ConditionalEvents; import ce.ajneb97.configs.model.CommonConfig; @@ -15,22 +15,25 @@ import java.util.ArrayList; import java.util.List; +@SuppressWarnings({"DataFlowIssue", "BooleanMethodIsAlwaysInverted"}) public class VerifyManager { - private ConditionalEvents plugin; + + private final ConditionalEvents plugin; private ArrayList errors; + public VerifyManager(ConditionalEvents plugin) { this.plugin = plugin; - this.errors = new ArrayList(); + this.errors = new ArrayList<>(); } public void sendVerification(Player player) { player.sendMessage(MessagesManager.getLegacyColoredMessage("&f&l- - - - - - - - &b&lEVENTS VERIFY &f&l- - - - - - - -")); player.sendMessage(MessagesManager.getLegacyColoredMessage("")); - if(errors.isEmpty()) { + if (errors.isEmpty()) { player.sendMessage(MessagesManager.getLegacyColoredMessage("&aThere are no errors in your events ;)")); - }else { + } else { player.sendMessage(MessagesManager.getLegacyColoredMessage("&e&oHover on the errors to see more information.")); - for(CEError error : errors) { + for (CEError error : errors) { error.sendMessage(player); } } @@ -39,78 +42,78 @@ public void sendVerification(Player player) { } public void verifyEvents() { - this.errors = new ArrayList(); + this.errors = new ArrayList<>(); ArrayList events = plugin.getEventsManager().getEvents(); //Loaded events - for(CEEvent event : events) { + for (CEEvent event : events) { verifyEvent(event); } //Unloaded events ArrayList ceConfigs = plugin.getConfigsManager().getEventConfigs(); - for(CommonConfig ceConfig : ceConfigs){ + for (CommonConfig ceConfig : ceConfigs) { FileConfiguration config = ceConfig.getConfig(); - if(!config.contains("Events")){ + if (!config.contains("Events")) { return; } for (String key : config.getConfigurationSection("Events").getKeys(false)) { - String eventType = config.getString("Events."+key+".type"); - try{ + String eventType = config.getString("Events." + key + ".type"); + try { EventType.valueOf(eventType.toUpperCase()); - }catch(Exception e){ + } catch (Exception e) { errors.add(new CEErrorEventType(key, eventType)); } - String pathActions = "Events."+key+".actions"; - if(!config.contains(pathActions)) { + String pathActions = "Events." + key + ".actions"; + if (!config.contains(pathActions)) { continue; } for (String groupName : config.getConfigurationSection(pathActions).getKeys(false)) { - String path = pathActions+"."+groupName; + String path = pathActions + "." + groupName; List actionsList = config.getStringList(path); - for(int i=0;i conditions = event.getConditions(); - for(int i=0;i actionGroups = event.getActionGroups(); - for(ActionGroup actionGroup : actionGroups){ + for (ActionGroup actionGroup : actionGroups) { List actions = actionGroup.getActions(); - for(CEAction action : actions){ - if(!verifyRandomVariable(action.getActionLine())){ + for (CEAction action : actions) { + if (!verifyRandomVariable(action.getActionLine())) { errors.add(new CEErrorRandomVariable(event.getName(), action.getActionLine())); } } @@ -141,23 +144,23 @@ public void verifyEvent(CEEvent event) { } - private boolean verifyRandomVariable(String line){ - for(int c=0;c commands = config.getStringList("Config.register_commands"); - for(String commandName : commands){ + for (String commandName : commands) { registerCommand(commandName); } } @@ -44,6 +42,6 @@ public void registerCommands(){ public void registerCommand(String commandName) { CECommand ceCommand = new CECommand(commandName); CommandMap commandMap = getCommandMap(); - commandMap.register("ConditionalEvents",ceCommand); + commandMap.register("ConditionalEvents", ceCommand); } } diff --git a/src/main/java/ce/ajneb97/manager/data/FilePlayerDataManager.java b/src/main/java/ce/ajneb97/manager/data/FilePlayerDataManager.java new file mode 100644 index 0000000..7407389 --- /dev/null +++ b/src/main/java/ce/ajneb97/manager/data/FilePlayerDataManager.java @@ -0,0 +1,36 @@ +package ce.ajneb97.manager.data; + +import ce.ajneb97.configs.PlayerConfigsManager; +import ce.ajneb97.model.player.GenericCallback; +import ce.ajneb97.model.player.PlayerData; + +import java.util.UUID; + +public class FilePlayerDataManager extends PlayerDataManager { + + private final PlayerConfigsManager configsManager; + + public FilePlayerDataManager(PlayerConfigsManager configsManager){ + this.configsManager = configsManager; + } + + @Override + public void loadData(UUID uuid, GenericCallback callback) { + configsManager.loadData(uuid, callback); + } + + @Override + public void saveData(PlayerData playerData) { + configsManager.saveData(playerData); + } + + @Override + public void saveAllData() { + configsManager.saveAllData(); + } + + @Override + public void resetDataForAllPlayers(String event) { + configsManager.resetDataForAllPlayers(event); + } +} diff --git a/src/main/java/ce/ajneb97/manager/data/PlayerDataManager.java b/src/main/java/ce/ajneb97/manager/data/PlayerDataManager.java new file mode 100644 index 0000000..09c8ab2 --- /dev/null +++ b/src/main/java/ce/ajneb97/manager/data/PlayerDataManager.java @@ -0,0 +1,17 @@ +package ce.ajneb97.manager.data; + +import ce.ajneb97.model.player.GenericCallback; +import ce.ajneb97.model.player.PlayerData; + +import java.util.UUID; + +public abstract class PlayerDataManager { + + public abstract void loadData(UUID uuid, GenericCallback callback); + + public abstract void saveData(PlayerData playerData); + + public abstract void saveAllData(); + + public abstract void resetDataForAllPlayers(String event); +} diff --git a/src/main/java/ce/ajneb97/manager/data/mysql/MySQLConnection.java b/src/main/java/ce/ajneb97/manager/data/mysql/MySQLConnection.java new file mode 100644 index 0000000..dd665cc --- /dev/null +++ b/src/main/java/ce/ajneb97/manager/data/mysql/MySQLConnection.java @@ -0,0 +1,174 @@ +package ce.ajneb97.manager.data.mysql; + +import ce.ajneb97.ConditionalEvents; +import ce.ajneb97.model.player.EventData; +import ce.ajneb97.model.player.GenericCallback; +import ce.ajneb97.model.player.PlayerData; +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import org.bukkit.configuration.file.FileConfiguration; +import org.jetbrains.annotations.NotNull; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Map; +import java.util.UUID; + +public class MySQLConnection { + + private final ConditionalEvents plugin; + private HikariDataSource dataSource; + + public MySQLConnection(ConditionalEvents plugin) { + this.plugin = plugin; + } + + public void setupMySql() { + HikariConfig hikariConfig = getHikariConfig(); + hikariConfig.addDataSourceProperty("cachePrepStmts", "true"); + hikariConfig.addDataSourceProperty("prepStmtCacheSize", "250"); + hikariConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); + + this.dataSource = new HikariDataSource(hikariConfig); + createTables(); + plugin.getLogger().info("Successfully connected to the MySQL Database."); + } + + public Connection getConnection() throws SQLException { + return dataSource.getConnection(); + } + + public void close() { + if (dataSource != null && !dataSource.isClosed()) { + dataSource.close(); + } + } + + private void createTables() { + try (Connection connection = getConnection()) { + PreparedStatement st1 = connection.prepareStatement( + "CREATE TABLE IF NOT EXISTS ce_players (UUID VARCHAR(36) NOT NULL, NAME VARCHAR(50), PRIMARY KEY (UUID))"); + st1.executeUpdate(); + PreparedStatement st2 = connection.prepareStatement( + "CREATE TABLE IF NOT EXISTS ce_events_data (UUID VARCHAR(36) NOT NULL, EVENT_NAME VARCHAR(100) NOT NULL, " + + "COOLDOWN BIGINT, ONE_TIME BOOLEAN, PRIMARY KEY (UUID, EVENT_NAME), " + + "FOREIGN KEY (UUID) REFERENCES ce_players(UUID) ON DELETE CASCADE)"); + st2.executeUpdate(); + } catch (SQLException e) { + plugin.getLogger().log(java.util.logging.Level.SEVERE, "Error while creating MySQL tables", e); + } + } + + public void getPlayer(UUID uuid, GenericCallback callback) { + Runnable task = () -> { + PlayerData player = null; + try (Connection connection = getConnection()) { + PreparedStatement st = connection.prepareStatement( + "SELECT p.NAME, e.EVENT_NAME, e.COOLDOWN, e.ONE_TIME FROM ce_players p " + + "LEFT JOIN ce_events_data e ON p.UUID = e.UUID WHERE p.UUID = ?"); + st.setString(1, uuid.toString()); + ResultSet rs = st.executeQuery(); + + ArrayList events = new ArrayList<>(); + while (rs.next()) { + if (player == null) { + player = new PlayerData(uuid, rs.getString("NAME")); + } + String eventName = rs.getString("EVENT_NAME"); + if (eventName != null) { + events.add(new EventData(eventName, rs.getLong("COOLDOWN"), rs.getBoolean("ONE_TIME"))); + } + } + if (player != null) player.setEventData(events); + + } catch (SQLException e) { + plugin.getLogger().log(java.util.logging.Level.SEVERE, "Error while loading player data from MySQL for: " + uuid, e); + } + + PlayerData finalPlayer = player; + if (plugin.isFolia) { + plugin.getServer().getGlobalRegionScheduler().execute(plugin, () -> callback.onDone(finalPlayer)); + } else { + plugin.getServer().getScheduler().runTask(plugin, () -> callback.onDone(finalPlayer)); + } + }; + + if (plugin.isFolia) { + plugin.getServer().getAsyncScheduler().runNow(plugin, s -> task.run()); + } else { + plugin.getServer().getScheduler().runTaskAsynchronously(plugin, task); + } + } + + public void saveData(PlayerData player) { + try (Connection connection = getConnection()) { + // Update or Insert player + PreparedStatement st1 = connection.prepareStatement( + "INSERT INTO ce_players (UUID, NAME) VALUES (?, ?) ON DUPLICATE KEY UPDATE NAME = ?"); + st1.setString(1, player.getUuid().toString()); + st1.setString(2, player.getName()); + st1.setString(3, player.getName()); + st1.executeUpdate(); + + // Clear old event data for this player or update? + // Efficiency wise: we can replace all for simplicity or use ON DUPLICATE KEY. + for (EventData event : player.getEventData()) { + PreparedStatement st2 = connection.prepareStatement( + "INSERT INTO ce_events_data (UUID, EVENT_NAME, COOLDOWN, ONE_TIME) VALUES (?, ?, ?, ?) " + + "ON DUPLICATE KEY UPDATE COOLDOWN = ?, ONE_TIME = ?"); + st2.setString(1, player.getUuid().toString()); + st2.setString(2, event.getName()); + st2.setLong(3, event.getCooldown()); + st2.setBoolean(4, event.isOneTime()); + st2.setLong(5, event.getCooldown()); + st2.setBoolean(6, event.isOneTime()); + st2.executeUpdate(); + } + } catch (SQLException e) { + plugin.getLogger().log(java.util.logging.Level.SEVERE, "Error while saving player data to MySQL for: " + player.getName(), e); + } + } + + public void saveAllData() { + Map players = plugin.getPlayerManager().getPlayers(); + for (PlayerData player : new ArrayList<>(players.values())) { + if (player.isModified()) { + saveData(player); + player.setModified(false); + } + } + } + + public void resetDataForAllPlayers(String eventName) { + try (Connection connection = getConnection()) { + PreparedStatement st; + if (eventName.equals("all")) { + st = connection.prepareStatement("DELETE FROM ce_events_data"); + } else { + st = connection.prepareStatement("DELETE FROM ce_events_data WHERE EVENT_NAME = ?"); + st.setString(1, eventName); + } + st.executeUpdate(); + } catch (SQLException e) { + plugin.getLogger().log(java.util.logging.Level.SEVERE, "Error while resetting MySQL data for event: " + eventName, e); + } + } + + private @NotNull HikariConfig getHikariConfig() { + FileConfiguration config = plugin.getConfigsManager().getMainConfigManager().getConfig(); + String host = config.getString("Config.mysql_database.host"); + int port = config.getInt("Config.mysql_database.port"); + String username = config.getString("Config.mysql_database.username"); + String password = config.getString("Config.mysql_database.password"); + String database = config.getString("Config.mysql_database.database"); + + HikariConfig hikariConfig = new HikariConfig(); + hikariConfig.setJdbcUrl("jdbc:mysql://" + host + ":" + port + "/" + database + "?useSSL=" + config.getBoolean("Config.mysql_database.advanced.useSSL")); + hikariConfig.setUsername(username); + hikariConfig.setPassword(password); + return hikariConfig; + } +} \ No newline at end of file diff --git a/src/main/java/ce/ajneb97/manager/data/mysql/MySQLPlayerDataManager.java b/src/main/java/ce/ajneb97/manager/data/mysql/MySQLPlayerDataManager.java new file mode 100644 index 0000000..af27ee9 --- /dev/null +++ b/src/main/java/ce/ajneb97/manager/data/mysql/MySQLPlayerDataManager.java @@ -0,0 +1,83 @@ +package ce.ajneb97.manager.data.mysql; + +import ce.ajneb97.ConditionalEvents; +import ce.ajneb97.configs.PlayerConfigsManager; +import ce.ajneb97.configs.model.CommonConfig; +import ce.ajneb97.manager.data.PlayerDataManager; +import ce.ajneb97.model.player.EventData; +import ce.ajneb97.model.player.GenericCallback; +import ce.ajneb97.model.player.PlayerData; +import org.bukkit.configuration.file.FileConfiguration; + +import java.util.ArrayList; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +@SuppressWarnings("DataFlowIssue") +public class MySQLPlayerDataManager extends PlayerDataManager { + + private final MySQLConnection mySQLConnection; + + public MySQLPlayerDataManager(ConditionalEvents plugin) { + this.mySQLConnection = new MySQLConnection(plugin); + this.mySQLConnection.setupMySql(); + } + + @Override + public void loadData(UUID uuid, GenericCallback callback) { + mySQLConnection.getPlayer(uuid, callback); + } + + @Override + public void saveData(PlayerData playerData) { + mySQLConnection.saveData(playerData); + } + + @Override + public void saveAllData() { + mySQLConnection.saveAllData(); + } + + @Override + public void resetDataForAllPlayers(String event) { + mySQLConnection.resetDataForAllPlayers(event); + } + + public CompletableFuture migrate(PlayerConfigsManager playerConfigsManager) { + return CompletableFuture.supplyAsync(() -> { + ArrayList configs = playerConfigsManager.getConfigs(); + int count = 0; + for (CommonConfig commonConfig : configs) { + String fileName = commonConfig.getFile().getName(); + if (!fileName.endsWith(".yml")) continue; + + try { + UUID uuid = UUID.fromString(fileName.replace(".yml", "")); + FileConfiguration config = commonConfig.getConfig(); + String name = config.getString("name"); + + PlayerData playerData = new PlayerData(uuid, name); + ArrayList eventDataList = new ArrayList<>(); + if (config.contains("events")) { + for (String key : config.getConfigurationSection("events").getKeys(false)) { + boolean oneTime = config.getBoolean("events." + key + ".one_time"); + long cooldown = config.getLong("events." + key + ".cooldown"); + eventDataList.add(new EventData(key, cooldown, oneTime)); + } + } + playerData.setEventData(eventDataList); + saveData(playerData); + count++; + } catch (Exception ignored) { + } + } + return count; + }); + } + + public void close() { + if (mySQLConnection != null) { + mySQLConnection.close(); + } + } +} \ No newline at end of file diff --git a/src/main/java/ce/ajneb97/managers/dependencies/DiscordSRVManager.java b/src/main/java/ce/ajneb97/manager/dependencies/DiscordSRVManager.java similarity index 81% rename from src/main/java/ce/ajneb97/managers/dependencies/DiscordSRVManager.java rename to src/main/java/ce/ajneb97/manager/dependencies/DiscordSRVManager.java index 713f60c..407e475 100644 --- a/src/main/java/ce/ajneb97/managers/dependencies/DiscordSRVManager.java +++ b/src/main/java/ce/ajneb97/manager/dependencies/DiscordSRVManager.java @@ -1,21 +1,17 @@ -package ce.ajneb97.managers.dependencies; +package ce.ajneb97.manager.dependencies; -import ce.ajneb97.ConditionalEvents; import github.scarsz.discordsrv.DiscordSRV; import github.scarsz.discordsrv.dependencies.jda.api.EmbedBuilder; import github.scarsz.discordsrv.dependencies.jda.api.entities.MessageChannel; import org.bukkit.Bukkit; + import java.awt.Color; + import org.bukkit.entity.Player; public class DiscordSRVManager { - private ConditionalEvents plugin; - public DiscordSRVManager(ConditionalEvents plugin){ - this.plugin = plugin; - } - - public void sendEmbedMessage(String actionLine){ + public void sendEmbedMessage(String actionLine) { // discordsrv_embed: channel:;author_name:;title:;player_skin_name:<name>; //color:<r>,<g>,<b>;image:<url> EmbedBuilder embed = new EmbedBuilder(); @@ -33,11 +29,11 @@ public void sendEmbedMessage(String actionLine){ int colorB = 0; String[] sep = actionLine.split(";"); - for(String s : sep) { + for (String s : sep) { String key = s.split(":")[0]; - String value = s.replace(key+":",""); + String value = s.replace(key + ":", ""); - switch(key){ + switch (key) { case "channel": channel = value; break; @@ -51,22 +47,22 @@ public void sendEmbedMessage(String actionLine){ footer = value; break; case "author_avatar": - if(value.startsWith("http:/") || value.startsWith("https:/")){ + if (value.startsWith("http:/") || value.startsWith("https:/")) { authorAvatarURL = value; - }else{ + } else { Player player = Bukkit.getPlayer(value); - if(player != null){ + if (player != null) { authorAvatarURL = DiscordSRV.getAvatarUrl(player); } } break; case "color": - try{ + try { String[] color = value.split(","); colorR = Integer.parseInt(color[0]); colorG = Integer.parseInt(color[1]); colorB = Integer.parseInt(color[2]); - }catch(Exception e){ + } catch (Exception e) { colorR = 0; colorG = 0; colorB = 0; @@ -84,7 +80,7 @@ public void sendEmbedMessage(String actionLine){ } } - embed.setAuthor(authorName,null,authorAvatarURL); + embed.setAuthor(authorName, null, authorAvatarURL); embed.setTitle(title); embed.setFooter(footer); embed.setColor(new Color(colorR, colorG, colorB)); diff --git a/src/main/java/ce/ajneb97/managers/dependencies/Metrics.java b/src/main/java/ce/ajneb97/manager/dependencies/Metrics.java similarity index 92% rename from src/main/java/ce/ajneb97/managers/dependencies/Metrics.java rename to src/main/java/ce/ajneb97/manager/dependencies/Metrics.java index 2cd94c5..60d12bc 100644 --- a/src/main/java/ce/ajneb97/managers/dependencies/Metrics.java +++ b/src/main/java/ce/ajneb97/manager/dependencies/Metrics.java @@ -1,4 +1,4 @@ -package ce.ajneb97.managers.dependencies; +package ce.ajneb97.manager.dependencies; /* * This Metrics class was auto-generated and can be copied into your project if you are @@ -42,6 +42,7 @@ import java.util.stream.Collectors; import java.util.zip.GZIPOutputStream; import javax.net.ssl.HttpsURLConnection; + import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; @@ -57,9 +58,9 @@ public class Metrics { /** * Creates a new Metrics instance. * - * @param plugin Your plugin instance. + * @param plugin Your plugin instance. * @param serviceId The id of the service. It can be found at <a - * href="https://bstats.org/what-is-my-plugin-id">What is my plugin id?</a> + * href="https://bstats.org/what-is-my-plugin-id">What is my plugin id?</a> */ public Metrics(JavaPlugin plugin, int serviceId) { this.plugin = plugin; @@ -111,7 +112,9 @@ public Metrics(JavaPlugin plugin, int serviceId) { logResponseStatusText); } - /** Shuts down the underlying scheduler service. */ + /** + * Shuts down the underlying scheduler service. + */ public void shutdown() { metricsBase.shutdown(); } @@ -158,7 +161,9 @@ private int getPlayerAmount() { public static class MetricsBase { - /** The version of the Metrics class. */ + /** + * The version of the Metrics class. + */ public static final String METRICS_VERSION = "3.0.2"; private static final String REPORT_URL = "https://bStats.org/api/v2/data/%s"; @@ -196,23 +201,23 @@ public static class MetricsBase { /** * Creates a new MetricsBase class instance. * - * @param platform The platform of the service. - * @param serviceId The id of the service. - * @param serverUuid The server uuid. - * @param enabled Whether or not data sending is enabled. - * @param appendPlatformDataConsumer A consumer that receives a {@code JsonObjectBuilder} and - * appends all platform-specific data. - * @param appendServiceDataConsumer A consumer that receives a {@code JsonObjectBuilder} and - * appends all service-specific data. - * @param submitTaskConsumer A consumer that takes a runnable with the submit task. This can be - * used to delegate the data collection to a another thread to prevent errors caused by - * concurrency. Can be {@code null}. + * @param platform The platform of the service. + * @param serviceId The id of the service. + * @param serverUuid The server uuid. + * @param enabled Whether or not data sending is enabled. + * @param appendPlatformDataConsumer A consumer that receives a {@code JsonObjectBuilder} and + * appends all platform-specific data. + * @param appendServiceDataConsumer A consumer that receives a {@code JsonObjectBuilder} and + * appends all service-specific data. + * @param submitTaskConsumer A consumer that takes a runnable with the submit task. This can be + * used to delegate the data collection to a another thread to prevent errors caused by + * concurrency. Can be {@code null}. * @param checkServiceEnabledSupplier A supplier to check if the service is still enabled. - * @param errorLogger A consumer that accepts log message and an error. - * @param infoLogger A consumer that accepts info log messages. - * @param logErrors Whether or not errors should be logged. - * @param logSentData Whether or not the sent data should be logged. - * @param logResponseStatusText Whether or not the response status text should be logged. + * @param errorLogger A consumer that accepts log message and an error. + * @param infoLogger A consumer that accepts info log messages. + * @param logErrors Whether or not errors should be logged. + * @param logSentData Whether or not the sent data should be logged. + * @param logResponseStatusText Whether or not the response status text should be logged. */ public MetricsBase( String platform, @@ -356,7 +361,9 @@ private void sendData(JsonObjectBuilder.JsonObject data) throws Exception { } } - /** Checks that the class was properly relocated. */ + /** + * Checks that the class was properly relocated. + */ private void checkRelocation() { // You can use the property to disable the check in your test environment if (System.getProperty("bstats.relocatecheck") == null @@ -364,9 +371,9 @@ private void checkRelocation() { // Maven's Relocate is clever and changes strings, too. So we have to use this // little "trick" ... :D final String defaultPackage = - new String(new byte[] {'o', 'r', 'g', '.', 'b', 's', 't', 'a', 't', 's'}); + new String(new byte[]{'o', 'r', 'g', '.', 'b', 's', 't', 'a', 't', 's'}); final String examplePackage = - new String(new byte[] {'y', 'o', 'u', 'r', '.', 'p', 'a', 'c', 'k', 'a', 'g', 'e'}); + new String(new byte[]{'y', 'o', 'u', 'r', '.', 'p', 'a', 'c', 'k', 'a', 'g', 'e'}); // We want to make sure no one just copy & pastes the example and uses the wrong // package names if (MetricsBase.class.getPackage().getName().startsWith(defaultPackage) @@ -401,7 +408,7 @@ public static class SimplePie extends CustomChart { /** * Class constructor. * - * @param chartId The id of the chart. + * @param chartId The id of the chart. * @param callable The callable which is used to request the chart data. */ public SimplePie(String chartId, Callable<String> callable) { @@ -427,7 +434,7 @@ public static class MultiLineChart extends CustomChart { /** * Class constructor. * - * @param chartId The id of the chart. + * @param chartId The id of the chart. * @param callable The callable which is used to request the chart data. */ public MultiLineChart(String chartId, Callable<Map<String, Integer>> callable) { @@ -467,7 +474,7 @@ public static class AdvancedPie extends CustomChart { /** * Class constructor. * - * @param chartId The id of the chart. + * @param chartId The id of the chart. * @param callable The callable which is used to request the chart data. */ public AdvancedPie(String chartId, Callable<Map<String, Integer>> callable) { @@ -507,7 +514,7 @@ public static class SimpleBarChart extends CustomChart { /** * Class constructor. * - * @param chartId The id of the chart. + * @param chartId The id of the chart. * @param callable The callable which is used to request the chart data. */ public SimpleBarChart(String chartId, Callable<Map<String, Integer>> callable) { @@ -524,7 +531,7 @@ protected JsonObjectBuilder.JsonObject getChartData() throws Exception { return null; } for (Map.Entry<String, Integer> entry : map.entrySet()) { - valuesBuilder.appendField(entry.getKey(), new int[] {entry.getValue()}); + valuesBuilder.appendField(entry.getKey(), new int[]{entry.getValue()}); } return new JsonObjectBuilder().appendField("values", valuesBuilder.build()).build(); } @@ -537,7 +544,7 @@ public static class AdvancedBarChart extends CustomChart { /** * Class constructor. * - * @param chartId The id of the chart. + * @param chartId The id of the chart. * @param callable The callable which is used to request the chart data. */ public AdvancedBarChart(String chartId, Callable<Map<String, int[]>> callable) { @@ -577,7 +584,7 @@ public static class DrilldownPie extends CustomChart { /** * Class constructor. * - * @param chartId The id of the chart. + * @param chartId The id of the chart. * @param callable The callable which is used to request the chart data. */ public DrilldownPie(String chartId, Callable<Map<String, Map<String, Integer>>> callable) { @@ -655,7 +662,7 @@ public static class SingleLineChart extends CustomChart { /** * Class constructor. * - * @param chartId The id of the chart. + * @param chartId The id of the chart. * @param callable The callable which is used to request the chart data. */ public SingleLineChart(String chartId, Callable<Integer> callable) { @@ -704,7 +711,7 @@ public JsonObjectBuilder appendNull(String key) { /** * Appends a string field to the JSON. * - * @param key The key of the field. + * @param key The key of the field. * @param value The value of the field. * @return A reference to this object. */ @@ -719,7 +726,7 @@ public JsonObjectBuilder appendField(String key, String value) { /** * Appends an integer field to the JSON. * - * @param key The key of the field. + * @param key The key of the field. * @param value The value of the field. * @return A reference to this object. */ @@ -731,7 +738,7 @@ public JsonObjectBuilder appendField(String key, int value) { /** * Appends an object to the JSON. * - * @param key The key of the field. + * @param key The key of the field. * @param object The object. * @return A reference to this object. */ @@ -746,7 +753,7 @@ public JsonObjectBuilder appendField(String key, JsonObject object) { /** * Appends a string array to the JSON. * - * @param key The key of the field. + * @param key The key of the field. * @param values The string array. * @return A reference to this object. */ @@ -765,7 +772,7 @@ public JsonObjectBuilder appendField(String key, String[] values) { /** * Appends an integer array to the JSON. * - * @param key The key of the field. + * @param key The key of the field. * @param values The integer array. * @return A reference to this object. */ @@ -782,7 +789,7 @@ public JsonObjectBuilder appendField(String key, int[] values) { /** * Appends an object array to the JSON. * - * @param key The key of the field. + * @param key The key of the field. * @param values The integer array. * @return A reference to this object. */ @@ -799,7 +806,7 @@ public JsonObjectBuilder appendField(String key, JsonObject[] values) { /** * Appends a field to the object. * - * @param key The key of the field. + * @param key The key of the field. * @param escapedValue The escaped value of the field. */ private void appendFieldUnescaped(String key, String escapedValue) { diff --git a/src/main/java/ce/ajneb97/managers/dependencies/ProtocolLibManager.java b/src/main/java/ce/ajneb97/manager/dependencies/ProtocolLibManager.java similarity index 65% rename from src/main/java/ce/ajneb97/managers/dependencies/ProtocolLibManager.java rename to src/main/java/ce/ajneb97/manager/dependencies/ProtocolLibManager.java index c855dc3..4044f45 100644 --- a/src/main/java/ce/ajneb97/managers/dependencies/ProtocolLibManager.java +++ b/src/main/java/ce/ajneb97/manager/dependencies/ProtocolLibManager.java @@ -1,4 +1,4 @@ -package ce.ajneb97.managers.dependencies; +package ce.ajneb97.manager.dependencies; import ce.ajneb97.ConditionalEvents; import ce.ajneb97.model.CEEvent; @@ -22,17 +22,19 @@ import java.util.ArrayList; +@SuppressWarnings("deprecation") public class ProtocolLibManager { - private ConditionalEvents plugin; - public ProtocolLibManager(ConditionalEvents plugin){ + private final ConditionalEvents plugin; + + public ProtocolLibManager(ConditionalEvents plugin) { this.plugin = plugin; configure(); } - public void configure(){ + public void configure() { ProtocolLibrary.getProtocolManager().addPacketListener(getChatAdapter(PacketType.Play.Server.CHAT)); - if(OtherUtils.isChatNew()) { + if (OtherUtils.isChatNew()) { ProtocolLibrary.getProtocolManager().addPacketListener(getChatAdapter(PacketType.Play.Server.SYSTEM_CHAT)); ProtocolLibrary.getProtocolManager().addPacketListener(getChatAdapter(PacketType.Play.Server.DISGUISED_CHAT)); } @@ -45,72 +47,72 @@ public void onPacketSending(PacketEvent event) { ConditionalEvents pluginInstance = (ConditionalEvents) plugin; boolean isPaper = pluginInstance.getDependencyManager().isPaper(); - //Check if config has a protocollib event + //Check if config has a protocol event ArrayList<CEEvent> validEvents = pluginInstance.getEventsManager().getValidEvents(EventType.PROTOCOLLIB_RECEIVE_MESSAGE); - if(validEvents.size() == 0){ + if (validEvents.isEmpty()) { return; } PacketContainer packet = event.getPacket(); Player player = event.getPlayer(); - for(EnumWrappers.ChatType type : packet.getChatTypes().getValues()) { - if(type.equals(EnumWrappers.ChatType.GAME_INFO)) { + for (EnumWrappers.ChatType type : packet.getChatTypes().getValues()) { + if (type.equals(EnumWrappers.ChatType.GAME_INFO)) { return; } } - if(isPaper && OtherUtils.isChatNew()){ - for(boolean b : packet.getBooleans().getValues()){ - if(b){ + if (isPaper && OtherUtils.isChatNew()) { + for (boolean b : packet.getBooleans().getValues()) { + if (b) { return; } } } - for(Object object : packet.getModifier().getValues()) { - if(object == null) { + for (Object object : packet.getModifier().getValues()) { + if (object == null) { continue; } String jsonMessage = null; String normalMessage = null; - if(object instanceof String) { + if (object instanceof String) { jsonMessage = (String) object; normalMessage = OtherUtils.fromJsonMessageToNormalMessage(jsonMessage); - }else if(object instanceof BaseComponent[]) { + } else if (object instanceof BaseComponent[]) { BaseComponent[] baseComponents = (BaseComponent[]) object; normalMessage = BaseComponent.toLegacyText(baseComponents); jsonMessage = ComponentSerializer.toString(baseComponents); } - if(isPaper && OtherUtils.isChatNew()){ - if(object instanceof Component){ + if (isPaper && OtherUtils.isChatNew()) { + if (object instanceof Component) { WrappedChatComponent wrappedChatComponent = AdventureComponentConverter - .fromComponent((Component)object); + .fromComponent((Component) object); jsonMessage = wrappedChatComponent.getJson(); normalMessage = OtherUtils.fromJsonMessageToNormalMessage(jsonMessage); } } - if(jsonMessage != null && normalMessage != null) { - executeEvent(player,jsonMessage,normalMessage,event); + if (jsonMessage != null && normalMessage != null) { + executeEvent(player, jsonMessage, normalMessage, event); return; } } - for(WrappedChatComponent wrappedChatComponent : packet.getChatComponents().getValues()) { - if(wrappedChatComponent != null) { + for (WrappedChatComponent wrappedChatComponent : packet.getChatComponents().getValues()) { + if (wrappedChatComponent != null) { String jsonMessage = wrappedChatComponent.getJson(); - String normalMessage = null; - if(isPaper && OtherUtils.isChatNew()){ + String normalMessage; + if (isPaper && OtherUtils.isChatNew()) { normalMessage = LegacyComponentSerializer.legacyAmpersand().serialize(AdventureComponentConverter.fromWrapper(wrappedChatComponent)); - }else{ + } else { normalMessage = OtherUtils.fromJsonMessageToNormalMessage(jsonMessage); } - if(jsonMessage != null && normalMessage != null){ - executeEvent(player,jsonMessage,normalMessage,event); + if (jsonMessage != null && normalMessage != null) { + executeEvent(player, jsonMessage, normalMessage, event); } return; } @@ -119,16 +121,16 @@ public void onPacketSending(PacketEvent event) { }; } - public void executeEvent(Player player,String jsonMessage,String normalMessage,PacketEvent event){ - ProtocolLibReceiveMessageEvent messageEvent = new ProtocolLibReceiveMessageEvent(player,jsonMessage,normalMessage); + public void executeEvent(Player player, String jsonMessage, String normalMessage, PacketEvent event) { + ProtocolLibReceiveMessageEvent messageEvent = new ProtocolLibReceiveMessageEvent(player, jsonMessage, normalMessage); ConditionEvent conditionEvent = new ConditionEvent(plugin, player, messageEvent, EventType.PROTOCOLLIB_RECEIVE_MESSAGE, null); conditionEvent.addVariables( - new StoredVariable("%json_message%",jsonMessage), - new StoredVariable("%normal_message%",normalMessage.replace("§", "&")), - new StoredVariable("%normal_message_without_color_codes%",ChatColor.stripColor(normalMessage)) + new StoredVariable("%json_message%", jsonMessage), + new StoredVariable("%normal_message%", normalMessage.replace("§", "&")), + new StoredVariable("%normal_message_without_color_codes%", ChatColor.stripColor(normalMessage)) ).checkEvent(); - if(messageEvent.isCancelled()){ + if (messageEvent.isCancelled()) { event.setCancelled(true); } } diff --git a/src/main/java/ce/ajneb97/manager/dependencies/ProtocolLibReceiveMessageEvent.java b/src/main/java/ce/ajneb97/manager/dependencies/ProtocolLibReceiveMessageEvent.java new file mode 100644 index 0000000..af9b90e --- /dev/null +++ b/src/main/java/ce/ajneb97/manager/dependencies/ProtocolLibReceiveMessageEvent.java @@ -0,0 +1,54 @@ +package ce.ajneb97.manager.dependencies; + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +public class ProtocolLibReceiveMessageEvent extends Event implements Cancellable { + + private final Player player; + private final String jsonMessage; + private final String normalMessage; + private boolean cancelled; + private static final HandlerList handlers = new HandlerList(); + + public ProtocolLibReceiveMessageEvent(Player player, String jsonMessage, String normalMessage) { + this.player = player; + this.jsonMessage = jsonMessage; + this.normalMessage = normalMessage; + this.cancelled = false; + } + + public Player getPlayer() { + return player; + } + + public String getJsonMessage() { + return jsonMessage; + } + + public String getNormalMessage() { + return normalMessage; + } + + @Override + public @NotNull HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } +} diff --git a/src/main/java/ce/ajneb97/managers/DebugManager.java b/src/main/java/ce/ajneb97/managers/DebugManager.java deleted file mode 100644 index 8b5b612..0000000 --- a/src/main/java/ce/ajneb97/managers/DebugManager.java +++ /dev/null @@ -1,172 +0,0 @@ -package ce.ajneb97.managers; - -import ce.ajneb97.ConditionalEvents; -import ce.ajneb97.model.actions.ActionTargeter; -import ce.ajneb97.model.actions.ActionTargeterType; -import ce.ajneb97.model.actions.ActionType; -import ce.ajneb97.model.internal.DebugSender; -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; - -import java.util.ArrayList; - -public class DebugManager { - - private ConditionalEvents plugin; - private ArrayList<DebugSender> debugSenders; - public DebugManager(ConditionalEvents plugin){ - this.plugin = plugin; - this.debugSenders = new ArrayList<DebugSender>(); - } - - public boolean setDebugSender(CommandSender sender,String event,String playerName){ - DebugSender debugSender = getDebugSender(sender); - if(debugSender == null){ - this.debugSenders.add(new DebugSender(sender,event,playerName)); - return true; - } - if(debugSender.getEvent().equals(event)){ - //If the same, then remove it - removeDebugSender(sender); - return false; - } - //If not the same, update it - debugSender.setEvent(event); - return true; - } - - public DebugSender getDebugSender(CommandSender sender){ - for(DebugSender debugSender : debugSenders){ - if(debugSender.getSender().equals(sender)){ - return debugSender; - } - } - return null; - } - - public void removeDebugSender(CommandSender sender){ - for(int i=0;i<debugSenders.size();i++){ - if(debugSenders.get(i).getSender().equals(sender)){ - debugSenders.remove(i); - return; - } - } - } - - public void sendConditionMessage(String event, String condition, boolean approved, Player player, boolean start){ - if(debugSenders.isEmpty()){ - return; - } - if(condition.endsWith(" or ")){ - condition = condition.substring(0,condition.length()-4); - }else if(condition.endsWith(" and ")){ - condition = condition.substring(0,condition.length()-5); - } - - String result = "&a&lAPPROVED"; - if(!approved){ - result = "&c&lDENIED"; - } - String playerInfo = ""; - if(player != null){ - playerInfo = ","+player.getName(); - } - String startText = ""; - if(start){ - startText = ",&estart"; - } - String debugMessage = MessagesManager.getLegacyColoredMessage("&8[&c"+event+playerInfo+startText+"&8] &7Checking for: &f") - +condition+MessagesManager.getLegacyColoredMessage(" &8| &7Result: "+result); - - for(DebugSender debugSender : debugSenders){ - if(debugSender.getEvent().equals(event)){ - if(player != null && debugSender.getPlayerName() != null){ - if(!debugSender.getPlayerName().equals(player.getName())){ - continue; - } - } - debugSender.getSender().sendMessage(debugMessage); - } - } - } - - public void sendActionsMessage(String event, String actionGroup, Player player){ - if(debugSenders.isEmpty()){ - return; - } - - String playerInfo = ""; - if(player != null){ - playerInfo = ","+player.getName(); - } - - //Fix actionGroup if parameters are present - int pos = actionGroup.indexOf("{"); - if(pos != -1){ - actionGroup = actionGroup.substring(0, pos); - } - - String debugMessage = "&8[&c"+event+playerInfo+"&8] "; - if(actionGroup.equals("cooldown")){ - debugMessage = MessagesManager.getLegacyColoredMessage(debugMessage+"&7Cooldown present, overriding."); - }else if(actionGroup.equals("one_time")){ - debugMessage = MessagesManager.getLegacyColoredMessage(debugMessage+"&7One Time present, overriding."); - }else{ - debugMessage = MessagesManager.getLegacyColoredMessage(debugMessage+"&7Executing actions from action group: &f"+actionGroup); - } - - for(DebugSender debugSender : debugSenders){ - if(debugSender.getEvent().equals(event)){ - if(player != null && debugSender.getPlayerName() != null){ - if(!debugSender.getPlayerName().equals(player.getName())){ - continue; - } - } - debugSender.getSender().sendMessage(debugMessage); - } - } - } - - public void sendActionMessage(String event, String actionLine, LivingEntity livingEntity, ActionType actionType, ActionTargeter actionTargeter){ - if(debugSenders.isEmpty()){ - return; - } - - // Can be: - // [<event>,<player_name>] - // [<event>,<entity_type>] - String playerInfo = ""; - if(livingEntity != null){ - if(livingEntity instanceof Player){ - playerInfo = ","+ livingEntity.getName(); - }else{ - playerInfo = ","+ livingEntity.getType().name(); - } - } - - String actionTargeterInfo = ""; - if(!actionTargeter.getType().equals(ActionTargeterType.NORMAL)){ - if(actionTargeter.getParameter() == null){ - actionTargeterInfo = " &6("+actionTargeter.getType()+")"; - }else{ - actionTargeterInfo = " &6("+actionTargeter.getType()+" "+actionTargeter.getParameter()+")"; - } - } - - String debugMessage = MessagesManager.getLegacyColoredMessage("&8[&c"+event+playerInfo+ - ",&eaction&8] &7Executing action:"+actionTargeterInfo+" &6["+actionType+"&6] &f")+actionLine; - - for(DebugSender debugSender : debugSenders){ - if(debugSender.getEvent().equals(event)){ - if(livingEntity instanceof Player && debugSender.getPlayerName() != null){ - if(!debugSender.getPlayerName().equals(livingEntity.getName())){ - continue; - } - } - debugSender.getSender().sendMessage(debugMessage); - } - } - } -} diff --git a/src/main/java/ce/ajneb97/managers/InterruptEventManager.java b/src/main/java/ce/ajneb97/managers/InterruptEventManager.java deleted file mode 100644 index 712371d..0000000 --- a/src/main/java/ce/ajneb97/managers/InterruptEventManager.java +++ /dev/null @@ -1,44 +0,0 @@ -package ce.ajneb97.managers; - -import ce.ajneb97.ConditionalEvents; -import ce.ajneb97.model.internal.WaitActionTask; -import org.bukkit.Bukkit; -import org.bukkit.scheduler.BukkitTask; - -import java.util.*; - -public class InterruptEventManager { - private ConditionalEvents plugin; - private ArrayList<WaitActionTask> tasks; - - public InterruptEventManager(ConditionalEvents plugin){ - this.plugin = plugin; - this.tasks = new ArrayList<>(); - } - - public void addTask(String playerName, String eventName, BukkitTask bukkitTask){ - tasks.add(new WaitActionTask(playerName,eventName,bukkitTask)); - } - - public void removeTaskById(int taskId){ - tasks.removeIf(task -> task.getTask().getTaskId() == taskId); - } - - // Interrupt actions for a specific event, globally or per player - public void interruptEvent(String eventName, String playerName){ - tasks.removeIf(task -> { - if(playerName == null){ - if(task.getEventName().equals(eventName)){ - task.getTask().cancel(); - return true; - } - }else{ - if(task.getPlayerName() != null && task.getPlayerName().equals(playerName) && task.getEventName().equals(eventName)){ - task.getTask().cancel(); - return true; - } - } - return false; - }); - } -} diff --git a/src/main/java/ce/ajneb97/managers/MessagesManager.java b/src/main/java/ce/ajneb97/managers/MessagesManager.java deleted file mode 100644 index 0e762bf..0000000 --- a/src/main/java/ce/ajneb97/managers/MessagesManager.java +++ /dev/null @@ -1,145 +0,0 @@ -package ce.ajneb97.managers; - -import ce.ajneb97.api.ConditionalEventsAPI; -import ce.ajneb97.libs.centeredmessages.DefaultFontInfo; -import ce.ajneb97.utils.MiniMessageUtils; -import ce.ajneb97.utils.OtherUtils; -import net.md_5.bungee.api.ChatColor; -import org.bukkit.command.CommandSender; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class MessagesManager { - - private String timeSeconds; - private String timeMinutes; - private String timeHours; - private String timeDays; - private String prefix; - private String placeholderAPICooldownReady; - private String placeholderAPICooldownNameError; - - - public String getTimeSeconds() { - return timeSeconds; - } - - public void setTimeSeconds(String timeSeconds) { - this.timeSeconds = timeSeconds; - } - - public String getTimeMinutes() { - return timeMinutes; - } - - public void setTimeMinutes(String timeMinutes) { - this.timeMinutes = timeMinutes; - } - - public String getTimeHours() { - return timeHours; - } - - public void setTimeHours(String timeHours) { - this.timeHours = timeHours; - } - - public String getTimeDays() { - return timeDays; - } - - public void setTimeDays(String timeDays) { - this.timeDays = timeDays; - } - - public String getPrefix() { - return prefix; - } - - public void setPrefix(String prefix) { - this.prefix = prefix; - } - - public String getPlaceholderAPICooldownReady() { - return placeholderAPICooldownReady; - } - - public void setPlaceholderAPICooldownReady(String placeholderAPICooldownReady) { - this.placeholderAPICooldownReady = placeholderAPICooldownReady; - } - - public String getPlaceholderAPICooldownNameError() { - return placeholderAPICooldownNameError; - } - - public void setPlaceholderAPICooldownNameError(String placeholderAPICooldownNameError) { - this.placeholderAPICooldownNameError = placeholderAPICooldownNameError; - } - - public void sendMessage(CommandSender sender, String message, boolean prefix){ - if(!message.isEmpty()){ - if(ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()){ - MiniMessageUtils.messagePrefix(sender,message,prefix,this.prefix); - }else{ - if(prefix){ - sender.sendMessage(getLegacyColoredMessage(this.prefix+message)); - }else{ - sender.sendMessage(getLegacyColoredMessage(message)); - } - } - } - } - - public static String getLegacyColoredMessage(String message) { - if(OtherUtils.isNew()) { - Pattern pattern = Pattern.compile("#[a-fA-F0-9]{6}"); - Matcher match = pattern.matcher(message); - - while(match.find()) { - String color = message.substring(match.start(),match.end()); - message = message.replace(color, ChatColor.of(color)+""); - - match = pattern.matcher(message); - } - } - - message = ChatColor.translateAlternateColorCodes('&', message); - return message; - } - - public static String getCenteredMessage(String message){ - int CENTER_PX = 154; - int messagePxSize = 0; - boolean previousCode = false; - boolean isBold = false; - - for(char c : message.toCharArray()){ - if(c == '§'){ - previousCode = true; - continue; - }else if(previousCode == true){ - previousCode = false; - if(c == 'l' || c == 'L'){ - isBold = true; - continue; - }else isBold = false; - }else{ - DefaultFontInfo dFI = DefaultFontInfo.getDefaultFontInfo(c); - messagePxSize += isBold ? dFI.getBoldLength() : dFI.getLength(); - messagePxSize++; - } - } - - int halvedMessageSize = messagePxSize / 2; - int toCompensate = CENTER_PX - halvedMessageSize; - int spaceLength = DefaultFontInfo.SPACE.getLength() + 1; - int compensated = 0; - StringBuilder sb = new StringBuilder(); - while(compensated < toCompensate){ - sb.append(" "); - compensated += spaceLength; - } - return (sb.toString() + message); - } -} diff --git a/src/main/java/ce/ajneb97/managers/PlayerManager.java b/src/main/java/ce/ajneb97/managers/PlayerManager.java deleted file mode 100644 index 1d03dc8..0000000 --- a/src/main/java/ce/ajneb97/managers/PlayerManager.java +++ /dev/null @@ -1,181 +0,0 @@ -package ce.ajneb97.managers; - -import ce.ajneb97.ConditionalEvents; -import ce.ajneb97.configs.PlayersConfigsManager; -import ce.ajneb97.model.player.GenericCallback; -import ce.ajneb97.model.player.PlayerData; -import org.bukkit.Bukkit; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public class PlayerManager { - - private ConditionalEvents plugin; - private Map<UUID, PlayerData> players; - private Map<String,UUID> playerNames; - public PlayerManager(ConditionalEvents plugin){ - this.plugin = plugin; - this.players = new HashMap<>(); - this.playerNames = new HashMap<>(); - } - - public Map<UUID,PlayerData> getPlayers() { - return players; - } - - public void addPlayer(PlayerData p){ - players.put(p.getUuid(),p); - playerNames.put(p.getName(), p.getUuid()); - } - - public PlayerData getPlayer(Player player, boolean create){ - PlayerData playerData = players.get(player.getUniqueId()); - if(playerData == null && create){ - playerData = new PlayerData(player.getUniqueId(),player.getName()); - addPlayer(playerData); - } - return playerData; - } - - private void updatePlayerName(String oldName,String newName,UUID uuid){ - if(oldName != null){ - playerNames.remove(oldName); - } - playerNames.put(newName,uuid); - } - - public PlayerData getPlayerByUUID(UUID uuid){ - return players.get(uuid); - } - - private UUID getPlayerUUID(String name){ - return playerNames.get(name); - } - - public PlayerData getPlayerByName(String name){ - UUID uuid = getPlayerUUID(name); - return players.get(uuid); - } - - public void removePlayer(PlayerData playerData){ - players.remove(playerData.getUuid()); - playerNames.remove(playerData.getName()); - } - - - public void setEventCooldown(String eventName,Player player){ - PlayerData p = getPlayer(player,true); - p.setCooldown(eventName,System.currentTimeMillis()); - p.setModified(true); - } - - public long getEventCooldown(String eventName,Player player){ - PlayerData p = getPlayer(player,false); - if(p == null){ - return 0; - }else{ - return p.getCooldown(eventName); - } - } - - public void setEventOneTime(String eventName,Player player){ - PlayerData p = getPlayer(player,true); - p.setOneTime(eventName,true); - p.setModified(true); - } - - public boolean getEventOneTime(String eventName,Player player){ - PlayerData p = getPlayer(player,false); - if(p == null){ - return false; - }else{ - return p.isEventOneTime(eventName); - } - } - - public String resetDataForPlayer(String playerName, String eventName, FileConfiguration messagesConfig){ - if(Bukkit.getPlayer(playerName) == null){ - return messagesConfig.getString("Messages.playerNotOnline"); - } - - PlayerData playerData = getPlayerByName(playerName); - if(playerData == null){ - return messagesConfig.getString("Messages.playerDoesNotExists"); - } - - if(eventName.equals("all")){ - // All data - playerData.resetAll(); - return messagesConfig.getString("Messages.eventDataResetAll").replace("%player%", playerName); - }else{ - // Specific event - playerData.resetEvent(eventName); - return messagesConfig.getString("Messages.eventDataReset").replace("%player%", playerName) - .replace("%event%", eventName); - } - } - - public void resetDataForAllPlayers(String eventName, FileConfiguration messagesConfig, GenericCallback<String> callback){ - new BukkitRunnable(){ - @Override - public void run() { - PlayersConfigsManager playersConfigsManager = plugin.getConfigsManager().getPlayerConfigsManager(); - playersConfigsManager.resetDataForAllPlayers(eventName); - - new BukkitRunnable(){ - @Override - public void run() { - String result; - if(eventName.equals("all")) { - // All data, Online: - players.values().forEach(PlayerData::resetAll); - result = messagesConfig.getString("Messages.eventDataResetAllForAllPlayers"); - }else { - // Specific event, Online: - players.values().forEach(p -> p.resetEvent(eventName)); - result = messagesConfig.getString("Messages.eventDataResetForAllPlayers") - .replace("%event%", eventName); - } - - callback.onDone(result); - } - }.runTask(plugin); - } - }.runTaskAsynchronously(plugin); - } - - public void manageJoin(Player player){ - // Load player data from file if exists - plugin.getConfigsManager().getPlayerConfigsManager().loadConfig(player.getUniqueId(), playerData -> { - if(playerData != null){ - addPlayer(playerData); - if(playerData.getName() == null || !playerData.getName().equals(player.getName())){ - updatePlayerName(playerData.getName(),player.getName(),player.getUniqueId()); - playerData.setName(player.getName()); - playerData.setModified(true); - } - } - }); - } - - public void manageLeave(Player player){ - // Save player data into file and remove from map - PlayerData playerData = getPlayer(player,false); - if(playerData != null){ - if(playerData.isModified()){ - new BukkitRunnable(){ - @Override - public void run() { - plugin.getConfigsManager().getPlayerConfigsManager().saveConfig(playerData); - } - }.runTaskAsynchronously(plugin); - } - removePlayer(playerData); - } - } -} diff --git a/src/main/java/ce/ajneb97/managers/RepetitiveManager.java b/src/main/java/ce/ajneb97/managers/RepetitiveManager.java deleted file mode 100644 index 288a903..0000000 --- a/src/main/java/ce/ajneb97/managers/RepetitiveManager.java +++ /dev/null @@ -1,67 +0,0 @@ -package ce.ajneb97.managers; - -import ce.ajneb97.ConditionalEvents; -import ce.ajneb97.model.CEEvent; -import ce.ajneb97.model.EventType; -import ce.ajneb97.model.internal.ConditionEvent; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - -public class RepetitiveManager { - - private ConditionalEvents plugin; - private CEEvent ceEvent; - private long ticks; - private boolean mustEnd; - private boolean started; - - public RepetitiveManager(ConditionalEvents plugin,CEEvent ceEvent,long ticks){ - this.plugin = plugin; - this.ceEvent = ceEvent; - this.ticks = ticks; - } - - public boolean isStarted() { - return started; - } - - public void end() { - this.mustEnd = true; - this.started = false; - } - - public void start(){ - this.mustEnd = false; - this.started = true; - new BukkitRunnable(){ - @Override - public void run() { - if(mustEnd || !execute()){ - this.cancel(); - } - } - }.runTaskTimerAsynchronously(plugin, 0L, ticks); - } - - public boolean execute(){ - if(ceEvent == null){ - return false; - } - - EventsManager eventsManager = plugin.getEventsManager(); - if(ceEvent.getEventType().equals(EventType.REPETITIVE)){ - for(Player player : Bukkit.getOnlinePlayers()){ - ConditionEvent conditionEvent = new ConditionEvent(plugin, player, null, EventType.REPETITIVE, null); - conditionEvent.setAsync(true); - eventsManager.checkSingularEvent(conditionEvent,ceEvent); - } - }else{ - //Repetitive server - ConditionEvent conditionEvent = new ConditionEvent(plugin, null, null, EventType.REPETITIVE_SERVER, null); - conditionEvent.setAsync(true); - eventsManager.checkSingularEvent(conditionEvent,ceEvent); - } - return true; - } -} diff --git a/src/main/java/ce/ajneb97/managers/dependencies/ProtocolLibReceiveMessageEvent.java b/src/main/java/ce/ajneb97/managers/dependencies/ProtocolLibReceiveMessageEvent.java deleted file mode 100644 index 62dcfdc..0000000 --- a/src/main/java/ce/ajneb97/managers/dependencies/ProtocolLibReceiveMessageEvent.java +++ /dev/null @@ -1,56 +0,0 @@ -package ce.ajneb97.managers.dependencies; - -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - - -public class ProtocolLibReceiveMessageEvent extends Event implements Cancellable { - - private Player player; - private String jsonMessage; - private String normalMessage; - private boolean cancelled; - private static final HandlerList handlers = new HandlerList(); - - - public ProtocolLibReceiveMessageEvent(Player player, String jsonMessage, String normalMessage){ - this.player = player; - this.jsonMessage = jsonMessage; - this.normalMessage = normalMessage; - this.cancelled = false; - } - - public Player getPlayer() { - return player; - } - - public String getJsonMessage() { - return jsonMessage; - } - - public String getNormalMessage() { - return normalMessage; - } - - @Override - public HandlerList getHandlers() { - // TODO Auto-generated method stub - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - @Override - public boolean isCancelled() { - return cancelled; - } - - @Override - public void setCancelled(boolean cancelled) { - this.cancelled = cancelled; - } -} diff --git a/src/main/java/ce/ajneb97/model/CEEvent.java b/src/main/java/ce/ajneb97/model/CEEvent.java index 8d611f3..36cd5c5 100644 --- a/src/main/java/ce/ajneb97/model/CEEvent.java +++ b/src/main/java/ce/ajneb97/model/CEEvent.java @@ -1,8 +1,7 @@ package ce.ajneb97.model; -import ce.ajneb97.managers.RepetitiveManager; +import ce.ajneb97.manager.RepetitiveManager; import ce.ajneb97.model.actions.ActionGroup; -import org.bukkit.Bukkit; import java.util.List; @@ -31,9 +30,7 @@ public class CEEvent { private List<String> preventCooldownActivationActionGroups; private List<String> preventOneTimeActivationActionGroups; - - - public CEEvent(String name){ + public CEEvent(String name) { this.name = name; } @@ -133,17 +130,17 @@ public void setAllowMathFormulasInConditions(boolean allowMathFormulasInConditio this.allowMathFormulasInConditions = allowMathFormulasInConditions; } - public void enable(){ + public void enable() { this.enabled = true; - if(repetitiveManager != null && !repetitiveManager.isStarted()){ + if (repetitiveManager != null && !repetitiveManager.isStarted()) { repetitiveManager.start(); } } - public void disable(){ + public void disable() { this.enabled = false; - if(repetitiveManager != null){ - repetitiveManager.end(); + if (repetitiveManager != null) { + repetitiveManager.stop(); } } @@ -164,10 +161,9 @@ public void setCustomEventProperties(CustomEventProperties customEventProperties } - - public ActionGroup getActionGroup(String name){ - for(ActionGroup actionGroup : actionGroups){ - if(actionGroup.getName().equals(name)){ + public ActionGroup getActionGroup(String name) { + for (ActionGroup actionGroup : actionGroups) { + if (actionGroup.getName().equals(name)) { return actionGroup; } } diff --git a/src/main/java/ce/ajneb97/model/ConditionalType.java b/src/main/java/ce/ajneb97/model/ConditionalType.java index e40de04..191cacf 100644 --- a/src/main/java/ce/ajneb97/model/ConditionalType.java +++ b/src/main/java/ce/ajneb97/model/ConditionalType.java @@ -1,6 +1,7 @@ package ce.ajneb97.model; public enum ConditionalType { + EQUALS("=="), NOT_EQUALS("!="), EQUALS_LEGACY("equals"), @@ -20,7 +21,8 @@ public enum ConditionalType { LOWER("<"), LOWER_EQUALS("<="); - private String text; + private final String text; + ConditionalType(String text) { this.text = text; } diff --git a/src/main/java/ce/ajneb97/model/EventType.java b/src/main/java/ce/ajneb97/model/EventType.java index e897351..ae5a6fd 100644 --- a/src/main/java/ce/ajneb97/model/EventType.java +++ b/src/main/java/ce/ajneb97/model/EventType.java @@ -1,6 +1,7 @@ package ce.ajneb97.model; public enum EventType { + PLAYER_RESPAWN, PLAYER_DEATH, PLAYER_ATTACK, @@ -53,4 +54,5 @@ public enum EventType { PROTOCOLLIB_RECEIVE_MESSAGE, CUSTOM, CALL + } diff --git a/src/main/java/ce/ajneb97/model/StoredVariable.java b/src/main/java/ce/ajneb97/model/StoredVariable.java index 6ce9fde..5f9d69f 100644 --- a/src/main/java/ce/ajneb97/model/StoredVariable.java +++ b/src/main/java/ce/ajneb97/model/StoredVariable.java @@ -1,6 +1,7 @@ package ce.ajneb97.model; public class StoredVariable { + private String name; private String value; diff --git a/src/main/java/ce/ajneb97/model/ToConditionGroup.java b/src/main/java/ce/ajneb97/model/ToConditionGroup.java index 50385a8..c5eca32 100644 --- a/src/main/java/ce/ajneb97/model/ToConditionGroup.java +++ b/src/main/java/ce/ajneb97/model/ToConditionGroup.java @@ -3,6 +3,7 @@ import java.util.List; public class ToConditionGroup { + private String name; private List<String> conditions; diff --git a/src/main/java/ce/ajneb97/model/actions/ActionGroup.java b/src/main/java/ce/ajneb97/model/actions/ActionGroup.java index 7a97b1e..19f6ae5 100644 --- a/src/main/java/ce/ajneb97/model/actions/ActionGroup.java +++ b/src/main/java/ce/ajneb97/model/actions/ActionGroup.java @@ -3,6 +3,7 @@ import java.util.List; public class ActionGroup { + private String name; private List<CEAction> actions; diff --git a/src/main/java/ce/ajneb97/model/actions/ActionTargeter.java b/src/main/java/ce/ajneb97/model/actions/ActionTargeter.java index 3556e98..044b316 100644 --- a/src/main/java/ce/ajneb97/model/actions/ActionTargeter.java +++ b/src/main/java/ce/ajneb97/model/actions/ActionTargeter.java @@ -1,6 +1,7 @@ package ce.ajneb97.model.actions; public class ActionTargeter { + private ActionTargeterType type; private String parameter; diff --git a/src/main/java/ce/ajneb97/model/actions/ActionTargeterType.java b/src/main/java/ce/ajneb97/model/actions/ActionTargeterType.java index 6d5abf4..a5122d0 100644 --- a/src/main/java/ce/ajneb97/model/actions/ActionTargeterType.java +++ b/src/main/java/ce/ajneb97/model/actions/ActionTargeterType.java @@ -1,11 +1,18 @@ package ce.ajneb97.model.actions; public enum ActionTargeterType { + TO_ALL, + TO_TARGET, + TO_WORLD, + TO_RANGE, + TO_PLAYER, + TO_CONDITION, - NORMAL; + + NORMAL } diff --git a/src/main/java/ce/ajneb97/model/actions/ActionType.java b/src/main/java/ce/ajneb97/model/actions/ActionType.java index 7f3f694..a6e6867 100644 --- a/src/main/java/ce/ajneb97/model/actions/ActionType.java +++ b/src/main/java/ce/ajneb97/model/actions/ActionType.java @@ -57,5 +57,4 @@ public enum ActionType { EXECUTE_ACTION_GROUP, TAB_COMPLETE, API - } diff --git a/src/main/java/ce/ajneb97/model/actions/CEAction.java b/src/main/java/ce/ajneb97/model/actions/CEAction.java index 4bd8b01..970865c 100644 --- a/src/main/java/ce/ajneb97/model/actions/CEAction.java +++ b/src/main/java/ce/ajneb97/model/actions/CEAction.java @@ -3,7 +3,7 @@ public class CEAction { private ActionType type; - private String apiType; //Just for API events. + private String apiType; private ActionTargeter targeter; private String actionLine; diff --git a/src/main/java/ce/ajneb97/model/internal/CheckConditionsResult.java b/src/main/java/ce/ajneb97/model/internal/CheckConditionsResult.java index fb11764..30d98ae 100644 --- a/src/main/java/ce/ajneb97/model/internal/CheckConditionsResult.java +++ b/src/main/java/ce/ajneb97/model/internal/CheckConditionsResult.java @@ -2,8 +2,8 @@ public class CheckConditionsResult { - private boolean conditionsAccomplished; - private String executeActionGroup; + private final boolean conditionsAccomplished; + private final String executeActionGroup; public CheckConditionsResult(boolean conditionsAccomplished, String executeActionGroup) { this.conditionsAccomplished = conditionsAccomplished; @@ -15,9 +15,9 @@ public boolean isConditionsAccomplished() { } public String getExecuteActionGroup() { - if(executeActionGroup == null){ + if (executeActionGroup == null) { return "default"; - }else{ + } else { return executeActionGroup; } } diff --git a/src/main/java/ce/ajneb97/model/internal/ConditionEvent.java b/src/main/java/ce/ajneb97/model/internal/ConditionEvent.java index eb6405c..ef30082 100644 --- a/src/main/java/ce/ajneb97/model/internal/ConditionEvent.java +++ b/src/main/java/ce/ajneb97/model/internal/ConditionEvent.java @@ -23,24 +23,25 @@ import org.bukkit.inventory.meta.ItemMeta; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; // Represent an event that is being executed and conditions need // to be checked. +@SuppressWarnings({"removal", "BooleanMethodIsAlwaysInverted", "deprecation"}) public class ConditionEvent { - private ConditionalEvents plugin; - private Player player; - private LivingEntity target; - private ArrayList<StoredVariable> eventVariables; - private Event minecraftEvent; - private EventType eventType; + private final ConditionalEvents plugin; + private final Player player; + private final LivingEntity target; + private final ArrayList<StoredVariable> eventVariables; + private final Event minecraftEvent; + private final EventType eventType; private CEEvent currentEvent; //The current event that is being checked private boolean async; - public ConditionEvent(ConditionalEvents plugin,Player player, Event minecraftEvent, EventType eventType - , LivingEntity target) { + public ConditionEvent(ConditionalEvents plugin, Player player, Event minecraftEvent, EventType eventType, LivingEntity target) { this.plugin = plugin; this.player = player; this.eventVariables = new ArrayList<>(); @@ -78,41 +79,36 @@ public void setCurrentEvent(CEEvent currentEvent) { this.currentEvent = currentEvent; } - public void checkEvent(){ + public void checkEvent() { plugin.getEventsManager().checkEvent(this); } - public boolean containsValidEvents(){ + public boolean containsValidEvents() { ArrayList<CEEvent> validEvents = plugin.getEventsManager().getValidEvents(eventType); - if(validEvents.size() == 0){ - return false; - } - return true; + return !validEvents.isEmpty(); } - public ConditionEvent addVariables(StoredVariable... storedVariables){ - for(StoredVariable v : storedVariables){ - eventVariables.add(v); - } + public ConditionEvent addVariables(StoredVariable... storedVariables) { + eventVariables.addAll(Arrays.asList(storedVariables)); return this; } - public ConditionEvent addVariables(ArrayList<StoredVariable> storedVariables){ + public ConditionEvent addVariables(ArrayList<StoredVariable> storedVariables) { eventVariables.addAll(storedVariables); return this; } - public ConditionEvent setCommonBlockVariables(Block block){ + public ConditionEvent setCommonBlockVariables(Block block) { Location l = block.getLocation(); - eventVariables.add(new StoredVariable("%block_x%",l.getBlockX()+"")); - eventVariables.add(new StoredVariable("%block_y%",l.getBlockY()+"")); - eventVariables.add(new StoredVariable("%block_z%",l.getBlockZ()+"")); - eventVariables.add(new StoredVariable("%block_world%",l.getWorld().getName())); - eventVariables.add(new StoredVariable("%block%",block.getType().name())); + eventVariables.add(new StoredVariable("%block_x%", l.getBlockX() + "")); + eventVariables.add(new StoredVariable("%block_y%", l.getBlockY() + "")); + eventVariables.add(new StoredVariable("%block_z%", l.getBlockZ() + "")); + eventVariables.add(new StoredVariable("%block_world%", l.getWorld().getName())); + eventVariables.add(new StoredVariable("%block%", block.getType().name())); eventVariables.add(new StoredVariable("%block_head_texture%", BlockUtils.getHeadTextureData(block))); - if(OtherUtils.isLegacy()){ - eventVariables.add(new StoredVariable("%block_data%",block.getData()+"")); - }else{ + if (OtherUtils.isLegacy()) { + eventVariables.add(new StoredVariable("%block_data%", block.getData() + "")); + } else { eventVariables.add(new StoredVariable("%block_data%", BlockUtils.getBlockDataStringFromObject(block.getBlockData()))); } @@ -120,72 +116,72 @@ public ConditionEvent setCommonBlockVariables(Block block){ return this; } - public ConditionEvent setCommonActionVariables(Action action,Player player){ + public ConditionEvent setCommonActionVariables(Action action, Player player) { String actionVariable = null; String actionName = action.name(); - if(player.isSneaking()) { - if(actionName.contains("RIGHT_CLICK")) { + if (player.isSneaking()) { + if (actionName.contains("RIGHT_CLICK")) { actionVariable = "SHIFT_RIGHT_CLICK"; - }else if(actionName.contains("LEFT_CLICK")) { + } else if (actionName.contains("LEFT_CLICK")) { actionVariable = "SHIFT_LEFT_CLICK"; - }else if(action.equals(Action.PHYSICAL)) { + } else if (action.equals(Action.PHYSICAL)) { actionVariable = "PHYSICAL"; } - }else { - if(actionName.contains("RIGHT_CLICK")) { + } else { + if (actionName.contains("RIGHT_CLICK")) { actionVariable = "RIGHT_CLICK"; - }else if(actionName.contains("LEFT_CLICK")) { + } else if (actionName.contains("LEFT_CLICK")) { actionVariable = "LEFT_CLICK"; - }else if(action.equals(Action.PHYSICAL)) { + } else if (action.equals(Action.PHYSICAL)) { actionVariable = "PHYSICAL"; } } - if(actionVariable != null){ - eventVariables.add(new StoredVariable("%action_type%",actionVariable)); + if (actionVariable != null) { + eventVariables.add(new StoredVariable("%action_type%", actionVariable)); } return this; } - public ConditionEvent setCommonVictimVariables(Entity entity){ + public ConditionEvent setCommonVictimVariables(Entity entity) { String victimType = entity.getType().name(); String victimName = ""; String victimNameColorFormat = ""; String victimUuid = entity.getUniqueId().toString(); - if(entity.getCustomName() != null) { - if(plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()){ + if (entity.getCustomName() != null) { + if (plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()) { victimName = MiniMessageUtils.getEntityCustomNamePlain(entity); victimNameColorFormat = MiniMessageUtils.getEntityCustomNameMiniMessage(entity); - }else{ + } else { victimName = ChatColor.stripColor(entity.getCustomName()); victimNameColorFormat = entity.getCustomName().replace("§", "&"); } } Location location = entity.getLocation(); double health = 0; - if(entity instanceof LivingEntity){ - health = ((LivingEntity)entity).getHealth(); + if (entity instanceof LivingEntity) { + health = ((LivingEntity) entity).getHealth(); } - eventVariables.add(new StoredVariable("%victim%",victimType)); - eventVariables.add(new StoredVariable("%victim_name%",victimName)); - eventVariables.add(new StoredVariable("%victim_health%",health+"")); - eventVariables.add(new StoredVariable("%victim_color_format_name%",victimNameColorFormat)); - eventVariables.add(new StoredVariable("%victim_block_x%",location.getBlockX()+"")); - eventVariables.add(new StoredVariable("%victim_block_y%",location.getBlockY()+"")); - eventVariables.add(new StoredVariable("%victim_block_z%",location.getBlockZ()+"")); - eventVariables.add(new StoredVariable("%victim_block_world%",location.getWorld().getName())); - eventVariables.add(new StoredVariable("%victim_uuid%",victimUuid)); + eventVariables.add(new StoredVariable("%victim%", victimType)); + eventVariables.add(new StoredVariable("%victim_name%", victimName)); + eventVariables.add(new StoredVariable("%victim_health%", health + "")); + eventVariables.add(new StoredVariable("%victim_color_format_name%", victimNameColorFormat)); + eventVariables.add(new StoredVariable("%victim_block_x%", location.getBlockX() + "")); + eventVariables.add(new StoredVariable("%victim_block_y%", location.getBlockY() + "")); + eventVariables.add(new StoredVariable("%victim_block_z%", location.getBlockZ() + "")); + eventVariables.add(new StoredVariable("%victim_block_world%", location.getWorld().getName())); + eventVariables.add(new StoredVariable("%victim_uuid%", victimUuid)); return this; } - public ConditionEvent setCommonItemVariables(ItemStack item,String otherItemTag){ + public ConditionEvent setCommonItemVariables(ItemStack item, String otherItemTag) { String name = ""; String colorFormatName = ""; String material = ""; - String loreString = ""; - String colorFormatLoreString = ""; + StringBuilder loreString = new StringBuilder(); + StringBuilder colorFormatLoreString = new StringBuilder(); short durability = 0; int amount = 0; List<String> loreList = new ArrayList<>(); @@ -194,121 +190,125 @@ public ConditionEvent setCommonItemVariables(ItemStack item,String otherItemTag) String itemModel = ""; String metaString = ""; - if(item != null) { + if (item != null) { durability = item.getDurability(); material = item.getType().name(); amount = item.getAmount(); - if(item.hasItemMeta()) { + if (item.hasItemMeta()) { ItemMeta meta = item.getItemMeta(); MainConfigManager mainConfigManager = plugin.getConfigsManager().getMainConfigManager(); boolean itemMetaVariableEnabled = mainConfigManager.isItemMetaVariableEnabled(); boolean useMiniMessage = mainConfigManager.isUseMiniMessage(); - if(itemMetaVariableEnabled){ + if (itemMetaVariableEnabled) { metaString = meta.toString(); - }else{ + } else { metaString = "variable disabled"; } - if(meta.hasDisplayName()) { - if(useMiniMessage){ + if (meta.hasDisplayName()) { + if (useMiniMessage) { name = MiniMessageUtils.getItemNamePlain(meta); colorFormatName = MiniMessageUtils.getItemNameMiniMessage(meta); - }else{ + } else { name = ChatColor.stripColor(meta.getDisplayName()); colorFormatName = meta.getDisplayName().replace("§", "&"); } } - if(meta.hasLore()) { - if(useMiniMessage){ + if (meta.hasLore()) { + if (useMiniMessage) { GetVariablesItemLore getVariablesItemLore = MiniMessageUtils.getVariablesItemLore( - meta,loreList,colorFormatLoreList,loreString,colorFormatLoreString); + meta, loreList, colorFormatLoreList, loreString.toString(), colorFormatLoreString.toString()); loreList = getVariablesItemLore.getLoreList(); colorFormatLoreList = getVariablesItemLore.getColorFormatLoreList(); - loreString = getVariablesItemLore.getLoreString(); - colorFormatLoreString = getVariablesItemLore.getColorFormatLoreString(); - }else{ + loreString = new StringBuilder(getVariablesItemLore.getLoreString()); + colorFormatLoreString = new StringBuilder(getVariablesItemLore.getColorFormatLoreString()); + } else { List<String> lore = meta.getLore(); - for(int i=0;i<lore.size();i++) { - loreList.add(ChatColor.stripColor(lore.get(i))); - colorFormatLoreList.add(lore.get(i).replace("§", "&")); - if(i == lore.size()-1) { - loreString = loreString+ChatColor.stripColor(lore.get(i)); - colorFormatLoreString = colorFormatLoreString+lore.get(i).replace("§", "&"); - }else { - loreString = loreString+ChatColor.stripColor(lore.get(i))+" "; - colorFormatLoreString = colorFormatLoreString+lore.get(i).replace("§", "&")+" "; + if (lore != null) { + for (int i = 0; i < lore.size(); i++) { + loreList.add(ChatColor.stripColor(lore.get(i))); + colorFormatLoreList.add(lore.get(i).replace("§", "&")); + if (i == lore.size() - 1) { + loreString.append(ChatColor.stripColor(lore.get(i))); + colorFormatLoreString.append(lore.get(i).replace("§", "&")); + } else { + loreString.append(ChatColor.stripColor(lore.get(i))).append(" "); + colorFormatLoreString.append(lore.get(i).replace("§", "&")).append(" "); + } } } } } ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(OtherUtils.isNew() && meta.hasCustomModelData()){ - if(!serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_21_R3)){ + if (OtherUtils.isNew() && meta.hasCustomModelData()) { + if (!serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_21_R3)) { customModelData = meta.getCustomModelData(); } } - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_21_R3)){ - if(meta.hasItemModel()){ + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_21_R3)) { + if (meta.hasItemModel()) { NamespacedKey key = meta.getItemModel(); - itemModel = key.getNamespace()+":"+key.getKey(); + if (key != null) { + itemModel = key.getNamespace() + ":" + key.getKey(); + } } } } } //Example: %offhand:<variable>% - if(otherItemTag == null){ + if (otherItemTag == null) { otherItemTag = "%"; - }else{ - otherItemTag = "%"+otherItemTag+":"; + } else { + otherItemTag = "%" + otherItemTag + ":"; } - eventVariables.add(new StoredVariable(otherItemTag+"item%",material)); - eventVariables.add(new StoredVariable(otherItemTag+"item_name%",name)); - eventVariables.add(new StoredVariable(otherItemTag+"item_color_format_name%",colorFormatName)); - eventVariables.add(new StoredVariable(otherItemTag+"item_durability%",durability+"")); - eventVariables.add(new StoredVariable(otherItemTag+"item_amount%",amount+"")); - eventVariables.add(new StoredVariable(otherItemTag+"item_lore%",loreString)); - eventVariables.add(new StoredVariable(otherItemTag+"item_color_format_lore%",colorFormatLoreString)); - eventVariables.add(new StoredVariable(otherItemTag+"item_custom_model_data%",customModelData+"")); - eventVariables.add(new StoredVariable(otherItemTag+"item_model%",itemModel)); - eventVariables.add(new StoredVariable(otherItemTag+"item_meta%",metaString)); - for(int i=0;i<loreList.size();i++) { - eventVariables.add(new StoredVariable(otherItemTag+"item_lore_line_"+(i+1)+"%", loreList.get(i))); + eventVariables.add(new StoredVariable(otherItemTag + "item%", material)); + eventVariables.add(new StoredVariable(otherItemTag + "item_name%", name)); + eventVariables.add(new StoredVariable(otherItemTag + "item_color_format_name%", colorFormatName)); + eventVariables.add(new StoredVariable(otherItemTag + "item_durability%", durability + "")); + eventVariables.add(new StoredVariable(otherItemTag + "item_amount%", amount + "")); + eventVariables.add(new StoredVariable(otherItemTag + "item_lore%", loreString.toString())); + eventVariables.add(new StoredVariable(otherItemTag + "item_color_format_lore%", colorFormatLoreString.toString())); + eventVariables.add(new StoredVariable(otherItemTag + "item_custom_model_data%", customModelData + "")); + eventVariables.add(new StoredVariable(otherItemTag + "item_model%", itemModel)); + eventVariables.add(new StoredVariable(otherItemTag + "item_meta%", metaString)); + for (int i = 0; i < loreList.size(); i++) { + eventVariables.add(new StoredVariable(otherItemTag + "item_lore_line_" + (i + 1) + "%", loreList.get(i))); } - for(int i=0;i<colorFormatLoreList.size();i++) { - eventVariables.add(new StoredVariable(otherItemTag+"item_color_format_lore_line_"+(i+1)+"%", colorFormatLoreList.get(i))); + for (int i = 0; i < colorFormatLoreList.size(); i++) { + eventVariables.add(new StoredVariable(otherItemTag + "item_color_format_lore_line_" + (i + 1) + "%", colorFormatLoreList.get(i))); } return this; } - public ConditionEvent setCommonEntityVariables(Entity entity){ + public ConditionEvent setCommonEntityVariables(Entity entity) { String entityType = entity.getType().name(); String entityName = ""; String entityNameColorFormat = ""; String entityUuid = entity.getUniqueId().toString(); - if(entity.getCustomName() != null) { - if(plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()){ + if (entity.getCustomName() != null) { + if (plugin.getConfigsManager().getMainConfigManager().isUseMiniMessage()) { entityName = MiniMessageUtils.getEntityCustomNamePlain(entity); entityNameColorFormat = MiniMessageUtils.getEntityCustomNameMiniMessage(entity); - }else{ + } else { entityName = ChatColor.stripColor(entity.getCustomName()); entityNameColorFormat = entity.getCustomName().replace("§", "&"); } } Location location = entity.getLocation(); - eventVariables.add(new StoredVariable("%entity%",entityType)); - eventVariables.add(new StoredVariable("%entity_name%",entityName)); - eventVariables.add(new StoredVariable("%entity_color_format_name%",entityNameColorFormat)); - eventVariables.add(new StoredVariable("%entity_x%",location.getBlockX()+"")); - eventVariables.add(new StoredVariable("%entity_y%",location.getBlockY()+"")); - eventVariables.add(new StoredVariable("%entity_z%",location.getBlockZ()+"")); - eventVariables.add(new StoredVariable("%entity_world%",location.getWorld().getName())); - eventVariables.add(new StoredVariable("%entity_uuid%",entityUuid)); + eventVariables.add(new StoredVariable("%entity%", entityType)); + eventVariables.add(new StoredVariable("%entity_name%", entityName)); + eventVariables.add(new StoredVariable("%entity_color_format_name%", entityNameColorFormat)); + eventVariables.add(new StoredVariable("%entity_x%", location.getBlockX() + "")); + eventVariables.add(new StoredVariable("%entity_y%", location.getBlockY() + "")); + eventVariables.add(new StoredVariable("%entity_z%", location.getBlockZ() + "")); + eventVariables.add(new StoredVariable("%entity_world%", location.getWorld().getName())); + eventVariables.add(new StoredVariable("%entity_uuid%", entityUuid)); return this; } diff --git a/src/main/java/ce/ajneb97/model/internal/DebugSender.java b/src/main/java/ce/ajneb97/model/internal/DebugSender.java index 4391c5e..a0c7b0b 100644 --- a/src/main/java/ce/ajneb97/model/internal/DebugSender.java +++ b/src/main/java/ce/ajneb97/model/internal/DebugSender.java @@ -3,6 +3,7 @@ import org.bukkit.command.CommandSender; public class DebugSender { + private CommandSender sender; private String event; private String playerName; diff --git a/src/main/java/ce/ajneb97/model/internal/ExecutedEvent.java b/src/main/java/ce/ajneb97/model/internal/ExecutedEvent.java index 7b69631..7c6e7c1 100644 --- a/src/main/java/ce/ajneb97/model/internal/ExecutedEvent.java +++ b/src/main/java/ce/ajneb97/model/internal/ExecutedEvent.java @@ -2,10 +2,9 @@ import ce.ajneb97.ConditionalEvents; import ce.ajneb97.api.ConditionalEventsEvent; -import ce.ajneb97.managers.DebugManager; -import ce.ajneb97.managers.EventsManager; +import ce.ajneb97.manager.DebugManager; +import ce.ajneb97.manager.EventsManager; import ce.ajneb97.model.CEEvent; -import ce.ajneb97.model.EventType; import ce.ajneb97.model.StoredVariable; import ce.ajneb97.model.ToConditionGroup; import ce.ajneb97.model.actions.*; @@ -21,16 +20,17 @@ import java.util.ArrayList; import java.util.List; -// Represent an event that has accomplished all conditions and actions +// Represent an event that has achieved all conditions and actions // are being executed. +@SuppressWarnings({"ReassignedVariable", "DataFlowIssue"}) public class ExecutedEvent { - private Player player; - private LivingEntity target; - private ArrayList<StoredVariable> eventVariables; - private CEEvent event; - private Event minecraftEvent; + private final Player player; + private final LivingEntity target; + private final ArrayList<StoredVariable> eventVariables; + private final CEEvent event; + private final Event minecraftEvent; private String actionGroupName; - private ConditionalEvents plugin; + private final ConditionalEvents plugin; private boolean isPlaceholderAPI; @@ -40,7 +40,7 @@ public class ExecutedEvent { private int currentActionPos; public ExecutedEvent(Player player, ArrayList<StoredVariable> eventVariables, CEEvent event, String actionGroupName - , Event minecraftEvent, LivingEntity target, ConditionalEvents plugin) { + , Event minecraftEvent, LivingEntity target, ConditionalEvents plugin) { this.player = player; this.eventVariables = eventVariables; this.event = event; @@ -55,23 +55,23 @@ public ExecutedEvent(Player player, ArrayList<StoredVariable> eventVariables, CE private VariablesProperties generateVariableProperties() { Player playerTarget = null; - if(target instanceof Player){ - playerTarget = (Player)target; + if (target instanceof Player) { + playerTarget = (Player) target; } return new VariablesProperties( - eventVariables,player,playerTarget,isPlaceholderAPI,event,minecraftEvent + eventVariables, player, playerTarget, isPlaceholderAPI, event, minecraftEvent ); } - public boolean setActionGroup(String actionGroupName){ + public boolean setActionGroup(String actionGroupName) { //Check if parameters are present int pos = actionGroupName.indexOf("{"); - if(pos != -1){ + if (pos != -1) { VariablesProperties variablesProperties = generateVariableProperties(); - String parameters = actionGroupName.substring(pos+1, actionGroupName.length()-1); + String parameters = actionGroupName.substring(pos + 1, actionGroupName.length() - 1); String[] sep = parameters.split(";"); - for(String s : sep) { + for (String s : sep) { int eIndex = s.indexOf("="); String newVariable = s.substring(0, eIndex).trim(); String variable = s.substring(eIndex + 1).trim(); @@ -82,16 +82,16 @@ public boolean setActionGroup(String actionGroupName){ } ActionGroup actionGroup = event.getActionGroup(this.actionGroupName); - if(actionGroup == null){ + if (actionGroup == null) { return false; } - this.actions = new ArrayList<CEAction>(actionGroup.getActions()); + this.actions = new ArrayList<>(actionGroup.getActions()); return true; } - public void executeActions(){ + public void executeActions() { this.isPlaceholderAPI = plugin.getDependencyManager().isPlaceholderAPI(); - if(!setActionGroup(actionGroupName)){ + if (!setActionGroup(actionGroupName)) { return; } @@ -101,46 +101,53 @@ public void executeActions(){ //Check cancel event or prevent join, always first to prevent issues with async events. executeCancelActions(); - if(!Bukkit.isPrimaryThread()){ - new BukkitRunnable(){ - @Override - public void run() { + if (!Bukkit.isPrimaryThread()) { + if (plugin.isFolia) { + plugin.getServer().getGlobalRegionScheduler().execute(plugin, () -> { plugin.getServer().getPluginManager().callEvent(ceEvent); executeActionsFinal(); - } - }.runTask(plugin); - }else{ + }); + } else { + new BukkitRunnable() { + @Override + public void run() { + plugin.getServer().getPluginManager().callEvent(ceEvent); + executeActionsFinal(); + } + }.runTask(plugin); + } + } else { plugin.getServer().getPluginManager().callEvent(ceEvent); executeActionsFinal(); } } - public void executeCancelActions(){ - for(CEAction ceAction : actions){ - if(ceAction.getType().equals(ActionType.CANCEL_EVENT)){ - ActionUtils.cancelEvent(ceAction.getActionLine(),minecraftEvent); + public void executeCancelActions() { + for (CEAction ceAction : actions) { + if (ceAction.getType().equals(ActionType.CANCEL_EVENT)) { + ActionUtils.cancelEvent(ceAction.getActionLine(), minecraftEvent); return; - }else if(ceAction.getType().equals(ActionType.PREVENT_JOIN)){ + } else if (ceAction.getType().equals(ActionType.PREVENT_JOIN)) { String actionLine = ceAction.getActionLine(); VariablesProperties variablesProperties = generateVariableProperties(); - actionLine = VariablesUtils.replaceAllVariablesInLine(actionLine,variablesProperties,false); - ActionUtils.preventJoin(actionLine,minecraftEvent); + actionLine = VariablesUtils.replaceAllVariablesInLine(actionLine, variablesProperties, false); + ActionUtils.preventJoin(actionLine, minecraftEvent); return; } } } - public void continueWithActions(){ + public void continueWithActions() { this.onWait = false; executeActionsFinal(); } - private void executeActionsFinal(){ + private void executeActionsFinal() { DebugManager debugManager = plugin.getDebugManager(); boolean isDebugActions = plugin.getConfigsManager().getMainConfigManager().isDebugActions(); VariablesProperties variablesProperties = generateVariableProperties(); - for(int i=currentActionPos;i<actions.size();i++){ + for (int i = currentActionPos; i < actions.size(); i++) { CEAction action = actions.get(i); ActionType actionType = action.getType(); String apiType = action.getApiType(); @@ -152,102 +159,98 @@ private void executeActionsFinal(){ ActionTargeterType targeterType = targeter.getType(); String parametersLine = targeter.getParameter(); - if(parametersLine != null){ - parametersLine = VariablesUtils.replaceAllVariablesInLine(parametersLine,variablesProperties,false); + if (parametersLine != null) { + parametersLine = VariablesUtils.replaceAllVariablesInLine(parametersLine, variablesProperties, false); } - if(targeterType.equals(ActionTargeterType.TO_ALL)) { - for(Player globalPlayer : Bukkit.getOnlinePlayers()) { - executeActionsFromToTarget(variablesProperties,globalPlayer,actionLine,actionType,apiType,isDebugActions,targeter,debugManager); + if (targeterType.equals(ActionTargeterType.TO_ALL)) { + for (Player globalPlayer : Bukkit.getOnlinePlayers()) { + executeActionsFromToTarget(variablesProperties, globalPlayer, actionLine, actionType, apiType, isDebugActions, targeter, debugManager); } - }else if(targeterType.equals(ActionTargeterType.TO_TARGET)){ - executeActionsFromToTarget(variablesProperties,target,actionLine,actionType,apiType,isDebugActions,targeter,debugManager); - }else if(targeterType.equals(ActionTargeterType.TO_WORLD)){ - String world = parametersLine; - for(Player globalPlayer : Bukkit.getOnlinePlayers()) { - if(globalPlayer.getWorld().getName().equals(world)){ - executeActionsFromToTarget(variablesProperties,globalPlayer,actionLine,actionType,apiType,isDebugActions,targeter,debugManager); + } else if (targeterType.equals(ActionTargeterType.TO_TARGET)) { + executeActionsFromToTarget(variablesProperties, target, actionLine, actionType, apiType, isDebugActions, targeter, debugManager); + } else if (targeterType.equals(ActionTargeterType.TO_WORLD)) { + for (Player globalPlayer : Bukkit.getOnlinePlayers()) { + if (globalPlayer.getWorld().getName().equals(parametersLine)) { + executeActionsFromToTarget(variablesProperties, globalPlayer, actionLine, actionType, apiType, isDebugActions, targeter, debugManager); } } - }else if(targeterType.equals(ActionTargeterType.TO_PLAYER)){ - String playerName = parametersLine; - Player onlinePlayer = Bukkit.getPlayer(playerName); - if(onlinePlayer != null){ - executeActionsFromToTarget(variablesProperties,onlinePlayer,actionLine,actionType,apiType,isDebugActions,targeter,debugManager); + } else if (targeterType.equals(ActionTargeterType.TO_PLAYER)) { + Player onlinePlayer = Bukkit.getPlayer(parametersLine); + if (onlinePlayer != null) { + executeActionsFromToTarget(variablesProperties, onlinePlayer, actionLine, actionType, apiType, isDebugActions, targeter, debugManager); } - }else if(targeterType.equals(ActionTargeterType.TO_RANGE)){ + } else if (targeterType.equals(ActionTargeterType.TO_RANGE)) { String[] sep = parametersLine.split(";"); - double range = Double.valueOf(sep[0]); - boolean includePlayer = Boolean.valueOf(sep[1]); - ArrayList<Player> globalPlayers = new ArrayList<Player>(); - if(includePlayer){ + double range = Double.parseDouble(sep[0]); + boolean includePlayer = Boolean.parseBoolean(sep[1]); + ArrayList<Player> globalPlayers = new ArrayList<>(); + if (includePlayer) { globalPlayers.add(player); } - for(Entity e : player.getWorld().getNearbyEntities(player.getLocation(), range, range, range)) { - if(e instanceof Player) { + for (Entity e : player.getWorld().getNearbyEntities(player.getLocation(), range, range, range)) { + if (e instanceof Player) { Player p = (Player) e; - if(!p.getName().equals(player.getName())){ + if (!p.getName().equals(player.getName())) { globalPlayers.add(p); } } } - for(Player globalPlayer : globalPlayers){ - executeActionsFromToTarget(variablesProperties,globalPlayer,actionLine,actionType,apiType,isDebugActions,targeter,debugManager); + for (Player globalPlayer : globalPlayers) { + executeActionsFromToTarget(variablesProperties, globalPlayer, actionLine, actionType, apiType, isDebugActions, targeter, debugManager); } - }else if(targeterType.equals(ActionTargeterType.TO_CONDITION)) { - String toConditionGroup = parametersLine; - ToConditionGroup group = plugin.getConfigsManager().getMainConfigManager().getToConditionGroup(toConditionGroup); - if(group == null){ + } else if (targeterType.equals(ActionTargeterType.TO_CONDITION)) { + ToConditionGroup group = plugin.getConfigsManager().getMainConfigManager().getToConditionGroup(parametersLine); + if (group == null) { continue; } EventsManager eventsManager = plugin.getEventsManager(); - ArrayList<Player> players = new ArrayList<Player>(); - for(Player globalPlayer : Bukkit.getOnlinePlayers()) { + ArrayList<Player> players = new ArrayList<>(); + for (Player globalPlayer : Bukkit.getOnlinePlayers()) { //Check for conditions variablesProperties.setToTarget(player); boolean accomplishesConditions = eventsManager.checkToConditionAction(group.getConditions() - ,globalPlayer,isPlaceholderAPI,event,minecraftEvent); - if(accomplishesConditions){ + , globalPlayer, isPlaceholderAPI, event, minecraftEvent); + if (accomplishesConditions) { players.add(globalPlayer); } } - for(Player globalPlayer : players){ - executeActionsFromToTarget(variablesProperties,globalPlayer,actionLine,actionType,apiType,isDebugActions,targeter,debugManager); + for (Player globalPlayer : players) { + executeActionsFromToTarget(variablesProperties, globalPlayer, actionLine, actionType, apiType, isDebugActions, targeter, debugManager); } - } - else { - actionLine = VariablesUtils.replaceAllVariablesInLine(actionLine,variablesProperties,false); + } else { + actionLine = VariablesUtils.replaceAllVariablesInLine(actionLine, variablesProperties, false); //Debug if enabled - if(isDebugActions){ + if (isDebugActions) { debugManager.sendActionMessage(event.getName(), actionLine, player, actionType, targeter); } - executeAction(player,actionType,apiType,actionLine); + executeAction(player, actionType, apiType, actionLine); } - if(onWait){ - currentActionPos = i+1; + if (onWait) { + currentActionPos = i + 1; return; } } } - private void executeActionsFromToTarget(VariablesProperties variablesProperties,LivingEntity livingEntity,String actionLine,ActionType actionType, - String apiType,boolean isDebugActions,ActionTargeter targeter,DebugManager debugManager){ + private void executeActionsFromToTarget(VariablesProperties variablesProperties, LivingEntity livingEntity, String actionLine, ActionType actionType, + String apiType, boolean isDebugActions, ActionTargeter targeter, DebugManager debugManager) { //Replaces %to:<variable>% variables - if(livingEntity instanceof Player){ - variablesProperties.setToTarget((Player)livingEntity); + if (livingEntity instanceof Player) { + variablesProperties.setToTarget((Player) livingEntity); } - String toActionLine = VariablesUtils.replaceAllVariablesInLine(actionLine,variablesProperties,false); - if(isDebugActions){ + String toActionLine = VariablesUtils.replaceAllVariablesInLine(actionLine, variablesProperties, false); + if (isDebugActions) { debugManager.sendActionMessage(event.getName(), toActionLine, livingEntity, actionType, targeter); } - executeAction(livingEntity,actionType,apiType,toActionLine); + executeAction(livingEntity, actionType, apiType, toActionLine); } - private void executeAction(LivingEntity livingEntity,ActionType type,String apiType,String actionLine){ - //Non player actions - switch(type){ + private void executeAction(LivingEntity livingEntity, ActionType type, String apiType, String actionLine) { + //Non-player actions + switch (type) { case CONSOLE_MESSAGE: ActionUtils.consoleMessage(actionLine); return; @@ -255,34 +258,34 @@ private void executeAction(LivingEntity livingEntity,ActionType type,String apiT ActionUtils.consoleCommand(actionLine); return; case WAIT: - ActionUtils.wait(actionLine,this); + ActionUtils.wait(actionLine, this); return; case WAIT_TICKS: - ActionUtils.waitTicks(actionLine,this); + ActionUtils.waitTicks(actionLine, this); return; case KEEP_ITEMS: - ActionUtils.keepItems(actionLine,minecraftEvent); + ActionUtils.keepItems(actionLine, minecraftEvent); return; case CANCEL_DROP: - ActionUtils.cancelDrop(actionLine,minecraftEvent); + ActionUtils.cancelDrop(actionLine, minecraftEvent); return; case SET_DAMAGE: - ActionUtils.setDamage(actionLine,minecraftEvent); + ActionUtils.setDamage(actionLine, minecraftEvent); return; case HIDE_JOIN_MESSAGE: - ActionUtils.hideJoinMessage(actionLine,minecraftEvent); + ActionUtils.hideJoinMessage(actionLine, minecraftEvent); return; case HIDE_LEAVE_MESSAGE: - ActionUtils.hideLeaveMessage(actionLine,minecraftEvent); + ActionUtils.hideLeaveMessage(actionLine, minecraftEvent); return; case SET_DEATH_MESSAGE: - ActionUtils.setDeathMessage(actionLine,minecraftEvent); + ActionUtils.setDeathMessage(actionLine, minecraftEvent); return; case SET_EVENT_XP: - ActionUtils.setEventXp(actionLine,minecraftEvent); + ActionUtils.setEventXp(actionLine, minecraftEvent); return; case DISCORDSRV_EMBED: - ActionUtils.discordSRVEmbed(actionLine,plugin); + ActionUtils.discordSRVEmbed(actionLine, plugin); return; case DROP_ITEM: ActionUtils.dropItem(actionLine); @@ -291,7 +294,7 @@ private void executeAction(LivingEntity livingEntity,ActionType type,String apiT ActionUtils.setBlock(actionLine); return; case SET_ITEM: - ActionUtils.setItem(actionLine,minecraftEvent); + ActionUtils.setItem(actionLine, minecraftEvent); return; case SUMMON: ActionUtils.summon(actionLine); @@ -313,25 +316,25 @@ private void executeAction(LivingEntity livingEntity,ActionType type,String apiT ActionUtils.playSoundResourcePack(livingEntity, actionLine); return; case CALL_EVENT: - ActionUtils.callEvent(actionLine,livingEntity,plugin,eventVariables); + ActionUtils.callEvent(actionLine, livingEntity, plugin, eventVariables); return; case EXECUTE_ACTION_GROUP: - ActionUtils.executeActionGroup(actionLine,this,plugin); + ActionUtils.executeActionGroup(actionLine, this, plugin); return; case API: - plugin.getApiManager().executeAction(apiType,livingEntity,actionLine,minecraftEvent); + plugin.getApiManager().executeAction(apiType, livingEntity, actionLine, minecraftEvent); return; } //LivingEntity actions - if(livingEntity == null){ + if (livingEntity == null) { return; } - if(livingEntity instanceof Player){ + if (livingEntity instanceof Player) { // Just player actions - Player player = (Player)livingEntity; - switch(type) { + Player player = (Player) livingEntity; + switch (type) { case MESSAGE: ActionUtils.message(player, actionLine); return; @@ -393,12 +396,12 @@ private void executeAction(LivingEntity livingEntity,ActionType type,String apiT ActionUtils.stopSoundResourcePack(player, actionLine); return; case TAB_COMPLETE: - ActionUtils.tabComplete(actionLine,minecraftEvent); + ActionUtils.tabComplete(actionLine, minecraftEvent); } } // Rest of actions - switch(type) { + switch (type) { case TELEPORT: ActionUtils.teleport(livingEntity, actionLine, minecraftEvent); return; @@ -425,9 +428,7 @@ private void executeAction(LivingEntity livingEntity,ActionType type,String apiT return; case THROW_COORDINATE: ActionUtils.throwCoordinate(livingEntity, actionLine); - return; } - } public void setOnWait(boolean onWait) { @@ -457,6 +458,7 @@ public CEEvent getEvent() { public Event getMinecraftEvent() { return minecraftEvent; } + public List<CEAction> getActions() { return actions; } diff --git a/src/main/java/ce/ajneb97/model/internal/PostEventVariableResult.java b/src/main/java/ce/ajneb97/model/internal/PostEventVariableResult.java index 909867c..9a78e6d 100644 --- a/src/main/java/ce/ajneb97/model/internal/PostEventVariableResult.java +++ b/src/main/java/ce/ajneb97/model/internal/PostEventVariableResult.java @@ -1,6 +1,7 @@ package ce.ajneb97.model.internal; public class PostEventVariableResult { + private String variable; private boolean replaced; @@ -25,11 +26,11 @@ public void setReplaced(boolean replaced) { this.replaced = replaced; } - public static PostEventVariableResult replaced(String variable){ - return new PostEventVariableResult(variable,true); + public static PostEventVariableResult replaced(String variable) { + return new PostEventVariableResult(variable, true); } - public static PostEventVariableResult noReplaced(){ - return new PostEventVariableResult(null,false); + public static PostEventVariableResult noReplaced() { + return new PostEventVariableResult(null, false); } } diff --git a/src/main/java/ce/ajneb97/model/internal/SeparatorType.java b/src/main/java/ce/ajneb97/model/internal/SeparatorType.java index 3feafb7..5bea66b 100644 --- a/src/main/java/ce/ajneb97/model/internal/SeparatorType.java +++ b/src/main/java/ce/ajneb97/model/internal/SeparatorType.java @@ -1,7 +1,10 @@ package ce.ajneb97.model.internal; public enum SeparatorType { + AND, + OR, + NONE } diff --git a/src/main/java/ce/ajneb97/model/internal/UpdateCheckerResult.java b/src/main/java/ce/ajneb97/model/internal/UpdateCheckerResult.java index 23b195c..9dc63aa 100644 --- a/src/main/java/ce/ajneb97/model/internal/UpdateCheckerResult.java +++ b/src/main/java/ce/ajneb97/model/internal/UpdateCheckerResult.java @@ -2,10 +2,10 @@ public class UpdateCheckerResult { - private String latestVersion; - private boolean error; + private final String latestVersion; + private final boolean error; - public UpdateCheckerResult(String latestVersion, boolean error){ + public UpdateCheckerResult(String latestVersion, boolean error) { this.latestVersion = latestVersion; this.error = error; } @@ -18,11 +18,11 @@ public boolean isError() { return error; } - public static UpdateCheckerResult noErrors(String latestVersion){ - return new UpdateCheckerResult(latestVersion,false); + public static UpdateCheckerResult noErrors(String latestVersion) { + return new UpdateCheckerResult(latestVersion, false); } - public static UpdateCheckerResult error(){ - return new UpdateCheckerResult(null,true); + public static UpdateCheckerResult error() { + return new UpdateCheckerResult(null, true); } } diff --git a/src/main/java/ce/ajneb97/model/internal/VariablesProperties.java b/src/main/java/ce/ajneb97/model/internal/VariablesProperties.java index fd0241c..c237068 100644 --- a/src/main/java/ce/ajneb97/model/internal/VariablesProperties.java +++ b/src/main/java/ce/ajneb97/model/internal/VariablesProperties.java @@ -26,7 +26,6 @@ public VariablesProperties(ArrayList<StoredVariable> eventVariables, Player play this.minecraftEvent = minecraftEvent; } - public ArrayList<StoredVariable> getEventVariables() { return eventVariables; } diff --git a/src/main/java/ce/ajneb97/model/internal/WaitActionTask.java b/src/main/java/ce/ajneb97/model/internal/WaitActionTask.java index 4779bd1..d5b5337 100644 --- a/src/main/java/ce/ajneb97/model/internal/WaitActionTask.java +++ b/src/main/java/ce/ajneb97/model/internal/WaitActionTask.java @@ -1,13 +1,15 @@ package ce.ajneb97.model.internal; +import io.papermc.paper.threadedregions.scheduler.ScheduledTask; import org.bukkit.scheduler.BukkitTask; public class WaitActionTask { - private String playerName; + + private final String playerName; private String eventName; - private BukkitTask task; + private final Object task; - public WaitActionTask(String playerName, String eventName, BukkitTask task) { + public WaitActionTask(String playerName, String eventName, Object task) { this.playerName = playerName; this.eventName = eventName; this.task = task; @@ -17,10 +19,6 @@ public String getPlayerName() { return playerName; } - public void setPlayerName(String playerName) { - this.playerName = playerName; - } - public String getEventName() { return eventName; } @@ -29,11 +27,20 @@ public void setEventName(String eventName) { this.eventName = eventName; } - public BukkitTask getTask() { - return task; + public void cancel() { + if (task instanceof BukkitTask) { + ((BukkitTask) task).cancel(); + } else if (task instanceof ScheduledTask) { + ((ScheduledTask) task).cancel(); + } } - public void setTask(BukkitTask task) { - this.task = task; + public int getTaskId() { + if (task instanceof BukkitTask) { + return ((BukkitTask) task).getTaskId(); + } else if (task instanceof ScheduledTask) { + return task.hashCode(); + } + return -1; } } diff --git a/src/main/java/ce/ajneb97/model/internal/minimessage/GetVariablesItemLore.java b/src/main/java/ce/ajneb97/model/internal/minimessage/GetVariablesItemLore.java index 218a51f..df36da8 100644 --- a/src/main/java/ce/ajneb97/model/internal/minimessage/GetVariablesItemLore.java +++ b/src/main/java/ce/ajneb97/model/internal/minimessage/GetVariablesItemLore.java @@ -3,10 +3,11 @@ import java.util.List; public class GetVariablesItemLore { - private List<String> loreList; - private List<String> colorFormatLoreList; - private String loreString; - private String colorFormatLoreString; + + private final List<String> loreList; + private final List<String> colorFormatLoreList; + private final String loreString; + private final String colorFormatLoreString; public GetVariablesItemLore(List<String> loreList, List<String> colorFormatLoreList, String loreString, String colorFormatLoreString) { this.loreList = loreList; diff --git a/src/main/java/ce/ajneb97/model/player/EventData.java b/src/main/java/ce/ajneb97/model/player/EventData.java index 8cced5b..ca81540 100644 --- a/src/main/java/ce/ajneb97/model/player/EventData.java +++ b/src/main/java/ce/ajneb97/model/player/EventData.java @@ -1,11 +1,12 @@ package ce.ajneb97.model.player; public class EventData { + private String name; private long cooldown; //Represents the millis time when the event was executed private boolean oneTime; - public EventData(String name,long cooldown,boolean oneTime) { + public EventData(String name, long cooldown, boolean oneTime) { this.name = name; this.cooldown = cooldown; this.oneTime = oneTime; diff --git a/src/main/java/ce/ajneb97/model/player/PlayerData.java b/src/main/java/ce/ajneb97/model/player/PlayerData.java index 546c259..db19d21 100644 --- a/src/main/java/ce/ajneb97/model/player/PlayerData.java +++ b/src/main/java/ce/ajneb97/model/player/PlayerData.java @@ -4,6 +4,7 @@ import java.util.UUID; public class PlayerData { + private UUID uuid; private String name; private boolean modified; @@ -40,59 +41,59 @@ public void setEventData(ArrayList<EventData> eventData) { this.eventData = eventData; } - public EventData getEventData(String eventName){ - for(EventData e : eventData){ - if(e.getName().equals(eventName)){ + public EventData getEventData(String eventName) { + for (EventData e : eventData) { + if (e.getName().equals(eventName)) { return e; } } return null; } - public void resetEvent(String eventName){ + public void resetEvent(String eventName) { eventData.removeIf(c -> c.getName().equals(eventName)); modified = true; } - public void resetAll(){ + public void resetAll() { eventData.clear(); modified = true; } - public void setCooldown(String eventName,long currentMillis){ + public void setCooldown(String eventName, long currentMillis) { EventData e = getEventData(eventName); - if(e == null){ - e = new EventData(eventName,currentMillis,false); + if (e == null) { + e = new EventData(eventName, currentMillis, false); eventData.add(e); - }else{ + } else { e.setCooldown(currentMillis); } } - public long getCooldown(String eventName){ + public long getCooldown(String eventName) { EventData e = getEventData(eventName); - if(e == null){ + if (e == null) { return 0; - }else{ + } else { return e.getCooldown(); } } - public void setOneTime(String eventName,boolean oneTime){ + public void setOneTime(String eventName, boolean oneTime) { EventData e = getEventData(eventName); - if(e == null){ - e = new EventData(eventName,0,oneTime); + if (e == null) { + e = new EventData(eventName, 0, oneTime); eventData.add(e); - }else{ + } else { e.setOneTime(oneTime); } } - public boolean isEventOneTime(String eventName){ + public boolean isEventOneTime(String eventName) { EventData e = getEventData(eventName); - if(e == null){ + if (e == null) { return false; - }else{ + } else { return e.isOneTime(); } } diff --git a/src/main/java/ce/ajneb97/model/verify/CEError.java b/src/main/java/ce/ajneb97/model/verify/CEError.java index fed6921..a4532e7 100644 --- a/src/main/java/ce/ajneb97/model/verify/CEError.java +++ b/src/main/java/ce/ajneb97/model/verify/CEError.java @@ -10,24 +10,24 @@ public abstract class CEError { protected String event; protected String errorText; - public CEError(String event,String errorText){ + public CEError(String event, String errorText) { this.event = event; this.errorText = errorText; } - public List<String> getFixedErrorText(){ + public List<String> getFixedErrorText() { List<String> sepText = new ArrayList<String>(); int currentPos = 0; - for(int i=0;i<errorText.length();i++) { - if(currentPos >= 35 && errorText.charAt(i) == ' ') { - String m = errorText.substring(i-currentPos, i); + for (int i = 0; i < errorText.length(); i++) { + if (currentPos >= 35 && errorText.charAt(i) == ' ') { + String m = errorText.substring(i - currentPos, i); currentPos = 0; sepText.add(m); - }else { + } else { currentPos++; } - if(i==errorText.length()-1) { - String m = errorText.substring(i-currentPos+1, errorText.length()); + if (i == errorText.length() - 1) { + String m = errorText.substring(i - currentPos + 1); sepText.add(m); } } diff --git a/src/main/java/ce/ajneb97/model/verify/CEErrorAction.java b/src/main/java/ce/ajneb97/model/verify/CEErrorAction.java index da07b20..1f46419 100644 --- a/src/main/java/ce/ajneb97/model/verify/CEErrorAction.java +++ b/src/main/java/ce/ajneb97/model/verify/CEErrorAction.java @@ -6,10 +6,10 @@ import java.util.ArrayList; import java.util.List; -public class CEErrorAction extends CEError{ +public class CEErrorAction extends CEError { - private int actionLine; - private String actionGroup; + private final int actionLine; + private final String actionGroup; public CEErrorAction(String event, String errorText, int actionLine, String actionGroup) { super(event, errorText); @@ -20,15 +20,15 @@ public CEErrorAction(String event, String errorText, int actionLine, String acti @Override public void sendMessage(Player player) { String message = "&c⚠ "; - List<String> hover = new ArrayList<String>(); + List<String> hover = new ArrayList<>(); - JSONMessage jsonMessage = new JSONMessage(player,message+"&7Action &6"+actionLine+" &7on Action group &6" - +actionGroup+" &7on Event &6"+event+" &7is not valid."); + JSONMessage jsonMessage = new JSONMessage(player, message + "&7Action &6" + actionLine + " &7on Action group &6" + + actionGroup + " &7on Event &6" + event + " &7is not valid."); hover.add("&eTHIS IS AN ERROR!"); hover.add("&fThe action defined for this event"); hover.add("&fis probably not formatted correctly:"); - for(String m : getFixedErrorText()) { - hover.add("&c"+m); + for (String m : getFixedErrorText()) { + hover.add("&c" + m); } hover.add(" "); hover.add("&fRemember to use a valid actions from this list:"); diff --git a/src/main/java/ce/ajneb97/model/verify/CEErrorCondition.java b/src/main/java/ce/ajneb97/model/verify/CEErrorCondition.java index 5a676ab..79dd46d 100644 --- a/src/main/java/ce/ajneb97/model/verify/CEErrorCondition.java +++ b/src/main/java/ce/ajneb97/model/verify/CEErrorCondition.java @@ -6,11 +6,11 @@ import java.util.ArrayList; import java.util.List; -public class CEErrorCondition extends CEError{ +public class CEErrorCondition extends CEError { - private int conditionLine; + private final int conditionLine; - public CEErrorCondition(String event, String errorText,int conditionLine) { + public CEErrorCondition(String event, String errorText, int conditionLine) { super(event, errorText); this.conditionLine = conditionLine; } @@ -18,14 +18,14 @@ public CEErrorCondition(String event, String errorText,int conditionLine) { @Override public void sendMessage(Player player) { String message = "&e⚠ "; - List<String> hover = new ArrayList<String>(); + List<String> hover = new ArrayList<>(); - JSONMessage jsonMessage = new JSONMessage(player,message+"&7Condition &6"+conditionLine+" &7on Event &6"+event+" &7is not valid."); + JSONMessage jsonMessage = new JSONMessage(player, message + "&7Condition &6" + conditionLine + " &7on Event &6" + event + " &7is not valid."); hover.add("&eTHIS IS A WARNING!"); hover.add("&fThe condition defined for this event"); hover.add("&fis probably not formatted correctly:"); - for(String m : getFixedErrorText()) { - hover.add("&c"+m); + for (String m : getFixedErrorText()) { + hover.add("&c" + m); } hover.add(" "); hover.add("&fRemember to use a valid condition from this list:"); diff --git a/src/main/java/ce/ajneb97/model/verify/CEErrorEventType.java b/src/main/java/ce/ajneb97/model/verify/CEErrorEventType.java index 6ed91c3..9286460 100644 --- a/src/main/java/ce/ajneb97/model/verify/CEErrorEventType.java +++ b/src/main/java/ce/ajneb97/model/verify/CEErrorEventType.java @@ -6,8 +6,7 @@ import java.util.ArrayList; import java.util.List; -public class CEErrorEventType extends CEError{ - +public class CEErrorEventType extends CEError { public CEErrorEventType(String event, String errorText) { super(event, errorText); @@ -16,14 +15,14 @@ public CEErrorEventType(String event, String errorText) { @Override public void sendMessage(Player player) { String message = "&c⚠ "; - List<String> hover = new ArrayList<String>(); + List<String> hover = new ArrayList<>(); - JSONMessage jsonMessage = new JSONMessage(player,message+"&7Event &6"+event+" &7has an invalid type."); + JSONMessage jsonMessage = new JSONMessage(player, message + "&7Event &6" + event + " &7has an invalid type."); hover.add("&eTHIS IS AN ERROR!"); hover.add("&fThe type for this event is invalid, maybe"); hover.add("&fyou misspelled it?:"); - for(String m : getFixedErrorText()) { - hover.add("&c"+m); + for (String m : getFixedErrorText()) { + hover.add("&c" + m); } hover.add(" "); hover.add("&fRemember to use a valid event types from this list:"); diff --git a/src/main/java/ce/ajneb97/model/verify/CEErrorRandomVariable.java b/src/main/java/ce/ajneb97/model/verify/CEErrorRandomVariable.java index c829804..74f6fc5 100644 --- a/src/main/java/ce/ajneb97/model/verify/CEErrorRandomVariable.java +++ b/src/main/java/ce/ajneb97/model/verify/CEErrorRandomVariable.java @@ -6,8 +6,7 @@ import java.util.ArrayList; import java.util.List; -public class CEErrorRandomVariable extends CEError{ - +public class CEErrorRandomVariable extends CEError { public CEErrorRandomVariable(String event, String errorText) { super(event, errorText); @@ -16,14 +15,14 @@ public CEErrorRandomVariable(String event, String errorText) { @Override public void sendMessage(Player player) { String message = "&c⚠ "; - List<String> hover = new ArrayList<String>(); + List<String> hover = new ArrayList<>(); - JSONMessage jsonMessage = new JSONMessage(player,message+"&7Event &6"+event+" &7uses the %random_min_max% variable wrongly!"); + JSONMessage jsonMessage = new JSONMessage(player, message + "&7Event &6" + event + " &7uses the %random_min_max% variable wrongly!"); hover.add("&eTHIS IS AN ERROR!"); hover.add("&fIt seems you are not using the random number"); hover.add("&fvariable correctly:"); - for(String m : getFixedErrorText()) { - hover.add("&c"+m); + for (String m : getFixedErrorText()) { + hover.add("&c" + m); } hover.add(" "); hover.add("&fThe format of the random variable changed recently."); diff --git a/src/main/java/ce/ajneb97/tasks/PlayOneMinuteTask.java b/src/main/java/ce/ajneb97/tasks/PlayOneMinuteTask.java new file mode 100644 index 0000000..2ec6973 --- /dev/null +++ b/src/main/java/ce/ajneb97/tasks/PlayOneMinuteTask.java @@ -0,0 +1,74 @@ +package ce.ajneb97.tasks; + +import ce.ajneb97.ConditionalEvents; +import ce.ajneb97.model.EventType; +import ce.ajneb97.model.StoredVariable; +import ce.ajneb97.model.internal.ConditionEvent; +import io.papermc.paper.threadedregions.scheduler.ScheduledTask; +import org.bukkit.Bukkit; +import org.bukkit.Statistic; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitTask; + +import java.util.concurrent.TimeUnit; + +public class PlayOneMinuteTask { + + private final ConditionalEvents plugin; + private final boolean isFolia; + private Runnable cancel; + + public PlayOneMinuteTask(ConditionalEvents plugin) { + this.plugin = plugin; + this.isFolia = plugin.isFolia; + } + + public void start() { + Runnable runnable = this::execute; + + if (isFolia) { + ScheduledTask task = plugin.getServer().getAsyncScheduler().runAtFixedRate( + plugin, + t -> runnable.run(), + 1, + 1, + TimeUnit.MINUTES + ); + cancel = task::cancel; + } else { + BukkitTask task = plugin.getServer().getScheduler().runTaskTimerAsynchronously( + plugin, + runnable, + 1200L, + 1200L + ); + cancel = task::cancel; + } + } + + public void stop() { + if (cancel != null) { + cancel.run(); + } + } + + private void execute() { + Bukkit.getOnlinePlayers().forEach(this::execute); + } + + private void execute(Player player) { + ConditionEvent conditionEvent = new ConditionEvent(this.plugin, player, null, EventType.PLAYER_STATISTIC, null); + if (conditionEvent.containsValidEvents()) { + this.addVariables(conditionEvent, player); + conditionEvent.checkEvent(); + } + } + + private void addVariables(ConditionEvent conditionEvent, Player player) { + conditionEvent.addVariables( + new StoredVariable("%statistic_name%", "PLAY_ONE_MINUTE"), + new StoredVariable("%previous_value%", String.valueOf(player.getStatistic(Statistic.PLAY_ONE_MINUTE) - 1)), + new StoredVariable("%new_value%", String.valueOf(player.getStatistic(Statistic.PLAY_ONE_MINUTE))) + ); + } +} \ No newline at end of file diff --git a/src/main/java/ce/ajneb97/tasks/PlayerDataSaveTask.java b/src/main/java/ce/ajneb97/tasks/PlayerDataSaveTask.java index 8b20275..fa46b4f 100644 --- a/src/main/java/ce/ajneb97/tasks/PlayerDataSaveTask.java +++ b/src/main/java/ce/ajneb97/tasks/PlayerDataSaveTask.java @@ -1,38 +1,54 @@ package ce.ajneb97.tasks; import ce.ajneb97.ConditionalEvents; -import org.bukkit.scheduler.BukkitRunnable; +import io.papermc.paper.threadedregions.scheduler.ScheduledTask; +import org.bukkit.scheduler.BukkitTask; + +import java.util.concurrent.TimeUnit; public class PlayerDataSaveTask { - private ConditionalEvents plugin; - private boolean end; - public PlayerDataSaveTask(ConditionalEvents plugin) { - this.plugin = plugin; - this.end = false; - } - - public void end() { - end = true; - } - - public void start(int minutes) { - long ticks = minutes*60*20; - - new BukkitRunnable() { - @Override - public void run() { - if(end) { - this.cancel(); - }else { - execute(); - } - } - - }.runTaskTimerAsynchronously(plugin, 0L, ticks); - } - - public void execute() { - plugin.getConfigsManager().getPlayerConfigsManager().saveConfigs(); - } + private final ConditionalEvents plugin; + private final boolean isFolia; + private Runnable cancel; + + public PlayerDataSaveTask(ConditionalEvents plugin) { + this.plugin = plugin; + this.isFolia = plugin.isFolia; + } + + public void start(int minutes) { + long period = minutes * 60L * 20L; + + Runnable runnable = this::execute; + + if (isFolia) { + ScheduledTask task = plugin.getServer().getAsyncScheduler().runAtFixedRate( + plugin, + t -> runnable.run(), + minutes, + minutes, + TimeUnit.MINUTES + ); + cancel = task::cancel; + } else { + BukkitTask task = plugin.getServer().getScheduler().runTaskTimerAsynchronously( + plugin, + runnable, + period, + period + ); + cancel = task::cancel; + } + } + + public void stop() { + if (cancel != null) { + cancel.run(); + } + } + + private void execute() { + plugin.getPlayerDataManager().saveAllData(); + } } diff --git a/src/main/java/ce/ajneb97/utils/ActionUtils.java b/src/main/java/ce/ajneb97/utils/ActionUtils.java index 142a447..6fd3132 100644 --- a/src/main/java/ce/ajneb97/utils/ActionUtils.java +++ b/src/main/java/ce/ajneb97/utils/ActionUtils.java @@ -5,9 +5,9 @@ import ce.ajneb97.api.ConditionalEventsCallEvent; import ce.ajneb97.libs.actionbar.ActionBarAPI; import ce.ajneb97.libs.titles.TitleAPI; -import ce.ajneb97.managers.InterruptEventManager; -import ce.ajneb97.managers.MessagesManager; -import ce.ajneb97.managers.dependencies.DiscordSRVManager; +import ce.ajneb97.manager.InterruptEventManager; +import ce.ajneb97.manager.MessagesManager; +import ce.ajneb97.manager.dependencies.DiscordSRVManager; import ce.ajneb97.model.StoredVariable; import ce.ajneb97.model.internal.ExecutedEvent; import net.md_5.bungee.api.chat.BaseComponent; @@ -41,78 +41,84 @@ import java.util.*; import java.util.stream.Collectors; +@SuppressWarnings({"deprecation", "DataFlowIssue"}) public class ActionUtils { - public static void message(Player player,String actionLine){ - if(ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { - MiniMessageUtils.message(player,actionLine); - }else{ + public static void message(Player player, String actionLine) { + if (ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + MiniMessageUtils.message(player, actionLine); + } else { player.sendMessage(MessagesManager.getLegacyColoredMessage(actionLine)); } } - public static void centeredMessage(Player player,String actionLine){ - if(ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()){ - MiniMessageUtils.centeredMessage(player,actionLine); - }else{ + public static void centeredMessage(Player player, String actionLine) { + if (ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + MiniMessageUtils.centeredMessage(player, actionLine); + } else { actionLine = MessagesManager.getLegacyColoredMessage(actionLine); player.sendMessage(MessagesManager.getCenteredMessage(actionLine)); } } - public static void consoleMessage(String actionLine){ - if(ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + public static void consoleMessage(String actionLine) { + if (ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { MiniMessageUtils.consoleMessage(actionLine); - }else{ + } else { Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage(actionLine)); } } - public static void jsonMessage(Player player,String actionLine){ + public static void jsonMessage(Player player, String actionLine) { BaseComponent[] base = ComponentSerializer.parse(actionLine); player.spigot().sendMessage(base); } - public static void miniMessage(Player player,String actionLine,ConditionalEvents plugin){ + public static void miniMessage(Player player, String actionLine, ConditionalEvents plugin) { ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(plugin.getDependencyManager().isPaper() && serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_19_R3)) { + if (plugin.getDependencyManager().isPaper() && serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_19_R3)) { player.sendRichMessage(actionLine); } } - public static void consoleCommand(String actionLine){ + public static void consoleCommand(String actionLine) { ConsoleCommandSender sender = Bukkit.getConsoleSender(); - Bukkit.dispatchCommand(sender, actionLine); + + if (ConditionalEventsAPI.getPlugin().isFolia) { + Bukkit.getGlobalRegionScheduler().run(ConditionalEventsAPI.getPlugin(), task -> Bukkit.dispatchCommand(sender, actionLine)); + } else { + Bukkit.dispatchCommand(sender, actionLine); + } } - public static void playerCommand(Player player,String actionLine){ + public static void playerCommand(Player player, String actionLine) { player.performCommand(actionLine); } - public static void playerCommandAsOp(Player player,String actionLine){ + public static void playerCommandAsOp(Player player, String actionLine) { boolean isOp = player.isOp(); player.setOp(true); - try{ + try { player.performCommand(actionLine); - }catch(Exception e){ + } catch (Exception e) { e.printStackTrace(); } player.setOp(isOp); } - public static void playerSendChat(Player player,String actionLine){ - if(ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { - MiniMessageUtils.playerSendChat(player,actionLine); - }else{ + public static void playerSendChat(Player player, String actionLine) { + if (ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + MiniMessageUtils.playerSendChat(player, actionLine); + } else { player.chat(MessagesManager.getLegacyColoredMessage(actionLine)); } } - public static void sendToServer(Player player,String actionLine,ConditionalEvents plugin){ - plugin.getBungeeMessagingManager().sendToServer(player,actionLine); + public static void sendToServer(Player player, String actionLine, ConditionalEvents plugin) { + plugin.getBungeeMessagingManager().sendToServer(player, actionLine); } - public static void teleport(LivingEntity livingEntity, String actionLine, Event minecraftEvent){ + public static void teleport(LivingEntity livingEntity, String actionLine, Event minecraftEvent) { String[] sep = actionLine.split(";"); World world = Bukkit.getWorld(sep[0]); double x = Double.parseDouble(sep[1]); @@ -120,105 +126,110 @@ public static void teleport(LivingEntity livingEntity, String actionLine, Event double z = Double.parseDouble(sep[3]); float yaw = Float.parseFloat(sep[4]); float pitch = Float.parseFloat(sep[5]); - Location l = new Location(world,x,y,z,yaw,pitch); + Location l = new Location(world, x, y, z, yaw, pitch); - if(minecraftEvent instanceof PlayerRespawnEvent) { + if (minecraftEvent instanceof PlayerRespawnEvent) { PlayerRespawnEvent respawnEvent = (PlayerRespawnEvent) minecraftEvent; respawnEvent.setRespawnLocation(l); - }else { - livingEntity.teleport(l); + } else { + if (ConditionalEventsAPI.getPlugin().isFolia) { + livingEntity.teleportAsync(l); + } else { + livingEntity.teleport(l); + } } } - public static void removeItemSlot(Player player,String actionLine){ + public static void removeItemSlot(Player player, String actionLine) { // remove_item_slot: <slot>;<amount> // slot: HAND,OFF_HAND,CHEST,FEET,HEAD,LEGS String[] sep = actionLine.split(";"); String slot = sep[0]; int amount = Integer.parseInt(sep[1]); - ItemStack item = PlayerUtils.getItemBySlot(player,slot); - if(item != null){ - int newAmount = item.getAmount()-amount; - if(newAmount <= 0){ + ItemStack item = PlayerUtils.getItemBySlot(player, slot); + if (item != null) { + int newAmount = item.getAmount() - amount; + if (newAmount <= 0) { PlayerUtils.setItemBySlot(player, slot, null); - }else{ + } else { item.setAmount(newAmount); } PlayerUtils.updatePlayerInventory(player); } } - public static void removeItem(Player player,String actionLine){ + + public static void removeItem(Player player, String actionLine) { // remove_item: <id>;<amount>;datavalue: <datavalue>;name: <name>;lorecontains: <lore_line> // remove_item: %checkitem_remove...% - if(actionLine.equals("no") || actionLine.equals("yes")) { + if (actionLine.equals("no") || actionLine.equals("yes")) { //Variable already replaced and executed. return; } String[] sep = actionLine.split(";"); String material = sep[0]; - int amount = Integer.valueOf(sep[1]); + int amount = Integer.parseInt(sep[1]); short datavalue = 0; String name = null; String loreContainsLoreLine = null; - for(String sepLine : sep) { - if(sepLine.startsWith("datavalue: ")) { - datavalue = Short.valueOf(sepLine.replace("datavalue: ", "")); - }else if(sepLine.startsWith("name: ")) { + for (String sepLine : sep) { + if (sepLine.startsWith("datavalue: ")) { + datavalue = Short.parseShort(sepLine.replace("datavalue: ", "")); + } else if (sepLine.startsWith("name: ")) { name = sepLine.replace("name: ", ""); - }else if(sepLine.startsWith("lorecontains: ")) { + } else if (sepLine.startsWith("lorecontains: ")) { loreContainsLoreLine = sepLine.replace("lorecontains: ", ""); } } ItemStack[] contents = player.getInventory().getContents(); - for(int i=0;i<contents.length;i++) { - if(contents[i] != null && !contents[i].getType().equals(Material.AIR)) { - if(!contents[i].getType().name().equals(material)) { + for (int i = 0; i < contents.length; i++) { + if (contents[i] != null && !contents[i].getType().equals(Material.AIR)) { + if (!contents[i].getType().name().equals(material)) { continue; } - if(contents[i].getDurability() != datavalue) { + if (contents[i].getDurability() != datavalue) { continue; } - if(contents[i].hasItemMeta()) { + if (contents[i].hasItemMeta()) { ItemMeta meta = contents[i].getItemMeta(); - if(meta.hasDisplayName() && name != null - && !ChatColor.stripColor(meta.getDisplayName()).equals(ChatColor.stripColor(name))) { + if (meta.hasDisplayName() && name != null + && !ChatColor.stripColor(meta.getDisplayName()).equals(ChatColor.stripColor(name))) { continue; } - if(meta.hasLore()) { - if(loreContainsLoreLine != null) { + if (meta.hasLore()) { + if (loreContainsLoreLine != null) { List<String> lore = meta.getLore(); boolean contains = false; - for(String linea : lore) { - if(ChatColor.stripColor(linea).contains(loreContainsLoreLine)) { + for (String linea : lore) { + if (ChatColor.stripColor(linea).contains(loreContainsLoreLine)) { contains = true; break; } } - if(!contains) { + if (!contains) { continue; } } } - }else { - if(name != null || loreContainsLoreLine != null) { + } else { + if (name != null || loreContainsLoreLine != null) { continue; } } int currentAmount = contents[i].getAmount(); - if(currentAmount > amount) { - contents[i].setAmount(currentAmount-amount); + if (currentAmount > amount) { + contents[i].setAmount(currentAmount - amount); break; - }else { - amount = amount-currentAmount; - if(!OtherUtils.isLegacy()) { + } else { + amount = amount - currentAmount; + if (!OtherUtils.isLegacy()) { contents[i].setAmount(0); - }else { + } else { player.getInventory().setItem(i, null); } } @@ -226,75 +237,75 @@ public static void removeItem(Player player,String actionLine){ } } - public static void givePotionEffect(LivingEntity livingEntity,String actionLine){ + public static void givePotionEffect(LivingEntity livingEntity, String actionLine) { String[] sep = actionLine.split(";"); PotionEffectType potionEffectType = PotionEffectType.getByName(sep[0]); int duration = Integer.parseInt(sep[1]); - int level = Integer.parseInt(sep[2])-1; + int level = Integer.parseInt(sep[2]) - 1; boolean showParticles = true; boolean icon = false; - if(sep.length >= 4) { + if (sep.length >= 4) { showParticles = Boolean.parseBoolean(sep[3]); } - if(sep.length >= 5) { + if (sep.length >= 5) { icon = Boolean.parseBoolean(sep[4]); } ServerVersion serverVersion = ConditionalEvents.serverVersion; PotionEffect effect; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_13_R1)) { - effect = new PotionEffect(potionEffectType,duration,level,false,showParticles,icon); - }else{ - effect = new PotionEffect(potionEffectType,duration,level,false,showParticles); + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_13_R1)) { + effect = new PotionEffect(potionEffectType, duration, level, false, showParticles, icon); + } else { + effect = new PotionEffect(potionEffectType, duration, level, false, showParticles); } livingEntity.addPotionEffect(effect); } - public static void removePotionEffect(LivingEntity livingEntity,String actionLine){ - if(actionLine.equals("all")){ - for(PotionEffect effect : livingEntity.getActivePotionEffects()){ + public static void removePotionEffect(LivingEntity livingEntity, String actionLine) { + if (actionLine.equals("all")) { + for (PotionEffect effect : livingEntity.getActivePotionEffects()) { livingEntity.removePotionEffect(effect.getType()); } - }else{ + } else { PotionEffectType potionEffectType = PotionEffectType.getByName(actionLine); livingEntity.removePotionEffect(potionEffectType); } } - public static void cancelEvent(String actionLine,Event minecraftEvent){ + public static void cancelEvent(String actionLine, Event minecraftEvent) { boolean cancel = Boolean.parseBoolean(actionLine); - if(minecraftEvent != null && minecraftEvent instanceof Cancellable) { + if (minecraftEvent instanceof Cancellable) { Cancellable cancellableEvent = (Cancellable) minecraftEvent; cancellableEvent.setCancelled(cancel); } } - public static void kick(Player player,String actionLine){ - if(ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { - MiniMessageUtils.kick(player,actionLine); - }else{ + public static void kick(Player player, String actionLine) { + if (ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + MiniMessageUtils.kick(player, actionLine); + } else { player.kickPlayer(MessagesManager.getLegacyColoredMessage(actionLine)); } } - public static void playSound(LivingEntity livingEntity,String actionLine){ + public static void playSound(LivingEntity livingEntity, String actionLine) { // playsound: sound;volume;pitch;(optional)<x>,<y>,<z>,<world> String[] sep = actionLine.split(";"); - Sound sound = null; - float volume = 0; - float pitch = 0; + Sound sound; + float volume; + float pitch; try { sound = getSoundByName(sep[0]); volume = Float.parseFloat(sep[1]); pitch = Float.parseFloat(sep[2]); - }catch(Exception e ) { - Bukkit.getConsoleSender().sendMessage(ConditionalEvents.prefix+ - MessagesManager.getLegacyColoredMessage(" &7Sound Name: &c"+sep[0]+" &7is not valid. Change it in the config!")); + } catch (Exception e) { + Bukkit.getConsoleSender().sendMessage(ConditionalEvents.prefix + + MessagesManager.getLegacyColoredMessage(" &7Sound Name: &c" + sep[0] + " &7is not valid. Change it in the config!")); return; } Location location = null; - if(sep.length >= 4){ + if (sep.length >= 4) { String[] locParameters = sep[3].split(","); location = new Location( Bukkit.getWorld(locParameters[3]), @@ -304,17 +315,17 @@ public static void playSound(LivingEntity livingEntity,String actionLine){ ); } - if(location != null){ - location.getWorld().playSound(location,sound,volume,pitch); - }else{ - if(livingEntity instanceof Player){ - Player player = (Player)livingEntity; + if (location != null) { + location.getWorld().playSound(location, sound, volume, pitch); + } else { + if (livingEntity instanceof Player) { + Player player = (Player) livingEntity; player.playSound(player.getLocation(), sound, volume, pitch); } } } - public static void playSoundResourcePack(LivingEntity livingEntity,String actionLine){ + public static void playSoundResourcePack(LivingEntity livingEntity, String actionLine) { // playsound_resource_pack: sound;volume;pitch;(optional)<x>,<y>,<z>,<world> String[] sep = actionLine.split(";"); String sound = sep[0]; @@ -322,7 +333,7 @@ public static void playSoundResourcePack(LivingEntity livingEntity,String action float pitch = Float.parseFloat(sep[2]); Location location = null; - if(sep.length >= 4){ + if (sep.length >= 4) { String[] locParameters = sep[3].split(","); location = new Location( Bukkit.getWorld(locParameters[3]), @@ -332,32 +343,32 @@ public static void playSoundResourcePack(LivingEntity livingEntity,String action ); } - if(location != null){ - location.getWorld().playSound(location,sound,volume,pitch); - }else{ - if(livingEntity instanceof Player){ - Player player = (Player)livingEntity; + if (location != null) { + location.getWorld().playSound(location, sound, volume, pitch); + } else { + if (livingEntity instanceof Player) { + Player player = (Player) livingEntity; player.playSound(player.getLocation(), sound, volume, pitch); } } } - public static void stopSound(Player player,String actionLine){ + public static void stopSound(Player player, String actionLine) { // stopsound: sound/all ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_10_R1)) { - Sound sound = null; - if(actionLine.equals("all")){ - if(!serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_17_R1)){ + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_10_R1)) { + Sound sound; + if (actionLine.equals("all")) { + if (!serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_17_R1)) { return; } player.stopAllSounds(); - }else{ + } else { try { sound = getSoundByName(actionLine); - }catch(Exception e ) { - Bukkit.getConsoleSender().sendMessage(ConditionalEvents.prefix+ - MessagesManager.getLegacyColoredMessage(" &7Sound Name: &c"+actionLine+" &7is not valid. Change it in the config!")); + } catch (Exception e) { + Bukkit.getConsoleSender().sendMessage(ConditionalEvents.prefix + + MessagesManager.getLegacyColoredMessage(" &7Sound Name: &c" + actionLine + " &7is not valid. Change it in the config!")); return; } player.stopSound(sound); @@ -366,25 +377,26 @@ public static void stopSound(Player player,String actionLine){ } } - public static void stopSoundResourcePack(Player player,String actionLine){ + public static void stopSoundResourcePack(Player player, String actionLine) { // stopsound_resource_pack: sound ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_10_R1)) { + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_10_R1)) { player.stopSound(actionLine); } } - private static Sound getSoundByName(String name){ + private static Sound getSoundByName(String name) { try { Class<?> soundTypeClass = Class.forName("org.bukkit.Sound"); Method valueOf = soundTypeClass.getMethod("valueOf", String.class); - return (Sound) valueOf.invoke(null,name); - } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException e) { + return (Sound) valueOf.invoke(null, name); + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | + ClassNotFoundException e) { throw new RuntimeException(e); } } - public static void giveItem(Player player,String actionLine){ + public static void giveItem(Player player, String actionLine) { // give_item: id:<id>;amount:<amount>;durability:<durability>;custom_model_data:<data>;name:<name>; // lore:<lore_line1>|<lore_lineN>;enchants:<name1>-<level1>|<nameN>-<levelN>; // flags:<flag1>|<flag2> @@ -392,37 +404,37 @@ public static void giveItem(Player player,String actionLine){ // give_item: saved_item:<name> - String[] sep = actionLine.replace("give_item: ","").split(";"); - ItemStack item = ItemUtils.getItemFromProperties(sep,player); + String[] sep = actionLine.replace("give_item: ", "").split(";"); + ItemStack item = ItemUtils.getItemFromProperties(sep, player); String slot = null; boolean replace = true; - for(String property : sep) { - if(property.startsWith("slot:")){ + for (String property : sep) { + if (property.startsWith("slot:")) { slot = property.replace("slot:", ""); - }else if(property.startsWith("slot_replace:")){ - replace = Boolean.parseBoolean(property.replace("slot_replace:","")); + } else if (property.startsWith("slot_replace:")) { + replace = Boolean.parseBoolean(property.replace("slot_replace:", "")); } } - if(slot != null){ - ItemStack itemSlot = PlayerUtils.getItemBySlot(player,slot); - if(replace){ - PlayerUtils.setItemBySlot(player,slot,item); - }else{ - if(itemSlot == null || itemSlot.getType().equals(Material.AIR)){ + if (slot != null) { + ItemStack itemSlot = PlayerUtils.getItemBySlot(player, slot); + if (replace) { + PlayerUtils.setItemBySlot(player, slot, item); + } else { + if (itemSlot == null || itemSlot.getType().equals(Material.AIR)) { // If empty, set - PlayerUtils.setItemBySlot(player,slot,item); - }else if(itemSlot != null && itemSlot.isSimilar(item)){ - // If same item, increase - int newAmount = itemSlot.getAmount()+1; - if(newAmount <= itemSlot.getType().getMaxStackSize()){ + PlayerUtils.setItemBySlot(player, slot, item); + } else if (itemSlot.isSimilar(item)) { + // If the same item, increase + int newAmount = itemSlot.getAmount() + 1; + if (newAmount <= itemSlot.getType().getMaxStackSize()) { itemSlot.setAmount(newAmount); } } } PlayerUtils.updatePlayerInventory(player); - }else{ + } else { player.getInventory().addItem(item); } } @@ -430,13 +442,13 @@ public static void giveItem(Player player,String actionLine){ public static void dropItem(String actionLine) { // drop_item: location:<x>,<y>,<z>,<world>;id:<id>;amount:<amount>;... - String[] sep = actionLine.replace("drop_item: ","").split(";"); - ItemStack item = ItemUtils.getItemFromProperties(sep,null); + String[] sep = actionLine.replace("drop_item: ", "").split(";"); + ItemStack item = ItemUtils.getItemFromProperties(sep, null); Location location = null; // Find location - for(String property : sep){ - if(property.startsWith("location:")){ + for (String property : sep) { + if (property.startsWith("location:")) { String[] locationSplit = property.replace("location:", "").split(","); location = new Location( Bukkit.getWorld(locationSplit[3]), @@ -449,34 +461,34 @@ public static void dropItem(String actionLine) { } //Drop Item - if(location != null){ - location.getWorld().dropItemNaturally(location,item); + if (location != null) { + location.getWorld().dropItemNaturally(location, item); } } - public static void setItem(String actionLine,Event minecraftEvent){ - String[] sep = actionLine.replace("set_item: ","").split(";"); - if(minecraftEvent instanceof PlayerFishEvent){ + public static void setItem(String actionLine, Event minecraftEvent) { + String[] sep = actionLine.replace("set_item: ", "").split(";"); + if (minecraftEvent instanceof PlayerFishEvent) { PlayerFishEvent event = (PlayerFishEvent) minecraftEvent; Entity caught = event.getCaught(); - if(caught != null && caught instanceof Item){ + if (caught instanceof Item) { Item item = (Item) caught; - item.setItemStack(ItemUtils.getItemFromProperties(sep,null)); + item.setItemStack(ItemUtils.getItemFromProperties(sep, null)); } } } - public static void tabComplete(String actionLine,Event minecraftEvent){ + public static void tabComplete(String actionLine, Event minecraftEvent) { // tab_complete: <mode>;<element1>,<element2>,<elementN> - String[] sep = actionLine.replace("tab_complete: ","").split(";"); + String[] sep = actionLine.replace("tab_complete: ", "").split(";"); String mode = sep[0]; List<String> completions = new ArrayList<>(); - if(sep.length > 1){ + if (sep.length > 1) { completions = Arrays.asList(sep[1].split(",")); } - if(minecraftEvent instanceof TabCompleteEvent) { + if (minecraftEvent instanceof TabCompleteEvent) { TabCompleteEvent event = (TabCompleteEvent) minecraftEvent; if (mode.equalsIgnoreCase("remove")) { event.getCompletions().removeAll(completions); @@ -491,17 +503,17 @@ public static void tabComplete(String actionLine,Event minecraftEvent){ } } - public static void setBlock(String actionLine){ + public static void setBlock(String actionLine) { // set_block: location:<x>,<y>,<z>,<world>;id:<id> - String[] sep = actionLine.replace("set_block: ","").split(";"); + String[] sep = actionLine.replace("set_block: ", "").split(";"); Location location = null; Material material = Material.AIR; String blockData = null; String skullTexture = null; String skullOwner = null; - for(String property : sep){ - if(property.startsWith("location:")){ + for (String property : sep) { + if (property.startsWith("location:")) { String[] locationSplit = property.replace("location:", "").split(","); location = new Location( Bukkit.getWorld(locationSplit[3]), @@ -509,25 +521,25 @@ public static void setBlock(String actionLine){ Double.parseDouble(locationSplit[1]), Double.parseDouble(locationSplit[2]) ); - }else if(property.startsWith("id:")){ - material = Material.valueOf(property.replace("id:","")); - }else if(property.startsWith("block_data:")){ - blockData = property.replace("block_data:",""); - }else if(property.startsWith("skull_texture:")) { + } else if (property.startsWith("id:")) { + material = Material.valueOf(property.replace("id:", "")); + } else if (property.startsWith("block_data:")) { + blockData = property.replace("block_data:", ""); + } else if (property.startsWith("skull_texture:")) { skullTexture = property.replace("skull_texture:", ""); - }else if(property.startsWith("skull_owner:")) { + } else if (property.startsWith("skull_owner:")) { skullOwner = property.replace("skull_owner:", ""); } } - if(location != null){ + if (location != null) { Block block = location.getWorld().getBlockAt(location); block.setType(material); - if(blockData != null){ - block.setBlockData(BlockUtils.getBlockDataFromString(blockData,material)); + if (blockData != null) { + block.setBlockData(BlockUtils.getBlockDataFromString(blockData, material)); } - if(skullTexture != null || skullOwner != null){ - BlockUtils.setHeadTextureData(block,skullTexture,skullOwner); + if (skullTexture != null || skullOwner != null) { + BlockUtils.setHeadTextureData(block, skullTexture, skullOwner); } } } @@ -539,7 +551,7 @@ public static void lightningStrike(String actionLine) { double x = Double.parseDouble(sep[1]); double y = Double.parseDouble(sep[2]); double z = Double.parseDouble(sep[3]); - Location l = new Location(world,x,y,z); + Location l = new Location(world, x, y, z); l.getWorld().strikeLightningEffect(l); } @@ -550,10 +562,10 @@ public static void summon(String actionLine) { // health:<value> // scale:<value> // equipment:<helmet>,<chestplate>,<leggings>,<boots> (material or 'none') - // amount:<amount> + // amount: <amount> // hand_equipment:<mainhand>,<offhand> - String[] sep = actionLine.replace("summon: ","").split(";"); + String[] sep = actionLine.replace("summon: ", "").split(";"); Location location = null; EntityType type = null; @@ -564,8 +576,8 @@ public static void summon(String actionLine) { String handEquipmentString = null; int amount = 1; - for(String property : sep){ - if(property.startsWith("location:")){ + for (String property : sep) { + if (property.startsWith("location:")) { String[] locationSplit = property.replace("location:", "").split(","); location = new Location( Bukkit.getWorld(locationSplit[3]), @@ -573,73 +585,73 @@ public static void summon(String actionLine) { Double.parseDouble(locationSplit[1]), Double.parseDouble(locationSplit[2]) ); - }else if(property.startsWith("entity:")){ - type = EntityType.valueOf(property.replace("entity:","")); - }else if(property.startsWith("custom_name:")){ - customName = property.replace("custom_name:",""); - }else if(property.startsWith("health:")){ - health = Double.parseDouble(property.replace("health:","")); - }else if(property.startsWith("scale:")){ - scale = Double.parseDouble(property.replace("scale:","")); - }else if(property.startsWith("equipment:")){ - equipmentString = property.replace("equipment:",""); - }else if(property.startsWith("hand_equipment:")){ - handEquipmentString = property.replace("hand_equipment:",""); - }else if(property.startsWith("amount:")){ - amount = Integer.parseInt(property.replace("amount:","")); + } else if (property.startsWith("entity:")) { + type = EntityType.valueOf(property.replace("entity:", "")); + } else if (property.startsWith("custom_name:")) { + customName = property.replace("custom_name:", ""); + } else if (property.startsWith("health:")) { + health = Double.parseDouble(property.replace("health:", "")); + } else if (property.startsWith("scale:")) { + scale = Double.parseDouble(property.replace("scale:", "")); + } else if (property.startsWith("equipment:")) { + equipmentString = property.replace("equipment:", ""); + } else if (property.startsWith("hand_equipment:")) { + handEquipmentString = property.replace("hand_equipment:", ""); + } else if (property.startsWith("amount:")) { + amount = Integer.parseInt(property.replace("amount:", "")); } } boolean isMiniMessage = ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage(); - if(location != null){ - for(int i=0;i<amount;i++){ - Entity entity = location.getWorld().spawnEntity(location,type); - if(customName != null){ + if (location != null) { + for (int i = 0; i < amount; i++) { + Entity entity = location.getWorld().spawnEntity(location, type); + if (customName != null) { entity.setCustomNameVisible(true); - if(isMiniMessage){ - MiniMessageUtils.setEntityCustomName(entity,customName); - }else{ + if (isMiniMessage) { + MiniMessageUtils.setEntityCustomName(entity, customName); + } else { entity.setCustomName(MessagesManager.getLegacyColoredMessage(customName)); } } - if(entity instanceof LivingEntity){ + if (entity instanceof LivingEntity) { LivingEntity livingEntity = (LivingEntity) entity; - if(health != 0){ + if (health != 0) { livingEntity.setMaxHealth(health); livingEntity.setHealth(health); } - if(scale != 0){ + if (scale != 0) { livingEntity.getAttribute(Attribute.SCALE).setBaseValue(scale); } EntityEquipment equipment = livingEntity.getEquipment(); - if(equipmentString != null){ + if (equipmentString != null) { String[] equipmentSplit = equipmentString.split(","); //Helmet - equipment.setHelmet(!equipmentSplit[0].equals("none") ? ItemUtils.createItemFromString(equipmentSplit[0],null) : null); + equipment.setHelmet(!equipmentSplit[0].equals("none") ? ItemUtils.createItemFromString(equipmentSplit[0], null) : null); equipment.setHelmetDropChance(0); //Chestplate - equipment.setChestplate(!equipmentSplit[1].equals("none") ? ItemUtils.createItemFromString(equipmentSplit[1],null) : null); + equipment.setChestplate(!equipmentSplit[1].equals("none") ? ItemUtils.createItemFromString(equipmentSplit[1], null) : null); equipment.setChestplateDropChance(0); //Leggings - equipment.setLeggings(!equipmentSplit[2].equals("none") ? ItemUtils.createItemFromString(equipmentSplit[2],null) : null); + equipment.setLeggings(!equipmentSplit[2].equals("none") ? ItemUtils.createItemFromString(equipmentSplit[2], null) : null); equipment.setLeggingsDropChance(0); //Boots - equipment.setBoots(!equipmentSplit[3].equals("none") ? ItemUtils.createItemFromString(equipmentSplit[3],null) : null); + equipment.setBoots(!equipmentSplit[3].equals("none") ? ItemUtils.createItemFromString(equipmentSplit[3], null) : null); equipment.setBootsDropChance(0); } - if(handEquipmentString != null){ + if (handEquipmentString != null) { String[] handEquipmentSplit = handEquipmentString.split(","); // Hand - equipment.setItemInMainHand(!handEquipmentSplit[0].equals("none") ? ItemUtils.createItemFromString(handEquipmentSplit[0],null) : null); + equipment.setItemInMainHand(!handEquipmentSplit[0].equals("none") ? ItemUtils.createItemFromString(handEquipmentSplit[0], null) : null); equipment.setItemInMainHandDropChance(0); // Offhand - equipment.setItemInOffHand(!handEquipmentSplit[1].equals("none") ? ItemUtils.createItemFromString(handEquipmentSplit[1],null) : null); + equipment.setItemInOffHand(!handEquipmentSplit[1].equals("none") ? ItemUtils.createItemFromString(handEquipmentSplit[1], null) : null); equipment.setItemInOffHandDropChance(0); } } @@ -648,32 +660,32 @@ public static void summon(String actionLine) { } } - public static void actionbar(Player player,String actionLine,ConditionalEvents plugin){ + public static void actionbar(Player player, String actionLine, ConditionalEvents plugin) { String[] sep = actionLine.split(";"); String text = sep[0]; - int duration = Integer.valueOf(sep[1]); - ActionBarAPI.sendActionBar(player,text,duration,plugin); + int duration = Integer.parseInt(sep[1]); + ActionBarAPI.sendActionBar(player, text, duration, plugin); } - public static void title(Player player,String actionLine){ + public static void title(Player player, String actionLine) { String[] sep = actionLine.split(";"); - int fadeIn = Integer.valueOf(sep[0]); - int stay = Integer.valueOf(sep[1]); - int fadeOut = Integer.valueOf(sep[2]); + int fadeIn = Integer.parseInt(sep[0]); + int stay = Integer.parseInt(sep[1]); + int fadeOut = Integer.parseInt(sep[2]); String title = sep[3]; String subtitle = sep[4]; - if(title.equals("none")) { + if (title.equals("none")) { title = ""; } - if(subtitle.equals("none")) { + if (subtitle.equals("none")) { subtitle = ""; } - TitleAPI.sendTitle(player,fadeIn,stay,fadeOut,title,subtitle); + TitleAPI.sendTitle(player, fadeIn, stay, fadeOut, title, subtitle); } - public static void throwDirectional(LivingEntity livingEntity,String actionLine){ + public static void throwDirectional(LivingEntity livingEntity, String actionLine) { // throw_directional: <strength> double strength = Double.parseDouble(actionLine); Vector direction = livingEntity.getLocation().getDirection().normalize(); @@ -681,7 +693,7 @@ public static void throwDirectional(LivingEntity livingEntity,String actionLine) livingEntity.setVelocity(velocity); } - public static void throwCoordinate(LivingEntity livingEntity,String actionLine){ + public static void throwCoordinate(LivingEntity livingEntity, String actionLine) { // throw_coordinate: <strength_x>;<strength_y>;<strength_z> String[] sep = actionLine.split(";"); double x = Double.parseDouble(sep[0]); @@ -691,7 +703,7 @@ public static void throwCoordinate(LivingEntity livingEntity,String actionLine){ livingEntity.setVelocity(velocity); } - public static void firework(LivingEntity livingEntity,String actionLine,ConditionalEvents plugin){ + public static void firework(LivingEntity livingEntity, String actionLine, ConditionalEvents plugin) { // firework: colors:<color1>,<color2> type:<type> fade:<color1>,<color2> power:<power> location(optional):<x>;<y>;<z>;<world> // flicker:<boolean> trail:<boolean> // shot_direction:<off_x_min>,<off_x_max>;<off_y_min>,<off_y_max>;<off_z_min>,<off_z_max>;<velocity_min>-<velocity_max> @@ -705,51 +717,51 @@ public static void firework(LivingEntity livingEntity,String actionLine,Conditio String shotDirection = null; String[] sep = actionLine.split(" "); - for(String s : sep) { - if(s.startsWith("colors:")) { + for (String s : sep) { + if (s.startsWith("colors:")) { s = s.replace("colors:", ""); String[] colorsSep = s.split(","); - for(String colorSep : colorsSep) { + for (String colorSep : colorsSep) { colors.add(OtherUtils.getFireworkColorFromName(colorSep)); } - }else if(s.startsWith("type:")) { + } else if (s.startsWith("type:")) { s = s.replace("type:", ""); type = FireworkEffect.Type.valueOf(s); - }else if(s.startsWith("fade:")) { + } else if (s.startsWith("fade:")) { s = s.replace("fade:", ""); String[] colorsSep = s.split(","); - for(String colorSep : colorsSep) { + for (String colorSep : colorsSep) { fadeColors.add(OtherUtils.getFireworkColorFromName(colorSep)); } - }else if(s.startsWith("power:")) { + } else if (s.startsWith("power:")) { s = s.replace("power:", ""); power = Integer.parseInt(s); - }else if(s.startsWith("trail:")){ + } else if (s.startsWith("trail:")) { s = s.replace("trail:", ""); hasTrail = Boolean.parseBoolean(s); - }else if(s.startsWith("flicker:")){ + } else if (s.startsWith("flicker:")) { s = s.replace("flicker:", ""); hasFlicker = Boolean.parseBoolean(s); - }else if(s.startsWith("shot_direction:")){ + } else if (s.startsWith("shot_direction:")) { s = s.replace("shot_direction:", ""); shotDirection = s; - }else if(s.startsWith("location:")) { + } else if (s.startsWith("location:")) { String[] sep2 = s.replace("location:", "").split(";"); location = new Location( - Bukkit.getWorld(sep2[3]), Double.parseDouble(sep2[0]), Double.parseDouble(sep2[1]), Double.parseDouble(sep2[2]) + Bukkit.getWorld(sep2[3]), Double.parseDouble(sep2[0]), Double.parseDouble(sep2[1]), Double.parseDouble(sep2[2]) ); } } - if(location == null){ + if (location == null) { location = livingEntity.getLocation(); } ServerVersion serverVersion = ConditionalEvents.serverVersion; - EntityType entityType = null; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_20_R4)){ + EntityType entityType; + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_20_R4)) { entityType = EntityType.FIREWORK_ROCKET; - }else{ + } else { entityType = EntityType.valueOf("FIREWORK"); } Firework firework = (Firework) location.getWorld().spawnEntity(location, entityType); @@ -767,7 +779,7 @@ public static void firework(LivingEntity livingEntity,String actionLine,Conditio firework.setFireworkMeta(fireworkMeta); // 1.15+ - if(shotDirection != null && serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_15_R1)){ + if (shotDirection != null && serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_15_R1)) { firework.setShotAtAngle(true); String[] sepDirection = shotDirection.split(";"); String[] offsetX = sepDirection[0].split(","); @@ -776,22 +788,24 @@ public static void firework(LivingEntity livingEntity,String actionLine,Conditio String[] offsetVelocity = sepDirection[3].split("-"); Vector direction = new Vector( - MathUtils.getRandomNumberFloat(Float.parseFloat(offsetX[0]),Float.parseFloat(offsetX[1])), - MathUtils.getRandomNumberFloat(Float.parseFloat(offsetY[0]),Float.parseFloat(offsetY[1])), - MathUtils.getRandomNumberFloat(Float.parseFloat(offsetZ[0]),Float.parseFloat(offsetZ[1])) + MathUtils.getRandomNumberFloat(Float.parseFloat(offsetX[0]), Float.parseFloat(offsetX[1])), + MathUtils.getRandomNumberFloat(Float.parseFloat(offsetY[0]), Float.parseFloat(offsetY[1])), + MathUtils.getRandomNumberFloat(Float.parseFloat(offsetZ[0]), Float.parseFloat(offsetZ[1])) ); - firework.setVelocity(direction.multiply(MathUtils.getRandomNumberFloat(Float.parseFloat(offsetVelocity[0]),Float.parseFloat(offsetVelocity[1])))); + firework.setVelocity(direction.multiply(MathUtils.getRandomNumberFloat(Float.parseFloat(offsetVelocity[0]), Float.parseFloat(offsetVelocity[1])))); } firework.setMetadata("conditionalevents", new FixedMetadataValue(plugin, "no_damage")); } - public static void particle(LivingEntity livingEntity,String actionLine){ + public static void particle(LivingEntity livingEntity, String actionLine) { // particle: effect:<effect_name> offset:<x>;<y>;<z> speed:<speed> amount:<amount> location(optional):<x>;<y>;<z>;<world> // force:<true/false> for_player:<true/false> String effectName = null; - double offsetX = 0;double offsetY = 0;double offsetZ = 0; + double offsetX = 0; + double offsetY = 0; + double offsetZ = 0; double speed = 0; int amount = 1; Location location = null; @@ -799,199 +813,237 @@ public static void particle(LivingEntity livingEntity,String actionLine){ boolean forPlayer = false; String[] sep = actionLine.split(" "); - for(String s : sep) { - if(s.startsWith("effect:")) { + for (String s : sep) { + if (s.startsWith("effect:")) { effectName = s.replace("effect:", ""); - }else if(s.startsWith("speed:")) { + } else if (s.startsWith("speed:")) { speed = Double.parseDouble(s.replace("speed:", "")); - }else if(s.startsWith("amount:")) { + } else if (s.startsWith("amount:")) { amount = Integer.parseInt(s.replace("amount:", "")); - }else if(s.startsWith("offset:")) { + } else if (s.startsWith("offset:")) { String[] sep2 = s.replace("offset:", "").split(";"); offsetX = Double.parseDouble(sep2[0]); offsetY = Double.parseDouble(sep2[1]); offsetZ = Double.parseDouble(sep2[2]); - }else if(s.startsWith("location:")) { + } else if (s.startsWith("location:")) { String[] sep2 = s.replace("location:", "").split(";"); location = new Location( Bukkit.getWorld(sep2[3]), Double.parseDouble(sep2[0]), Double.parseDouble(sep2[1]), Double.parseDouble(sep2[2]) ); - }else if(s.startsWith("force:")) { - force = Boolean.parseBoolean(s.replace("force:","")); - }else if(s.startsWith("for_player:")) { - forPlayer = Boolean.parseBoolean(s.replace("for_player:","")); + } else if (s.startsWith("force:")) { + force = Boolean.parseBoolean(s.replace("force:", "")); + } else if (s.startsWith("for_player:")) { + forPlayer = Boolean.parseBoolean(s.replace("for_player:", "")); } } - if(location == null){ + if (location == null) { location = livingEntity.getLocation(); } ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(!serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_9_R1)) { + if (!serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_9_R1)) { // 1.8 return; } try { - if(effectName.startsWith("REDSTONE;") || effectName.startsWith("DUST;")) { + if (effectName.startsWith("REDSTONE;") || effectName.startsWith("DUST;")) { String[] effectSeparated = effectName.split(";"); int red = Integer.parseInt(effectSeparated[1]); int green = Integer.parseInt(effectSeparated[2]); int blue = Integer.parseInt(effectSeparated[3]); - Particle.DustOptions dustOptions = new Particle.DustOptions(Color.fromRGB(red,green,blue), 1); + Particle.DustOptions dustOptions = new Particle.DustOptions(Color.fromRGB(red, green, blue), 1); - if(forPlayer && livingEntity instanceof Player){ - ((Player)livingEntity).spawnParticle( - Particle.valueOf(effectSeparated[0]),location,amount,offsetX,offsetY,offsetZ,speed,dustOptions,force); - }else{ + if (forPlayer && livingEntity instanceof Player) { + ((Player) livingEntity).spawnParticle( + Particle.valueOf(effectSeparated[0]), location, amount, offsetX, offsetY, offsetZ, speed, dustOptions, force); + } else { location.getWorld().spawnParticle( - Particle.valueOf(effectSeparated[0]),location,amount,offsetX,offsetY,offsetZ,speed,dustOptions,force); + Particle.valueOf(effectSeparated[0]), location, amount, offsetX, offsetY, offsetZ, speed, dustOptions, force); } - }else { - if(forPlayer && livingEntity instanceof Player){ - ((Player)livingEntity).spawnParticle( - Particle.valueOf(effectName),location,amount,offsetX,offsetY,offsetZ,speed,null,force); - }else{ + } else { + if (forPlayer && livingEntity instanceof Player) { + ((Player) livingEntity).spawnParticle( + Particle.valueOf(effectName), location, amount, offsetX, offsetY, offsetZ, speed, null, force); + } else { location.getWorld().spawnParticle( - Particle.valueOf(effectName),location,amount,offsetX,offsetY,offsetZ,speed,null,force); + Particle.valueOf(effectName), location, amount, offsetX, offsetY, offsetZ, speed, null, force); } } - }catch(Exception e) { - Bukkit.getConsoleSender().sendMessage(ConditionalEvents.prefix+ - MessagesManager.getLegacyColoredMessage(" &7Particle Name: &c"+effectName+" &7is not valid. Change it in the config!")); + } catch (Exception e) { + Bukkit.getConsoleSender().sendMessage(ConditionalEvents.prefix + + MessagesManager.getLegacyColoredMessage(" &7Particle Name: &c" + effectName + " &7is not valid. Change it in the config!")); } } - public static void damage(LivingEntity livingEntity,String actionLine){ + public static void damage(LivingEntity livingEntity, String actionLine) { livingEntity.damage(Double.parseDouble(actionLine)); } - public static void gamemode(Player player,String actionLine){ + public static void gamemode(Player player, String actionLine) { player.setGameMode(GameMode.valueOf(actionLine)); } - public static void closeInventory(Player player){ + public static void closeInventory(Player player) { player.closeInventory(); } - public static void clearInventory(Player player){ + public static void clearInventory(Player player) { player.getInventory().clear(); } - public static void setOnFire(LivingEntity livingEntity,String actionLine){ + public static void setOnFire(LivingEntity livingEntity, String actionLine) { // set_on_fire: <duration_on_ticks> livingEntity.setFireTicks(Integer.parseInt(actionLine)); - + } - public static void freeze(LivingEntity livingEntity,String actionLine){ + public static void freeze(LivingEntity livingEntity, String actionLine) { // freeze: <duration_on_ticks> ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_17_R1)) { + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_17_R1)) { livingEntity.setFreezeTicks(Integer.parseInt(actionLine)); } } - public static void heal(LivingEntity livingEntity,String actionLine){ + public static void heal(LivingEntity livingEntity, String actionLine) { // heal: <amount> //double maxHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); double maxHealth = livingEntity.getMaxHealth(); double currentHealth = livingEntity.getHealth(); - double newHealth = currentHealth+Double.parseDouble(actionLine); - if(newHealth >= maxHealth){ - livingEntity.setHealth(maxHealth); - }else{ - livingEntity.setHealth(newHealth); - } + double newHealth = currentHealth + Double.parseDouble(actionLine); + livingEntity.setHealth(Math.min(newHealth, maxHealth)); } - public static void setFoodLevel(Player player,String actionLine){ + public static void setFoodLevel(Player player, String actionLine) { player.setFoodLevel(Integer.parseInt(actionLine)); } - public static void wait(String actionLine, ExecutedEvent executedEvent){ + public static void wait(String actionLine, ExecutedEvent executedEvent) { executedEvent.setOnWait(true); int timeSeconds = Integer.parseInt(actionLine); InterruptEventManager interruptEventManager = ConditionalEventsAPI.getPlugin().getInterruptEventManager(); - BukkitTask task = new BukkitRunnable(){ - @Override - public void run() { - interruptEventManager.removeTaskById(this.getTaskId()); - executedEvent.continueWithActions(); + if (executedEvent.getPlugin().isFolia) { + Runnable runnable = executedEvent::continueWithActions; + io.papermc.paper.threadedregions.scheduler.ScheduledTask task; + if (executedEvent.getPlayer() != null) { + task = executedEvent.getPlayer().getScheduler().runDelayed(executedEvent.getPlugin(), (t) -> { + interruptEventManager.removeTaskById(t.hashCode()); + runnable.run(); + }, null, timeSeconds * 20L); + } else { + task = executedEvent.getPlugin().getServer().getGlobalRegionScheduler().runDelayed(executedEvent.getPlugin(), (t) -> { + interruptEventManager.removeTaskById(t.hashCode()); + runnable.run(); + }, timeSeconds * 20L); } - }.runTaskLater(executedEvent.getPlugin(), timeSeconds* 20L); + interruptEventManager.addTask( + executedEvent.getPlayer() != null ? executedEvent.getPlayer().getName() : null, + executedEvent.getEvent().getName(), + task + ); + } else { + BukkitTask task = new BukkitRunnable() { + @Override + public void run() { + interruptEventManager.removeTaskById(this.getTaskId()); + executedEvent.continueWithActions(); + } + }.runTaskLater(executedEvent.getPlugin(), timeSeconds * 20L); - interruptEventManager.addTask( - executedEvent.getPlayer() != null ? executedEvent.getPlayer().getName() : null, - executedEvent.getEvent().getName(), - task - ); + interruptEventManager.addTask( + executedEvent.getPlayer() != null ? executedEvent.getPlayer().getName() : null, + executedEvent.getEvent().getName(), + task + ); + } } - public static void waitTicks(String actionLine, ExecutedEvent executedEvent){ + public static void waitTicks(String actionLine, ExecutedEvent executedEvent) { executedEvent.setOnWait(true); long timeTicks = Long.parseLong(actionLine); InterruptEventManager interruptEventManager = ConditionalEventsAPI.getPlugin().getInterruptEventManager(); - BukkitTask task = new BukkitRunnable(){ - @Override - public void run() { - interruptEventManager.removeTaskById(this.getTaskId()); - executedEvent.continueWithActions(); + if (executedEvent.getPlugin().isFolia) { + Runnable runnable = executedEvent::continueWithActions; + io.papermc.paper.threadedregions.scheduler.ScheduledTask task; + if (executedEvent.getPlayer() != null) { + task = executedEvent.getPlayer().getScheduler().runDelayed(executedEvent.getPlugin(), (t) -> { + interruptEventManager.removeTaskById(t.hashCode()); + runnable.run(); + }, null, timeTicks); + } else { + task = executedEvent.getPlugin().getServer().getGlobalRegionScheduler().runDelayed(executedEvent.getPlugin(), (t) -> { + interruptEventManager.removeTaskById(t.hashCode()); + runnable.run(); + }, timeTicks); } - }.runTaskLater(executedEvent.getPlugin(), timeTicks); + interruptEventManager.addTask( + executedEvent.getPlayer() != null ? executedEvent.getPlayer().getName() : null, + executedEvent.getEvent().getName(), + task + ); + } else { + BukkitTask task = new BukkitRunnable() { + @Override + public void run() { + interruptEventManager.removeTaskById(this.getTaskId()); + executedEvent.continueWithActions(); + } + }.runTaskLater(executedEvent.getPlugin(), timeTicks); - interruptEventManager.addTask( - executedEvent.getPlayer() != null ? executedEvent.getPlayer().getName() : null, - executedEvent.getEvent().getName(), - task - ); + interruptEventManager.addTask( + executedEvent.getPlayer() != null ? executedEvent.getPlayer().getName() : null, + executedEvent.getEvent().getName(), + task + ); + } } - public static void keepItems(String actionLine,Event minecraftEvent){ - if(minecraftEvent instanceof PlayerDeathEvent) { + public static void keepItems(String actionLine, Event minecraftEvent) { + if (minecraftEvent instanceof PlayerDeathEvent) { PlayerDeathEvent deathEvent = (PlayerDeathEvent) minecraftEvent; - if(actionLine.equals("items") || actionLine.equals("all")) { + if (actionLine.equals("items") || actionLine.equals("all")) { deathEvent.setKeepInventory(true); deathEvent.getDrops().clear(); } - if(actionLine.equals("xp") || actionLine.equals("all")) { + if (actionLine.equals("xp") || actionLine.equals("all")) { deathEvent.setKeepLevel(true); deathEvent.setDroppedExp(0); } } } - public static void cancelDrop(String actionLine,Event minecraftEvent){ - if(minecraftEvent instanceof BlockBreakEvent) { - if(OtherUtils.isLegacy()){ + public static void cancelDrop(String actionLine, Event minecraftEvent) { + if (minecraftEvent instanceof BlockBreakEvent) { + if (OtherUtils.isLegacy()) { return; } BlockBreakEvent blockBreakEvent = (BlockBreakEvent) minecraftEvent; boolean cancel = Boolean.parseBoolean(actionLine); - if(cancel){ + if (cancel) { blockBreakEvent.setDropItems(false); } - }else if(minecraftEvent instanceof EntityDeathEvent){ + } else if (minecraftEvent instanceof EntityDeathEvent) { EntityDeathEvent entityDeathEvent = (EntityDeathEvent) minecraftEvent; boolean cancel = Boolean.parseBoolean(actionLine); - if(cancel){ + if (cancel) { entityDeathEvent.getDrops().clear(); } } } - public static void setDamage(String actionLine,Event minecraftEvent){ - if(minecraftEvent instanceof EntityDamageEvent) { + public static void setDamage(String actionLine, Event minecraftEvent) { + if (minecraftEvent instanceof EntityDamageEvent) { EntityDamageEvent damageEvent = (EntityDamageEvent) minecraftEvent; double damage = damageEvent.getDamage(); - if(actionLine.contains("%")){ - double modifier = Double.parseDouble(actionLine.substring(0,actionLine.length()-1)); - double finalModifier = modifier/100; - damage = damage*finalModifier; - }else{ + if (actionLine.contains("%")) { + double modifier = Double.parseDouble(actionLine.substring(0, actionLine.length() - 1)); + double finalModifier = modifier / 100; + damage = damage * finalModifier; + } else { damage = Double.parseDouble(actionLine); } @@ -999,79 +1051,79 @@ public static void setDamage(String actionLine,Event minecraftEvent){ } } - public static void hideJoinMessage(String actionLine,Event minecraftEvent){ - if(minecraftEvent instanceof PlayerJoinEvent) { + public static void hideJoinMessage(String actionLine, Event minecraftEvent) { + if (minecraftEvent instanceof PlayerJoinEvent) { PlayerJoinEvent joinEvent = (PlayerJoinEvent) minecraftEvent; boolean hideMessage = Boolean.parseBoolean(actionLine); - if(hideMessage){ + if (hideMessage) { joinEvent.setJoinMessage(null); } } } - public static void hideLeaveMessage(String actionLine,Event minecraftEvent){ - if(minecraftEvent instanceof PlayerQuitEvent) { + public static void hideLeaveMessage(String actionLine, Event minecraftEvent) { + if (minecraftEvent instanceof PlayerQuitEvent) { PlayerQuitEvent quitEvent = (PlayerQuitEvent) minecraftEvent; boolean hideMessage = Boolean.parseBoolean(actionLine); - if(hideMessage){ + if (hideMessage) { quitEvent.setQuitMessage(null); } } } - public static void setDeathMessage(String actionLine,Event minecraftEvent){ - if(minecraftEvent instanceof PlayerDeathEvent) { + public static void setDeathMessage(String actionLine, Event minecraftEvent) { + if (minecraftEvent instanceof PlayerDeathEvent) { PlayerDeathEvent deathEvent = (PlayerDeathEvent) minecraftEvent; - if(actionLine.equals("no")){ + if (actionLine.equals("no")) { deathEvent.setDeathMessage(null); - }else{ - if(ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()){ - MiniMessageUtils.deathMessage(deathEvent,actionLine); - }else{ + } else { + if (ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + MiniMessageUtils.deathMessage(deathEvent, actionLine); + } else { deathEvent.setDeathMessage(MessagesManager.getLegacyColoredMessage(actionLine)); } } } } - public static void preventJoin(String actionLine,Event minecraftEvent){ + public static void preventJoin(String actionLine, Event minecraftEvent) { // prevent_join: <message> - if(minecraftEvent instanceof AsyncPlayerPreLoginEvent) { + if (minecraftEvent instanceof AsyncPlayerPreLoginEvent) { AsyncPlayerPreLoginEvent preJoinEvent = (AsyncPlayerPreLoginEvent) minecraftEvent; preJoinEvent.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER); - if(ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()){ - MiniMessageUtils.preLoginKickMessage(preJoinEvent,actionLine); - }else{ + if (ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage()) { + MiniMessageUtils.preLoginKickMessage(preJoinEvent, actionLine); + } else { preJoinEvent.setKickMessage(MessagesManager.getLegacyColoredMessage(actionLine)); } } } - public static void discordSRVEmbed(String actionLine,ConditionalEvents plugin){ + public static void discordSRVEmbed(String actionLine, ConditionalEvents plugin) { DiscordSRVManager discordSRVManager = plugin.getDependencyManager().getDiscordSRVManager(); - if(discordSRVManager != null){ + if (discordSRVManager != null) { discordSRVManager.sendEmbedMessage(actionLine); } } - public static boolean callEvent(String actionLine,LivingEntity livingEntity,ConditionalEvents plugin,ArrayList<StoredVariable> storedVariables){ - // If livingEntity exists, it must be a player + public static boolean callEvent(String actionLine, LivingEntity livingEntity, ConditionalEvents plugin, ArrayList<StoredVariable> storedVariables) { + // If a livingEntity exists, it must be a player Player player = null; - if(livingEntity instanceof Player){ - player = (Player)livingEntity; + if (livingEntity instanceof Player) { + player = (Player) livingEntity; } // call_event: <event>;%variable1%=<value1>;%variable2%=<value2> // call_event: <event>;%variable1%=<value1>;%variable2%=<value2>;already_stored ArrayList<StoredVariable> variables = new ArrayList<>(); - String eventName = null; - try{ + String eventName; + try { String[] sep = actionLine.split(";"); eventName = sep[0]; - if(sep.length > 1){ - for(int i=1;i<sep.length;i++){ - if(sep[i].equals("already_stored")){ - if(storedVariables != null){ + if (sep.length > 1) { + for (int i = 1; i < sep.length; i++) { + if (sep[i].equals("already_stored")) { + if (storedVariables != null) { variables.addAll(storedVariables); } continue; @@ -1082,55 +1134,37 @@ public static boolean callEvent(String actionLine,LivingEntity livingEntity,Cond if (index != -1) { String variable = sep[i].substring(0, index); String value = sep[i].substring(index + 1); - variables.add(new StoredVariable(variable,value)); + variables.add(new StoredVariable(variable, value)); } } } - }catch(Exception e){ + } catch (Exception e) { return false; } - ConditionalEventsCallEvent event = new ConditionalEventsCallEvent(player,variables,eventName); + ConditionalEventsCallEvent event = new ConditionalEventsCallEvent(player, variables, eventName); plugin.getServer().getPluginManager().callEvent(event); return true; } - public static void executeActionGroup(String actionLine,ExecutedEvent executedEvent,ConditionalEvents plugin){ + public static void executeActionGroup(String actionLine, ExecutedEvent executedEvent, ConditionalEvents plugin) { // execute_action_group: <group1>:<prob1>;<group2>:<prob2> - ArrayList<String> actionGroups = new ArrayList<String>(); - ArrayList<Integer> probs = new ArrayList<Integer>(); + ArrayList<String> actionGroups = new ArrayList<>(); + ArrayList<Integer> probs = new ArrayList<>(); String[] sep = actionLine.split(";"); - for(String line : sep){ + for (String line : sep) { String[] sep2 = line.split(":"); actionGroups.add(sep2[0]); probs.add(Integer.parseInt(sep2[1])); } - for(int i=0;i<probs.size();i++){ - if(i != 0){ - probs.set(i, probs.get(i-1)+probs.get(i)); + for (int i = 0; i < probs.size(); i++) { + if (i != 0) { + probs.set(i, probs.get(i - 1) + probs.get(i)); } } - String actionGroup = null; - - Random random = new Random(); - int max = probs.get(probs.size()-1); - int randomNumber = random.nextInt(max); - for(int i=0;i<probs.size();i++){ - if(i==0){ - if(randomNumber < probs.get(i)){ - actionGroup = actionGroups.get(i); - } - }else{ - if(randomNumber > probs.get(i-1) && randomNumber <= probs.get(i)){ - actionGroup = actionGroups.get(i); - } - } - } - if(actionGroup == null){ - actionGroup = actionGroups.get(0); - } + String actionGroup = getString(probs, actionGroups); //Clone ExecutedEvent new ExecutedEvent( @@ -1144,14 +1178,37 @@ public static void executeActionGroup(String actionLine,ExecutedEvent executedEv ).executeActions(); } - public static void setEventXp(String actionLine,Event minecraftEvent){ - int xp = Integer.parseInt(actionLine.replace("set_event_xp: ","")); - if(minecraftEvent instanceof PlayerFishEvent){ + public static void setEventXp(String actionLine, Event minecraftEvent) { + int xp = Integer.parseInt(actionLine.replace("set_event_xp: ", "")); + if (minecraftEvent instanceof PlayerFishEvent) { PlayerFishEvent event = (PlayerFishEvent) minecraftEvent; event.setExpToDrop(xp); - }else if(minecraftEvent instanceof BlockBreakEvent){ + } else if (minecraftEvent instanceof BlockBreakEvent) { BlockBreakEvent event = (BlockBreakEvent) minecraftEvent; event.setExpToDrop(xp); } } + + private static String getString(ArrayList<Integer> probs, ArrayList<String> actionGroups) { + String actionGroup = null; + + Random random = new Random(); + int max = probs.get(probs.size() - 1); + int randomNumber = random.nextInt(max); + for (int i = 0; i < probs.size(); i++) { + if (i == 0) { + if (randomNumber < probs.get(i)) { + actionGroup = actionGroups.get(i); + } + } else { + if (randomNumber > probs.get(i - 1) && randomNumber <= probs.get(i)) { + actionGroup = actionGroups.get(i); + } + } + } + if (actionGroup == null) { + actionGroup = actionGroups.get(0); + } + return actionGroup; + } } diff --git a/src/main/java/ce/ajneb97/utils/BlockUtils.java b/src/main/java/ce/ajneb97/utils/BlockUtils.java index 1efc92f..1fe3a66 100644 --- a/src/main/java/ce/ajneb97/utils/BlockUtils.java +++ b/src/main/java/ce/ajneb97/utils/BlockUtils.java @@ -16,30 +16,30 @@ import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; import java.net.URL; import java.util.Base64; import java.util.Collection; import java.util.UUID; +@SuppressWarnings({"deprecation", "removal"}) public class BlockUtils { public static String getHeadTextureData(Block block) { - if(block == null) { + if (block == null) { return ""; } Material material = block.getType(); - if(material.name().equals("PLAYER_HEAD") || material.name().equals("SKULL") || material.name().equals("PLAYER_WALL_HEAD")) { + if (material.name().equals("PLAYER_HEAD") || material.name().equals("SKULL") || material.name().equals("PLAYER_WALL_HEAD")) { Skull skullBlock = (Skull) block.getState(); ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_21_R1)){ - if(skullBlock.getOwnerProfile() == null){ + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_21_R1)) { + if (skullBlock.getOwnerProfile() == null) { return ""; } PlayerTextures textures = skullBlock.getOwnerProfile().getTextures(); - if(textures.getSkin() == null){ + if (textures.getSkin() == null) { return ""; } @@ -50,23 +50,23 @@ public static String getHeadTextureData(Block block) { JsonObject minecraftTexturesJsonObject = new JsonObject(); minecraftTexturesJsonObject.add("textures", texturesJsonObject); return new String(Base64.getEncoder().encode(minecraftTexturesJsonObject.toString().getBytes())); - }else{ + } else { Field profileField; try { profileField = skullBlock.getClass().getDeclaredField("profile"); profileField.setAccessible(true); GameProfile gameProfile = (GameProfile) profileField.get(skullBlock); - if(gameProfile != null && gameProfile.getProperties() != null && + if (gameProfile != null && gameProfile.getProperties() != null && gameProfile.getProperties().containsKey("textures")) { Collection<Property> properties = gameProfile.getProperties().get("textures"); - for(Property p : properties) { - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_20_R2)){ - String pName = (String)p.getClass().getMethod("name").invoke(p); - if(pName.equals("textures")){ - return (String)p.getClass().getMethod("value").invoke(p); + for (Property p : properties) { + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_20_R2)) { + String pName = (String) p.getClass().getMethod("name").invoke(p); + if (pName.equals("textures")) { + return (String) p.getClass().getMethod("value").invoke(p); } - }else{ - if(p.getName().equals("textures")) { + } else { + if (p.getName().equals("textures")) { return p.getValue(); } } @@ -82,22 +82,22 @@ public static String getHeadTextureData(Block block) { return ""; } - public static void setHeadTextureData(Block block,String texture,String owner){ + public static void setHeadTextureData(Block block, String texture, String owner) { Skull skullBlock = (Skull) block.getState(); - if(OtherUtils.isLegacy()) { + if (OtherUtils.isLegacy()) { skullBlock.setSkullType(SkullType.PLAYER); - skullBlock.setRawData((byte)1); + skullBlock.setRawData((byte) 1); } - if(owner != null){ + if (owner != null) { skullBlock.setOwner(owner); skullBlock.update(); return; } ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_20_R2)){ - PlayerProfile profile = Bukkit.createPlayerProfile(UUID.randomUUID(),"ce"); + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_20_R2)) { + PlayerProfile profile = Bukkit.createPlayerProfile(UUID.randomUUID(), "ce"); PlayerTextures textures = profile.getTextures(); URL url; try { @@ -115,14 +115,15 @@ public static void setHeadTextureData(Block block,String texture,String owner){ textures.setSkin(url); profile.setTextures(textures); skullBlock.setOwnerProfile(profile); - }else{ + } else { GameProfile profile = new GameProfile(UUID.randomUUID(), ""); profile.getProperties().put("textures", new Property("textures", texture)); try { Field profileField = skullBlock.getClass().getDeclaredField("profile"); profileField.setAccessible(true); profileField.set(skullBlock, profile); - } catch (IllegalArgumentException | NoSuchFieldException | SecurityException | IllegalAccessException error) { + } catch (IllegalArgumentException | NoSuchFieldException | SecurityException | + IllegalAccessException error) { error.printStackTrace(); } } @@ -130,18 +131,18 @@ public static void setHeadTextureData(Block block,String texture,String owner){ skullBlock.update(); } - public static String getBlockDataStringFromObject(BlockData blockData){ + public static String getBlockDataStringFromObject(BlockData blockData) { String text = blockData.getAsString(); int index = text.indexOf("["); - if(index == -1){ + if (index == -1) { return ""; } - return text.substring(index+1,text.length()-1); + return text.substring(index + 1, text.length() - 1); } - public static BlockData getBlockDataFromString(String blockDataString,Material material){ - String minecraftMaterial = material.getKey().getNamespace()+":"+material.getKey().getKey(); - String blockDataText = minecraftMaterial+"["+blockDataString+"]"; + public static BlockData getBlockDataFromString(String blockDataString, Material material) { + String minecraftMaterial = material.getKey().getNamespace() + ":" + material.getKey().getKey(); + String blockDataText = minecraftMaterial + "[" + blockDataString + "]"; return Bukkit.createBlockData(blockDataText); } } diff --git a/src/main/java/ce/ajneb97/utils/GlobalVariablesUtils.java b/src/main/java/ce/ajneb97/utils/GlobalVariablesUtils.java index 33a8db7..304b776 100644 --- a/src/main/java/ce/ajneb97/utils/GlobalVariablesUtils.java +++ b/src/main/java/ce/ajneb97/utils/GlobalVariablesUtils.java @@ -14,68 +14,69 @@ import java.util.List; import java.util.Random; +@SuppressWarnings({"removal", "DataFlowIssue", "deprecation"}) public class GlobalVariablesUtils { private static int lastGeneratedRandomNumber; - public static String variablePlayer(Player finalPlayer){ + public static String variablePlayer(Player finalPlayer) { return finalPlayer.getName(); } - public static String variablePlayerBlockBelow(Player finalPlayer,String variable){ + public static String variablePlayerBlockBelow(Player finalPlayer, String variable) { int distance = Integer.parseInt(variable.replace("playerblock_below_", "")); Location l = finalPlayer.getLocation().clone().add(0, -distance, 0); return getBlockTypeInLocation(l); } - public static String variablePlayerBlockAbove(Player finalPlayer,String variable){ + public static String variablePlayerBlockAbove(Player finalPlayer, String variable) { int distance = Integer.parseInt(variable.replace("playerblock_above_", "")); Location l = finalPlayer.getLocation().clone().add(0, distance, 0); return getBlockTypeInLocation(l); } - public static String variablePlayerBlockInside(Player finalPlayer){ + public static String variablePlayerBlockInside(Player finalPlayer) { Location l = finalPlayer.getLocation(); return getBlockTypeInLocation(l); } - public static String variablePlayerIsOutside(Player finalPlayer){ + public static String variablePlayerIsOutside(Player finalPlayer) { Location l = finalPlayer.getLocation(); Block block = getNextHighestBlock(l); - if(block == null){ + if (block == null) { return "true"; - }else{ + } else { return "false"; } } - public static String variableRandomPlayer(){ + public static String variableRandomPlayer() { int random = new Random().nextInt(Bukkit.getOnlinePlayers().size()); ArrayList<Player> players = new ArrayList<>(Bukkit.getOnlinePlayers()); - if(players.size() == 0) { + if (players.isEmpty()) { return "none"; - }else { + } else { return players.get(random).getName(); } } - public static String variableRandomPlayerWorld(String variable){ + public static String variableRandomPlayerWorld(String variable) { String worldName = variable.replace("random_player_", ""); try { World world = Bukkit.getWorld(worldName); List<Player> players = world.getPlayers(); - if(players.size() == 0) { + if (players.isEmpty()) { return "none"; - }else { + } else { int random = new Random().nextInt(players.size()); return players.get(random).getName(); } - }catch(Exception e) { + } catch (Exception e) { return "none"; } } - public static String variableRandomMinMax(String variable){ + public static String variableRandomMinMax(String variable) { String variableLR = variable.replace("random_", ""); String[] variableLRSplit = variableLR.split("_"); int num1 = Integer.parseInt(variableLRSplit[0]); @@ -84,65 +85,64 @@ public static String variableRandomMinMax(String variable){ lastGeneratedRandomNumber = numFinal; - return numFinal+""; + return numFinal + ""; } - public static String variableLastRandomMinMax(){ - return lastGeneratedRandomNumber+""; + public static String variableLastRandomMinMax() { + return lastGeneratedRandomNumber + ""; } - public static String variableRandomWorld(String variable){ + public static String variableRandomWorld(String variable) { String variableLR = variable.replace("randomword_", ""); String[] variableLRSplit = variableLR.split("-"); Random r = new Random(); - String word = variableLRSplit[r.nextInt(variableLRSplit.length)]; - return word; + return variableLRSplit[r.nextInt(variableLRSplit.length)]; } - public static String variablePlayerArmorName(Player finalPlayer,String variable){ + public static String variablePlayerArmorName(Player finalPlayer, String variable) { String armorType = variable.replace("playerarmor_name_", ""); - ItemStack item = getArmorItem(finalPlayer,armorType); + ItemStack item = getArmorItem(finalPlayer, armorType); String name = ""; - if(item != null && item.hasItemMeta()){ + if (item != null && item.hasItemMeta()) { ItemMeta meta = item.getItemMeta(); - if(meta.hasDisplayName()){ + if (meta.hasDisplayName()) { name = ChatColor.stripColor(meta.getDisplayName()); } } return name; } - public static String variablePlayerArmorType(Player finalPlayer,String variable){ + public static String variablePlayerArmorType(Player finalPlayer, String variable) { String armorType = variable.replace("playerarmor_", ""); - ItemStack item = getArmorItem(finalPlayer,armorType); + ItemStack item = getArmorItem(finalPlayer, armorType); String material = "AIR"; - if(item != null) { + if (item != null) { material = item.getType().name(); } return material; } - public static String variableBlockAt(String variable){ + public static String variableBlockAt(String variable) { String variableLR = variable.replace("block_at_", ""); String[] variableLRSplit = variableLR.split("_"); Block block = getBlockFromFormat(variableLRSplit); - if(block == null){ + if (block == null) { return variable; } return block.getType().name(); } - public static String variableBlockDataAt(String variable){ + public static String variableBlockDataAt(String variable) { String variableLR = variable.replace("block_data_at_", ""); String[] variableLRSplit = variableLR.split("_"); Block block = getBlockFromFormat(variableLRSplit); - if(block == null){ + if (block == null) { return variable; } - if(OtherUtils.isLegacy()){ - return block.getData()+""; - }else{ + if (OtherUtils.isLegacy()) { + return block.getData() + ""; + } else { return BlockUtils.getBlockDataStringFromObject(block.getBlockData()); } } @@ -152,113 +152,116 @@ private static Block getBlockFromFormat(String[] variableLRSplit) { int x = Integer.parseInt(variableLRSplit[0]); int y = Integer.parseInt(variableLRSplit[1]); int z = Integer.parseInt(variableLRSplit[2]); - String worldName = ""; - for(int i = 3; i< variableLRSplit.length; i++) { - if(i == variableLRSplit.length - 1) { - worldName = worldName+ variableLRSplit[i]; - }else { - worldName = worldName+ variableLRSplit[i]+"_"; + StringBuilder worldName = new StringBuilder(); + for (int i = 3; i < variableLRSplit.length; i++) { + if (i == variableLRSplit.length - 1) { + worldName.append(variableLRSplit[i]); + } else { + worldName.append(variableLRSplit[i]).append("_"); } } - World world = Bukkit.getWorld(worldName); - return world.getBlockAt(x,y,z); - }catch(Exception e) { + World world = Bukkit.getWorld(worldName.toString()); + return world.getBlockAt(x, y, z); + } catch (Exception e) { return null; } } - public static String variableIsNearby(Player finalPlayer,String variable){ + public static String variableIsNearby(Player finalPlayer, String variable) { String variableLR = variable.replace("is_nearby_", ""); String[] variableLRSplit = variableLR.split("_"); try { - int x = Integer.valueOf(variableLRSplit[0]); - int y = Integer.valueOf(variableLRSplit[1]); - int z = Integer.valueOf(variableLRSplit[2]); - String worldName = ""; - for(int i=3;i<variableLRSplit.length-1;i++) { - if(i == variableLRSplit.length - 2) { - worldName = worldName+variableLRSplit[i]; - }else { - worldName = worldName+variableLRSplit[i]+"_"; + int x = Integer.parseInt(variableLRSplit[0]); + int y = Integer.parseInt(variableLRSplit[1]); + int z = Integer.parseInt(variableLRSplit[2]); + StringBuilder worldName = new StringBuilder(); + for (int i = 3; i < variableLRSplit.length - 1; i++) { + if (i == variableLRSplit.length - 2) { + worldName.append(variableLRSplit[i]); + } else { + worldName.append(variableLRSplit[i]).append("_"); } } - World world = Bukkit.getWorld(worldName); - double radius = Double.valueOf(variableLRSplit[variableLRSplit.length-1]); + World world = Bukkit.getWorld(worldName.toString()); + double radius = Double.parseDouble(variableLRSplit[variableLRSplit.length - 1]); - Location l1 = new Location(world,x,y,z); + Location l1 = new Location(world, x, y, z); Location l2 = finalPlayer.getLocation(); double distance = l1.distance(l2); - if(distance <= radius) { + if (distance <= radius) { return "true"; - }else { + } else { return "false"; } - }catch(Exception e) { + } catch (Exception e) { return "false"; } } - public static String variableWorldTime(String variable){ + public static String variableWorldTime(String variable) { String variableLR = variable.replace("world_time_", ""); World world = Bukkit.getWorld(variableLR); - return world.getTime()+""; + return world.getTime() + ""; } - public static String variableWorldIsRaining(Player finalPlayer){ + public static String variableWorldIsRaining(Player finalPlayer) { World world = finalPlayer.getWorld(); - return world.hasStorm()+""; + return world.hasStorm() + ""; } - public static String variablePlayerAttackCooldown(Player finalPlayer){ - return finalPlayer.getAttackCooldown()+""; + public static String variablePlayerAttackCooldown(Player finalPlayer) { + return finalPlayer.getAttackCooldown() + ""; } - public static String isNumber(String variable){ + public static String isNumber(String variable) { String variableLR = variable.replace("is_number_", ""); return MathUtils.isParsable(variableLR) ? "true" : "false"; } - public static ItemStack getArmorItem(Player player, String armorType){ + public static ItemStack getArmorItem(Player player, String armorType) { ItemStack item = null; - if(armorType.equals("helmet")) { - item = player.getEquipment().getHelmet(); - }else if(armorType.equals("chestplate")) { - item = player.getEquipment().getChestplate(); - }else if(armorType.equals("leggings")) { - item = player.getEquipment().getLeggings(); - }else if(armorType.equals("boots")){ - item = player.getEquipment().getBoots(); + switch (armorType) { + case "helmet": + item = player.getEquipment().getHelmet(); + break; + case "chestplate": + item = player.getEquipment().getChestplate(); + break; + case "leggings": + item = player.getEquipment().getLeggings(); + break; + case "boots": + item = player.getEquipment().getBoots(); + break; } return item; } - public static Block getNextHighestBlock(Location location){ + public static Block getNextHighestBlock(Location location) { int y = location.getBlockY(); Location locationClone = location.clone(); - for(int i=y+1;i<location.getWorld().getMaxHeight();i++){ - Block nextBlock = locationClone.add(0,1,0).getBlock(); - if(!ItemUtils.isAir(nextBlock.getType())){ + for (int i = y + 1; i < location.getWorld().getMaxHeight(); i++) { + Block nextBlock = locationClone.add(0, 1, 0).getBlock(); + if (!ItemUtils.isAir(nextBlock.getType())) { return nextBlock; } } return null; } - public static String getBlockTypeInLocation(Location location){ + public static String getBlockTypeInLocation(Location location) { Block block = location.getBlock(); - String blockType = "AIR"; - if(block != null) { - blockType = block.getType().name(); - } + String blockType; + blockType = block.getType().name(); return blockType; } - public static String variablePlayerLocationDirectional(Player finalPlayer,String variable){ + public static String variablePlayerLocationDirectional(Player finalPlayer, String variable) { // %player_location_x_<front_value>_<side_value>_<up_value>% // Example: %player_location_x_1_0_0% - variable = variable.replace("player_location_",""); + variable = variable.replace("player_location_", ""); String[] variableSep = variable.split("_"); String coord = variableSep[0]; double front = Double.parseDouble(variableSep[1]); @@ -276,12 +279,12 @@ public static String variablePlayerLocationDirectional(Player finalPlayer,String Vector offset = direction.multiply(front).add(right.multiply(side)).add(upVector.multiply(up)); Location finalLocation = base.add(offset); - if(coord.equals("x")){ - return finalLocation.getX()+""; - }else if(coord.equals("y")){ - return finalLocation.getY()+""; - }else{ - return finalLocation.getZ()+""; + if (coord.equals("x")) { + return finalLocation.getX() + ""; + } else if (coord.equals("y")) { + return finalLocation.getY() + ""; + } else { + return finalLocation.getZ() + ""; } } } diff --git a/src/main/java/ce/ajneb97/utils/InventoryUtils.java b/src/main/java/ce/ajneb97/utils/InventoryUtils.java index 16f644c..a77f543 100644 --- a/src/main/java/ce/ajneb97/utils/InventoryUtils.java +++ b/src/main/java/ce/ajneb97/utils/InventoryUtils.java @@ -9,13 +9,15 @@ import java.lang.reflect.Method; public class InventoryUtils { + /** * Thanks to Rumsfield - * https://www.spigotmc.org/threads/inventoryview-changed-to-interface-backwards-compatibility.651754/ + * <a href="https://www.spigotmc.org/threads/inventoryview-changed-to-interface-backwards-compatibility.651754/">...</a> * In API versions 1.20.6 and earlier, InventoryView is a class. * In versions 1.21 and later, it is an interface. * This method uses reflection to get the top Inventory object from the - * InventoryView associated with an InventoryEvent, to avoid runtime errors. + * InventoryView associated with an InventoryEvent to avoid runtime errors. + * * @param event The generic InventoryEvent with an InventoryView to inspect. * @return The top Inventory object from the event's InventoryView. */ diff --git a/src/main/java/ce/ajneb97/utils/ItemUtils.java b/src/main/java/ce/ajneb97/utils/ItemUtils.java index 8aecf48..60d8494 100644 --- a/src/main/java/ce/ajneb97/utils/ItemUtils.java +++ b/src/main/java/ce/ajneb97/utils/ItemUtils.java @@ -2,7 +2,7 @@ import ce.ajneb97.ConditionalEvents; import ce.ajneb97.api.ConditionalEventsAPI; -import ce.ajneb97.managers.MessagesManager; +import ce.ajneb97.manager.MessagesManager; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.mojang.authlib.GameProfile; @@ -26,69 +26,67 @@ import java.util.*; import java.util.stream.Collectors; +@SuppressWarnings({"DataFlowIssue", "deprecation", "UnstableApiUsage"}) public class ItemUtils { @SuppressWarnings("deprecation") public static ItemStack createItemFromID(String id) { - ItemStack item = null; - if(id.contains(":")){ + ItemStack item; + if (id.contains(":")) { String[] sep = id.split(":"); Material mat = Material.getMaterial(sep[0].toUpperCase()); - item = new ItemStack(mat,1,Short.parseShort(sep[1])); - }else{ + item = new ItemStack(mat, 1, Short.parseShort(sep[1])); + } else { Material mat = Material.getMaterial(id.toUpperCase()); - item = new ItemStack(mat,1); + item = new ItemStack(mat, 1); } return item; } - public static ItemStack createItemFromString(String string, Player player){ - ItemStack item = null; - if(string.startsWith("e")){ + public static ItemStack createItemFromString(String string, Player player) { + ItemStack item; + if (string.startsWith("e")) { item = ItemUtils.createHead(); - ItemUtils.setSkullData(item,string,null,null); + ItemUtils.setSkullData(item, string, null, null); return item; } - if(string.startsWith("saved_item:")){ - return ConditionalEventsAPI.getPlugin().getSavedItemsManager().getItem(string.replace("saved_item:",""),player); + if (string.startsWith("saved_item:")) { + return ConditionalEventsAPI.getPlugin().getSavedItemsManager().getItem(string.replace("saved_item:", ""), player); } item = ItemUtils.createItemFromID(string); return item; } - public static boolean isAir(Material material){ - if(material.name().contains("_AIR") || material.name().equals("AIR")){ - return true; - } - return false; + public static boolean isAir(Material material) { + return material.name().contains("_AIR") || material.name().equals("AIR"); } - public static ItemStack createHead(){ - if(OtherUtils.isLegacy()){ - return new ItemStack(Material.valueOf("SKULL_ITEM"),1,(short)3); - }else{ + public static ItemStack createHead() { + if (OtherUtils.isLegacy()) { + return new ItemStack(Material.valueOf("SKULL_ITEM"), 1, (short) 3); + } else { return new ItemStack(Material.PLAYER_HEAD); } } @SuppressWarnings("deprecation") - public static void setSkullData(ItemStack item,String texture,String id,String owner){ + public static void setSkullData(ItemStack item, String texture, String id, String owner) { String typeName = item.getType().name(); - if(!typeName.equals("PLAYER_HEAD") && !typeName.equals("SKULL_ITEM")) { + if (!typeName.equals("PLAYER_HEAD") && !typeName.equals("SKULL_ITEM")) { return; } SkullMeta skullMeta = (SkullMeta) item.getItemMeta(); - if(owner != null) { + if (owner != null) { skullMeta.setOwner(owner); } - if(texture != null){ + if (texture != null) { ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_20_R2)){ + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_20_R2)) { UUID uuid = id != null ? UUID.fromString(id) : UUID.randomUUID(); - PlayerProfile profile = Bukkit.createPlayerProfile(uuid,"ce"); + PlayerProfile profile = Bukkit.createPlayerProfile(uuid, "ce"); PlayerTextures textures = profile.getTextures(); URL url; try { @@ -106,11 +104,11 @@ public static void setSkullData(ItemStack item,String texture,String id,String o textures.setSkin(url); profile.setTextures(textures); skullMeta.setOwnerProfile(profile); - }else{ - GameProfile profile = null; - if(id == null) { + } else { + GameProfile profile; + if (id == null) { profile = new GameProfile(UUID.randomUUID(), owner != null ? owner : ""); - }else { + } else { profile = new GameProfile(UUID.fromString(id), owner != null ? owner : ""); } profile.getProperties().put("textures", new Property("textures", texture)); @@ -119,7 +117,8 @@ public static void setSkullData(ItemStack item,String texture,String id,String o Field profileField = skullMeta.getClass().getDeclaredField("profile"); profileField.setAccessible(true); profileField.set(skullMeta, profile); - } catch (IllegalArgumentException | NoSuchFieldException | SecurityException | IllegalAccessException error) { + } catch (IllegalArgumentException | NoSuchFieldException | SecurityException | + IllegalAccessException error) { error.printStackTrace(); } } @@ -128,7 +127,7 @@ public static void setSkullData(ItemStack item,String texture,String id,String o item.setItemMeta(skullMeta); } - public static ItemStack getItemFromProperties(String[] properties,Player player){ + public static ItemStack getItemFromProperties(String[] properties, Player player) { String id = null; int amount = 1; short durability = 0; @@ -152,101 +151,95 @@ public static ItemStack getItemFromProperties(String[] properties,Player player) ItemStack savedItem = null; - for(String property : properties) { - if(property.startsWith("id:")) { + for (String property : properties) { + if (property.startsWith("id:")) { id = property.replace("id:", ""); - }else if(property.startsWith("amount:")) { + } else if (property.startsWith("amount:")) { amount = Integer.parseInt(property.replace("amount:", "")); - }else if(property.startsWith("custom_model_data:")) { + } else if (property.startsWith("custom_model_data:")) { customModelData = Integer.parseInt(property.replace("custom_model_data:", "")); - }else if(property.startsWith("custom_model_component_data_strings:")){ + } else if (property.startsWith("custom_model_component_data_strings:")) { String[] splitC = property.replace("custom_model_component_data_strings:", "").split("\\|"); customModelComponentDataStrings.addAll(Arrays.asList(splitC)); hasCustomModelComponentData = true; - }else if(property.startsWith("custom_model_component_data_floats:")){ + } else if (property.startsWith("custom_model_component_data_floats:")) { String[] splitC = property.replace("custom_model_component_data_floats:", "").split("\\|"); customModelComponentDataFloats.addAll(Arrays.asList(splitC)); hasCustomModelComponentData = true; - }else if(property.startsWith("custom_model_component_data_flags:")){ + } else if (property.startsWith("custom_model_component_data_flags:")) { String[] splitC = property.replace("custom_model_component_data_flags:", "").split("\\|"); customModelComponentDataFlags.addAll(Arrays.asList(splitC)); hasCustomModelComponentData = true; - }else if(property.startsWith("custom_model_component_data_colors:")){ + } else if (property.startsWith("custom_model_component_data_colors:")) { String[] splitC = property.replace("custom_model_component_data_colors:", "").split("\\|"); customModelComponentDataColors.addAll(Arrays.asList(splitC)); hasCustomModelComponentData = true; - }else if(property.startsWith("item_model:")){ - itemModel = property.replace("item_model:",""); - }else if(property.startsWith("durability:")) { + } else if (property.startsWith("item_model:")) { + itemModel = property.replace("item_model:", ""); + } else if (property.startsWith("durability:")) { durability = Short.parseShort(property.replace("durability:", "")); - }else if(property.startsWith("name:")) { + } else if (property.startsWith("name:")) { name = property.replace("name:", ""); - }else if(property.startsWith("lore:")) { + } else if (property.startsWith("lore:")) { String[] splitLore = property.replace("lore:", "").split("\\|"); - for(String loreLine : splitLore) { - lore.add(loreLine); - } - }else if(property.startsWith("enchants:")) { + Collections.addAll(lore, splitLore); + } else if (property.startsWith("enchants:")) { String[] splitEnchants = property.replace("enchants:", "").split("\\|"); - for(String enchantLine : splitEnchants) { + for (String enchantLine : splitEnchants) { String[] splitEnchants2 = enchantLine.split("-"); - enchants.add(splitEnchants2[0]+";"+splitEnchants2[1]); + enchants.add(splitEnchants2[0] + ";" + splitEnchants2[1]); } - }else if(property.startsWith("flags:")) { + } else if (property.startsWith("flags:")) { String[] splitFlags = property.replace("flags:", "").split("\\|"); - for(String flagLine : splitFlags) { - flags.add(flagLine); - } - }else if(property.startsWith("skull_texture:")) { + Collections.addAll(flags, splitFlags); + } else if (property.startsWith("skull_texture:")) { skullTexture = property.replace("skull_texture:", ""); - }else if(property.startsWith("skull_owner:")) { + } else if (property.startsWith("skull_owner:")) { skullOwner = property.replace("skull_owner:", ""); - }else if(property.startsWith("skull_id")) { + } else if (property.startsWith("skull_id")) { skullId = property.replace("skull_id:", ""); - }else if(property.startsWith("saved_item")){ - savedItem = ConditionalEventsAPI.getPlugin().getSavedItemsManager().getItem(property.replace("saved_item:", ""),player); + } else if (property.startsWith("saved_item")) { + savedItem = ConditionalEventsAPI.getPlugin().getSavedItemsManager().getItem(property.replace("saved_item:", ""), player); } } - if(savedItem != null){ + if (savedItem != null) { savedItem.setAmount(amount); return savedItem; } ItemStack item = ItemUtils.createItemFromID(id); item.setAmount(amount); - if(durability != 0) { + if (durability != 0) { item.setDurability(durability); } //Main Meta boolean useMiniMessage = ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isUseMiniMessage(); ItemMeta meta = item.getItemMeta(); - if(name != null) { - if(useMiniMessage){ - MiniMessageUtils.setItemName(meta,name); - }else{ + if (name != null) { + if (useMiniMessage) { + MiniMessageUtils.setItemName(meta, name); + } else { meta.setDisplayName(MessagesManager.getLegacyColoredMessage(name)); } } - if(!lore.isEmpty()) { + if (!lore.isEmpty()) { List<String> loreCopy = new ArrayList<>(lore); - if(useMiniMessage){ - MiniMessageUtils.setItemLore(meta,loreCopy); - }else{ - for(int i=0;i<loreCopy.size();i++) { - loreCopy.set(i, MessagesManager.getLegacyColoredMessage(loreCopy.get(i))); - } + if (useMiniMessage) { + MiniMessageUtils.setItemLore(meta, loreCopy); + } else { + loreCopy.replaceAll(MessagesManager::getLegacyColoredMessage); meta.setLore(loreCopy); } } - if(customModelData != 0) { + if (customModelData != 0) { meta.setCustomModelData(customModelData); } ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_21_R3) && hasCustomModelComponentData){ + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_21_R3) && hasCustomModelComponentData) { CustomModelDataComponent customModelDataComponent = meta.getCustomModelDataComponent(); customModelDataComponent.setFlags(customModelComponentDataFlags.stream() @@ -262,30 +255,30 @@ public static ItemStack getItemFromProperties(String[] properties,Player player) meta.setCustomModelDataComponent(customModelDataComponent); } - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_21_R3)){ - if(itemModel != null){ + if (serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_21_R3)) { + if (itemModel != null) { String[] sep = itemModel.split("\\|"); - meta.setItemModel(new NamespacedKey(sep[0],sep[1])); + meta.setItemModel(new NamespacedKey(sep[0], sep[1])); } } - if(!enchants.isEmpty()) { - for(int i=0;i<enchants.size();i++) { - String[] sep2 = enchants.get(i).split(";"); + if (!enchants.isEmpty()) { + for (String enchant : enchants) { + String[] sep2 = enchant.split(";"); String enchantName = sep2[0]; - int enchantLevel = Integer.valueOf(sep2[1]); + int enchantLevel = Integer.parseInt(sep2[1]); meta.addEnchant(Enchantment.getByName(enchantName), enchantLevel, true); } } - if(!flags.isEmpty()) { - for(int i=0;i<flags.size();i++) { - meta.addItemFlags(ItemFlag.valueOf(flags.get(i))); + if (!flags.isEmpty()) { + for (String flag : flags) { + meta.addItemFlags(ItemFlag.valueOf(flag)); } } item.setItemMeta(meta); //Other Meta - ItemUtils.setSkullData(item,skullTexture,skullId,skullOwner); + ItemUtils.setSkullData(item, skullTexture, skullId, skullOwner); return item; } diff --git a/src/main/java/ce/ajneb97/utils/JSONMessage.java b/src/main/java/ce/ajneb97/utils/JSONMessage.java index 19ab859..dd93469 100644 --- a/src/main/java/ce/ajneb97/utils/JSONMessage.java +++ b/src/main/java/ce/ajneb97/utils/JSONMessage.java @@ -10,56 +10,57 @@ import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; +@SuppressWarnings("deprecation") public class JSONMessage { - private Player player; - private String text; - private BaseComponent[] hover; - private String suggestCommand; - private String executeCommand; - - public JSONMessage(Player player, String text) { - this.player = player; - this.hover = null; - this.text = text; - } - - public JSONMessage hover(List<String> list) { - hover = new BaseComponent[list.size()]; - for(int i=0;i<list.size();i++) { - TextComponent line = new TextComponent(); - if(i == list.size()-1) { - line.setText(ChatColor.translateAlternateColorCodes('&', list.get(i))); - }else { - line.setText(ChatColor.translateAlternateColorCodes('&', list.get(i))+"\n"); - } - hover[i] = line; - } - return this; - } - - public JSONMessage setSuggestCommand(String command) { - this.suggestCommand = command; - return this; - } - - public JSONMessage setExecuteCommand(String command) { - this.executeCommand = command; - return this; - } - - public void send() { - TextComponent message = new TextComponent(); - message.setText(ChatColor.translateAlternateColorCodes('&', text)); - if(hover != null) { - message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hover)); - } - if(suggestCommand != null) { - message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, suggestCommand)); - } - if(executeCommand != null) { - message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, executeCommand)); - } - player.spigot().sendMessage(message); - } + private final Player player; + private final String text; + private BaseComponent[] hover; + private String suggestCommand; + private String executeCommand; + + public JSONMessage(Player player, String text) { + this.player = player; + this.hover = null; + this.text = text; + } + + public JSONMessage hover(List<String> list) { + hover = new BaseComponent[list.size()]; + for (int i = 0; i < list.size(); i++) { + TextComponent line = new TextComponent(); + if (i == list.size() - 1) { + line.setText(ChatColor.translateAlternateColorCodes('&', list.get(i))); + } else { + line.setText(ChatColor.translateAlternateColorCodes('&', list.get(i)) + "\n"); + } + hover[i] = line; + } + return this; + } + + public JSONMessage setSuggestCommand(String command) { + this.suggestCommand = command; + return this; + } + + public JSONMessage setExecuteCommand(String command) { + this.executeCommand = command; + return this; + } + + public void send() { + TextComponent message = new TextComponent(); + message.setText(ChatColor.translateAlternateColorCodes('&', text)); + if (hover != null) { + message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hover)); + } + if (suggestCommand != null) { + message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, suggestCommand)); + } + if (executeCommand != null) { + message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, executeCommand)); + } + player.spigot().sendMessage(message); + } } diff --git a/src/main/java/ce/ajneb97/utils/MathUtils.java b/src/main/java/ce/ajneb97/utils/MathUtils.java index 2ff49e3..666a0f5 100644 --- a/src/main/java/ce/ajneb97/utils/MathUtils.java +++ b/src/main/java/ce/ajneb97/utils/MathUtils.java @@ -2,16 +2,18 @@ import net.objecthunter.exp4j.Expression; import net.objecthunter.exp4j.ExpressionBuilder; + import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.DecimalFormat; import java.util.Random; public class MathUtils { public static String calculate(final String str) { - try{ + try { Expression expression = new ExpressionBuilder(str).build(); - if(!expression.validate().isValid()){ + if (!expression.validate().isValid()) { return str; } @@ -20,29 +22,28 @@ public static String calculate(final String str) { df.setMaximumFractionDigits(10); return df.format(result).replace(",", "."); - }catch(Exception e){ + } catch (Exception e) { return str; } } public static int getRandomNumber(int min, int max) { Random r = new Random(); - int num = r.nextInt((max - min) + 1) + min; - return num; + return r.nextInt((max - min) + 1) + min; } public static float getRandomNumberFloat(float min, float max) { return (float) (Math.random() * (max - min) + min); } - public static double truncate(double value){ - try{ + public static double truncate(double value) { + try { if (value > 0) { - return new BigDecimal(String.valueOf(value)).setScale(2, BigDecimal.ROUND_FLOOR).doubleValue(); + return new BigDecimal(String.valueOf(value)).setScale(2, RoundingMode.FLOOR).doubleValue(); } else { - return new BigDecimal(String.valueOf(value)).setScale(2, BigDecimal.ROUND_CEILING).doubleValue(); + return new BigDecimal(String.valueOf(value)).setScale(2, RoundingMode.CEILING).doubleValue(); } - }catch(NumberFormatException e){ + } catch (NumberFormatException e) { return value; } } @@ -54,7 +55,7 @@ public static boolean isParsable(String str) { } else if (str.charAt(str.length() - 1) == '.') { return false; } else if (str.charAt(0) == '-') { - return str.length() == 1 ? false : withDecimalsParsing(str, 1); + return str.length() != 1 && withDecimalsParsing(str, 1); } else { return withDecimalsParsing(str, 0); } @@ -64,7 +65,7 @@ public static boolean isParsable(String str) { private static boolean withDecimalsParsing(String str, int beginIdx) { int decimalPoints = 0; - for(int i = beginIdx; i < str.length(); ++i) { + for (int i = beginIdx; i < str.length(); ++i) { boolean isDecimalPoint = str.charAt(i) == '.'; if (isDecimalPoint) { ++decimalPoints; diff --git a/src/main/java/ce/ajneb97/utils/MiniMessageUtils.java b/src/main/java/ce/ajneb97/utils/MiniMessageUtils.java index a37a528..9f6d3b9 100644 --- a/src/main/java/ce/ajneb97/utils/MiniMessageUtils.java +++ b/src/main/java/ce/ajneb97/utils/MiniMessageUtils.java @@ -1,6 +1,6 @@ package ce.ajneb97.utils; -import ce.ajneb97.managers.MessagesManager; +import ce.ajneb97.manager.MessagesManager; import ce.ajneb97.model.internal.minimessage.GetVariablesItemLore; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextDecoration; @@ -23,31 +23,32 @@ import java.util.ArrayList; import java.util.List; +@SuppressWarnings("DataFlowIssue") public class MiniMessageUtils { - public static void messagePrefix(CommandSender sender, String message, boolean isPrefix, String prefix){ - if(isPrefix){ - sender.sendMessage(MiniMessage.miniMessage().deserialize(prefix+message)); - }else{ + public static void messagePrefix(CommandSender sender, String message, boolean isPrefix, String prefix) { + if (isPrefix) { + sender.sendMessage(MiniMessage.miniMessage().deserialize(prefix + message)); + } else { sender.sendMessage(MiniMessage.miniMessage().deserialize(message)); } } - public static void title(Player player, String title, String subtitle){ + public static void title(Player player, String title, String subtitle) { player.showTitle(Title.title( - MiniMessage.miniMessage().deserialize(title),MiniMessage.miniMessage().deserialize(subtitle) + MiniMessage.miniMessage().deserialize(title), MiniMessage.miniMessage().deserialize(subtitle) )); } - public static void actionbar(Player player, String message){ + public static void actionbar(Player player, String message) { player.sendActionBar(MiniMessage.miniMessage().deserialize(message)); } - public static void message(Player player,String message){ + public static void message(Player player, String message) { player.sendMessage(MiniMessage.miniMessage().deserialize(message)); } - public static void centeredMessage(Player player,String message){ + public static void centeredMessage(Player player, String message) { MiniMessage mm = MiniMessage.miniMessage(); Component component = mm.deserialize(message); String centeredTextLegacy = MessagesManager.getCenteredMessage(LegacyComponentSerializer.legacySection().serialize(component)); // to legacy @@ -55,92 +56,97 @@ public static void centeredMessage(Player player,String message){ player.sendMessage(centeredTextMiniMessage); } - public static void consoleMessage(String message){ + public static void consoleMessage(String message) { Bukkit.getConsoleSender().sendMessage(MiniMessage.miniMessage().deserialize(message)); } - public static void playerSendChat(Player player,String message){ + public static void playerSendChat(Player player, String message) { Component component = MiniMessage.miniMessage().deserialize(message); player.chat(MessagesManager.getLegacyColoredMessage(LegacyComponentSerializer.legacySection().serialize(component))); } - public static void kick(Player player,String message){ + public static void kick(Player player, String message) { player.kick(MiniMessage.miniMessage().deserialize(message)); } - public static Inventory createInventory(int slots, String title){ - return Bukkit.createInventory(null,slots, MiniMessage.miniMessage().deserialize(title)); + public static Inventory createInventory(int slots, String title) { + return Bukkit.createInventory(null, slots, MiniMessage.miniMessage().deserialize(title)); } - public static void setItemName(ItemMeta meta,String name){ + public static void setItemName(ItemMeta meta, String name) { meta.displayName(MiniMessage.miniMessage().deserialize(name).decoration(TextDecoration.ITALIC, false)); } - public static void setItemLore(ItemMeta meta, List<String> lore){ + public static void setItemLore(ItemMeta meta, List<String> lore) { List<Component> loreComponent = new ArrayList<>(); - for(int i=0;i<lore.size();i++) { - loreComponent.add(MiniMessage.miniMessage().deserialize(lore.get(i)).decoration(TextDecoration.ITALIC, false)); + for (String s : lore) { + loreComponent.add(MiniMessage.miniMessage().deserialize(s).decoration(TextDecoration.ITALIC, false)); } meta.lore(loreComponent); } - public static String getItemNamePlain(ItemMeta meta){ + public static String getItemNamePlain(ItemMeta meta) { return PlainTextComponentSerializer.plainText().serialize(meta.displayName()); } - public static String getItemNameMiniMessage(ItemMeta meta){ + public static String getItemNameMiniMessage(ItemMeta meta) { return MiniMessage.miniMessage().serialize(meta.displayName()); } - public static GetVariablesItemLore getVariablesItemLore(ItemMeta meta, List<String> loreList, List<String> colorFormatLoreList, String loreString, String colorFormatLoreString){ + public static GetVariablesItemLore getVariablesItemLore(ItemMeta meta, List<String> loreList, List<String> colorFormatLoreList, String loreString, String colorFormatLoreString) { List<Component> lore = meta.lore(); PlainTextComponentSerializer plainTextComponentSerializer = PlainTextComponentSerializer.plainText(); MiniMessage miniMessage = MiniMessage.miniMessage(); - for(int i=0;i<lore.size();i++){ + StringBuilder loreStringBuilder = new StringBuilder(loreString); + StringBuilder colorFormatLoreStringBuilder = new StringBuilder(colorFormatLoreString); + for (int i = 0; i < lore.size(); i++) { String plainFormat = plainTextComponentSerializer.serialize(lore.get(i)); String tagFormat = miniMessage.serialize(lore.get(i)); loreList.add(plainFormat); colorFormatLoreList.add(tagFormat); - if(i == lore.size()-1) { - loreString = loreString+plainFormat; - colorFormatLoreString = colorFormatLoreString+tagFormat; - }else{ - loreString = loreString+plainFormat + " "; - colorFormatLoreString = colorFormatLoreString+tagFormat + " "; + if (i == lore.size() - 1) { + loreStringBuilder.append(plainFormat); + colorFormatLoreStringBuilder.append(tagFormat); + } else { + loreStringBuilder.append(plainFormat).append(" "); + colorFormatLoreStringBuilder.append(tagFormat).append(" "); } } + colorFormatLoreString = colorFormatLoreStringBuilder.toString(); + loreString = loreStringBuilder.toString(); - return new GetVariablesItemLore(loreList,colorFormatLoreList,loreString,colorFormatLoreString); + return new GetVariablesItemLore(loreList, colorFormatLoreList, loreString, colorFormatLoreString); } - public static void setEntityCustomName(Entity entity,String customName){ + public static void setEntityCustomName(Entity entity, String customName) { entity.customName(MiniMessage.miniMessage().deserialize(customName)); } - public static String getEntityCustomNamePlain(Entity entity){ + public static String getEntityCustomNamePlain(Entity entity) { return PlainTextComponentSerializer.plainText().serialize(entity.customName()); } - public static String getEntityCustomNameMiniMessage(Entity entity){ + public static String getEntityCustomNameMiniMessage(Entity entity) { return MiniMessage.miniMessage().serialize(entity.customName()); } - public static void deathMessage(PlayerDeathEvent deathEvent,String message){ + public static void deathMessage(PlayerDeathEvent deathEvent, String message) { deathEvent.deathMessage(MiniMessage.miniMessage().deserialize(message)); } - public static void preLoginKickMessage(AsyncPlayerPreLoginEvent preJoinEvent,String message){ + + public static void preLoginKickMessage(AsyncPlayerPreLoginEvent preJoinEvent, String message) { preJoinEvent.kickMessage(MiniMessage.miniMessage().deserialize(message)); } - public static String getInventoryTitlePlain(InventoryEvent event){ + public static String getInventoryTitlePlain(InventoryEvent event) { return PlainTextComponentSerializer.plainText().serialize(getViewTitleComponent(event)); } - public static String getInventoryTitleMiniMessage(InventoryEvent event){ + public static String getInventoryTitleMiniMessage(InventoryEvent event) { return MiniMessage.miniMessage().serialize(getViewTitleComponent(event)); } - public static String getOpenInventoryViewTitlePlain(Player player){ + public static String getOpenInventoryViewTitlePlain(Player player) { return PlainTextComponentSerializer.plainText().serialize(getOpenInventoryViewTitleComponent(player)); } diff --git a/src/main/java/ce/ajneb97/utils/OtherUtils.java b/src/main/java/ce/ajneb97/utils/OtherUtils.java index 41eb900..94958ba 100644 --- a/src/main/java/ce/ajneb97/utils/OtherUtils.java +++ b/src/main/java/ce/ajneb97/utils/OtherUtils.java @@ -1,59 +1,48 @@ package ce.ajneb97.utils; + import ce.ajneb97.ConditionalEvents; import me.clip.placeholderapi.PlaceholderAPI; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.chat.ComponentSerializer; -import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.entity.Player; +@SuppressWarnings("deprecation") public class OtherUtils { public static boolean isChatNew() { ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_19_R1)){ - return true; - } - return false; + return serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_19_R1); } public static boolean isNew() { ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_16_R1)){ - return true; - } - return false; + return serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_16_R1); } public static boolean isLegacy() { ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_13_R1)){ - return false; - }else { - return true; - } + return !serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_13_R1); } public static Color getFireworkColorFromName(String colorName) { - if(colorName.startsWith("#")){ + if (colorName.startsWith("#")) { int rgbValue = Integer.parseInt(colorName.substring(1), 16); return Color.fromRGB(rgbValue); } try { return (Color) Color.class.getDeclaredField(colorName).get(Color.class); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (NoSuchFieldException e) { + } catch (IllegalAccessException | NoSuchFieldException e) { e.printStackTrace(); } return null; } - public static String fromJsonMessageToNormalMessage(String jsonMessage){ - try{ + public static String fromJsonMessageToNormalMessage(String jsonMessage) { + try { BaseComponent[] base = ComponentSerializer.parse(jsonMessage); return BaseComponent.toLegacyText(base); - }catch(Exception e){ + } catch (Exception e) { return null; } } @@ -61,18 +50,18 @@ public static String fromJsonMessageToNormalMessage(String jsonMessage){ public static String getFileExtension(String filePath) { int lastIndex = filePath.lastIndexOf("."); if (lastIndex > 0 && lastIndex < filePath.length() - 1) { - return filePath.substring(lastIndex+1); + return filePath.substring(lastIndex + 1); } else { return "invalid"; } } public static String replaceGlobalVariables(String text, Player player, ConditionalEvents plugin) { - if(player == null){ + if (player == null) { return text; } - text = text.replace("%player%",player.getName()); - if(plugin.getDependencyManager().isPlaceholderAPI()) { + text = text.replace("%player%", player.getName()); + if (plugin.getDependencyManager().isPlaceholderAPI()) { text = PlaceholderAPI.setPlaceholders(player, text); } diff --git a/src/main/java/ce/ajneb97/utils/PlayerUtils.java b/src/main/java/ce/ajneb97/utils/PlayerUtils.java index 065d9ef..05b2c2c 100644 --- a/src/main/java/ce/ajneb97/utils/PlayerUtils.java +++ b/src/main/java/ce/ajneb97/utils/PlayerUtils.java @@ -5,11 +5,12 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; +@SuppressWarnings("deprecation") public class PlayerUtils { - public static ItemStack getItemBySlot(Player player, String slot){ + public static ItemStack getItemBySlot(Player player, String slot) { PlayerInventory inventory = player.getInventory(); - switch(slot){ + switch (slot) { case "HAND": return inventory.getItemInHand(); case "OFF_HAND": @@ -27,9 +28,9 @@ public static ItemStack getItemBySlot(Player player, String slot){ } } - public static void setItemBySlot(Player player, String slot, ItemStack item){ + public static void setItemBySlot(Player player, String slot, ItemStack item) { PlayerInventory inventory = player.getInventory(); - switch(slot){ + switch (slot) { case "HAND": inventory.setItemInHand(item); break; @@ -49,14 +50,14 @@ public static void setItemBySlot(Player player, String slot, ItemStack item){ inventory.setBoots(item); break; default: - inventory.setItem(Integer.parseInt(slot),item); + inventory.setItem(Integer.parseInt(slot), item); break; } } - public static void updatePlayerInventory(Player player){ + public static void updatePlayerInventory(Player player) { ServerVersion serverVersion = ConditionalEvents.serverVersion; - if(!serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_13_R1)) { + if (!serverVersion.serverVersionGreaterEqualThan(serverVersion, ServerVersion.v1_13_R1)) { //1.12- player.updateInventory(); } diff --git a/src/main/java/ce/ajneb97/utils/ServerVersion.java b/src/main/java/ce/ajneb97/utils/ServerVersion.java index 61f48cf..91790e6 100644 --- a/src/main/java/ce/ajneb97/utils/ServerVersion.java +++ b/src/main/java/ce/ajneb97/utils/ServerVersion.java @@ -34,7 +34,7 @@ public enum ServerVersion { v1_21_R6, v1_21_R7; - public boolean serverVersionGreaterEqualThan(ServerVersion version1,ServerVersion version2){ + public boolean serverVersionGreaterEqualThan(ServerVersion version1, ServerVersion version2) { return version1.ordinal() >= version2.ordinal(); } } diff --git a/src/main/java/ce/ajneb97/utils/TimeUtils.java b/src/main/java/ce/ajneb97/utils/TimeUtils.java index 7c00452..1419bac 100644 --- a/src/main/java/ce/ajneb97/utils/TimeUtils.java +++ b/src/main/java/ce/ajneb97/utils/TimeUtils.java @@ -1,39 +1,39 @@ package ce.ajneb97.utils; -import ce.ajneb97.managers.MessagesManager; +import ce.ajneb97.manager.MessagesManager; public class TimeUtils { - public static String getTime(long seconds, MessagesManager msgManager) { - if(seconds == 0){ - return seconds+msgManager.getTimeSeconds(); - } - long totalMin = seconds/60; - long totalHour = totalMin/60; - long totalDay = totalHour/24; - String time = ""; - if(seconds > 59){ - seconds = seconds - 60*totalMin; - } - if(seconds > 0){ - time = seconds+msgManager.getTimeSeconds(); - } - if(totalMin > 59){ - totalMin = totalMin - 60*totalHour; - } - if(totalMin > 0){ - time = totalMin+msgManager.getTimeMinutes()+" "+time; - } - if(totalHour > 24) { - totalHour = totalHour - 24*totalDay; - } - if(totalHour > 0){ - time = totalHour+msgManager.getTimeHours()+" " + time; - } - if(totalDay > 0) { - time = totalDay+msgManager.getTimeDays()+" " + time; - } + public static String getTime(long seconds, MessagesManager msgManager) { + if (seconds == 0) { + return seconds + msgManager.getTimeSeconds(); + } + long totalMin = seconds / 60; + long totalHour = totalMin / 60; + long totalDay = totalHour / 24; + String time = ""; + if (seconds > 59) { + seconds = seconds - 60 * totalMin; + } + if (seconds > 0) { + time = seconds + msgManager.getTimeSeconds(); + } + if (totalMin > 59) { + totalMin = totalMin - 60 * totalHour; + } + if (totalMin > 0) { + time = totalMin + msgManager.getTimeMinutes() + " " + time; + } + if (totalHour > 24) { + totalHour = totalHour - 24 * totalDay; + } + if (totalHour > 0) { + time = totalHour + msgManager.getTimeHours() + " " + time; + } + if (totalDay > 0) { + time = totalDay + msgManager.getTimeDays() + " " + time; + } - return time; - } + return time; + } } diff --git a/src/main/java/ce/ajneb97/utils/VariablesUtils.java b/src/main/java/ce/ajneb97/utils/VariablesUtils.java index 89a812a..d159f24 100644 --- a/src/main/java/ce/ajneb97/utils/VariablesUtils.java +++ b/src/main/java/ce/ajneb97/utils/VariablesUtils.java @@ -17,69 +17,66 @@ public class VariablesUtils { - public static String replaceAllVariablesInLine(String textLine,VariablesProperties variablesProperties,boolean smallVariables){ + public static String replaceAllVariablesInLine(String textLine, VariablesProperties variablesProperties, boolean smallVariables) { boolean experimentalVariableReplacement = ConditionalEventsAPI.getPlugin().getConfigsManager().getMainConfigManager().isExperimentalVariableReplacement(); - if(experimentalVariableReplacement){ - return VariablesUtilsExperimental.replaceAllVariablesInLine(textLine,variablesProperties); + if (experimentalVariableReplacement) { + return VariablesUtilsExperimental.replaceAllVariablesInLine(textLine, variablesProperties); } String auxTextLine = textLine; char startChar = '%'; char endChar = '%'; - if(smallVariables){ + if (smallVariables) { startChar = '{'; endChar = '}'; } //For special variables like ParseOther int currentSmallVariableCount = 0; - boolean isParseOther = false; - if(textLine.startsWith("%parseother_")){ - isParseOther = true; - } + boolean isParseOther = textLine.startsWith("%parseother_"); - for(int c=0;c<textLine.length();c++) { - if(textLine.charAt(c) == startChar) { - if(c+1 < textLine.length()) { - int lastPos = textLine.indexOf(endChar, c+1); - if(lastPos == -1) { + for (int c = 0; c < textLine.length(); c++) { + if (textLine.charAt(c) == startChar) { + if (c + 1 < textLine.length()) { + int lastPos = textLine.indexOf(endChar, c + 1); + if (lastPos == -1) { continue; } //Must not be an empty space at start and end. - if(textLine.charAt(c+1) == ' ' || textLine.charAt(lastPos-1) == ' ') { + if (textLine.charAt(c + 1) == ' ' || textLine.charAt(lastPos - 1) == ' ') { continue; } - String bigVariable = textLine.substring(c,lastPos+1); - String auxBigVariable = null; - if(!smallVariables){ - auxBigVariable = replaceAllVariablesInLine(bigVariable,variablesProperties,true); - }else{ + String bigVariable = textLine.substring(c, lastPos + 1); + String auxBigVariable; + if (!smallVariables) { + auxBigVariable = replaceAllVariablesInLine(bigVariable, variablesProperties, true); + } else { auxBigVariable = bigVariable; } - if(smallVariables && isParseOther && currentSmallVariableCount == 1){ + if (smallVariables && isParseOther && currentSmallVariableCount == 1) { continue; } - String auxBigVariableWithoutChars = auxBigVariable.replace(startChar+"","").replace(endChar+"",""); + String auxBigVariableWithoutChars = auxBigVariable.replace(startChar + "", "").replace(endChar + "", ""); - String replaceVariableResult = replaceVariable(auxBigVariableWithoutChars,variablesProperties,smallVariables); + String replaceVariableResult = replaceVariable(auxBigVariableWithoutChars, variablesProperties, smallVariables); - if(replaceVariableResult.equals(auxBigVariableWithoutChars)){ - auxTextLine = auxTextLine.replace(bigVariable,startChar+replaceVariableResult+endChar); - }else{ - if(isParseOther && smallVariables && currentSmallVariableCount == 0){ - if(!replaceVariableResult.startsWith(startChar+"")){ - replaceVariableResult = startChar+replaceVariableResult+endChar; + if (replaceVariableResult.equals(auxBigVariableWithoutChars)) { + auxTextLine = auxTextLine.replace(bigVariable, startChar + replaceVariableResult + endChar); + } else { + if (isParseOther && smallVariables && currentSmallVariableCount == 0) { + if (!replaceVariableResult.startsWith(startChar + "")) { + replaceVariableResult = startChar + replaceVariableResult + endChar; } } int firstIndex = auxTextLine.indexOf(bigVariable); - if(firstIndex != -1){ - auxTextLine = auxTextLine.substring(0,firstIndex)+replaceVariableResult+auxTextLine.substring(firstIndex+bigVariable.length()); + if (firstIndex != -1) { + auxTextLine = auxTextLine.substring(0, firstIndex) + replaceVariableResult + auxTextLine.substring(firstIndex + bigVariable.length()); } } @@ -93,67 +90,67 @@ public static String replaceAllVariablesInLine(String textLine,VariablesProperti } //Post-Event variables - private static PostEventVariableResult replaceEventVariablesPost(String variable, VariablesProperties variablesProperties){ + private static PostEventVariableResult replaceEventVariablesPost(String variable, VariablesProperties variablesProperties) { EventType eventType = variablesProperties.getEvent().getEventType(); - if(eventType.equals(EventType.PLAYER_COMMAND) || eventType.equals(EventType.CONSOLE_COMMAND)){ - return replaceCommandEventsVariables(variable,variablesProperties); - }else if(eventType.name().startsWith("BLOCK_")){ - return replaceBlockEventsVariables(variable,variablesProperties,eventType); + if (eventType.equals(EventType.PLAYER_COMMAND) || eventType.equals(EventType.CONSOLE_COMMAND)) { + return replaceCommandEventsVariables(variable, variablesProperties); + } else if (eventType.name().startsWith("BLOCK_")) { + return replaceBlockEventsVariables(variable, variablesProperties, eventType); } return PostEventVariableResult.noReplaced(); } - private static PostEventVariableResult replaceCommandEventsVariables(String variable,VariablesProperties variablesProperties){ - if(variable.startsWith("args_substring_")){ + private static PostEventVariableResult replaceCommandEventsVariables(String variable, VariablesProperties variablesProperties) { + if (variable.startsWith("args_substring_")) { //%args_substring_<param1>-<param2>% String variableLR = variable.replace("args_substring_", ""); String[] variableLRSplit = variableLR.split("-"); String param1 = variableLRSplit[0]; String param2 = variableLRSplit[1]; - String finalSubstring = ""; + StringBuilder finalSubstring = new StringBuilder(); boolean started = false; - for(StoredVariable storedVariable : variablesProperties.getEventVariables()){ + for (StoredVariable storedVariable : variablesProperties.getEventVariables()) { String name = storedVariable.getName(); String value = storedVariable.getValue(); - if(name.equals("%arg_"+param1+"%")){ + if (name.equals("%arg_" + param1 + "%")) { started = true; } - if(started){ - if(name.equals("%arg_"+param2+"%")){ - finalSubstring = finalSubstring+value; + if (started) { + if (name.equals("%arg_" + param2 + "%")) { + finalSubstring.append(value); started = false; - }else{ - finalSubstring = finalSubstring+value+" "; + } else { + finalSubstring.append(value).append(" "); } } } - return PostEventVariableResult.replaced(finalSubstring); + return PostEventVariableResult.replaced(finalSubstring.toString()); } return PostEventVariableResult.noReplaced(); } - private static PostEventVariableResult replaceBlockEventsVariables(String variable,VariablesProperties variablesProperties,EventType eventType){ + private static PostEventVariableResult replaceBlockEventsVariables(String variable, VariablesProperties variablesProperties, EventType eventType) { Event minecraftEvent = variablesProperties.getMinecraftEvent(); - if(minecraftEvent == null){ + if (minecraftEvent == null) { return PostEventVariableResult.noReplaced(); } - Block block = null; - if(eventType.equals(EventType.BLOCK_INTERACT)){ + Block block; + if (eventType.equals(EventType.BLOCK_INTERACT)) { block = ((PlayerInteractEvent) minecraftEvent).getClickedBlock(); - }else{ + } else { block = ((BlockEvent) minecraftEvent).getBlock(); } - if(block != null){ - if(variable.startsWith("block_below_")){ + if (block != null) { + if (variable.startsWith("block_below_")) { // %block_below_<distance>% int distance = Integer.parseInt(variable.replace("block_below_", "")); Location l = block.getLocation().clone().add(0, -distance, 0); return PostEventVariableResult.replaced(GlobalVariablesUtils.getBlockTypeInLocation(l)); - }else if(variable.startsWith("block_above_")){ + } else if (variable.startsWith("block_above_")) { // %block_above_<distance>% int distance = Integer.parseInt(variable.replace("block_above_", "")); Location l = block.getLocation().clone().add(0, distance, 0); @@ -165,108 +162,107 @@ private static PostEventVariableResult replaceBlockEventsVariables(String variab } //Global ConditionalEvents variables - private static String replaceVariable(String variable,VariablesProperties variablesProperties,boolean smallVariable){ + private static String replaceVariable(String variable, VariablesProperties variablesProperties, boolean smallVariable) { Player finalPlayer = variablesProperties.getPlayer(); Player target = variablesProperties.getTarget(); Player to = variablesProperties.getToTarget(); - if(variable.startsWith("target:") && target != null){ + if (variable.startsWith("target:") && target != null) { finalPlayer = target; - variable = variable.replace("target:",""); - }else if(variable.startsWith("to:") && to != null){ + variable = variable.replace("target:", ""); + } else if (variable.startsWith("to:") && to != null) { finalPlayer = to; - variable = variable.replace("to:",""); + variable = variable.replace("to:", ""); } //Event variables ArrayList<StoredVariable> eventVariables = variablesProperties.getEventVariables(); - for(StoredVariable storedVariable : eventVariables){ - if(storedVariable.getValue() != null && variable.equals(storedVariable.getName().replace("%",""))){ + for (StoredVariable storedVariable : eventVariables) { + if (storedVariable.getValue() != null && variable.equals(storedVariable.getName().replace("%", ""))) { return storedVariable.getValue(); } } //Global variables - if(variable.equals("player")){ + if (variable.equals("player")) { // %player% return GlobalVariablesUtils.variablePlayer(finalPlayer); - }else if(variable.startsWith("playerblock_below_")){ + } else if (variable.startsWith("playerblock_below_")) { // %playerblock_below_<distance>% - return GlobalVariablesUtils.variablePlayerBlockBelow(finalPlayer,variable); - }else if(variable.startsWith("playerblock_above_")){ + return GlobalVariablesUtils.variablePlayerBlockBelow(finalPlayer, variable); + } else if (variable.startsWith("playerblock_above_")) { // %playerblock_above_<distance>% - return GlobalVariablesUtils.variablePlayerBlockAbove(finalPlayer,variable); - }else if(variable.equals("playerblock_inside")){ + return GlobalVariablesUtils.variablePlayerBlockAbove(finalPlayer, variable); + } else if (variable.equals("playerblock_inside")) { // %playerblock_inside% return GlobalVariablesUtils.variablePlayerBlockInside(finalPlayer); - }else if(variable.equals("player_is_outside")){ + } else if (variable.equals("player_is_outside")) { // %player_is_outside% return GlobalVariablesUtils.variablePlayerIsOutside(finalPlayer); - }else if(variable.equals("random_player")) { + } else if (variable.equals("random_player")) { // %random_player% return GlobalVariablesUtils.variableRandomPlayer(); - }else if(variable.startsWith("random_player_")) { + } else if (variable.startsWith("random_player_")) { // %random_player_<world>% return GlobalVariablesUtils.variableRandomPlayerWorld(variable); - }else if(variable.equals("random_last")) { + } else if (variable.equals("random_last")) { // %random_last% return GlobalVariablesUtils.variableLastRandomMinMax(); - }else if(variable.startsWith("random_")) { + } else if (variable.startsWith("random_")) { // %random_min_max% return GlobalVariablesUtils.variableRandomMinMax(variable); - }else if(variable.startsWith("randomword_")) { + } else if (variable.startsWith("randomword_")) { // %randomword_word1-word2-word3% return GlobalVariablesUtils.variableRandomWorld(variable); - }else if(variable.startsWith("playerarmor_name_")) { + } else if (variable.startsWith("playerarmor_name_")) { // %playerarmor_name_<type>% - return GlobalVariablesUtils.variablePlayerArmorName(finalPlayer,variable); - }else if(variable.startsWith("playerarmor_")) { + return GlobalVariablesUtils.variablePlayerArmorName(finalPlayer, variable); + } else if (variable.startsWith("playerarmor_")) { // %playerarmor_<type>% - return GlobalVariablesUtils.variablePlayerArmorType(finalPlayer,variable); - }else if(variable.startsWith("block_at_")) { + return GlobalVariablesUtils.variablePlayerArmorType(finalPlayer, variable); + } else if (variable.startsWith("block_at_")) { // %block_at_x_y_z_world% return GlobalVariablesUtils.variableBlockAt(variable); - }else if(variable.startsWith("block_data_at_")) { + } else if (variable.startsWith("block_data_at_")) { // %block_data_at_x_y_z_world% return GlobalVariablesUtils.variableBlockDataAt(variable); - }else if(variable.startsWith("is_nearby_")) { + } else if (variable.startsWith("is_nearby_")) { // %is_nearby_x_y_z_world_radius% - return GlobalVariablesUtils.variableIsNearby(finalPlayer,variable); - }else if(variable.startsWith("world_time_")) { + return GlobalVariablesUtils.variableIsNearby(finalPlayer, variable); + } else if (variable.startsWith("world_time_")) { // %world_time_<world>% return GlobalVariablesUtils.variableWorldTime(variable); - }else if(variable.equals("world_is_raining")){ + } else if (variable.equals("world_is_raining")) { // %world_is_raining% return GlobalVariablesUtils.variableWorldIsRaining(finalPlayer); - }else if(variable.equals("player_attack_cooldown")){ + } else if (variable.equals("player_attack_cooldown")) { // %player_attack_cooldown% return GlobalVariablesUtils.variablePlayerAttackCooldown(finalPlayer); - }else if(variable.startsWith("is_number_")) { + } else if (variable.startsWith("is_number_")) { // %is_number_<variable>% return GlobalVariablesUtils.isNumber(variable); - }else if(variable.startsWith("player_location_")) { + } else if (variable.startsWith("player_location_")) { // %player_location_<coord>_<front_value>_<side_value>_<up_value>% - return GlobalVariablesUtils.variablePlayerLocationDirectional(finalPlayer,variable); - } - else if(variable.equals("empty")) { + return GlobalVariablesUtils.variablePlayerLocationDirectional(finalPlayer, variable); + } else if (variable.equals("empty")) { return ""; } //Post-Event variables - PostEventVariableResult result = replaceEventVariablesPost(variable,variablesProperties); - if(result.isReplaced()){ + PostEventVariableResult result = replaceEventVariablesPost(variable, variablesProperties); + if (result.isReplaced()) { return result.getVariable(); } //PlaceholderAPI variables - if(variablesProperties.isPlaceholderAPI()){ + if (variablesProperties.isPlaceholderAPI()) { String variableBefore = variable; - variable = PlaceholderAPI.setPlaceholders(finalPlayer,"%"+variable+"%"); - if(("%"+variableBefore+"%").equals(variable)){ + variable = PlaceholderAPI.setPlaceholders(finalPlayer, "%" + variable + "%"); + if (("%" + variableBefore + "%").equals(variable)) { //Was not replaced - if(smallVariable){ - variable = "{"+variableBefore+"}"; - }else{ - variable = "%"+variableBefore+"%"; + if (smallVariable) { + variable = "{" + variableBefore + "}"; + } else { + variable = "%" + variableBefore + "%"; } } } @@ -275,8 +271,4 @@ else if(variable.equals("empty")) { } - - - - } diff --git a/src/main/java/ce/ajneb97/utils/VariablesUtilsExperimental.java b/src/main/java/ce/ajneb97/utils/VariablesUtilsExperimental.java index 8c7b2a9..59a1697 100644 --- a/src/main/java/ce/ajneb97/utils/VariablesUtilsExperimental.java +++ b/src/main/java/ce/ajneb97/utils/VariablesUtilsExperimental.java @@ -5,7 +5,6 @@ import ce.ajneb97.model.internal.PostEventVariableResult; import ce.ajneb97.model.internal.VariablesProperties; import me.clip.placeholderapi.PlaceholderAPI; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -21,23 +20,22 @@ public class VariablesUtilsExperimental { private static final Pattern subVariablesPattern = Pattern.compile("\\{([^{}]+)}"); - - public static String replaceAllVariablesInLine(String textLine,VariablesProperties variablesProperties){ + public static String replaceAllVariablesInLine(String textLine, VariablesProperties variablesProperties) { StringBuilder newText = new StringBuilder(); int pos = 0; - while(pos < textLine.length()){ + while (pos < textLine.length()) { char posChar = textLine.charAt(pos); - if(posChar == '%'){ - int indexLast = textLine.indexOf('%',pos+1); - if(indexLast != -1){ - String variable = textLine.substring(pos,indexLast+1); - String replacedSubVariables = replaceSubVariables(variable,variablesProperties); - String finalReplaced = manageVariableReplacement(replacedSubVariables.substring(1,replacedSubVariables.length()-1),variablesProperties,false); + if (posChar == '%') { + int indexLast = textLine.indexOf('%', pos + 1); + if (indexLast != -1) { + String variable = textLine.substring(pos, indexLast + 1); + String replacedSubVariables = replaceSubVariables(variable, variablesProperties); + String finalReplaced = manageVariableReplacement(replacedSubVariables.substring(1, replacedSubVariables.length() - 1), variablesProperties, false); pos = indexLast; - if(variable.equals(finalReplaced)){ + if (variable.equals(finalReplaced)) { pos--; - finalReplaced = finalReplaced.substring(0,finalReplaced.length()-1); + finalReplaced = finalReplaced.substring(0, finalReplaced.length() - 1); } pos++; @@ -52,20 +50,20 @@ public static String replaceAllVariablesInLine(String textLine,VariablesProperti return newText.toString(); } - private static String replaceSubVariables(String input,VariablesProperties variablesProperties) { + private static String replaceSubVariables(String input, VariablesProperties variablesProperties) { boolean parseOther = input.contains("parseother_"); Matcher matcher = subVariablesPattern.matcher(input); StringBuffer buffer = new StringBuffer(); int finds = 0; while (matcher.find()) { - if(parseOther && finds >= 1){ + if (parseOther && finds >= 1) { break; } String variable = matcher.group(1); - String replacement = manageVariableReplacement(variable,variablesProperties,true); - if(parseOther && finds == 0){ - replacement = "{"+replacement+"}"; + String replacement = manageVariableReplacement(variable, variablesProperties, true); + if (parseOther && finds == 0) { + replacement = "{" + replacement + "}"; } matcher.appendReplacement(buffer, Matcher.quoteReplacement(replacement)); @@ -75,73 +73,73 @@ private static String replaceSubVariables(String input,VariablesProperties varia String replaced = buffer.toString(); if (!parseOther && !replaced.equals(input)) { - return replaceSubVariables(replaced,variablesProperties); + return replaceSubVariables(replaced, variablesProperties); } return replaced; } //Post-Event variables - private static PostEventVariableResult replaceEventVariablesPost(String variable, VariablesProperties variablesProperties){ + private static PostEventVariableResult replaceEventVariablesPost(String variable, VariablesProperties variablesProperties) { EventType eventType = variablesProperties.getEvent().getEventType(); - if(eventType.equals(EventType.PLAYER_COMMAND) || eventType.equals(EventType.CONSOLE_COMMAND)){ - return replaceCommandEventsVariables(variable,variablesProperties); - }else if(eventType.name().startsWith("BLOCK_")){ - return replaceBlockEventsVariables(variable,variablesProperties,eventType); + if (eventType.equals(EventType.PLAYER_COMMAND) || eventType.equals(EventType.CONSOLE_COMMAND)) { + return replaceCommandEventsVariables(variable, variablesProperties); + } else if (eventType.name().startsWith("BLOCK_")) { + return replaceBlockEventsVariables(variable, variablesProperties, eventType); } return PostEventVariableResult.noReplaced(); } - private static PostEventVariableResult replaceCommandEventsVariables(String variable,VariablesProperties variablesProperties){ - if(variable.startsWith("args_substring_")){ + private static PostEventVariableResult replaceCommandEventsVariables(String variable, VariablesProperties variablesProperties) { + if (variable.startsWith("args_substring_")) { //%args_substring_<param1>-<param2>% String variableLR = variable.replace("args_substring_", ""); String[] variableLRSplit = variableLR.split("-"); String param1 = variableLRSplit[0]; String param2 = variableLRSplit[1]; - String finalSubstring = ""; + StringBuilder finalSubstring = new StringBuilder(); boolean started = false; - for(StoredVariable storedVariable : variablesProperties.getEventVariables()){ + for (StoredVariable storedVariable : variablesProperties.getEventVariables()) { String name = storedVariable.getName(); String value = storedVariable.getValue(); - if(name.equals("%arg_"+param1+"%")){ + if (name.equals("%arg_" + param1 + "%")) { started = true; } - if(started){ - if(name.equals("%arg_"+param2+"%")){ - finalSubstring = finalSubstring+value; + if (started) { + if (name.equals("%arg_" + param2 + "%")) { + finalSubstring.append(value); started = false; - }else{ - finalSubstring = finalSubstring+value+" "; + } else { + finalSubstring.append(value).append(" "); } } } - return PostEventVariableResult.replaced(finalSubstring); + return PostEventVariableResult.replaced(finalSubstring.toString()); } return PostEventVariableResult.noReplaced(); } - private static PostEventVariableResult replaceBlockEventsVariables(String variable,VariablesProperties variablesProperties,EventType eventType){ + private static PostEventVariableResult replaceBlockEventsVariables(String variable, VariablesProperties variablesProperties, EventType eventType) { Event minecraftEvent = variablesProperties.getMinecraftEvent(); - if(minecraftEvent == null){ + if (minecraftEvent == null) { return PostEventVariableResult.noReplaced(); } Block block = null; - if(eventType.equals(EventType.BLOCK_INTERACT)){ + if (eventType.equals(EventType.BLOCK_INTERACT)) { block = ((PlayerInteractEvent) minecraftEvent).getClickedBlock(); - }else{ + } else { block = ((BlockEvent) minecraftEvent).getBlock(); } - if(block != null){ - if(variable.startsWith("block_below_")){ + if (block != null) { + if (variable.startsWith("block_below_")) { // %block_below_<distance>% int distance = Integer.parseInt(variable.replace("block_below_", "")); Location l = block.getLocation().clone().add(0, -distance, 0); return PostEventVariableResult.replaced(GlobalVariablesUtils.getBlockTypeInLocation(l)); - }else if(variable.startsWith("block_above_")){ + } else if (variable.startsWith("block_above_")) { // %block_above_<distance>% int distance = Integer.parseInt(variable.replace("block_above_", "")); Location l = block.getLocation().clone().add(0, distance, 0); @@ -153,114 +151,113 @@ private static PostEventVariableResult replaceBlockEventsVariables(String variab } //Global ConditionalEvents variables - private static String manageVariableReplacement(String variable,VariablesProperties variablesProperties,boolean smallVariable){ + private static String manageVariableReplacement(String variable, VariablesProperties variablesProperties, boolean smallVariable) { Player finalPlayer = variablesProperties.getPlayer(); Player target = variablesProperties.getTarget(); Player to = variablesProperties.getToTarget(); - if(variable.startsWith("target:") && target != null){ + if (variable.startsWith("target:") && target != null) { finalPlayer = target; - variable = variable.replace("target:",""); - }else if(variable.startsWith("to:") && to != null){ + variable = variable.replace("target:", ""); + } else if (variable.startsWith("to:") && to != null) { finalPlayer = to; - variable = variable.replace("to:",""); + variable = variable.replace("to:", ""); } //Event variables ArrayList<StoredVariable> eventVariables = variablesProperties.getEventVariables(); - for(StoredVariable storedVariable : eventVariables){ - if(storedVariable.getValue() != null && variable.equals(storedVariable.getName().replace("%",""))){ + for (StoredVariable storedVariable : eventVariables) { + if (storedVariable.getValue() != null && variable.equals(storedVariable.getName().replace("%", ""))) { return storedVariable.getValue(); } } //Global variables - if(variable.equals("player")){ + if (variable.equals("player")) { // %player% return GlobalVariablesUtils.variablePlayer(finalPlayer); - }else if(variable.startsWith("playerblock_below_")){ + } else if (variable.startsWith("playerblock_below_")) { // %playerblock_below_<distance>% - return GlobalVariablesUtils.variablePlayerBlockBelow(finalPlayer,variable); - }else if(variable.startsWith("playerblock_above_")){ + return GlobalVariablesUtils.variablePlayerBlockBelow(finalPlayer, variable); + } else if (variable.startsWith("playerblock_above_")) { // %playerblock_above_<distance>% - return GlobalVariablesUtils.variablePlayerBlockAbove(finalPlayer,variable); - }else if(variable.equals("playerblock_inside")){ + return GlobalVariablesUtils.variablePlayerBlockAbove(finalPlayer, variable); + } else if (variable.equals("playerblock_inside")) { // %playerblock_inside% return GlobalVariablesUtils.variablePlayerBlockInside(finalPlayer); - }else if(variable.equals("player_is_outside")){ + } else if (variable.equals("player_is_outside")) { // %player_is_outside% return GlobalVariablesUtils.variablePlayerIsOutside(finalPlayer); - }else if(variable.equals("random_player")) { + } else if (variable.equals("random_player")) { // %random_player% return GlobalVariablesUtils.variableRandomPlayer(); - }else if(variable.startsWith("random_player_")) { + } else if (variable.startsWith("random_player_")) { // %random_player_<world>% return GlobalVariablesUtils.variableRandomPlayerWorld(variable); - }else if(variable.equals("random_last")) { + } else if (variable.equals("random_last")) { // %random_last% return GlobalVariablesUtils.variableLastRandomMinMax(); - }else if(variable.startsWith("random_")) { + } else if (variable.startsWith("random_")) { // %random_min_max% return GlobalVariablesUtils.variableRandomMinMax(variable); - }else if(variable.startsWith("randomword_")) { + } else if (variable.startsWith("randomword_")) { // %randomword_word1-word2-word3% return GlobalVariablesUtils.variableRandomWorld(variable); - }else if(variable.startsWith("playerarmor_name_")) { + } else if (variable.startsWith("playerarmor_name_")) { // %playerarmor_name_<type>% - return GlobalVariablesUtils.variablePlayerArmorName(finalPlayer,variable); - }else if(variable.startsWith("playerarmor_")) { + return GlobalVariablesUtils.variablePlayerArmorName(finalPlayer, variable); + } else if (variable.startsWith("playerarmor_")) { // %playerarmor_<type>% - return GlobalVariablesUtils.variablePlayerArmorType(finalPlayer,variable); - }else if(variable.startsWith("block_at_")) { + return GlobalVariablesUtils.variablePlayerArmorType(finalPlayer, variable); + } else if (variable.startsWith("block_at_")) { // %block_at_x_y_z_world% return GlobalVariablesUtils.variableBlockAt(variable); - }else if(variable.startsWith("block_data_at_")) { + } else if (variable.startsWith("block_data_at_")) { // %block_data_at_x_y_z_world% return GlobalVariablesUtils.variableBlockDataAt(variable); - }else if(variable.startsWith("is_nearby_")) { + } else if (variable.startsWith("is_nearby_")) { // %is_nearby_x_y_z_world_radius% - return GlobalVariablesUtils.variableIsNearby(finalPlayer,variable); - }else if(variable.startsWith("world_time_")) { + return GlobalVariablesUtils.variableIsNearby(finalPlayer, variable); + } else if (variable.startsWith("world_time_")) { // %world_time_<world>% return GlobalVariablesUtils.variableWorldTime(variable); - }else if(variable.equals("world_is_raining")){ + } else if (variable.equals("world_is_raining")) { // %world_is_raining% return GlobalVariablesUtils.variableWorldIsRaining(finalPlayer); - }else if(variable.equals("player_attack_cooldown")){ + } else if (variable.equals("player_attack_cooldown")) { // %player_attack_cooldown% return GlobalVariablesUtils.variablePlayerAttackCooldown(finalPlayer); - }else if(variable.startsWith("is_number_")) { + } else if (variable.startsWith("is_number_")) { // %is_number_<variable>% return GlobalVariablesUtils.isNumber(variable); - }else if(variable.startsWith("player_location_")) { + } else if (variable.startsWith("player_location_")) { // %player_location_<coord>_<front_value>_<side_value>_<up_value>% - return GlobalVariablesUtils.variablePlayerLocationDirectional(finalPlayer,variable); - } - else if(variable.equals("empty")) { + return GlobalVariablesUtils.variablePlayerLocationDirectional(finalPlayer, variable); + } else if (variable.equals("empty")) { return ""; } //Post-Event variables - PostEventVariableResult result = replaceEventVariablesPost(variable,variablesProperties); - if(result.isReplaced()){ + PostEventVariableResult result = replaceEventVariablesPost(variable, variablesProperties); + if (result.isReplaced()) { return result.getVariable(); } //PlaceholderAPI variables - if(variablesProperties.isPlaceholderAPI()){ + if (variablesProperties.isPlaceholderAPI()) { String variableBefore = variable; - variable = PlaceholderAPI.setPlaceholders(finalPlayer,"%"+variable+"%"); - if(!("%"+variableBefore+"%").equals(variable)){ + variable = PlaceholderAPI.setPlaceholders(finalPlayer, "%" + variable + "%"); + if (!("%" + variableBefore + "%").equals(variable)) { //Was replaced return variable; - }else{ + } else { variable = variableBefore; } } - if(smallVariable){ - return "{"+variable+"}"; - }else{ - return "%"+variable+"%"; + if (smallVariable) { + return "{" + variable + "}"; + } else { + return "%" + variable + "%"; } } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 6c73528..10a25d9 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -11,6 +11,21 @@ Config: to_condition_groups: group1: - "%player_has_permission_conditionalevents.somepermission% == yes" + mysql_database: + enabled: false + migrate: false + host: localhost + port: 3306 + username: root + password: '' + database: conditionalevents + pool: + connectionTimeout: 5000 + advanced: + verifyServerCertificate: false + useSSL: true + allowPublicKeyRetrieval: true + Messages: prefix: '&4[&bConditionalEvents&4] ' commandReload: '&aConfig Reloaded.' @@ -53,82 +68,4 @@ Messages: savedItemAdded: "&aItem &7%name% &asaved." commandInterruptError: '&cUse &7/ce interrupt <event> (optional)<player>' commandInterruptCorrect: '&aActions of event &7%event% &ainterrupted.' - commandInterruptCorrectPlayer: '&aActions of event &7%event% &ainterrupted for player &7%player%&a.' -Events: - event1: - type: player_join - conditions: - - '%player% == Ajneb' - actions: - default: - - 'to_all: message: &e&l[ALERT] &f&lAjneb joined the game!' - event2: - type: block_interact - one_time: true - conditions: - - '%block_x% == 20' - - '%block_y% == 60' - - '%block_z% == 20' - - '%block_world% == lobby' - - '%block% == STONE_BUTTON' - - '%action_type% == RIGHT_CLICK' - - '%player_has_permission_conditionalevents.event.event2% == no execute actions2' - actions: - default: - - 'message: &aYou''ve received $500!' - - 'console_command: eco give %player% 500' - - 'playsound: ENTITY_PLAYER_LEVELUP;10;2' - actions2: - - 'message: &cYou need to have a rank to use this button.' - one_time: - - 'message: &cYou can claim this reward just once!' - event3: - type: player_attack - conditions: - - '%victim% == PLAYER' - - '%item% == DIAMOND_SWORD' - - '%item_name% == Super Sword' - - '%random_1_10% >= 8' - actions: - default: - - 'message: &aYour diamond sword poison effect was activated! &6%target:player_name% &ais now poisoned!' - - 'to_target: give_potion_effect: POISON;120;1' - - 'to_target: message: &cYou were poisoned by &e%player%&c!' - event4: - type: block_break - ignore_with_permission: conditionalevents.ignore.event4 - conditions: - - '%block_world% == spawn' - actions: - default: - - 'cancel_event: true' - - 'message: &cYou can''t break blocks on this world.' - - 'playsound: BLOCK_NOTE_BLOCK_PLING;10;0.1' - event5: - type: player_command - ignore_with_permission: conditionalevents.ignore.event5 - conditions: - - '%main_command% equalsIgnoreCase //calc or %main_command% equalsIgnoreCase //solve or %main_command% equalsIgnoreCase //eval' - actions: - default: - - 'cancel_event: true' - - 'kick: &cWhat are you trying to do?' - event6: - type: repetitive - repetitive_time: 10 - conditions: - - '%player_world% == plotworld' - - '%player_gamemode% != CREATIVE' - actions: - default: - - 'gamemode: CREATIVE' - - 'actionbar: &6Changing gamemode to creative.;100' - event7: - type: player_command - conditions: - - '%main_command% == /hello' - actions: - default: - - 'cancel_event: true' - - "message: &7You said hello to nearby players!" - - 'to_range: 10;false: message: &e%player% &7says you hello!' + commandInterruptCorrectPlayer: '&aActions of event &7%event% &ainterrupted for player &7%player%&a.' \ No newline at end of file diff --git a/src/main/resources/events/more_events.yml b/src/main/resources/events/events.yml similarity index 100% rename from src/main/resources/events/more_events.yml rename to src/main/resources/events/events.yml diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 6503432..ec2a8ca 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,6 +4,7 @@ name: ConditionalEvents api-version: 1.13 softdepend: [PlaceholderAPI,Citizens,WorldGuardEvents,WorldGuard,ProtocolLib,DiscordSRV] author: Ajneb97 +folia-supported: true commands: conditionalevents: