diff --git a/pom.xml b/pom.xml index 333783a0..ba045ed1 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.jeqo bloons - 1.1.0-BETA + 1.1.1-BETA jar Bloons diff --git a/src/main/java/net/jeqo/bloons/Bloons.java b/src/main/java/net/jeqo/bloons/Bloons.java index eb840cb1..fef8336d 100644 --- a/src/main/java/net/jeqo/bloons/Bloons.java +++ b/src/main/java/net/jeqo/bloons/Bloons.java @@ -7,8 +7,8 @@ import net.jeqo.bloons.utils.UpdateChecker; import net.jeqo.bloons.listeners.BalloonUnleashListener; import net.jeqo.bloons.listeners.ListenerCore; -import net.jeqo.bloons.listeners.MenuClickListener; -import net.jeqo.bloons.listeners.PlayerListener; +import net.jeqo.bloons.listeners.BalloonMenuListener; +import net.jeqo.bloons.listeners.BalloonPlayerListener; import net.jeqo.bloons.logger.Logger; import net.jeqo.bloons.utils.Metrics; import org.bukkit.plugin.java.JavaPlugin; @@ -42,9 +42,9 @@ public void onEnable() { setListenerCore(new ListenerCore(getInstance())); // Stage listeners - getListenerCore().stageListener(new PlayerListener()); + getListenerCore().stageListener(new BalloonPlayerListener()); getListenerCore().stageListener(new BalloonUnleashListener()); - getListenerCore().stageListener(new MenuClickListener()); + getListenerCore().stageListener(new BalloonMenuListener()); // Register all handlers getListenerCore().registerListeners(); diff --git a/src/main/java/net/jeqo/bloons/commands/CommandEquip.java b/src/main/java/net/jeqo/bloons/commands/CommandEquip.java index 0f645df7..0411d150 100644 --- a/src/main/java/net/jeqo/bloons/commands/CommandEquip.java +++ b/src/main/java/net/jeqo/bloons/commands/CommandEquip.java @@ -20,7 +20,7 @@ public class CommandEquip extends Command { public CommandEquip(JavaPlugin plugin) { super(plugin); this.addCommandAlias("equip"); - this.setCommandDescription("Equips a balloon to you"); + this.setCommandDescription("Equip a balloon"); this.setCommandSyntax("/bloons equip "); this.setRequiredPermission(CommandPermission.EQUIP); } @@ -34,15 +34,15 @@ public boolean execute(CommandSender sender, String[] args) { } String balloonID = args[0]; - MessageTranslations messageTranslations = new MessageTranslations(this.plugin); + MessageTranslations messageTranslations = new MessageTranslations(this.getPlugin()); - if (!this.plugin.getConfig().contains("balloons." + balloonID)) { + if (!this.getPlugin().getConfig().contains("balloons." + balloonID)) { Component balloonNotFoundMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("balloon-not-found")); player.sendMessage(balloonNotFoundMessage); return false; } - if (!player.hasPermission(this.plugin.getConfig().getString("balloons." + balloonID + ".permission", "balloons." + balloonID))) { + if (!player.hasPermission(this.getPlugin().getConfig().getString("balloons." + balloonID + ".permission", "balloons." + balloonID))) { Component noPermissionMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("no-permission")); player.sendMessage(noPermissionMessage); return false; @@ -54,7 +54,7 @@ public boolean execute(CommandSender sender, String[] args) { if (singleBalloonEquipEvent.isCancelled()) return false; - BalloonManagement.removeBalloon(player, Bloons.playerBalloons.get(player.getUniqueId())); + BalloonManagement.removeBalloon(player, Bloons.getPlayerBalloons().get(player.getUniqueId())); SingleBalloon.checkBalloonRemovalOrAdd(player, balloonID); player.playSound(player.getLocation(), Sound.ENTITY_CHICKEN_EGG, 1, 1); diff --git a/src/main/java/net/jeqo/bloons/commands/CommandForceEquip.java b/src/main/java/net/jeqo/bloons/commands/CommandForceEquip.java index 680a3c7f..ee799e59 100644 --- a/src/main/java/net/jeqo/bloons/commands/CommandForceEquip.java +++ b/src/main/java/net/jeqo/bloons/commands/CommandForceEquip.java @@ -18,7 +18,7 @@ public class CommandForceEquip extends Command { public CommandForceEquip(JavaPlugin plugin) { super(plugin); this.addCommandAlias("fequip"); - this.setCommandDescription("Force equips a balloon to you"); + this.setCommandDescription("Equip a balloon to a player"); this.setCommandSyntax("/bloons fequip "); this.setRequiredPermission(CommandPermission.FORCE); } @@ -30,7 +30,7 @@ public boolean execute(CommandSender sender, String[] args) { } Player player = Bukkit.getPlayer(args[0]); - MessageTranslations messageTranslations = new MessageTranslations(this.plugin); + MessageTranslations messageTranslations = new MessageTranslations(this.getPlugin()); if (player == null) { Component playerNotFoundMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("player-not-found")); @@ -39,7 +39,7 @@ public boolean execute(CommandSender sender, String[] args) { } String balloonID = args[1]; - if (!this.plugin.getConfig().contains("balloons." + balloonID)) { + if (!this.getPlugin().getConfig().contains("balloons." + balloonID)) { Component balloonNotFoundMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("balloon-not-found")); sender.sendMessage(balloonNotFoundMessage); return false; diff --git a/src/main/java/net/jeqo/bloons/commands/CommandForceUnequip.java b/src/main/java/net/jeqo/bloons/commands/CommandForceUnequip.java index aef4069d..b9abb295 100644 --- a/src/main/java/net/jeqo/bloons/commands/CommandForceUnequip.java +++ b/src/main/java/net/jeqo/bloons/commands/CommandForceUnequip.java @@ -19,7 +19,7 @@ public class CommandForceUnequip extends Command { public CommandForceUnequip(JavaPlugin plugin) { super(plugin); this.addCommandAlias("funequip"); - this.setCommandDescription("Force unequips a balloon that you have equipped"); + this.setCommandDescription("Unequip a balloon to a player"); this.setCommandSyntax("/bloons funequip "); this.setRequiredPermission(CommandPermission.FORCE); } @@ -27,27 +27,27 @@ public CommandForceUnequip(JavaPlugin plugin) { @Override public boolean execute(CommandSender sender, String[] args) { Player player = Bukkit.getPlayer(args[0]); - MessageTranslations messageTranslations = new MessageTranslations(this.plugin); + MessageTranslations messageTranslations = new MessageTranslations(this.getPlugin()); if (player == null) { Component playerNotFoundMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("player-not-found")); sender.sendMessage(playerNotFoundMessage); return false; } - SingleBalloon balloon = Bloons.playerBalloons.get(player.getUniqueId()); - if (balloon == null) { + SingleBalloon singleBalloon = Bloons.getPlayerBalloons().get(player.getUniqueId()); + if (singleBalloon == null) { player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1, 1); Component notEquippedMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("not-equipped")); sender.sendMessage(notEquippedMessage); return false; } - SingleBalloonForceUnequipEvent singleBalloonForceEquipEvent = new SingleBalloonForceUnequipEvent(player, balloon); + SingleBalloonForceUnequipEvent singleBalloonForceEquipEvent = new SingleBalloonForceUnequipEvent(player, singleBalloon); singleBalloonForceEquipEvent.callEvent(); if (singleBalloonForceEquipEvent.isCancelled()) return false; - BalloonManagement.removeBalloon(player, balloon); + BalloonManagement.removeBalloon(player, singleBalloon); Component unequipSuccessfulMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("unequipped")); sender.sendMessage(unequipSuccessfulMessage); return false; diff --git a/src/main/java/net/jeqo/bloons/commands/CommandReload.java b/src/main/java/net/jeqo/bloons/commands/CommandReload.java index bbcc1597..b35400af 100644 --- a/src/main/java/net/jeqo/bloons/commands/CommandReload.java +++ b/src/main/java/net/jeqo/bloons/commands/CommandReload.java @@ -3,7 +3,7 @@ import net.jeqo.bloons.Bloons; import net.jeqo.bloons.commands.manager.Command; import net.jeqo.bloons.commands.manager.enums.CommandPermission; -import net.jeqo.bloons.events.balloon.general.BloonsConfigReloadEvent; +import net.jeqo.bloons.events.general.BloonsConfigReloadEvent; import net.jeqo.bloons.utils.MessageTranslations; import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; @@ -15,14 +15,14 @@ public CommandReload(JavaPlugin plugin) { super(plugin); this.addCommandAlias("reload"); this.addCommandAlias("rl"); - this.setCommandDescription("Reloads the bloons config"); + this.setCommandDescription("Reload the Bloons config"); this.setCommandSyntax("/bloons reload"); this.setRequiredPermission(CommandPermission.RELOAD); } @Override public boolean execute(CommandSender sender, String[] args) { - MessageTranslations messageTranslations = new MessageTranslations(this.plugin); + MessageTranslations messageTranslations = new MessageTranslations(this.getPlugin()); BloonsConfigReloadEvent bloonsConfigReloadEvent = new BloonsConfigReloadEvent(); bloonsConfigReloadEvent.callEvent(); diff --git a/src/main/java/net/jeqo/bloons/commands/CommandUnequip.java b/src/main/java/net/jeqo/bloons/commands/CommandUnequip.java index 88647ecc..1286f662 100644 --- a/src/main/java/net/jeqo/bloons/commands/CommandUnequip.java +++ b/src/main/java/net/jeqo/bloons/commands/CommandUnequip.java @@ -18,7 +18,7 @@ public class CommandUnequip extends Command { public CommandUnequip(JavaPlugin plugin) { super(plugin); this.addCommandAlias("unequip"); - this.setCommandDescription("Equips a balloon to you"); + this.setCommandDescription("Unequip a balloon"); this.setCommandSyntax("/bloons unequip "); this.setRequiredPermission(CommandPermission.UNEQUIP); } @@ -28,7 +28,7 @@ public boolean execute(CommandSender sender, String[] args) { if (!(sender instanceof Player player)) return false; SingleBalloon singleBalloon = Bloons.getPlayerBalloons().get(player.getUniqueId()); - MessageTranslations messageTranslations = new MessageTranslations(this.plugin); + MessageTranslations messageTranslations = new MessageTranslations(this.getPlugin()); if (singleBalloon == null) { player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1, 1); diff --git a/src/main/java/net/jeqo/bloons/commands/manager/Command.java b/src/main/java/net/jeqo/bloons/commands/manager/Command.java index 46cdd64d..29bf55f7 100644 --- a/src/main/java/net/jeqo/bloons/commands/manager/Command.java +++ b/src/main/java/net/jeqo/bloons/commands/manager/Command.java @@ -15,14 +15,14 @@ public abstract class Command { protected JavaPlugin plugin; - @Setter + @Setter @Getter private CommandPermission requiredPermission; - @Setter + @Setter @Getter private CommandAccess requiredAccess = CommandAccess.ENABLED; - @Setter + @Setter @Getter private String commandSyntax; - @Setter - private String commandDescription; + @Setter @Getter + public String commandDescription; private final ArrayList commandAliases = new ArrayList<>(); public Command(JavaPlugin providedPlugin) { @@ -38,6 +38,13 @@ public void addCommandAlias(String alias) { this.getCommandAliases().add(alias); } + /** + * What's executed on the command run + * @param sender The sender of the command + * @param args The arguments of the command + * @return Whether the command was executed successfully + * @throws Exception If an error occurs during command execution + */ public abstract boolean execute(CommandSender sender, String[] args) throws Exception; /** diff --git a/src/main/java/net/jeqo/bloons/commands/manager/CommandCore.java b/src/main/java/net/jeqo/bloons/commands/manager/CommandCore.java index 04f2730a..117d91f6 100644 --- a/src/main/java/net/jeqo/bloons/commands/manager/CommandCore.java +++ b/src/main/java/net/jeqo/bloons/commands/manager/CommandCore.java @@ -39,15 +39,17 @@ public CommandCore(JavaPlugin providedPlugin) { this.commands = new ArrayList<>(); this.messageTranslations = new MessageTranslations(this.getPlugin()); + // Add any commands you want registered here addCommand(new CommandEquip(this.getPlugin())); addCommand(new CommandForceEquip(this.getPlugin())); addCommand(new CommandForceUnequip(this.getPlugin())); addCommand(new CommandReload(this.getPlugin())); addCommand(new CommandUnequip(this.getPlugin())); + // Register all commands staged registerCommands(); - Objects.requireNonNull(this.plugin.getCommand("bloons")).setTabCompleter(new CommandTabCompleter()); + Objects.requireNonNull(this.getPlugin().getCommand("bloons")).setTabCompleter(new CommandTabCompleter()); } /** @@ -57,6 +59,20 @@ public void registerCommands() { Objects.requireNonNull(this.getPlugin().getCommand("bloons")).setExecutor(this); } + /** + * Gets a commands description by its alias + * @param commandAlias The alias of the command + * @return The description of the command + */ + public String getCommandDescription(String commandAlias) { + for (Command command : this.getCommands()) { + if (command.getCommandAliases().contains(commandAlias)) { + return command.getCommandDescription(); + } + } + return null; + } + /** * Adds a command to the commands list * @param command The command to add @@ -75,7 +91,7 @@ public boolean onCommand(@NotNull CommandSender sender, org.bukkit.command.@NotN } if (!player.hasPermission("bloons.menu")) { - Component noPermission = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("no-permission")); + Component noPermission = this.getMessageTranslations().getSerializedString(this.getMessageTranslations().getMessage("prefix"), this.getMessageTranslations().getMessage("no-permission")); player.sendMessage(noPermission); return true; } @@ -95,7 +111,7 @@ public boolean onCommand(@NotNull CommandSender sender, org.bukkit.command.@NotN } } - new BalloonMenu(items, messageTranslations.getString("menu-title"), player); + new BalloonMenu(items, this.getMessageTranslations().getString("menu-title"), player); return true; } @@ -107,7 +123,7 @@ public boolean onCommand(@NotNull CommandSender sender, org.bukkit.command.@NotN for (Command currentCommand : getCommands()) { if (currentCommand.getCommandAliases().contains(subcommand)) { if (!meetsRequirements(currentCommand, sender)) { - sender.sendMessage(messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("no-permission"))); + sender.sendMessage(this.getMessageTranslations().getSerializedString(this.getMessageTranslations().getMessage("prefix"), this.getMessageTranslations().getMessage("no-permission"))); return false; } @@ -146,8 +162,8 @@ public boolean meetsRequirements(Command command, CommandSender sender) { * @return Whether we should add the balloon to the menu */ private boolean shouldAddBalloon(Player player, String key) { - if (messageTranslations.getString("hide-balloons-without-permission").equalsIgnoreCase("true")) { - return player.hasPermission(messageTranslations.getString("balloons." + key + ".permission")); + if (this.getMessageTranslations().getString("hide-balloons-without-permission").equalsIgnoreCase("true")) { + return player.hasPermission(this.getMessageTranslations().getString("balloons." + key + ".permission")); } return true; } @@ -166,7 +182,7 @@ private ItemStack createBalloonItem(ConfigurationSection keySection, String key) ItemMeta meta = item.getItemMeta(); if (meta == null) return null; - meta.setLocalizedName(messageTranslations.getString("balloons." + key + ".id")); + meta.setLocalizedName(this.getMessageTranslations().getString("balloons." + key + ".id")); setBalloonLore(meta, keySection); setBalloonDisplayName(meta, keySection); meta.setCustomModelData(keySection.getInt("custom-model-data")); @@ -196,7 +212,7 @@ private void setBalloonLore(ItemMeta meta, ConfigurationSection keySection) { */ private void setBalloonDisplayName(ItemMeta meta, ConfigurationSection keySection) { String name = keySection.getString("name"); - MessageTranslations messageTranslations = new MessageTranslations(this.plugin); + MessageTranslations messageTranslations = new MessageTranslations(this.getPlugin()); if (name != null) { meta.displayName(messageTranslations.getSerializedString(name)); } diff --git a/src/main/java/net/jeqo/bloons/commands/utils/ErrorHandling.java b/src/main/java/net/jeqo/bloons/commands/utils/ErrorHandling.java index b02cc8af..17c2127c 100644 --- a/src/main/java/net/jeqo/bloons/commands/utils/ErrorHandling.java +++ b/src/main/java/net/jeqo/bloons/commands/utils/ErrorHandling.java @@ -1,37 +1,46 @@ package net.jeqo.bloons.commands.utils; -import net.jeqo.bloons.utils.ColorManagement; +import net.jeqo.bloons.Bloons; +import net.jeqo.bloons.configuration.PluginConfiguration; +import net.jeqo.bloons.utils.MessageTranslations; import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; public class ErrorHandling { public static void usage(CommandSender sender) { - sender.sendMessage(""); + MessageTranslations messageTranslations = new MessageTranslations(Bloons.getInstance()); + + sender.sendMessage(Component.text("")); if (sender.hasPermission("bloons.menu")) { - Component menuMessage = Component.text(ColorManagement.fromHex("#ff00cc/#e30ed5b#c61cddl#aa2be6o#8e39eeo#7147f7n#5555ffs &7- Open the balloon menu")); + Component menuMessage = messageTranslations.getSerializedString(" /bloons - Open the balloon menu"); sender.sendMessage(menuMessage); } + if (sender.hasPermission("bloons.equip")) { - Component equipMessage = Component.text(ColorManagement.fromHex("#ff00cc/#e30ed5b#c61cddl#aa2be6o#8e39eeq#7147fui#5555ffp &7- Equip a balloon")); + Component equipMessage = messageTranslations.getSerializedString(" /bloons equip - " + Bloons.getCommandCore().getCommandDescription("equip")); sender.sendMessage(equipMessage); } + if (sender.hasPermission("bloons.unequip")) { - Component unequipMessage = Component.text(ColorManagement.fromHex("#ff00cc/#e30ed5b#c61cddl#aa2be6o#8e39eeu#7147fni#5555ffp &7- Unequip a balloon")); + Component unequipMessage = messageTranslations.getSerializedString(" /bloons unequip - " + Bloons.getCommandCore().getCommandDescription("unequip")); sender.sendMessage(unequipMessage); } + if (sender.hasPermission("bloons.force")) { - Component forceEquipMessage = Component.text(ColorManagement.fromHex(" #ff00cc/#f107d0b#e30ed5l#d515d9o#c61cddo#b823e1n#aa2be6s #9c32eaf#8e39eee#8040f2q#7147f7u#634efbi#5555ffp &7- Equip a balloon to a player")); - Component forceUnequipMessage = Component.text(ColorManagement.fromHex(" #ff00cc/#f306d0b#e70cd3l#db12d7o#ce18dbo#c21eden#b624e2s #aa2be6f#9e31e9u#9237edn#863df0e#7943f4q#6d49f8u#614ffbi#5555ffp &7- Unequip a balloon from a player")); + Component forceEquipMessage = messageTranslations.getSerializedString(" /bloons fequip - " + Bloons.getCommandCore().getCommandDescription("fequip")); + Component forceUnequipMessage = messageTranslations.getSerializedString(" /bloons funequip - " + Bloons.getCommandCore().getCommandDescription("funequip")); sender.sendMessage(forceEquipMessage); sender.sendMessage(forceUnequipMessage); } + if (sender.hasPermission("bloons.reload")) { - Component reloadMessage = Component.text(ColorManagement.fromHex(" #ff00cc/#f107d0b#e30ed5l#d515d9o#c61cddo#b823e1n#aa2be6r #9c32eeo#8e39ee1#8040f2l#7147f7o#634efbi#5555ffd &7- Reload the Bloons config")); + Component reloadMessage = messageTranslations.getSerializedString(" /bloons reload - " + Bloons.getCommandCore().getCommandDescription("reload")); sender.sendMessage(reloadMessage); } + sender.sendMessage(Component.text("")); - Component creditsMessage = Component.text(ColorManagement.fromHex(" #ff00ccB#f406cfl#e80bd3o#dd11d6o#d217dan#c61cdds #bb22e01#b028e4.#a42de70#9933eb.#8e39ee1#823ef5-#7744f5B#6c4af8E#604ffcT#5555ffA &7- &fMade by Jeqo")); + Component creditsMessage = messageTranslations.getSerializedString(" Bloons " + PluginConfiguration.getVersion() + " - Made by " + PluginConfiguration.DEVELOPER_CREDITS); sender.sendMessage(creditsMessage); sender.sendMessage(Component.text("")); } diff --git a/src/main/java/net/jeqo/bloons/configuration/PluginConfiguration.java b/src/main/java/net/jeqo/bloons/configuration/PluginConfiguration.java index d204ff34..949834c7 100644 --- a/src/main/java/net/jeqo/bloons/configuration/PluginConfiguration.java +++ b/src/main/java/net/jeqo/bloons/configuration/PluginConfiguration.java @@ -6,7 +6,7 @@ * A class that contains configurations and information regarding the plugin */ public class PluginConfiguration { - // The developer credits for the plugin, displayed on startup + // The developer credits for the plugin, displayed on startup and in the help command public static final String DEVELOPER_CREDITS = "Jeqo and Gucci Fox"; /** diff --git a/src/main/java/net/jeqo/bloons/events/BloonsEvent.java b/src/main/java/net/jeqo/bloons/events/BloonsEvent.java index 4b2bd576..75ee2986 100644 --- a/src/main/java/net/jeqo/bloons/events/BloonsEvent.java +++ b/src/main/java/net/jeqo/bloons/events/BloonsEvent.java @@ -6,6 +6,10 @@ import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; +/** + * A custom even class that can be used to create our own bloons events + * These are nearly the same as Bukkit events and can be used interchangeably + */ public class BloonsEvent extends Event implements Cancellable { private static final HandlerList HANDLER_LIST = new HandlerList(); diff --git a/src/main/java/net/jeqo/bloons/events/balloon/general/BloonsConfigReloadEvent.java b/src/main/java/net/jeqo/bloons/events/general/BloonsConfigReloadEvent.java similarity index 68% rename from src/main/java/net/jeqo/bloons/events/balloon/general/BloonsConfigReloadEvent.java rename to src/main/java/net/jeqo/bloons/events/general/BloonsConfigReloadEvent.java index d795d74e..34f0ccd0 100644 --- a/src/main/java/net/jeqo/bloons/events/balloon/general/BloonsConfigReloadEvent.java +++ b/src/main/java/net/jeqo/bloons/events/general/BloonsConfigReloadEvent.java @@ -1,4 +1,4 @@ -package net.jeqo.bloons.events.balloon.general; +package net.jeqo.bloons.events.general; import net.jeqo.bloons.events.BloonsEvent; diff --git a/src/main/java/net/jeqo/bloons/listeners/MenuClickListener.java b/src/main/java/net/jeqo/bloons/listeners/BalloonMenuListener.java similarity index 95% rename from src/main/java/net/jeqo/bloons/listeners/MenuClickListener.java rename to src/main/java/net/jeqo/bloons/listeners/BalloonMenuListener.java index ba60cbcd..0c5020d1 100644 --- a/src/main/java/net/jeqo/bloons/listeners/MenuClickListener.java +++ b/src/main/java/net/jeqo/bloons/listeners/BalloonMenuListener.java @@ -2,7 +2,6 @@ import net.jeqo.bloons.Bloons; import net.jeqo.bloons.balloon.SingleBalloon; -import net.jeqo.bloons.events.balloon.SingleBalloonUnequipEvent; import net.jeqo.bloons.gui.menus.BalloonMenu; import net.jeqo.bloons.utils.BalloonManagement; import net.jeqo.bloons.utils.ColorCodeConverter; @@ -15,7 +14,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; -public class MenuClickListener implements Listener { +public class BalloonMenuListener implements Listener { /** * When a player interacts with the GUI menu, do the action required accordingly @@ -52,7 +51,7 @@ public void onClick(InventoryClickEvent event){ if (displayName.equals(ColorCodeConverter.adventureToColorCode(messageTranslations.getString("buttons.unequip.name")))) event.setCancelled(true); // Check if a balloon needs to be added or removed - BalloonManagement.removeBalloon(player, Bloons.playerBalloons.get(player.getUniqueId())); + BalloonManagement.removeBalloon(player, Bloons.getPlayerBalloons().get(player.getUniqueId())); SingleBalloon.checkBalloonRemovalOrAdd(player, localizedName); // Send equipped message and play sound @@ -102,7 +101,7 @@ else if(displayName.equals(ColorCodeConverter.adventureToColorCode(messageTransl event.setCancelled(true); if (!event.isShiftClick()) { - SingleBalloon balloon = Bloons.playerBalloons.get(player.getUniqueId()); + SingleBalloon balloon = Bloons.getPlayerBalloons().get(player.getUniqueId()); if (balloon == null) { // If no balloon equipped, play sound and send message notifying them diff --git a/src/main/java/net/jeqo/bloons/listeners/PlayerListener.java b/src/main/java/net/jeqo/bloons/listeners/BalloonPlayerListener.java similarity index 77% rename from src/main/java/net/jeqo/bloons/listeners/PlayerListener.java rename to src/main/java/net/jeqo/bloons/listeners/BalloonPlayerListener.java index 0633e2f1..670e58db 100644 --- a/src/main/java/net/jeqo/bloons/listeners/PlayerListener.java +++ b/src/main/java/net/jeqo/bloons/listeners/BalloonPlayerListener.java @@ -2,10 +2,8 @@ import net.jeqo.bloons.Bloons; import net.jeqo.bloons.balloon.SingleBalloon; -import net.jeqo.bloons.events.balloon.SingleBalloonEquipEvent; import net.jeqo.bloons.events.balloon.SingleBalloonForceUnequipEvent; import net.jeqo.bloons.events.balloon.SingleBalloonStoreEvent; -import net.jeqo.bloons.events.balloon.SingleBalloonUnequipEvent; import net.jeqo.bloons.utils.UpdateChecker; import net.jeqo.bloons.logger.Logger; import net.jeqo.bloons.utils.BalloonManagement; @@ -20,14 +18,14 @@ import java.util.Objects; -public class PlayerListener implements Listener { +public class BalloonPlayerListener implements Listener { /** * When a player quits, make sure to despawn and store their balloon in storage */ @EventHandler public void onQuit(PlayerQuitEvent e) { - SingleBalloon owner = Bloons.playerBalloons.get(e.getPlayer().getUniqueId()); + SingleBalloon owner = Bloons.getPlayerBalloons().get(e.getPlayer().getUniqueId()); SingleBalloonStoreEvent event = new SingleBalloonStoreEvent(e.getPlayer(), owner); event.callEvent(); @@ -41,16 +39,16 @@ public void onQuit(PlayerQuitEvent e) { @EventHandler public void onJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); - String balloonID = Bloons.playerBalloonID.get(event.getPlayer().getUniqueId()); + String balloonID = Bloons.getPlayerBalloonID().get(event.getPlayer().getUniqueId()); // If they have a balloon active, remove it and add it back to reduce issues if (balloonID != null) { - SingleBalloonForceUnequipEvent unequipEvent = new SingleBalloonForceUnequipEvent(player, Bloons.playerBalloons.get(player.getUniqueId())); + SingleBalloonForceUnequipEvent unequipEvent = new SingleBalloonForceUnequipEvent(player, Bloons.getPlayerBalloons().get(player.getUniqueId())); unequipEvent.callEvent(); if (!unequipEvent.isCancelled()) return; - BalloonManagement.removeBalloon(event.getPlayer(), Bloons.playerBalloons.get(event.getPlayer().getUniqueId())); + BalloonManagement.removeBalloon(event.getPlayer(), Bloons.getPlayerBalloons().get(event.getPlayer().getUniqueId())); SingleBalloon.checkBalloonRemovalOrAdd(event.getPlayer(), balloonID); } @@ -70,7 +68,7 @@ public void onJoin(PlayerJoinEvent event) { */ @EventHandler public void onDeath(PlayerDeathEvent event) { - SingleBalloon balloonOwner = Bloons.playerBalloons.get(Objects.requireNonNull(event.getEntity().getPlayer()).getUniqueId()); + SingleBalloon balloonOwner = Bloons.getPlayerBalloons().get(Objects.requireNonNull(event.getEntity().getPlayer()).getUniqueId()); SingleBalloonForceUnequipEvent unequipEvent = new SingleBalloonForceUnequipEvent(event.getEntity().getPlayer(), balloonOwner); unequipEvent.callEvent(); @@ -83,7 +81,7 @@ public void onDeath(PlayerDeathEvent event) { */ @EventHandler public void onRespawn(PlayerRespawnEvent event) { - String balloonID = Bloons.playerBalloonID.get(event.getPlayer().getUniqueId()); + String balloonID = Bloons.getPlayerBalloonID().get(event.getPlayer().getUniqueId()); if (balloonID != null) { SingleBalloon.checkBalloonRemovalOrAdd(event.getPlayer(), balloonID); @@ -95,8 +93,8 @@ public void onRespawn(PlayerRespawnEvent event) { */ @EventHandler public void onWorldChange(PlayerChangedWorldEvent event) { - SingleBalloon balloonOwner = Bloons.playerBalloons.get(event.getPlayer().getUniqueId()); - String balloonID = Bloons.playerBalloonID.get(event.getPlayer().getUniqueId()); + SingleBalloon balloonOwner = Bloons.getPlayerBalloons().get(event.getPlayer().getUniqueId()); + String balloonID = Bloons.getPlayerBalloonID().get(event.getPlayer().getUniqueId()); SingleBalloonStoreEvent storeEvent = new SingleBalloonStoreEvent(event.getPlayer(), balloonOwner); storeEvent.callEvent(); @@ -106,12 +104,12 @@ public void onWorldChange(PlayerChangedWorldEvent event) { BalloonManagement.storeBalloon(balloonOwner); if (balloonID != null) { - SingleBalloonForceUnequipEvent unequipEvent = new SingleBalloonForceUnequipEvent(event.getPlayer(), Bloons.playerBalloons.get(event.getPlayer().getUniqueId())); + SingleBalloonForceUnequipEvent unequipEvent = new SingleBalloonForceUnequipEvent(event.getPlayer(), Bloons.getPlayerBalloons().get(event.getPlayer().getUniqueId())); unequipEvent.callEvent(); if (unequipEvent.isCancelled()) return; - BalloonManagement.removeBalloon(event.getPlayer(), Bloons.playerBalloons.get(event.getPlayer().getUniqueId())); + BalloonManagement.removeBalloon(event.getPlayer(), Bloons.getPlayerBalloons().get(event.getPlayer().getUniqueId())); SingleBalloon.checkBalloonRemovalOrAdd(event.getPlayer(), balloonID); } diff --git a/src/main/java/net/jeqo/bloons/logger/Logger.java b/src/main/java/net/jeqo/bloons/logger/Logger.java index 6c1a8400..f0e3806f 100644 --- a/src/main/java/net/jeqo/bloons/logger/Logger.java +++ b/src/main/java/net/jeqo/bloons/logger/Logger.java @@ -30,6 +30,11 @@ public static void logToPlayer(LoggingLevel level, Player player, String message player.sendMessage(component); } + /** + * Logs a message to the specified player with the plugin prefix + * @param player The player to log the message to + * @param message The message to log + */ public static void logToPlayer(Player player, String message) { MessageTranslations messageTranslations = new MessageTranslations(Bloons.getInstance()); Component component = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix") + " " + message); diff --git a/src/main/java/net/jeqo/bloons/utils/BalloonManagement.java b/src/main/java/net/jeqo/bloons/utils/BalloonManagement.java index 72fc0c49..dbd220b7 100644 --- a/src/main/java/net/jeqo/bloons/utils/BalloonManagement.java +++ b/src/main/java/net/jeqo/bloons/utils/BalloonManagement.java @@ -6,6 +6,9 @@ import net.jeqo.bloons.events.balloon.SingleBalloonUnequipEvent; import org.bukkit.entity.Player; +/** + * A class to manage balloons and their removal + */ public class BalloonManagement { /** @@ -22,8 +25,8 @@ public static void removeBalloon(Player player, SingleBalloon owner) { owner.spawnRemoveParticle(); owner.cancel(); - Bloons.playerBalloons.remove(player.getUniqueId()); - Bloons.playerBalloonID.remove(player.getUniqueId()); + Bloons.getPlayerBalloons().remove(player.getUniqueId()); + Bloons.getPlayerBalloonID().remove(player.getUniqueId()); } } @@ -40,8 +43,8 @@ public static void quickRemoveBalloon(Player player, SingleBalloon owner) { if (event.isCancelled()) return; owner.cancel(); - Bloons.playerBalloons.remove(player.getUniqueId()); - Bloons.playerBalloonID.remove(player.getUniqueId()); + Bloons.getPlayerBalloons().remove(player.getUniqueId()); + Bloons.getPlayerBalloonID().remove(player.getUniqueId()); } } diff --git a/src/main/java/net/jeqo/bloons/utils/ColorCodeConverter.java b/src/main/java/net/jeqo/bloons/utils/ColorCodeConverter.java index e3a22502..81d01b4c 100644 --- a/src/main/java/net/jeqo/bloons/utils/ColorCodeConverter.java +++ b/src/main/java/net/jeqo/bloons/utils/ColorCodeConverter.java @@ -10,6 +10,7 @@ public class ColorCodeConverter { private static final Map colorCodes = new HashMap<>(); + // Add any adventure and minecraft equivalent color codes here static { colorCodes.put("", "§0"); colorCodes.put("", "§1"); diff --git a/src/main/java/net/jeqo/bloons/utils/MessageTranslations.java b/src/main/java/net/jeqo/bloons/utils/MessageTranslations.java index cd08e819..37796a33 100644 --- a/src/main/java/net/jeqo/bloons/utils/MessageTranslations.java +++ b/src/main/java/net/jeqo/bloons/utils/MessageTranslations.java @@ -4,30 +4,69 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.plugin.java.JavaPlugin; +/** + * A utility class intended to get messages from the config.yml file + * + * @param instance The instance of the plugin + */ public record MessageTranslations(JavaPlugin instance) { + /** + * Get a message from the config.yml file + * @param id The ID of the message + * @param arg The argument to format the message with + * @return The formatted message + */ public String getMessage(String id, String arg) { return String.format(this.instance.getConfig().getString("messages." + id, ""), arg); } + /** + * Get a message from the config.yml file + * @param id The ID of the message + * @return The message as a string + */ public String getMessage(String id) { return this.instance.getConfig().getString("messages." + id, ""); } + /** + * Converts a message containing MiniMessage serialized strings to a Component that can be used to + * send formatted messages with gradients, rainbows, etc. + * @param messagePrefix The prefix of the message + * @param messageSuffix The suffix of the message + * @return The formatted message as a Component + */ public Component getSerializedString(String messagePrefix, String messageSuffix) { MiniMessage mm = MiniMessage.miniMessage(); return mm.deserialize(messagePrefix + messageSuffix); } + /** + * Converts a message containing MiniMessage serialized strings to a Component that can be used to + * send formatted messages with gradients, rainbows, etc. + * @param message The message to convert + * @return The formatted message as a Component + */ public Component getSerializedString(String message) { MiniMessage mm = MiniMessage.miniMessage(); return mm.deserialize(message); } + /** + * Get a string from the config.yml file + * @param path The path to the string + * @return The string at the specified path + */ public String getString(String path) { return this.instance.getConfig().getString(path); } + /** + * Get an integer from the config.yml file + * @param path The path to the integer + * @return The integer at the specified path + */ public Integer getInt(String path) { return this.instance.getConfig().getInt(path); } diff --git a/src/main/java/net/jeqo/bloons/utils/UpdateChecker.java b/src/main/java/net/jeqo/bloons/utils/UpdateChecker.java index a5d93558..c047446c 100644 --- a/src/main/java/net/jeqo/bloons/utils/UpdateChecker.java +++ b/src/main/java/net/jeqo/bloons/utils/UpdateChecker.java @@ -1,5 +1,7 @@ package net.jeqo.bloons.utils; +import lombok.Getter; +import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import java.io.IOException; @@ -12,7 +14,9 @@ * A utility class intended to check for updates on the SpigotMC website */ public class UpdateChecker { + @Getter private final JavaPlugin plugin; + @Getter private final int resourceId; public UpdateChecker(JavaPlugin plugin, int resourceId) { @@ -25,13 +29,13 @@ public UpdateChecker(JavaPlugin plugin, int resourceId) { * @param consumer The consumer to accept the version */ public void getVersion(final Consumer consumer) { - Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> { - try (InputStream inputStream = new URL("https://api.spigotmc.org/legacy/update.php?resource=" + this.resourceId).openStream(); Scanner scanner = new Scanner(inputStream)) { + Bukkit.getScheduler().runTaskAsynchronously(this.getPlugin(), () -> { + try (InputStream inputStream = new URL("https://api.spigotmc.org/legacy/update.php?resource=" + this.getResourceId()).openStream(); Scanner scanner = new Scanner(inputStream)) { if (scanner.hasNext()) { consumer.accept(scanner.next()); } } catch (IOException exception) { - plugin.getLogger().info("[Bloons] Unable to check for updates: " + exception.getMessage()); + this.getPlugin().getLogger().info("[Bloons] Unable to check for updates: " + exception.getMessage()); } }); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index fcc7874d..67da6a7c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,6 +1,6 @@ # --------------------------------------------------# # -# Bloons 1.1.0-BETA +# Bloons 1.1.1-BETA # Made by Jeqo # # Wiki: https://jeqo.net/wiki/bloons diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index b08b2945..25a5b2f0 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,10 +3,10 @@ version: '${project.version}' main: net.jeqo.bloons.Bloons api-version: 1.18 prefix: Bloons -authors: [ Jeqo ] +authors: [ Jeqo, Gucci Fox ] description: A unique balloons plugin. -website: https://jeqo.net +website: https://jeqo.net/bloons commands: bloons: aliases: [balloons, b] - description: The central command to access the bloons commands. \ No newline at end of file + description: The central command to access the Bloons commands. \ No newline at end of file