├── .gitignore ├── README.md ├── libs ├── PandaAbilityAPI-1.0.1-SNAPSHOT.jar └── worldedit-bukkit-6.1.jar ├── pom.xml └── src └── main ├── java └── dev │ └── panda │ └── combofly │ ├── ComboFly.java │ ├── balance │ ├── Balance.java │ └── impl │ │ ├── Normal.java │ │ └── Vault.java │ ├── commands │ ├── PandaFlyCommand.java │ ├── essentials │ │ ├── BuildCommand.java │ │ ├── ClaimCommand.java │ │ ├── EnchantCommand.java │ │ ├── FlyCommand.java │ │ ├── GamemodeCommand.java │ │ ├── HelpCommand.java │ │ ├── KBCommand.java │ │ ├── MessageCommand.java │ │ ├── MoreCommand.java │ │ ├── PingCommand.java │ │ ├── RenameCommand.java │ │ ├── ReplyCommand.java │ │ ├── SkullCommand.java │ │ └── SpeedCommand.java │ ├── network │ │ ├── DiscordCommand.java │ │ ├── StoreCommand.java │ │ ├── TeamSpeakCommand.java │ │ ├── TwitterCommand.java │ │ └── WebsiteCommand.java │ ├── spawn │ │ ├── SetSpawnCommand.java │ │ └── SpawnCommand.java │ ├── staff │ │ ├── FreezeCommand.java │ │ ├── InvseeCommand.java │ │ ├── StaffListCommand.java │ │ ├── StaffModeCommand.java │ │ ├── TeleportAllCommand.java │ │ ├── TeleportCommand.java │ │ ├── TeleportHereCommand.java │ │ ├── TeleportPositionCommand.java │ │ ├── TopCommand.java │ │ └── VanishCommand.java │ └── warp │ │ ├── WarpCommand.java │ │ └── WarpManagerCommand.java │ ├── kit │ ├── KitManager.java │ ├── MenuKitManager.java │ ├── commands │ │ ├── KitCommand.java │ │ └── KitManagerCommand.java │ └── listener │ │ └── KitListener.java │ ├── koth │ ├── KoTH.java │ ├── KoTHListener.java │ ├── KoTHMenu.java │ ├── Selection.java │ ├── commands │ │ ├── HostCommand.java │ │ ├── KothCommand.java │ │ └── subcommands │ │ │ ├── CreateCommand.java │ │ │ ├── DeleteCommand.java │ │ │ ├── InformationCommand.java │ │ │ ├── ListCommand.java │ │ │ ├── ShowCommand.java │ │ │ ├── StartCommand.java │ │ │ ├── StopCommand.java │ │ │ ├── TeleportCommand.java │ │ │ └── WandCommand.java │ ├── cuboid │ │ ├── Cuboid.java │ │ └── CuboidDirection.java │ ├── event │ │ ├── EnterCuboidEvent.java │ │ └── LeaveCuboidEvent.java │ └── task │ │ └── KoTHRunnable.java │ ├── listeners │ ├── ChatListener.java │ ├── ClaimListener.java │ ├── CombatListener.java │ ├── EnderpearlListener.java │ ├── FreezeListener.java │ ├── KillStreakListener.java │ ├── KnockBackListener.java │ ├── PlayerListener.java │ ├── ShopListener.java │ └── StaffListener.java │ ├── managers │ ├── ClaimManager.java │ ├── CombatManager.java │ ├── EnderpearlManager.java │ ├── FreezeManager.java │ ├── InventoryManager.java │ ├── KBManager.java │ ├── KillStreakManager.java │ ├── SpawnManager.java │ ├── SpeedManager.java │ ├── StaffManager.java │ ├── VanishManager.java │ └── WarpManager.java │ ├── profile │ ├── Profile.java │ ├── ProfileListener.java │ ├── commands │ │ ├── EnderChestCommand.java │ │ ├── KillStreakCommand.java │ │ ├── StatsCommand.java │ │ ├── balance │ │ │ ├── BalanceCommand.java │ │ │ └── PayCommand.java │ │ └── leaderboard │ │ │ ├── LeaderboardCommand.java │ │ │ └── menu │ │ │ └── LeaderboardMenu.java │ ├── comparator │ │ ├── ProfileDeathsComparator.java │ │ └── ProfileKillsComparator.java │ └── entry │ │ └── KDEntry.java │ ├── providers │ └── ScoreboardProvider.java │ └── utilities │ ├── Animation.java │ ├── Cooldown.java │ ├── Description.java │ ├── Ints.java │ ├── LocationUtil.java │ ├── PlayerUtil.java │ ├── Time.java │ ├── TimeUtil.java │ ├── Utils.java │ ├── hooks │ ├── PandaAbilityHook.java │ └── PlaceholderAPIHook.java │ ├── menu │ ├── Button.java │ ├── ButtonListener.java │ ├── Menu.java │ ├── buttons │ │ ├── AirButton.java │ │ ├── BackButton.java │ │ ├── CloseButton.java │ │ └── PageInfoButton.java │ └── pagination │ │ ├── JumpToPageButton.java │ │ ├── PageButton.java │ │ ├── PaginatedMenu.java │ │ └── ViewAllPagesMenu.java │ ├── scoreboard │ ├── Assemble.java │ ├── AssembleAdapter.java │ ├── AssembleBoard.java │ ├── AssembleBoardEntry.java │ ├── AssembleListener.java │ ├── AssembleStyle.java │ ├── AssembleThread.java │ ├── events │ │ ├── AssembleBoardCreateEvent.java │ │ ├── AssembleBoardCreatedEvent.java │ │ └── AssembleBoardDestroyEvent.java │ └── listener │ │ └── AssembleListener.java │ └── staff │ └── StaffItems.java └── resources ├── claims.yml ├── config.yml ├── kit.yml ├── koths.yml ├── messages.yml ├── plugin.yml ├── profile.yml ├── scoreboard.yml ├── spawn.yml ├── staff-items.yml ├── tablist.yml └── warp.yml /.gitignore: -------------------------------------------------------------------------------- 1 | Yang.iml 2 | 3 | target/* 4 | 5 | .idea/* 6 | 7 | *.xml -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PandaFly 2 | 3 | 4 | **Terms and conditions of use** 5 | 6 | You cannot use it for commercial use, only for personal use or for your server 7 | If you use this, you must give the credits and link this repository. 8 | -------------------------------------------------------------------------------- /libs/PandaAbilityAPI-1.0.1-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Contrum/PandaFly/9862f869e1cc0df83c666cb6dd1a6e7b6f142629/libs/PandaAbilityAPI-1.0.1-SNAPSHOT.jar -------------------------------------------------------------------------------- /libs/worldedit-bukkit-6.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Contrum/PandaFly/9862f869e1cc0df83c666cb6dd1a6e7b6f142629/libs/worldedit-bukkit-6.1.jar -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | dev.panda.combofly 8 | ComboFly 9 | 1.0.0-FREE 10 | PandaFly 11 | 12 | 13 | UTF-8 14 | UTF-8 15 | 16 | 17 | 18 | 19 | spigot-repo 20 | https://hub.spigotmc.org/nexus/content/repositories/snapshots/ 21 | 22 | 23 | jitpack.io 24 | https://jitpack.io 25 | 26 | 27 | placeholder 28 | https://repo.extendedclip.com/content/repositories/placeholderapi/ 29 | 30 | 31 | sk89q 32 | http://maven.sk89q.com/repo/ 33 | 34 | 35 | 36 | 37 | 38 | 39 | org.spigotmc 40 | spigot-api 41 | 1.8.8-R0.1-SNAPSHOT 42 | provided 43 | 44 | 45 | 46 | 47 | org.projectlombok 48 | lombok 49 | 1.18.22 50 | provided 51 | 52 | 53 | 54 | 55 | com.sk89q.worldedit 56 | worldedit-bukkit 57 | 6.1-SNAPSHOT 58 | system 59 | ${project.basedir}/libs/worldedit-bukkit-6.1.jar 60 | 61 | 62 | 63 | 64 | me.clip 65 | placeholderapi 66 | 2.10.9 67 | provided 68 | 69 | 70 | 71 | 72 | com.github.MilkBowl 73 | VaultAPI 74 | 1.7 75 | provided 76 | 77 | 78 | 79 | 80 | dev.risas.ability 81 | PandaAbilityAPI 82 | dev 83 | system 84 | ${project.basedir}/libs/PandaAbilityAPI-1.0.1-SNAPSHOT.jar 85 | 86 | 87 | 88 | 89 | dev.panda 90 | Panda 91 | 1.0-SNAPSHOT 92 | compile 93 | 94 | 95 | 96 | 97 | clean install 98 | ${artifactId}-${project.version} 99 | 100 | 101 | src/main/resources 102 | true 103 | 104 | 105 | 106 | 107 | 3.6.1 108 | org.apache.maven.plugins 109 | maven-compiler-plugin 110 | 111 | 1.8 112 | 1.8 113 | 114 | 115 | org.projectlombok 116 | lombok 117 | 1.16.16 118 | 119 | 120 | 121 | 122 | 123 | org.apache.maven.plugins 124 | maven-shade-plugin 125 | 3.0.0 126 | 127 | 128 | false 129 | false 130 | 131 | 132 | 133 | package 134 | 135 | shade 136 | 137 | 138 | 139 | 140 | 141 | 142 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/balance/Balance.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.balance; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | public interface Balance { 6 | 7 | double getBalance(Player player); 8 | 9 | void setBalance(Player player, int amount); 10 | 11 | void giveBalance(Player player, int amount); 12 | 13 | void removeBalance(Player player, int amount); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/balance/impl/Normal.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.balance.impl; 2 | 3 | import dev.panda.combofly.profile.Profile; 4 | import dev.panda.combofly.balance.Balance; 5 | import org.bukkit.entity.Player; 6 | 7 | public class Normal implements Balance { 8 | 9 | @Override 10 | public double getBalance(Player player) { 11 | return Profile.getProfiles().get(player.getUniqueId()).getBalance(); 12 | } 13 | 14 | @Override 15 | public void setBalance(Player player, int amount) { 16 | Profile.getProfiles().get(player.getUniqueId()).setBalance(amount); 17 | } 18 | 19 | @Override 20 | public void giveBalance(Player player, int amount) { 21 | Profile.getProfiles().get(player.getUniqueId()).setBalance(amount); 22 | } 23 | 24 | @Override 25 | public void removeBalance(Player player, int amount) { 26 | Profile.getProfiles().get(player.getUniqueId()).setBalance(amount); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/balance/impl/Vault.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.balance.impl; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.combofly.balance.Balance; 5 | import net.milkbowl.vault.economy.EconomyResponse; 6 | import org.bukkit.entity.Player; 7 | 8 | public class Vault implements Balance { 9 | 10 | @Override 11 | public double getBalance(Player player) { 12 | return ComboFly.get().getEcon().getBalance(player); 13 | } 14 | 15 | @Override 16 | public void setBalance(Player player, int amount) { 17 | EconomyResponse response = ComboFly.get().getEcon().depositPlayer(player, amount); 18 | ComboFly.get().getEcon().format(response.amount); 19 | } 20 | 21 | @Override 22 | public void giveBalance(Player player, int amount) { 23 | EconomyResponse response = ComboFly.get().getEcon().depositPlayer(player, getBalance(player) + amount); 24 | ComboFly.get().getEcon().format(response.amount); 25 | } 26 | 27 | @Override 28 | public void removeBalance(Player player, int amount) { 29 | EconomyResponse response = ComboFly.get().getEcon().withdrawPlayer(player, amount); 30 | ComboFly.get().getEcon().format(response.amount); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/PandaFlyCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.combofly.utilities.Description; 6 | import dev.panda.command.BaseCommand; 7 | import dev.panda.command.Command; 8 | import dev.panda.command.CommandArgs; 9 | import org.bukkit.Bukkit; 10 | import org.bukkit.entity.Player; 11 | 12 | public class PandaFlyCommand extends BaseCommand { 13 | 14 | @Command(name = "pandafly", permission = "pandafly.plugin") 15 | @Override 16 | public void onCommand(CommandArgs command) { 17 | Player player = command.getPlayer(); 18 | String[] args = command.getArgs(); 19 | String label = command.getLabel(); 20 | 21 | if (args.length < 1) { 22 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 23 | return; 24 | } 25 | 26 | if (args[0].equalsIgnoreCase("info")) { 27 | if (!player.hasPermission("pandafly.info")) { 28 | player.sendMessage(ChatUtil.translate("&cYou don't have permissions")); 29 | return; 30 | } 31 | 32 | this.getInfo(player); 33 | } 34 | else if (args[0].equalsIgnoreCase("reload")) { 35 | if (!player.hasPermission("pandafly.reload")) { 36 | player.sendMessage(ChatUtil.translate("&cYou don't have permissions")); 37 | return; 38 | } 39 | 40 | this.reloadFiles(); 41 | for (Player online : Bukkit.getServer().getOnlinePlayers()) { 42 | if (ComboFly.get().getStaffManager().isStaffMode(online)) { 43 | ComboFly.get().getStaffManager().setStaffModeItems(online); 44 | } 45 | } 46 | player.sendMessage(ChatUtil.translate("&7[&c" + Description.getName() + "&7] " + 47 | "&aAll files has been successfully reloaded.")); 48 | } 49 | } 50 | 51 | private void getInfo(Player player) { 52 | player.sendMessage(ChatUtil.translate("&7&m----*---------------------------*----")); 53 | player.sendMessage(ChatUtil.translate(" ")); 54 | player.sendMessage(ChatUtil.translate(" &4\u2764 &c&l" + Description.getName() + " &4\u2764")); 55 | player.sendMessage(ChatUtil.translate("")); 56 | player.sendMessage(ChatUtil.translate(" &7\u27A5 &cAuthor&7: &f" + Description.getAuthors()) 57 | .replace("[", "") 58 | .replace("]", "")); 59 | player.sendMessage(ChatUtil.translate(" &7\u27A5 &cVersion&7: &f" + Description.getVersion())); 60 | player.sendMessage(ChatUtil.translate(" &7\u27A5 &cDiscord&7: &ahttps://discord.io/Panda-Community")); 61 | player.sendMessage(ChatUtil.translate(" ")); 62 | player.sendMessage(ChatUtil.translate("&7&m----*---------------------------*----")); 63 | } 64 | 65 | private void reloadFiles() { 66 | ComboFly.get().getMainConfig().reload(); 67 | ComboFly.get().getKitConfig().reload(); 68 | ComboFly.get().getMessageConfig().reload(); 69 | ComboFly.get().getWarpConfig().reload(); 70 | ComboFly.get().getProfileConfig().reload(); 71 | ComboFly.get().getScoreboardConfig().reload(); 72 | ComboFly.get().getStaffitemsConfig().reload(); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/BuildCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | public class BuildCommand extends BaseCommand { 14 | 15 | public static List mode = new ArrayList<>(); 16 | 17 | @Command(name = "build") 18 | @Override 19 | public void onCommand(CommandArgs command) { 20 | Player player = command.getPlayer(); 21 | 22 | if (mode.contains(player.getName())) { 23 | mode.remove(player.getName()); 24 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("BUILD.DISABLE"))); 25 | } 26 | else { 27 | mode.add(player.getName()); 28 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("BUILD.ENABLE"))); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/FlyCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.entity.Player; 10 | 11 | public class FlyCommand extends BaseCommand { 12 | 13 | @Command(name = "fly", permission = "pandafly.fly") 14 | @Override 15 | public void onCommand(CommandArgs command) { 16 | Player player = command.getPlayer(); 17 | String[] args = command.getArgs(); 18 | 19 | if (args.length < 1) { 20 | if (!player.hasPermission("pandafly.fly")) { 21 | player.sendMessage(ChatUtil.translate("&cYou don't have permissions")); 22 | return; 23 | } 24 | 25 | if (player.getAllowFlight()) { 26 | player.setAllowFlight(false); 27 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("FLY.DISABLE"))); 28 | } 29 | else { 30 | player.setAllowFlight(true); 31 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("FLY.ENABLE"))); 32 | } 33 | return; 34 | } 35 | 36 | Player target = Bukkit.getPlayer(args[0]); 37 | 38 | if (!player.hasPermission("pandafly.fly.others")) { 39 | player.sendMessage(ChatUtil.translate("&cYou don't have permissions")); 40 | return; 41 | } 42 | 43 | if (target == null) { 44 | player.sendMessage(ChatUtil.translate("&cPlayer not found.")); 45 | return; 46 | } 47 | 48 | if (target.getAllowFlight()) { 49 | target.setAllowFlight(false); 50 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("FLY.DISABLE-OTHERS") 51 | .replace("{target}", target.getName()))); 52 | } 53 | else { 54 | target.setAllowFlight(true); 55 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("FLY.ENABLE-OTHERS") 56 | .replace("{target}", target.getName()))); 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/GamemodeCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | 6 | import dev.panda.command.BaseCommand; 7 | import dev.panda.command.Command; 8 | import dev.panda.command.CommandArgs; 9 | import org.bukkit.GameMode; 10 | import org.bukkit.entity.Player; 11 | 12 | public class GamemodeCommand extends BaseCommand { 13 | 14 | @Command(name = "gamemode", permission = "pandafly.gamemode", aliases = "gm") 15 | @Override 16 | public void onCommand(CommandArgs command) { 17 | Player player = command.getPlayer(); 18 | String[] args = command.getArgs(); 19 | String label = command.getLabel(); 20 | 21 | if (args.length < 1) { 22 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 23 | return; 24 | } 25 | 26 | if (args[0].equalsIgnoreCase("0") || args[0].equalsIgnoreCase("survival") || 27 | args[0].equalsIgnoreCase("s")) { 28 | player.setGameMode(GameMode.SURVIVAL); 29 | } 30 | else if (args[0].equalsIgnoreCase("1") || args[0].equalsIgnoreCase("creative") || 31 | args[0].equalsIgnoreCase("c")) { 32 | player.setGameMode(GameMode.CREATIVE); 33 | } 34 | else if (args[0].equalsIgnoreCase("2") || args[0].equalsIgnoreCase("adventure") || 35 | args[0].equalsIgnoreCase("a")) { 36 | player.setGameMode(GameMode.ADVENTURE); 37 | } 38 | else { 39 | player.sendMessage(ChatUtil.translate("&cGamemode '" + args[0] + "' not found.")); 40 | return; 41 | } 42 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("GAMEMODE.CHANGE") 43 | .replace("{gamemode}", String.valueOf(player.getGameMode())))); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/HelpCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class HelpCommand extends BaseCommand { 11 | 12 | @Command(name = "help", permission = "pandafly.help") 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | Player player = command.getPlayer(); 16 | 17 | for (String lines : ComboFly.get().getMessageConfig().getStringList("HELP")) { 18 | player.sendMessage(ChatUtil.translate(lines 19 | .replace("{discord}", ComboFly.get().getMainConfig().getString("DISCORD")) 20 | .replace("{store}", ComboFly.get().getMainConfig().getString("STORE")) 21 | .replace("{teamspeak}", ComboFly.get().getMainConfig().getString("TEAMSPEAK")) 22 | .replace("{twitter}", ComboFly.get().getMainConfig().getString("TWITTER")) 23 | .replace("{website}", ComboFly.get().getMainConfig().getString("WEBSITE")))); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/KBCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class KBCommand extends BaseCommand { 11 | 12 | @Command(name = "knockback", permission = "pandafly.knockback", aliases = {"kb"}) 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | Player player = command.getPlayer(); 16 | String[] args = command.getArgs(); 17 | String label = command.getLabel(); 18 | 19 | if (args.length < 1) { 20 | this.getUsage(player, label); 21 | return; 22 | } 23 | if (args[0].equalsIgnoreCase("info")){ 24 | player.sendMessage(ChatUtil.translate("&7&m-----------------------------")); 25 | player.sendMessage(ChatUtil.translate("&4&lKnockback Info")); 26 | player.sendMessage(ChatUtil.translate("")); 27 | player.sendMessage(ChatUtil.translate("&cDirection X&7: &f" + ComboFly.get().getKbManager().getKbX())); 28 | player.sendMessage(ChatUtil.translate("&cDirection Y&7: &f" + ComboFly.get().getKbManager().getKbY())); 29 | player.sendMessage(ChatUtil.translate("&cDirection Z&7: &f" + ComboFly.get().getKbManager().getKbZ())); 30 | player.sendMessage(ChatUtil.translate("&cMaxHeight&7: &f" + ComboFly.get().getKbManager().getHeightKB())); 31 | player.sendMessage(ChatUtil.translate("")); 32 | player.sendMessage(ChatUtil.translate("&7&m-----------------------------")); 33 | } 34 | else if (args[0].equalsIgnoreCase("set")){ 35 | if (args.length < 4) { 36 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " set ")); 37 | return; 38 | } 39 | double getX = Double.parseDouble(args[1]); 40 | double getY = Float.parseFloat(args[2]); 41 | double getZ = Double.parseDouble(args[3]); 42 | if (getX <= 0) { 43 | player.sendMessage(ChatUtil.translate("&cDirection X must be positive.")); 44 | return; 45 | } 46 | if (getY <= 0) { 47 | player.sendMessage(ChatUtil.translate("&cDirection Y must be positive.")); 48 | return; 49 | } 50 | if (getZ <= 0) { 51 | player.sendMessage(ChatUtil.translate("&cDirection Z must be positive.")); 52 | return; 53 | } 54 | ComboFly.get().getKbManager().setKnockBack(getX, getY, getZ); 55 | player.sendMessage(ChatUtil.translate("&7[&c&lKnockBack&7] &fSuccessfully saved &cDirections&f.")); 56 | } 57 | else if (args[0].equalsIgnoreCase("setmaxheight")) { 58 | 59 | if (args.length < 2){ 60 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " setmaxheight ")); 61 | return; 62 | } 63 | 64 | double heightKB = Double.parseDouble(args[1]); 65 | if (heightKB <= 0) { 66 | player.sendMessage(ChatUtil.translate("&cmax height must be positive.")); 67 | return; 68 | } 69 | ComboFly.get().getKbManager().setHeightKB(heightKB); 70 | player.sendMessage(ChatUtil.translate("&7[&c&lKnockBack&7] &fSuccessfully saved &cMax Height&f.")); 71 | } 72 | else this.getUsage(player, label); 73 | } 74 | 75 | private void getUsage(Player player, String label){ 76 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/MessageCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import lombok.Getter; 9 | import org.bukkit.Bukkit; 10 | import org.bukkit.entity.Player; 11 | 12 | import java.util.HashMap; 13 | import java.util.Map; 14 | 15 | public class MessageCommand extends BaseCommand { 16 | 17 | @Getter private static MessageCommand instance; 18 | public Map lastMessage; 19 | 20 | public MessageCommand() { 21 | super(); 22 | instance = this; 23 | lastMessage = new HashMap<>(); 24 | } 25 | 26 | @Command(name = "message", aliases = {"msg", "tell", "m"}, permission = "pandafly.message") 27 | @Override 28 | public void onCommand(CommandArgs command) { 29 | Player player = command.getPlayer(); 30 | String[] args = command.getArgs(); 31 | String label = command.getLabel(); 32 | 33 | if (args.length < 2) { 34 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 35 | return; 36 | } 37 | 38 | Player target = Bukkit.getPlayer(args[0]); 39 | 40 | if (target == null) { 41 | player.sendMessage(ChatUtil.translate("&cPlayer not found.")); 42 | return; 43 | } 44 | 45 | StringBuilder message = new StringBuilder(); 46 | 47 | for (int i = 1; i != args.length; i++) { 48 | message.append(args[i]).append(" "); 49 | } 50 | 51 | String playerName = ComboFly.get().getRankManager().getRank().getPrefix(player.getUniqueId()) + player.getName(); 52 | String targetName = ComboFly.get().getRankManager().getRank().getPrefix(target.getUniqueId()) + target.getName(); 53 | 54 | lastMessage.put(player, target); 55 | lastMessage.put(target, player); 56 | 57 | target.playSound(target.getLocation(), org.bukkit.Sound.ORB_PICKUP, 1F, 1F); 58 | 59 | player.sendMessage(ChatUtil.translate("&7(To " + targetName + "&7) " + message)); 60 | target.sendMessage(ChatUtil.translate("&7(From " + playerName + "&7) " + message)); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/MoreCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.chat.ChatUtil; 4 | import dev.panda.combofly.utilities.Ints; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Material; 9 | import org.bukkit.entity.Player; 10 | import org.bukkit.inventory.ItemStack; 11 | 12 | public class MoreCommand extends BaseCommand { 13 | 14 | @Command(name = "more", permission = "pandafly.more") 15 | @Override 16 | public void onCommand(CommandArgs command) { 17 | Player player = command.getPlayer(); 18 | String[] args = command.getArgs(); 19 | String label = command.getLabel(); 20 | 21 | if (args.length < 1) { 22 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 23 | return; 24 | } 25 | 26 | Integer amount = Ints.tryParse(args[0]); 27 | 28 | if (amount == null) { 29 | player.sendMessage(ChatUtil.translate("&cAmount must be a number.")); 30 | return; 31 | } 32 | 33 | if (amount <= 0) { 34 | player.sendMessage(ChatUtil.translate("&cAmount must be positive.")); 35 | return; 36 | } 37 | 38 | ItemStack is = player.getItemInHand(); 39 | 40 | if (is == null || is.getType().equals(Material.AIR)) { 41 | player.sendMessage(ChatUtil.translate("&cYou need hold an item.")); 42 | return; 43 | } 44 | 45 | if (is.getAmount() >= 64) { 46 | player.sendMessage(ChatUtil.translate("&cYou already have x64.")); 47 | return; 48 | } 49 | 50 | this.moreItem(player, is, amount); 51 | } 52 | 53 | private void moreItem(Player player, ItemStack is, int amount) { 54 | is.setAmount(amount); 55 | player.setItemInHand(is); 56 | player.updateInventory(); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/PingCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.combofly.utilities.Utils; 6 | import dev.panda.command.BaseCommand; 7 | import dev.panda.command.Command; 8 | import dev.panda.command.CommandArgs; 9 | import org.bukkit.Bukkit; 10 | import org.bukkit.entity.Player; 11 | 12 | public class PingCommand extends BaseCommand { 13 | 14 | @Command(name = "ping", permission = "pandafly.ping") 15 | @Override 16 | public void onCommand(CommandArgs command) { 17 | Player player = command.getPlayer(); 18 | String[] args = command.getArgs(); 19 | 20 | if (args.length < 1) { 21 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("PING.PLAYER") 22 | .replace("{player}", player.getName()) 23 | .replace("{ping}", String.valueOf(Utils.getPlayerPing(player))))); 24 | return; 25 | } 26 | 27 | Player target = Bukkit.getPlayer(args[0]); 28 | 29 | if (target == null) { 30 | player.sendMessage(ChatUtil.translate("&cPlayer not found.")); 31 | return; 32 | } 33 | 34 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("PING.TARGET") 35 | .replace("{target}", target.getName()) 36 | .replace("{ping}", String.valueOf(Utils.getPlayerPing(target))))); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/RenameCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Material; 9 | import org.bukkit.entity.Player; 10 | import org.bukkit.inventory.ItemStack; 11 | import org.bukkit.inventory.meta.ItemMeta; 12 | 13 | public class RenameCommand extends BaseCommand { 14 | 15 | @Command(name = "rename", permission = "pandafly.rename") 16 | @Override 17 | public void onCommand(CommandArgs command) { 18 | Player player = command.getPlayer(); 19 | String[] args = command.getArgs(); 20 | String label = command.getLabel(); 21 | 22 | if (args.length < 1) { 23 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 24 | return; 25 | } 26 | 27 | ItemStack is = player.getItemInHand(); 28 | 29 | if (is == null || is.getType().equals(Material.AIR)) { 30 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("RENAME.NO-ITEM"))); 31 | return; 32 | } 33 | 34 | StringBuilder name = new StringBuilder(); 35 | ItemMeta meta = is.getItemMeta(); 36 | 37 | for (int i = 0; i != args.length; i++) { 38 | name.append(args[i]).append(" "); 39 | } 40 | 41 | meta.setDisplayName(ChatUtil.translate(name.toString())); 42 | is.setItemMeta(meta); 43 | 44 | player.setItemInHand(is); 45 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("RENAME.RENAMED") 46 | .replace("{rename}", name.toString()))); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/ReplyCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class ReplyCommand extends BaseCommand { 11 | 12 | @Command(name = "reply", aliases = "r", permission = "pandafly.reply") 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | Player player = command.getPlayer(); 16 | String[] args = command.getArgs(); 17 | String label = command.getLabel(); 18 | 19 | if (args.length < 1) { 20 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 21 | return; 22 | } 23 | 24 | Player target = MessageCommand.getInstance().lastMessage.get(player); 25 | 26 | if (target == null) { 27 | player.sendMessage(ChatUtil.translate("&cNothing to reply.")); 28 | return; 29 | } 30 | 31 | StringBuilder message = new StringBuilder(); 32 | 33 | for (int i = 0; i != args.length; i++) { 34 | message.append(args[i]).append(" "); 35 | } 36 | 37 | String playerName = ComboFly.get().getRankManager().getRank().getPrefix(player.getUniqueId()) + player.getName(); 38 | String targetName = ComboFly.get().getRankManager().getRank().getPrefix(target.getUniqueId()) + target.getName(); 39 | 40 | MessageCommand.getInstance().lastMessage.put(player, target); 41 | MessageCommand.getInstance().lastMessage.put(target, player); 42 | 43 | target.playSound(target.getLocation(), org.bukkit.Sound.ORB_PICKUP, 1F, 1F); 44 | 45 | player.sendMessage(ChatUtil.translate("&7(To " + targetName + "&7) " + message)); 46 | target.sendMessage(ChatUtil.translate("&7(From " + playerName + "&7) " + message)); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/SkullCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Material; 9 | import org.bukkit.entity.Player; 10 | import org.bukkit.inventory.ItemStack; 11 | import org.bukkit.inventory.meta.SkullMeta; 12 | 13 | public class SkullCommand extends BaseCommand { 14 | 15 | @Command(name = "skull", permission = "pandafly.skull") 16 | @Override 17 | public void onCommand(CommandArgs command) { 18 | Player player = command.getPlayer(); 19 | String[] args = command.getArgs(); 20 | String label = command.getLabel(); 21 | 22 | if (args.length < 1) { 23 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 24 | return; 25 | } 26 | player.getInventory().addItem(this.getSkull(args[0])); 27 | } 28 | 29 | private ItemStack getSkull(String arg) { 30 | ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); 31 | SkullMeta meta = (SkullMeta) skull.getItemMeta(); 32 | meta.setOwner(arg); 33 | meta.setDisplayName(ChatUtil.translate("&fSkull of &c" + arg)); 34 | skull.setItemMeta(meta); 35 | return skull; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/essentials/SpeedCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.essentials; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class SpeedCommand extends BaseCommand { 11 | 12 | @Command(name = "speed", permission = "pandafly.speed") 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | Player player = command.getPlayer(); 16 | String[] args = command.getArgs(); 17 | String label = command.getLabel(); 18 | 19 | if (args.length < 1) { 20 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 21 | return; 22 | } 23 | 24 | if (args[0].equalsIgnoreCase("walk")){ 25 | if (args.length < 2) { 26 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " walk ")); 27 | return; 28 | } 29 | if (args[1].equalsIgnoreCase("restore")){ 30 | player.setWalkSpeed(0.2F); 31 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPEED.WALK.RESTORE"))); 32 | return; 33 | } 34 | ComboFly.get().getSpeedManager().getWalkSpeed(args[1], player); 35 | } 36 | else if (args[0].equalsIgnoreCase("fly")) { 37 | if (args.length < 2) { 38 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " fly ")); 39 | return; 40 | } 41 | if (args[1].equalsIgnoreCase("restore")){ 42 | player.setFlySpeed(0.1F); 43 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPEED.FLY.RESTORE"))); 44 | return; 45 | } 46 | ComboFly.get().getSpeedManager().getFlySpeed(args[1], player); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/network/DiscordCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.network; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.command.CommandSender; 9 | 10 | public class DiscordCommand extends BaseCommand { 11 | 12 | @Command(name = "discord", permission = "pandafly.discord", inGameOnly = false) 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | CommandSender sender = command.getSender(); 16 | sender.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("NETWORK.DISCORD") 17 | .replace("{discord}", ComboFly.get().getMainConfig().getString("DISCORD")))); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/network/StoreCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.network; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.command.CommandSender; 9 | 10 | public class StoreCommand extends BaseCommand { 11 | 12 | @Command(name = "store", permission = "pandafly.store", inGameOnly = false) 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | CommandSender sender = command.getSender(); 16 | sender.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("NETWORK.STORE") 17 | .replace("{store}", ComboFly.get().getMainConfig().getString("STORE")))); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/network/TeamSpeakCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.network; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.command.CommandSender; 9 | 10 | public class TeamSpeakCommand extends BaseCommand { 11 | 12 | @Command(name = "teamspeak", permission = "pandafly.teamspeak", aliases = {"ts", "ts3"}, inGameOnly = false) 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | CommandSender sender = command.getSender(); 16 | sender.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("NETWORK.TEAMSPEAK") 17 | .replace("{teamspeak}", ComboFly.get().getMainConfig().getString("TEAMSPEAK")))); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/network/TwitterCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.network; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.command.CommandSender; 9 | 10 | public class TwitterCommand extends BaseCommand { 11 | 12 | @Command(name = "twitter", permission = "pandafly.twitter", inGameOnly = false) 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | CommandSender sender = command.getSender(); 16 | sender.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("NETWORK.TWITTER") 17 | .replace("{discord}", ComboFly.get().getMainConfig().getString("TWITTER")))); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/network/WebsiteCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.network; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.command.CommandSender; 9 | 10 | public class WebsiteCommand extends BaseCommand { 11 | 12 | @Command(name = "website", permission = "pandafly.website", inGameOnly = false) 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | CommandSender sender = command.getSender(); 16 | sender.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("NETWORK.WEBSITE") 17 | .replace("{website}", ComboFly.get().getMainConfig().getString("WEBSITE")))); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/spawn/SetSpawnCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.spawn; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class SetSpawnCommand extends BaseCommand { 11 | 12 | @Command(name = "setspawn", permission = "pandafly.setspawn") 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | Player player = command.getPlayer(); 16 | ComboFly.get().getSpawnManager().createSpawn(player); 17 | player.sendMessage(ChatUtil.translate("&aSuccessfully! &cSpawn &a has been set.")); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/spawn/SpawnCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.spawn; 2 | 3 | import dev.panda.chat.ChatUtil; 4 | import dev.panda.command.BaseCommand; 5 | import dev.panda.command.Command; 6 | import dev.panda.command.CommandArgs; 7 | import org.bukkit.Sound; 8 | import org.bukkit.entity.Player; 9 | 10 | import dev.panda.combofly.ComboFly; 11 | 12 | public class SpawnCommand extends BaseCommand { 13 | 14 | @Command(name = "spawn", permission = "pandafly.spawn") 15 | @Override 16 | public void onCommand(CommandArgs command) { 17 | Player player = command.getPlayer(); 18 | 19 | if (ComboFly.get().getCombatManager().hasCooldown(player)) { 20 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPAWN.COMBAT"))); 21 | return; 22 | } 23 | 24 | if (ComboFly.get().getSpawnManager().hasCooldown(player)) { 25 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPAWN.COMBAT"))); 26 | return; 27 | } 28 | 29 | if (player.hasPermission("pandafly.spawn.bypass")) { 30 | player.playSound(player.getLocation(), Sound.ENDERMAN_TELEPORT, 10F, 0.2F); 31 | player.teleport(ComboFly.get().getSpawnManager().getSpawnLocation()); 32 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPAWN.TELEPORTED"))); 33 | return; 34 | } 35 | 36 | ComboFly.get().getSpawnManager().setCooldown(player); 37 | ComboFly.get().getSpawnManager().setRunnable(player); 38 | } 39 | } 40 | 41 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/staff/FreezeCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.staff; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.command.CommandSender; 10 | import org.bukkit.entity.Player; 11 | 12 | public class FreezeCommand extends BaseCommand { 13 | 14 | @Command(name = "freeze", permission = "pandafly.freeze", aliases = "ss", inGameOnly = false) 15 | @Override 16 | public void onCommand(CommandArgs command) { 17 | CommandSender sender = command.getSender(); 18 | String[] args = command.getArgs(); 19 | String label = command.getLabel(); 20 | 21 | if (args.length < 1) { 22 | sender.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 23 | return; 24 | } 25 | 26 | Player player = Bukkit.getPlayer(args[0]); 27 | 28 | if (player == null) { 29 | sender.sendMessage(ChatUtil.translate("&cPlayer '" + args[0] + "' not found.")); 30 | return; 31 | } 32 | 33 | if (sender.equals(player)) { 34 | sender.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("FREEZE.FROZEN-SELF"))); 35 | return; 36 | } 37 | 38 | if (ComboFly.get().getStaffManager().isStaff(player)) { 39 | sender.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("FREEZE.FROZEN-STAFF"))); 40 | return; 41 | } 42 | 43 | if (ComboFly.get().getFreezeManager().isFrozen(player)) { 44 | ComboFly.get().getFreezeManager().removeFreeze(player); 45 | ComboFly.get().getStaffManager().sendMessageAllStaffs(ComboFly.get().getMessageConfig().getString("FREEZE.UNFROZEN-PLAYER-STAFF") 46 | .replace("{staff}", sender.getName()) 47 | .replace("{player}", player.getName())); 48 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("FREEZE.UNFROZEN-PLAYER") 49 | .replace("{staff}", sender.getName()))); 50 | } 51 | else { 52 | ComboFly.get().getFreezeManager().setFreeze(player); 53 | ComboFly.get().getStaffManager().sendMessageAllStaffs(ComboFly.get().getMessageConfig().getString("FREEZE.FROZEN-PLAYER-STAFF") 54 | .replace("{staff}", sender.getName()) 55 | .replace("{player}", player.getName())); 56 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("FREEZE.FROZEN-PLAYER") 57 | .replace("{staff}", sender.getName()))); 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/staff/InvseeCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.staff; 2 | 3 | import dev.panda.chat.ChatUtil; 4 | import dev.panda.command.BaseCommand; 5 | import dev.panda.command.Command; 6 | import dev.panda.command.CommandArgs; 7 | import org.bukkit.Bukkit; 8 | import org.bukkit.entity.Player; 9 | 10 | public class InvseeCommand extends BaseCommand { 11 | 12 | @Command(name = "invsee", permission = "pandafly.invsee", aliases = "inventorysee") 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | Player player = command.getPlayer(); 16 | String[] args = command.getArgs(); 17 | String label = command.getLabel(); 18 | 19 | if (args.length < 1){ 20 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 21 | return; 22 | } 23 | 24 | Player target = Bukkit.getPlayer(args[0]); 25 | 26 | if (target == null){ 27 | player.sendMessage(ChatUtil.translate("&cPlayer not found.")); 28 | return; 29 | } 30 | if (player.equals(target)) { 31 | player.sendMessage(ChatUtil.translate("&cYou cant see yourself inventory.")); 32 | return; 33 | } 34 | player.openInventory(target.getInventory()); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/staff/StaffListCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.staff; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.command.BaseCommand; 5 | import dev.panda.command.Command; 6 | import dev.panda.command.CommandArgs; 7 | import org.bukkit.command.CommandSender; 8 | 9 | public class StaffListCommand extends BaseCommand { 10 | 11 | @Command(name = "stafflist", permission = "pandafly.stafflist", aliases = {"staffl", "lstaff", "sl"}, inGameOnly = false) 12 | @Override 13 | public void onCommand(CommandArgs command) { 14 | CommandSender sender = command.getSender(); 15 | ComboFly.get().getStaffManager().getOnlineStaff(sender); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/staff/StaffModeCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.staff; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class StaffModeCommand extends BaseCommand { 11 | 12 | @Command(name = "staffmode", permission = "pandafly.staffmode", aliases = {"smode", "sm", "mod"}) 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | Player player = command.getPlayer(); 16 | 17 | if (!ComboFly.get().getStaffManager().isStaff(player)) { 18 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("STAFFMODE.NOT-STAFF"))); 19 | return; 20 | } 21 | 22 | if (ComboFly.get().getStaffManager().isStaffMode(player)) { 23 | ComboFly.get().getStaffManager().removeStaffMode(player); 24 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("STAFFMODE.DISABLE"))); 25 | } 26 | else { 27 | ComboFly.get().getStaffManager().setStaffMode(player); 28 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("STAFFMODE.ENABLE"))); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/staff/TeleportAllCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.staff; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.Location; 10 | import org.bukkit.entity.Player; 11 | 12 | public class TeleportAllCommand extends BaseCommand { 13 | 14 | @Command(name = "teleportall", permission = "pandafly.teleportall", aliases = "tpall") 15 | @Override 16 | public void onCommand(CommandArgs command) { 17 | Player player = command.getPlayer(); 18 | 19 | Location location = player.getLocation(); 20 | for (Player players : Bukkit.getServer().getOnlinePlayers()) { 21 | players.teleport(location); 22 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("TPALL.PLAYER"))); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/staff/TeleportCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.staff; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.Location; 10 | import org.bukkit.entity.Player; 11 | 12 | public class TeleportCommand extends BaseCommand { 13 | 14 | @Command(name = "teleport", permission = "pandafly.teleport", aliases = "tp") 15 | @Override 16 | public void onCommand(CommandArgs command) { 17 | Player player = command.getPlayer(); 18 | String[] args = command.getArgs(); 19 | String label = command.getLabel(); 20 | 21 | if (args.length < 1) { 22 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 23 | return; 24 | } 25 | 26 | Player target = Bukkit.getPlayer(args[0]); 27 | if (player.equals(target)){ 28 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("TELEPORT.NOT-SELF"))); 29 | return; 30 | } 31 | 32 | if (target == null) { 33 | player.sendMessage(ChatUtil.translate("&cPlayer not found.")); 34 | return; 35 | } 36 | Location location = target.getLocation(); 37 | player.teleport(location); 38 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("TELEPORT.PLAYER").replace("{target}", String.valueOf(target.getName())))); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/staff/TeleportHereCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.staff; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.Location; 10 | import org.bukkit.entity.Player; 11 | 12 | public class TeleportHereCommand extends BaseCommand { 13 | 14 | @Command(name = "teleporthere", permission = "pandafly.teleporthere", aliases = {"tphere", "s"}) 15 | @Override 16 | public void onCommand(CommandArgs command) { 17 | Player player = command.getPlayer(); 18 | String[] args = command.getArgs(); 19 | String label = command.getLabel(); 20 | 21 | if (args.length < 1) { 22 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 23 | return; 24 | } 25 | 26 | Player target = Bukkit.getPlayer(args[0]); 27 | if (player.equals(target)){ 28 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("TPHERE.NOT-SELF"))); 29 | return; 30 | } 31 | 32 | if (target == null) { 33 | player.sendMessage(ChatUtil.translate("&cPlayer not found.")); 34 | return; 35 | } 36 | Location location = player.getLocation(); 37 | target.teleport(location); 38 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("TPHERE.PLAYER").replace("{target}", target.getName()))); 39 | target.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("TPHERE.TARGET").replace("{player}", player.getName()))); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/staff/TeleportPositionCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.staff; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Location; 9 | import org.bukkit.entity.Player; 10 | 11 | public class TeleportPositionCommand extends BaseCommand { 12 | 13 | @Command(name = "teleportposition", permission = "pandafly.teleportposition", aliases = {"tpp", "teleportp", "tpposition", "ttppos"}) 14 | @Override 15 | public void onCommand(CommandArgs command) { 16 | Player player = command.getPlayer(); 17 | String[] args = command.getArgs(); 18 | String label = command.getLabel(); 19 | 20 | if (args.length < 3) { 21 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 22 | return; 23 | } 24 | 25 | double getX = Double.parseDouble(args[0]); 26 | double getY = Double.parseDouble(args[1]); 27 | double getZ = Double.parseDouble(args[2]); 28 | Location location = new Location(player.getLocation().getWorld(), getX, getY, getZ); 29 | player.teleport(location); 30 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("TPPOSITION.MESSAGE"))); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/staff/TopCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.staff; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.combofly.utilities.Utils; 6 | import dev.panda.command.BaseCommand; 7 | import dev.panda.command.Command; 8 | import dev.panda.command.CommandArgs; 9 | import org.bukkit.Location; 10 | import org.bukkit.Material; 11 | import org.bukkit.block.Block; 12 | import org.bukkit.entity.Player; 13 | 14 | import java.util.Objects; 15 | 16 | public class TopCommand extends BaseCommand { 17 | 18 | @Command(name = "top", permission = "pandafly.teleporttop") 19 | @Override 20 | public void onCommand(CommandArgs command) { 21 | Player player = command.getPlayer(); 22 | 23 | Location origin = player.getLocation().clone(); 24 | Location highestLocation = Utils.getHighestLocation(origin.clone()); 25 | if (highestLocation != null && !Objects.equals(highestLocation, origin)) { 26 | Block originBlock = origin.getBlock(); 27 | if ((highestLocation.getBlockY() - originBlock.getY() != 1 || originBlock.getType() != Material.WATER) && originBlock.getType() != Material.STATIONARY_WATER) { 28 | player.teleport(highestLocation.add(0.0, 1.0, 0.0)); 29 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("TOP.MESSAGE"))); 30 | return; 31 | } 32 | } 33 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("TOP.NO-LOCATION"))); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/staff/VanishCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.staff; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import dev.panda.combofly.utilities.staff.StaffItems; 9 | import org.bukkit.entity.Player; 10 | 11 | public class VanishCommand extends BaseCommand { 12 | 13 | @Command(name = "vanish", permission = "pandafly.vanish", aliases = "v") 14 | @Override 15 | public void onCommand(CommandArgs command) { 16 | Player player = command.getPlayer(); 17 | 18 | if (!ComboFly.get().getStaffManager().isStaff(player)) { 19 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("VANISH.NOT-STAFF"))); 20 | return; 21 | } 22 | 23 | if (ComboFly.get().getVanishManager().isVanish(player)) { 24 | ComboFly.get().getVanishManager().removeVanish(player); 25 | if (ComboFly.get().getStaffManager().isStaffMode(player)) { 26 | player.getInventory().setItem(ComboFly.get().getStaffitemsConfig().getInt("VANISH-OFF.SLOT"), StaffItems.getVanishOff()); 27 | } 28 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("VANISH.DISABLE"))); 29 | } 30 | else { 31 | ComboFly.get().getVanishManager().setVanish(player); 32 | if (ComboFly.get().getStaffManager().isStaffMode(player)) { 33 | player.getInventory().setItem(ComboFly.get().getStaffitemsConfig().getInt("VANISH-ON.SLOT"), StaffItems.getVanishOn()); 34 | } 35 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("VANISH.ENABLE"))); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/warp/WarpCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.warp; 2 | 3 | import dev.panda.command.BaseCommand; 4 | import dev.panda.command.Command; 5 | import dev.panda.command.CommandArgs; 6 | import org.bukkit.Sound; 7 | import org.bukkit.entity.Player; 8 | import dev.panda.combofly.ComboFly; 9 | import dev.panda.chat.ChatUtil; 10 | 11 | public class WarpCommand extends BaseCommand { 12 | 13 | @Command(name = "warp", permission = "pandafly.warp") 14 | @Override 15 | public void onCommand(CommandArgs command) { 16 | Player player = command.getPlayer(); 17 | String[] args = command.getArgs(); 18 | String label = command.getLabel(); 19 | 20 | if (args.length < 1) { 21 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 22 | player.sendMessage(ChatUtil.translate("&cAvailables Warps: " + ComboFly.get().getWarpManager().getWarps())); 23 | return; 24 | } 25 | 26 | String warpName = ChatUtil.capitalize(args[0]); 27 | 28 | if (ComboFly.get().getWarpConfig().getString("WARPS." + warpName) == null) { 29 | player.sendMessage(ChatUtil.translate("&cWarp '" + warpName + "' not found.")); 30 | return; 31 | } 32 | 33 | if (ComboFly.get().getCombatManager().hasCooldown(player)) { 34 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("WARP.COMBAT"))); 35 | return; 36 | } 37 | 38 | for (String warp : ComboFly.get().getWarpConfig().getConfiguration().getConfigurationSection("WARPS").getKeys(false)) { 39 | 40 | if (warpName.equals(warp)) { 41 | if (!player.hasPermission("pandafly.warp." + warpName.toLowerCase())) { 42 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("WARP.PERMISSION-WARP"))); 43 | return; 44 | } 45 | 46 | player.playSound(player.getLocation(), Sound.ENDERMAN_TELEPORT, 10F, 0.2F); 47 | player.teleport(ComboFly.get().getWarpManager().getWarpLocation(warp)); 48 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("WARP.TELEPORTED") 49 | .replace("{warp}", warpName))); 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/commands/warp/WarpManagerCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.commands.warp; 2 | 3 | import dev.panda.command.BaseCommand; 4 | import dev.panda.command.Command; 5 | import dev.panda.command.CommandArgs; 6 | import org.bukkit.entity.Player; 7 | import dev.panda.combofly.ComboFly; 8 | import dev.panda.chat.ChatUtil; 9 | 10 | public class WarpManagerCommand extends BaseCommand { 11 | 12 | @Command(name = "warpmanager", permission = "pandafly.warpmanager", aliases = {"warpm", "wmanager", "wm"}) 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | Player player = command.getPlayer(); 16 | String[] args = command.getArgs(); 17 | String label = command.getLabel(); 18 | 19 | if (args.length < 1) { 20 | this.getUsage(player, label); 21 | return; 22 | } 23 | 24 | if (args[0].equalsIgnoreCase("create")) { 25 | if (args.length < 2) { 26 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " create ")); 27 | return; 28 | } 29 | 30 | String warpName = ChatUtil.capitalize(args[1]); 31 | 32 | if (ComboFly.get().getWarpConfig().getString("WARPS." + warpName) != null) { 33 | player.sendMessage(ChatUtil.translate("&cWarp '" + warpName + "' not found.")); 34 | return; 35 | } 36 | 37 | ComboFly.get().getWarpManager().createWarp(warpName, player); 38 | player.sendMessage(ChatUtil.translate("&aWarp '" + warpName + "' has been create.")); 39 | } 40 | else if (args[0].equalsIgnoreCase("delete")) { 41 | 42 | if (args.length < 2) { 43 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " delete ")); 44 | return; 45 | } 46 | String warpName = ChatUtil.capitalize(args[1]); 47 | 48 | if (ComboFly.get().getWarpConfig().getString("WARPS." + warpName) == null) { 49 | player.sendMessage(ChatUtil.translate("&cWarp '" + warpName + "' not found.")); 50 | return; 51 | } 52 | 53 | ComboFly.get().getWarpManager().deleteWarp(warpName); 54 | player.sendMessage(ChatUtil.translate("&aWarp '" + warpName + "' has been delete.")); 55 | } 56 | else if (args[0].equalsIgnoreCase("set")){ 57 | 58 | if (args.length < 2) { 59 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " set ")); 60 | return; 61 | } 62 | String warpName = ChatUtil.capitalize(args[1]); 63 | 64 | if (ComboFly.get().getWarpConfig().getString("WARPS." + warpName) == null) { 65 | player.sendMessage(ChatUtil.translate("&cWarp '" + warpName + "' not found.")); 66 | return; 67 | } 68 | 69 | ComboFly.get().getWarpManager().createWarp(warpName, player); 70 | player.sendMessage(ChatUtil.translate("&aYou have set new Location for Warp '" + warpName + "'.")); 71 | } 72 | else if (args[0].equalsIgnoreCase("list")) { 73 | player.sendMessage(ChatUtil.translate("&cAvailables Warps: " + ComboFly.get().getWarpManager().getWarps())); 74 | } 75 | else { 76 | this.getUsage(player, label); 77 | } 78 | } 79 | 80 | private void getUsage(Player player, String label) { 81 | player.sendMessage(ChatUtil.translate("&7&m-------------------------")); 82 | player.sendMessage(ChatUtil.translate("&4&lWarpManager Commands")); 83 | player.sendMessage(ChatUtil.translate("")); 84 | player.sendMessage(ChatUtil.translate("&c/" + label + " create ")); 85 | player.sendMessage(ChatUtil.translate("&c/" + label + " delete ")); 86 | player.sendMessage(ChatUtil.translate("&c/" + label + " set ")); 87 | player.sendMessage(ChatUtil.translate("&c/" + label + " list")); 88 | player.sendMessage(ChatUtil.translate("&7&m-------------------------")); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/kit/MenuKitManager.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.kit; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import org.bukkit.Material; 6 | import org.bukkit.inventory.ItemStack; 7 | import org.bukkit.inventory.meta.ItemMeta; 8 | 9 | import java.util.Arrays; 10 | 11 | public class MenuKitManager { 12 | 13 | public ItemStack getKitsDefault(String kit) { 14 | ItemStack item = new ItemStack(Material.IRON_SWORD); 15 | ItemMeta meta = item.getItemMeta(); 16 | meta.setDisplayName(ChatUtil.translate("&c" + kit + " &7kit")); 17 | meta.setLore(ChatUtil.translate(Arrays.asList( 18 | "&7&m-------------------------------", 19 | "&7Click here to select a &cDefault &7kit.", 20 | "&7&m-------------------------------"))); 21 | item.setItemMeta(meta); 22 | return item; 23 | } 24 | 25 | public ItemStack getBack() { 26 | ItemStack item = new ItemStack(Material.FEATHER); 27 | ItemMeta meta = item.getItemMeta(); 28 | meta.setDisplayName(ChatUtil.translate("&7«« &b&lBack &7««")); 29 | item.setItemMeta(meta); 30 | return item; 31 | } 32 | 33 | public ItemStack getKits(String kit) { 34 | ItemStack item = new ItemStack(Material.DIAMOND_SWORD); 35 | ItemMeta meta = item.getItemMeta(); 36 | meta.setDisplayName(ChatUtil.translate("&c" + kit + " &7kit")); 37 | meta.setLore(ChatUtil.translate(Arrays.asList( 38 | "&7&m-------------------------------", 39 | "&7Click here to &cedit &7kit.", 40 | "&7&m-------------------------------"))); 41 | item.setItemMeta(meta); 42 | return item; 43 | } 44 | 45 | public ItemStack getSaveInv() { 46 | ItemStack item = new ItemStack(Material.CHEST); 47 | ItemMeta meta = item.getItemMeta(); 48 | meta.setDisplayName(ChatUtil.translate("&c&lSave Kit")); 49 | meta.setLore(ChatUtil.translate(Arrays.asList( 50 | "&7&m-------------------------------", 51 | "&7Click here to save kit &cinventory.", 52 | "&7&m-------------------------------"))); 53 | item.setItemMeta(meta); 54 | return item; 55 | } 56 | 57 | public ItemStack getCooldown(String kit) { 58 | ItemStack item = new ItemStack(Material.WATCH); 59 | ItemMeta meta = item.getItemMeta(); 60 | meta.setDisplayName(ChatUtil.translate("&c&lCooldown Kit")); 61 | meta.setLore(ChatUtil.translate(Arrays.asList( 62 | "&7&m-------------------------------", 63 | "&7Click here to set &ccooldown &7kit.", 64 | "", 65 | "&7Current Cooldown: &c" + ComboFly.get().getKitManager().getDelayKitString(kit), 66 | "&7&m-------------------------------"))); 67 | item.setItemMeta(meta); 68 | return item; 69 | } 70 | 71 | public ItemStack getGoEditor() { 72 | ItemStack item = new ItemStack(Material.BED); 73 | ItemMeta meta = item.getItemMeta(); 74 | meta.setDisplayName(ChatUtil.translate("&c&lGo to Editor")); 75 | meta.setLore(ChatUtil.translate(Arrays.asList( 76 | "&7&m-------------------------------", 77 | "&7Click here to go &ceditor.", 78 | "&7&m-------------------------------"))); 79 | item.setItemMeta(meta); 80 | return item; 81 | } 82 | 83 | public ItemStack getToggle(String kit) { 84 | ItemStack item = new ItemStack(Material.REDSTONE_TORCH_ON); 85 | ItemMeta meta = item.getItemMeta(); 86 | meta.setDisplayName(ChatUtil.translate("&c&lToggle Kit")); 87 | meta.setLore(ChatUtil.translate(Arrays.asList( 88 | "&7&m-------------------------------", 89 | "&7Click here to enable or disable kit.", 90 | "", 91 | "&7➤ " + (ComboFly.get().getKitManager().isState(kit) ? "&aEnable" : "&cDisable"), 92 | "&7&m-------------------------------"))); 93 | item.setItemMeta(meta); 94 | return item; 95 | } 96 | 97 | public ItemStack getDefaultKit() { 98 | ItemStack item = new ItemStack(Material.ENCHANTMENT_TABLE); 99 | ItemMeta meta = item.getItemMeta(); 100 | meta.setDisplayName(ChatUtil.translate("&cDefault Kit")); 101 | meta.setLore(ChatUtil.translate(Arrays.asList( 102 | "&7&m-------------------------------", 103 | "&7Click here to select a default kit.", 104 | "&7&m-------------------------------"))); 105 | item.setItemMeta(meta); 106 | return item; 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/kit/commands/KitCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.kit.commands; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class KitCommand extends BaseCommand { 11 | 12 | @Command(name = "kit", permission = "pandafly.kit") 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | Player player = command.getPlayer(); 16 | String[] args = command.getArgs(); 17 | String label = command.getLabel(); 18 | 19 | if (args.length < 1) { 20 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 21 | player.sendMessage(ChatUtil.translate("&cAvailable Kits: " + 22 | ComboFly.get().getKitManager().getKits())); 23 | return; 24 | } 25 | 26 | String kitName = ChatUtil.capitalize(args[0]); 27 | 28 | if (ComboFly.get().getKitConfig().getString("KITS." + kitName) == null) { 29 | player.sendMessage(ChatUtil.translate("&cKit '" + kitName + "' not found.")); 30 | player.sendMessage(ChatUtil.translate("&cAvailable Kits: " + 31 | ComboFly.get().getKitManager().getKits())); 32 | return; 33 | 34 | } 35 | 36 | if (ComboFly.get().getCombatManager().hasCooldown(player)) { 37 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("KIT.COMBAT"))); 38 | return; 39 | } 40 | 41 | ComboFly.get().getKitManager().giveKit(player, kitName); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/KoTHMenu.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth; 2 | 3 | import com.google.common.collect.Maps; 4 | import dev.panda.combofly.utilities.menu.Button; 5 | import dev.panda.combofly.utilities.menu.Menu; 6 | import dev.panda.item.ItemBuilder; 7 | import lombok.AllArgsConstructor; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.Material; 10 | import org.bukkit.entity.Player; 11 | import org.bukkit.event.inventory.ClickType; 12 | import org.bukkit.inventory.ItemStack; 13 | 14 | import java.util.Map; 15 | 16 | public class KoTHMenu extends Menu { 17 | 18 | @Override 19 | public String getTitle(Player player) { 20 | return "&9KoTH´s events"; 21 | } 22 | 23 | @Override 24 | public Map getButtons(Player player) { 25 | Map buttons = Maps.newHashMap(); 26 | for (KoTH koth : KoTH.getKoths()) { 27 | buttons.put(buttons.size(), new KoTHButton(koth)); 28 | } 29 | return buttons; 30 | } 31 | 32 | @AllArgsConstructor 33 | private static class KoTHButton extends Button { 34 | 35 | private final KoTH koth; 36 | 37 | @Override 38 | public ItemStack getButtonItem(Player player) { 39 | return new ItemBuilder(Material.PAPER) 40 | .name("&b" + koth.getName()) 41 | .lore("&7Click to host this KoTH!") 42 | .build(); 43 | } 44 | 45 | @Override 46 | public void clicked(Player player, int slot, ClickType clickType, int hotbarButton) { 47 | Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "koth start " + koth.getName()); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/Selection.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.combofly.koth.cuboid.Cuboid; 5 | import dev.panda.item.ItemBuilder; 6 | import lombok.Data; 7 | import org.bukkit.Location; 8 | import org.bukkit.Material; 9 | import org.bukkit.entity.Player; 10 | import org.bukkit.inventory.ItemStack; 11 | import org.bukkit.metadata.FixedMetadataValue; 12 | 13 | @Data 14 | public class Selection { 15 | 16 | public static final ItemStack SELECTION_WAND; 17 | private static final String SELECTION_METADATA_KEY = "CLAIM_SELECTION"; 18 | 19 | static { 20 | SELECTION_WAND = new ItemBuilder(Material.GOLD_AXE) 21 | .name("&6KoTH Wand") 22 | .lore("Use this item to select each corner," 23 | , "both as high corner and low corner") 24 | .build(); 25 | } 26 | 27 | private Location point1; 28 | private Location point2; 29 | 30 | /** 31 | * Private, so that we can create a new instance in the Selection#createOrGetSelection method. 32 | */ 33 | private Selection() { 34 | } 35 | 36 | /** 37 | * Selections are stored in the player's metadata. This method removes the need to active Bukkit Metadata API calls 38 | * all over the place. 39 | *

40 | * This method can be modified structurally as needed, the plugin only accepts Selection objects via this method. 41 | * 42 | * @param player the player for whom to grab the Selection object for 43 | * 44 | * @return selection object, either new or created 45 | */ 46 | public static Selection createOrGetSelection(Player player) { 47 | if (player.hasMetadata(SELECTION_METADATA_KEY)) { 48 | return (Selection) player.getMetadata(SELECTION_METADATA_KEY).get(0).value(); 49 | } 50 | 51 | Selection selection = new Selection(); 52 | 53 | player.setMetadata(SELECTION_METADATA_KEY, new FixedMetadataValue(ComboFly.get(), selection)); 54 | 55 | return selection; 56 | } 57 | 58 | /** 59 | * @return the cuboid 60 | */ 61 | public Cuboid getCuboid() { 62 | return new Cuboid(point1, point2); 63 | } 64 | 65 | /** 66 | * @return if the Selection can form a full cuboid object 67 | */ 68 | public boolean isFullObject() { 69 | return point1 != null && point2 != null; 70 | } 71 | 72 | /** 73 | * Resets both locations in the Selection 74 | */ 75 | public void clear() { 76 | point1 = null; 77 | point2 = null; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/commands/HostCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.commands; 2 | 3 | import com.google.common.collect.Maps; 4 | import dev.panda.combofly.koth.KoTHMenu; 5 | import dev.panda.combofly.utilities.menu.Button; 6 | import dev.panda.combofly.utilities.menu.Menu; 7 | import dev.panda.command.BaseCommand; 8 | import dev.panda.command.Command; 9 | import dev.panda.command.CommandArgs; 10 | import dev.panda.item.ItemBuilder; 11 | import org.bukkit.Material; 12 | import org.bukkit.entity.Player; 13 | import org.bukkit.event.inventory.ClickType; 14 | import org.bukkit.inventory.ItemStack; 15 | 16 | import java.util.Map; 17 | 18 | public class HostCommand extends BaseCommand { 19 | 20 | @Command(name = "host", permission = "pandafly.host") 21 | @Override 22 | public void onCommand(CommandArgs commandArgs) { 23 | Player player = commandArgs.getPlayer(); 24 | 25 | new HostMenu().openMenu(player); 26 | } 27 | 28 | private class HostMenu extends Menu { 29 | 30 | @Override 31 | public String getTitle(Player player) { 32 | return "&cHost a Event"; 33 | } 34 | 35 | @Override 36 | public int getSize() { 37 | return 9*3; 38 | } 39 | 40 | @Override 41 | public Map getButtons(Player player) { 42 | Map buttons = Maps.newHashMap(); 43 | buttons.put(13, new KoTHButton()); 44 | return buttons; 45 | } 46 | } 47 | 48 | private class KoTHButton extends Button { 49 | 50 | @Override 51 | public ItemStack getButtonItem(Player player) { 52 | return new ItemBuilder(Material.NAME_TAG) 53 | .name("&9KoTH´s event") 54 | .lore("&7Click for open menu of all KoTH´s events") 55 | .build(); 56 | } 57 | 58 | @Override 59 | public void clicked(Player player, int slot, ClickType clickType, int hotbarButton) { 60 | super.clicked(player, slot, clickType, hotbarButton); 61 | new KoTHMenu().openMenu(player); 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/commands/KothCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.commands; 2 | 3 | import dev.panda.combofly.koth.commands.subcommands.*; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class KothCommand extends BaseCommand { 11 | 12 | public KothCommand() { 13 | super(); 14 | new CreateCommand(); 15 | new WandCommand(); 16 | new ListCommand(); 17 | new StartCommand(); 18 | new DeleteCommand(); 19 | new ShowCommand(); 20 | new InformationCommand(); 21 | new TeleportCommand(); 22 | new StopCommand(); 23 | } 24 | 25 | @Command(name = "koth", permission = "pandafly.koth") 26 | @Override 27 | public void onCommand(CommandArgs commandArgs) { 28 | Player player = commandArgs.getPlayer(); 29 | String label = commandArgs.getLabel(); 30 | 31 | String[] messages = new String[]{ChatUtil.NORMAL_LINE, 32 | "&4&lKoTH &4Commands", 33 | "", 34 | " &7- &c" + label + " show (name)", 35 | " &7- &c" + label + " information (name)", 36 | " &7- &c" + label + " create (name)", 37 | " &7- &c" + label + " delete (name)", 38 | " &7- &c" + label + " wand", 39 | " &7- &c" + label + " list", 40 | " &7- &c" + label + " start (name)", 41 | " &7- &c" + label + " stop (name)", 42 | ChatUtil.NORMAL_LINE}; 43 | 44 | for (String message : messages) { 45 | player.sendMessage(ChatUtil.translate(message)); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/commands/subcommands/CreateCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.commands.subcommands; 2 | 3 | import dev.panda.combofly.koth.KoTH; 4 | import dev.panda.combofly.koth.Selection; 5 | import dev.panda.chat.ChatUtil; 6 | import dev.panda.command.BaseCommand; 7 | import dev.panda.command.Command; 8 | import dev.panda.command.CommandArgs; 9 | import org.bukkit.entity.Player; 10 | 11 | import java.text.SimpleDateFormat; 12 | import java.util.Date; 13 | 14 | public class CreateCommand extends BaseCommand { 15 | 16 | @Command(name = "koth.create", permission = "pandafly.koth.create") 17 | @Override 18 | public void onCommand(CommandArgs commandArgs) { 19 | Player player = commandArgs.getPlayer(); 20 | String[] args = commandArgs.getArgs(); 21 | 22 | if (args.length == 0) { 23 | player.sendMessage(ChatUtil.translate("&cPlease insert a valid name!")); 24 | return; 25 | } 26 | 27 | String name = args[0]; 28 | KoTH koth = new KoTH(name); 29 | Selection selection = Selection.createOrGetSelection(player); 30 | 31 | if (selection.isFullObject()) { 32 | koth.setCuboid(selection.getCuboid()); 33 | koth.setCreator(player.getName()); 34 | koth.setDate(new SimpleDateFormat("dd-MM-yyyy").format(new Date())); 35 | KoTH.getKoths().add(koth); 36 | koth.save(); 37 | player.sendMessage(ChatUtil.translate("&aKoTH &b" + name + " &ahas been created!")); 38 | } else { 39 | player.sendMessage(ChatUtil.translate("&cPlease select a valid higher and lower locations")); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/commands/subcommands/DeleteCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.commands.subcommands; 2 | 3 | import dev.panda.combofly.koth.KoTH; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class DeleteCommand extends BaseCommand { 11 | 12 | @Command(name = "koth.delete", permission = "pandafly.koth.delete") 13 | @Override 14 | public void onCommand(CommandArgs commandArgs) { 15 | Player player = commandArgs.getPlayer(); 16 | String[] args = commandArgs.getArgs(); 17 | 18 | if (args.length == 0) { 19 | player.sendMessage(ChatUtil.translate("&cUsage: /koth delete (name)")); 20 | return; 21 | } 22 | 23 | String name = args[0]; 24 | KoTH koth = KoTH.getFromName(name); 25 | if (koth != null) { 26 | koth.delete(); 27 | player.sendMessage(ChatUtil.translate("&aKoTH &b" + name + " &ahas been deleted!")); 28 | } else { 29 | player.sendMessage(ChatUtil.translate("&cPlease insert a valid KoTH name!")); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/commands/subcommands/InformationCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.commands.subcommands; 2 | 3 | import dev.panda.combofly.koth.KoTH; 4 | import dev.panda.combofly.koth.cuboid.Cuboid; 5 | import dev.panda.chat.ChatUtil; 6 | import dev.panda.command.BaseCommand; 7 | import dev.panda.command.Command; 8 | import dev.panda.command.CommandArgs; 9 | import org.bukkit.Location; 10 | import org.bukkit.entity.Player; 11 | 12 | public class InformationCommand extends BaseCommand { 13 | 14 | @Command(name = "koth.information", permission = "pandafly.koth.info", aliases = {"info"}) 15 | @Override 16 | public void onCommand(CommandArgs commandArgs) { 17 | Player player = commandArgs.getPlayer(); 18 | String[] args = commandArgs.getArgs(); 19 | 20 | if (args.length == 0) { 21 | player.sendMessage(ChatUtil.translate("&cUsage: /koth information (name)")); 22 | return; 23 | } 24 | 25 | String name = args[0]; 26 | KoTH koth = KoTH.getFromName(name); 27 | 28 | if (koth != null) { 29 | Cuboid cuboid = koth.getCuboid(); 30 | Location center = cuboid.getCenter(); 31 | Location upper = cuboid.getUpperCorner(); 32 | Location lower = cuboid.getLowerCorner(); 33 | String[] message = new String[]{ChatUtil.NORMAL_LINE, 34 | "&4&l" + koth.getName() + " &4Information", 35 | "", 36 | " &cDate&7: &f" + koth.getDate(), 37 | " &cCreator&7: &f" + koth.getCreator(), 38 | " &cCoords&7: &f" + center.getX() + ", " + center.getY() + ", " + center.getZ(), 39 | " &cCorners&7:", 40 | " &cUpper&7: " + upper.getX() + ", " + upper.getY() + ", " + upper.getZ(), 41 | " &cLower&7: " + lower.getX() + ", " + lower.getY() + ", " + lower.getZ(), 42 | ChatUtil.NORMAL_LINE}; 43 | 44 | for (String s : message) { 45 | player.sendMessage(ChatUtil.translate(s)); 46 | } 47 | } else { 48 | player.sendMessage(ChatUtil.translate("&cPlease insert a valid koth name!")); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/commands/subcommands/ListCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.commands.subcommands; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import dev.panda.file.FileConfig; 9 | import org.bukkit.command.CommandSender; 10 | 11 | public class ListCommand extends BaseCommand { 12 | 13 | @Command(name = "koth.list", permission = "pandafly.koth.list", inGameOnly = false) 14 | @Override 15 | public void onCommand(CommandArgs commandArgs) { 16 | CommandSender sender = commandArgs.getSender(); 17 | FileConfig config = ComboFly.get().getKothsConfig(); 18 | 19 | sender.sendMessage(ChatUtil.NORMAL_LINE); 20 | sender.sendMessage(ChatUtil.translate("&4&lKoTH List")); 21 | sender.sendMessage(""); 22 | config.getConfiguration().getConfigurationSection("KOTHS").getKeys(false).forEach(koth -> { 23 | boolean enabled = config.getBoolean("KOTHS." + koth + ".enabled"); 24 | sender.sendMessage(ChatUtil.translate(" &7- " + (enabled ? "&a" : "&c") + koth)); 25 | }); 26 | sender.sendMessage(ChatUtil.NORMAL_LINE); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/commands/subcommands/ShowCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.commands.subcommands; 2 | 3 | import dev.panda.combofly.koth.KoTH; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Location; 9 | import org.bukkit.entity.Player; 10 | 11 | public class ShowCommand extends BaseCommand { 12 | 13 | @Command(name = "koth.show") 14 | @Override 15 | public void onCommand(CommandArgs commandArgs) { 16 | Player player = commandArgs.getPlayer(); 17 | String[] args = commandArgs.getArgs(); 18 | 19 | if (args.length == 0) { 20 | player.sendMessage(ChatUtil.translate("&cUsage: /koth show (name)")); 21 | return; 22 | } 23 | 24 | String name = args[0]; 25 | KoTH koth = KoTH.getFromName(name); 26 | 27 | if (koth != null) { 28 | Location center = koth.getCuboid().getCenter(); 29 | String[] message = new String[]{ChatUtil.NORMAL_LINE, 30 | "&4&l" + koth.getName() + " &4Show", 31 | "", 32 | " &cTime Left&7: &f" + koth.getTimeLeft(), 33 | " &cCoords&7: &f" + center.getX() + ", " + center.getY() + ", " + center.getZ(), 34 | " &cCapper&7: &f" + koth.getCapper(), 35 | ChatUtil.NORMAL_LINE}; 36 | 37 | for (String s : message) { 38 | player.sendMessage(ChatUtil.translate(s)); 39 | } 40 | } else { 41 | player.sendMessage(ChatUtil.translate("&cPlease insert a valid koth name!")); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/commands/subcommands/StartCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.commands.subcommands; 2 | 3 | import dev.panda.combofly.koth.KoTH; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.combofly.utilities.TimeUtil; 6 | import dev.panda.command.BaseCommand; 7 | import dev.panda.command.Command; 8 | import dev.panda.command.CommandArgs; 9 | import org.bukkit.entity.Player; 10 | 11 | public class StartCommand extends BaseCommand { 12 | 13 | @Command(name = "koth.start", permission = "pandafly.koth.start") 14 | @Override 15 | public void onCommand(CommandArgs commandArgs) { 16 | Player player = commandArgs.getPlayer(); 17 | String[] args = commandArgs.getArgs(); 18 | String label = commandArgs.getLabel(); 19 | 20 | if (args.length == 0 || args.length == 1) { 21 | player.sendMessage(ChatUtil.translate("&cUsage: /koth start (name) (time)")); 22 | return; 23 | } 24 | 25 | String name = args[0]; 26 | long time = TimeUtil.parseTime(args[1]); 27 | KoTH koth = KoTH.getFromName(name); 28 | if (koth != null) { 29 | koth.start(time); 30 | player.sendMessage(ChatUtil.translate("&aThe KoTH &b" + name + " &ahas been Started!")); 31 | } else { 32 | player.sendMessage(ChatUtil.translate("&cPlease usage a valid KoTH name.")); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/commands/subcommands/StopCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.commands.subcommands; 2 | 3 | import dev.panda.combofly.koth.KoTH; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class StopCommand extends BaseCommand { 11 | 12 | @Command(name = "koth.stop", permission = "pandafly.koth.stop") 13 | @Override 14 | public void onCommand(CommandArgs commandArgs) { 15 | Player player = commandArgs.getPlayer(); 16 | String[] args = commandArgs.getArgs(); 17 | 18 | if (args.length == 0) { 19 | player.sendMessage(ChatUtil.translate("&cUsage: /koth stop (name)")); 20 | return; 21 | } 22 | 23 | KoTH koth = KoTH.getFromName(args[0]); 24 | 25 | if (koth != null) { 26 | koth.stop(false); 27 | player.sendMessage(ChatUtil.translate("&aKoTH stopped correctly")); 28 | } else { 29 | player.sendMessage("&cPlease insert a valid koth name!"); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/commands/subcommands/TeleportCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.commands.subcommands; 2 | 3 | import dev.panda.combofly.koth.KoTH; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class TeleportCommand extends BaseCommand { 11 | 12 | @Command(name = "koth.teleport", permission = "pandafly.koth.teleport") 13 | @Override 14 | public void onCommand(CommandArgs commandArgs) { 15 | Player player = commandArgs.getPlayer(); 16 | String[] args = commandArgs.getArgs(); 17 | 18 | if (args.length == 0) { 19 | player.sendMessage(ChatUtil.translate("&cUsage: /koth teleport (name)")); 20 | return; 21 | } 22 | 23 | KoTH koth = KoTH.getFromName(args[0]); 24 | 25 | if (koth != null) { 26 | player.teleport(koth.getCuboid().getCenter()); 27 | player.sendMessage(ChatUtil.translate("&aYou have been teleported to the KoTH successfully")); 28 | } else { 29 | player.sendMessage("&cPlease insert a valid koth name!"); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/commands/subcommands/WandCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.commands.subcommands; 2 | 3 | import dev.panda.combofly.koth.Selection; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class WandCommand extends BaseCommand { 11 | 12 | @Command(name = "koth.wand", permission = "pandafly.koth.wand") 13 | @Override 14 | public void onCommand(CommandArgs commandArgs) { 15 | Player player = commandArgs.getPlayer(); 16 | 17 | player.sendMessage(ChatUtil.translate("&eYou have received the KoTH Wand")); 18 | player.getInventory().addItem(Selection.SELECTION_WAND); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/cuboid/CuboidDirection.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.cuboid; 2 | 3 | /** 4 | * Represents directions that can be applied to certain faces and actions of a Cuboid 5 | */ 6 | public enum CuboidDirection { 7 | 8 | NORTH, 9 | EASY, 10 | SOUTH, 11 | WEST, 12 | UP, 13 | DOWN, 14 | HORIZONTAL, 15 | VERTICAL, 16 | BOTH, 17 | UNKNOWN; 18 | 19 | public CuboidDirection opposite() { 20 | switch (this) { 21 | case NORTH: 22 | return SOUTH; 23 | case EASY: 24 | return WEST; 25 | case SOUTH: 26 | return NORTH; 27 | case WEST: 28 | return EASY; 29 | case HORIZONTAL: 30 | return VERTICAL; 31 | case VERTICAL: 32 | return HORIZONTAL; 33 | case UP: 34 | return DOWN; 35 | case DOWN: 36 | return UP; 37 | case BOTH: 38 | return BOTH; 39 | default: 40 | return UNKNOWN; 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/event/EnterCuboidEvent.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.event; 2 | 3 | import dev.panda.combofly.koth.KoTH; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.event.Event; 9 | import org.bukkit.event.HandlerList; 10 | 11 | @Getter 12 | @AllArgsConstructor 13 | public class EnterCuboidEvent extends Event { 14 | 15 | public static final HandlerList handlerList = new HandlerList(); 16 | public Player player; 17 | public KoTH koth; 18 | 19 | @Override 20 | public HandlerList getHandlers() { 21 | return handlerList; 22 | } 23 | 24 | public static HandlerList getHandlerList() { 25 | return handlerList; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/event/LeaveCuboidEvent.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.event; 2 | 3 | import dev.panda.combofly.koth.KoTH; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.event.Event; 9 | import org.bukkit.event.HandlerList; 10 | 11 | @Getter 12 | @AllArgsConstructor 13 | public class LeaveCuboidEvent extends Event { 14 | 15 | public static final HandlerList handlerList = new HandlerList(); 16 | public Player player; 17 | public KoTH koth; 18 | 19 | @Override 20 | public HandlerList getHandlers() { 21 | return handlerList; 22 | } 23 | 24 | public static HandlerList getHandlerList() { 25 | return handlerList; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/koth/task/KoTHRunnable.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.koth.task; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.combofly.koth.KoTH; 5 | import dev.panda.chat.ChatUtil; 6 | import lombok.AllArgsConstructor; 7 | import org.bukkit.Bukkit; 8 | import org.bukkit.entity.Player; 9 | import org.bukkit.scheduler.BukkitRunnable; 10 | 11 | @AllArgsConstructor 12 | public class KoTHRunnable extends BukkitRunnable { 13 | 14 | private final KoTH koth; 15 | 16 | @Override 17 | public void run() { 18 | if (koth.isFinished()) { 19 | koth.stop(true); 20 | return; 21 | } 22 | 23 | if (koth.getCapPlayer() != null) { 24 | Player player = koth.getCapPlayer(); 25 | 26 | if (player.isDead() || !player.isValid() || !player.isOnline()) { 27 | koth.setCappingPlayer(null); 28 | } else { 29 | if (koth.getDecisecondsLeft() % 600 == 0 && koth.getDecisecondsLeft() != koth.getCapTime() / 100 && koth.getDecisecondsLeft() != 0) { 30 | ComboFly.get().getMessageConfig().getStringList("KOTH.CONTEST").forEach(s -> 31 | Bukkit.broadcastMessage(ChatUtil.translate(s.replace("{koth}", koth.getName()) 32 | .replace("{time}" , koth.getTimeLeft())))); 33 | } 34 | } 35 | } 36 | else koth.setTime(0); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/listeners/ChatListener.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.listeners; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.combofly.profile.Profile; 5 | import dev.panda.chat.ChatUtil; 6 | import me.clip.placeholderapi.PlaceholderAPI; 7 | import org.bukkit.Bukkit; 8 | import org.bukkit.entity.Player; 9 | import org.bukkit.event.EventHandler; 10 | import org.bukkit.event.Listener; 11 | import org.bukkit.event.player.AsyncPlayerChatEvent; 12 | 13 | public class ChatListener implements Listener { 14 | 15 | public ChatListener() { 16 | Bukkit.getServer().getPluginManager().registerEvents(this, ComboFly.get()); 17 | } 18 | 19 | @EventHandler 20 | private void onChat(AsyncPlayerChatEvent event) { 21 | Player player = event.getPlayer(); 22 | String message = event.getMessage(); 23 | if (Bukkit.getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) { 24 | message = PlaceholderAPI.setPlaceholders(player, message); 25 | } 26 | 27 | if (ComboFly.get().getFreezeManager().isFrozen(player)) { 28 | event.setCancelled(true); 29 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("CHAT.FROZEN") 30 | .replace("{player}", player.getName()) 31 | .replace("{message}", message))); 32 | ComboFly.get().getStaffManager().sendMessageAllStaffs(ComboFly.get().getMessageConfig().getString("CHAT.FROZEN") 33 | .replace("{player}", player.getName()) 34 | .replace("{message}", message)); 35 | return; 36 | } 37 | 38 | if (ComboFly.get().getMessageConfig().getBoolean("CHAT.TOGGLE")) { 39 | String chat = ComboFly.get().getMessageConfig().getString("CHAT.FORMAT") 40 | .replace("{player}", player.getName()) 41 | .replace("{prefix}", ComboFly.get().getRankManager().getRank().getPrefix(player.getUniqueId())) 42 | .replace("{suffix}", ComboFly.get().getRankManager().getRank().getSuffix(player.getUniqueId())) 43 | .replace("{kills}", String.valueOf(Profile.getProfiles().get(player.getUniqueId()).getKd().getKills())) 44 | .replace("{message}", (player.hasPermission("pandafly.chat.color") ? (ChatUtil.translate(message 45 | .replace("%", "%%"))) : (message 46 | .replace("%", "%%")))); 47 | event.setFormat(ChatUtil.translate(chat)); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/listeners/CombatListener.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.listeners; 2 | 3 | import com.sk89q.worldedit.bukkit.selections.CuboidSelection; 4 | import dev.panda.combofly.ComboFly; 5 | import dev.panda.chat.ChatUtil; 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.event.EventHandler; 9 | import org.bukkit.event.Listener; 10 | import org.bukkit.event.entity.EntityDamageByEntityEvent; 11 | import org.bukkit.event.entity.PlayerDeathEvent; 12 | import org.bukkit.event.player.PlayerKickEvent; 13 | import org.bukkit.event.player.PlayerQuitEvent; 14 | import org.bukkit.event.player.PlayerRespawnEvent; 15 | 16 | public class CombatListener implements Listener { 17 | 18 | public CombatListener() { 19 | Bukkit.getServer().getPluginManager().registerEvents(this, ComboFly.get()); 20 | } 21 | 22 | @EventHandler 23 | private void onQuit(PlayerQuitEvent event) { 24 | Player player = event.getPlayer(); 25 | if (ComboFly.get().getCombatManager().hasCooldown(player)) { 26 | player.setHealth(0.0); 27 | Bukkit.broadcastMessage(ChatUtil.translate("&7[&4Combat&7] &c" + player.getName() + " &fhas been disconnect in Combat.")); 28 | } 29 | ComboFly.get().getCombatManager().removeCooldown(player); 30 | } 31 | 32 | @EventHandler 33 | private void onKick(PlayerKickEvent event) { 34 | Player player = event.getPlayer(); 35 | if (ComboFly.get().getCombatManager().hasCooldown(player)) { 36 | player.setHealth(0.0); 37 | Bukkit.broadcastMessage(ChatUtil.translate("&7[&4Combat&7] &c" + player.getName() + " &fhas been disconnect in Combat.")); 38 | } 39 | ComboFly.get().getCombatManager().removeCooldown(player); 40 | } 41 | 42 | @EventHandler 43 | private void onDeath(PlayerDeathEvent event) { 44 | if (event.getEntity() != null) { 45 | Player player = event.getEntity(); 46 | if (ComboFly.get().getCombatManager().hasCooldown(player)) { 47 | ComboFly.get().getCombatManager().removeCooldown(player); 48 | } 49 | } 50 | } 51 | 52 | @EventHandler 53 | private void onRespawn(PlayerRespawnEvent event) { 54 | Player player = event.getPlayer(); 55 | if (ComboFly.get().getCombatManager().hasCooldown(player)) ComboFly.get().getCombatManager().removeCooldown(player); 56 | 57 | if (!ComboFly.get().getStaffManager().isStaffMode(player)) { 58 | for (String kit: ComboFly.get().getKitConfig().getConfiguration().getConfigurationSection("KITS.").getKeys(false)) { 59 | if (!ComboFly.get().getKitManager().getDefaultKit().equals(kit)) { 60 | return; 61 | } 62 | ComboFly.get().getKitManager().equipKit(ComboFly.get().getKitManager().getDefaultKit(), player); 63 | } 64 | } 65 | if (ComboFly.get().getSpawnManager().getSpawnLocation() != null) { 66 | player.teleport(ComboFly.get().getSpawnManager().getSpawnLocation()); 67 | } else System.out.println("No Spawn Location!"); 68 | } 69 | 70 | @EventHandler 71 | private void onCombat(EntityDamageByEntityEvent event) { 72 | if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) { 73 | Player player = (Player) event.getEntity(); 74 | Player damager = (Player) event.getDamager(); 75 | for (String claim : ComboFly.get().getClaimManager().getClaimList()) { 76 | CuboidSelection selection = new CuboidSelection( 77 | ComboFly.get().getClaimManager().getClaimWorld(claim), 78 | ComboFly.get().getClaimManager().getLocation(claim, "cornerA"), 79 | ComboFly.get().getClaimManager().getLocation(claim, "cornerB")); 80 | if (selection.contains(player.getLocation()) 81 | && !ComboFly.get().getClaimManager().isPvPClaim(claim)) { 82 | return; 83 | } 84 | if (selection.contains(damager.getLocation()) 85 | && !ComboFly.get().getClaimManager().isPvPClaim(claim)) { 86 | return; 87 | } 88 | } 89 | if (ComboFly.get().getStaffManager().isStaffMode(player) || ComboFly.get().getStaffManager().isStaffMode(damager)) { 90 | return; 91 | } 92 | ComboFly.get().getCombatManager().setCooldown(player); 93 | ComboFly.get().getCombatManager().setCooldown(damager); 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/listeners/EnderpearlListener.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.listeners; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.GameMode; 7 | import org.bukkit.Material; 8 | import org.bukkit.entity.Player; 9 | import org.bukkit.event.EventHandler; 10 | import org.bukkit.event.Listener; 11 | import org.bukkit.event.block.Action; 12 | import org.bukkit.event.player.PlayerInteractEvent; 13 | 14 | public class EnderpearlListener implements Listener { 15 | 16 | public EnderpearlListener() { 17 | Bukkit.getServer().getPluginManager().registerEvents(this, ComboFly.get()); 18 | } 19 | 20 | @EventHandler 21 | public void onPearl(PlayerInteractEvent event) { 22 | Player player = event.getPlayer(); 23 | Action action = event.getAction(); 24 | 25 | if (action.equals(Action.RIGHT_CLICK_AIR) || action.equals(Action.RIGHT_CLICK_BLOCK)) { 26 | 27 | if (player.getItemInHand().getType().equals(Material.ENDER_PEARL) 28 | && !player.getGameMode().equals(GameMode.CREATIVE)) { 29 | 30 | if (ComboFly.get().getEnderpearlManager().hasCooldown(player)) { 31 | event.setCancelled(true); 32 | player.updateInventory(); 33 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("ENDERPEARL.ON-COOLDOWN") 34 | .replace("{cooldown}", ComboFly.get().getEnderpearlManager().getCooldown(player)))); 35 | return; 36 | } 37 | ComboFly.get().getEnderpearlManager().setCooldown(player); 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/listeners/FreezeListener.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.listeners; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.Material; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.event.EventHandler; 9 | import org.bukkit.event.Listener; 10 | import org.bukkit.event.block.BlockBreakEvent; 11 | import org.bukkit.event.block.BlockPlaceEvent; 12 | import org.bukkit.event.entity.EntityDamageByEntityEvent; 13 | import org.bukkit.event.entity.EntityDamageEvent; 14 | import org.bukkit.event.inventory.InventoryClickEvent; 15 | import org.bukkit.event.player.PlayerInteractEvent; 16 | import org.bukkit.event.player.PlayerMoveEvent; 17 | import org.bukkit.event.player.PlayerQuitEvent; 18 | 19 | public class FreezeListener implements Listener { 20 | 21 | public FreezeListener() { 22 | Bukkit.getPluginManager().registerEvents(this, ComboFly.get()); 23 | } 24 | 25 | @EventHandler 26 | private void onFrozenQuit(PlayerQuitEvent event) { 27 | Player player = event.getPlayer(); 28 | 29 | if (ComboFly.get().getFreezeManager().isFrozen(player)) { 30 | ComboFly.get().getFreezeManager().removeFreeze(player); 31 | ComboFly.get().getStaffManager().sendMessageAllStaffs(ComboFly.get().getMessageConfig().getString("FREEZE.FROZEN-PLAYER-DISCONNECT") 32 | .replace("{player}", player.getName())); 33 | } 34 | } 35 | 36 | @EventHandler 37 | private void onFrozenMove(PlayerMoveEvent event) { 38 | Player player = event.getPlayer(); 39 | 40 | if (ComboFly.get().getFreezeManager().isFrozen(player)) { 41 | player.teleport(player.getLocation()); 42 | } 43 | } 44 | 45 | @EventHandler 46 | private void onStaffInventory(InventoryClickEvent event) { 47 | Player player = (Player) event.getWhoClicked(); 48 | 49 | if (ComboFly.get().getFreezeManager().isFrozen(player)) { 50 | event.setCancelled(true); 51 | player.updateInventory(); 52 | } 53 | } 54 | 55 | @EventHandler 56 | private void onFrozenBreak(BlockBreakEvent event) { 57 | Player player = event.getPlayer(); 58 | 59 | if (ComboFly.get().getFreezeManager().isFrozen(player)) { 60 | event.setCancelled(true); 61 | player.sendMessage(ChatUtil.translate("&cYou can't break blocks while you're frozen.")); 62 | } 63 | } 64 | 65 | @EventHandler 66 | private void onFrozenPlace(BlockPlaceEvent event) { 67 | Player player = event.getPlayer(); 68 | 69 | if (ComboFly.get().getFreezeManager().isFrozen(player)) { 70 | event.setCancelled(true); 71 | player.sendMessage(ChatUtil.translate("&cYou can't place blocks while you're frozen.")); 72 | } 73 | } 74 | 75 | @EventHandler 76 | private void onFrozenPearl(PlayerInteractEvent event) { 77 | Player player = event.getPlayer(); 78 | 79 | if (ComboFly.get().getFreezeManager().isFrozen(player) 80 | && player.getInventory().getItemInHand().getType().equals(Material.ENDER_PEARL)) { 81 | event.setCancelled(true); 82 | player.updateInventory(); 83 | player.sendMessage(ChatUtil.translate("&cYou can't throw enderpearl while you're frozen.")); 84 | } 85 | } 86 | 87 | @EventHandler 88 | public void onFrozenHit(EntityDamageByEntityEvent event) { 89 | if (event.getEntity() instanceof Player && event.getDamager() instanceof Player) { 90 | 91 | Player player = (Player) event.getEntity(); 92 | Player target = (Player) event.getDamager(); 93 | 94 | if (ComboFly.get().getFreezeManager().isFrozen(player)) { 95 | event.setCancelled(true); 96 | target.sendMessage(ChatUtil.translate("&c" + player.getName() + " is currently frozen.")); 97 | } 98 | if (ComboFly.get().getFreezeManager().isFrozen(target)) { 99 | event.setCancelled(true); 100 | target.sendMessage(ChatUtil.translate("&cYou can't damage players while you're frozen.")); 101 | } 102 | } 103 | } 104 | 105 | @EventHandler 106 | private void onFrozenDamage(EntityDamageEvent event) { 107 | if (event.getEntity() instanceof Player) { 108 | 109 | Player player = (Player) event.getEntity(); 110 | 111 | if (ComboFly.get().getFreezeManager().isFrozen(player)) { 112 | event.setCancelled(true); 113 | } 114 | } 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/listeners/KillStreakListener.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.listeners; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.entity.Player; 6 | import org.bukkit.event.EventHandler; 7 | import org.bukkit.event.Listener; 8 | import org.bukkit.event.entity.PlayerDeathEvent; 9 | 10 | import java.util.HashMap; 11 | import java.util.UUID; 12 | 13 | public class KillStreakListener implements Listener { 14 | 15 | public KillStreakListener() { 16 | Bukkit.getServer().getPluginManager().registerEvents(this, ComboFly.get()); 17 | } 18 | 19 | private final HashMap killStreak = new HashMap<>(); 20 | 21 | @EventHandler 22 | public void onPlayerDeath1(PlayerDeathEvent event) { 23 | if (event.getEntity().getKiller() != null && event.getEntity() != null) { 24 | Player killer = event.getEntity().getKiller(); 25 | Player killed = event.getEntity(); 26 | 27 | if (!killStreak.containsKey(killer.getUniqueId())) { 28 | killStreak.put(killer.getUniqueId(), 0); 29 | } 30 | 31 | int addKills = killStreak.get(killer.getUniqueId()); 32 | killStreak.put(killer.getUniqueId(), addKills + 1); 33 | killStreak.remove(killed.getUniqueId()); 34 | int kills = killStreak.get(killer.getUniqueId()); 35 | 36 | for (String streak : ComboFly.get().getMainConfig().getConfiguration().getConfigurationSection("KILLSTREAK.REWARDS.").getKeys(false)) { 37 | if (streak.equals(String.valueOf(kills))) { 38 | ComboFly.get().getKillstreakManager().messageKillStreak(kills, killer); 39 | ComboFly.get().getKillstreakManager().messageReward(kills, killer); 40 | ComboFly.get().getKillstreakManager().getRepairAll(killer); 41 | ComboFly.get().getKillstreakManager().getReward(kills, killer); 42 | return; 43 | } 44 | } 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/listeners/KnockBackListener.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.listeners; 2 | 3 | import com.sk89q.worldedit.bukkit.selections.CuboidSelection; 4 | import dev.panda.combofly.ComboFly; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.event.EventHandler; 8 | import org.bukkit.event.Listener; 9 | import org.bukkit.event.entity.EntityDamageByEntityEvent; 10 | import org.bukkit.event.player.PlayerJoinEvent; 11 | import org.bukkit.util.Vector; 12 | 13 | public class KnockBackListener implements Listener { 14 | 15 | private final ComboFly plugin = ComboFly.get(); 16 | private final boolean maxHeight = plugin.getMainConfig().getBoolean("KNOCKBACK.ENABLE-MAXHEIGHT"); 17 | 18 | public KnockBackListener() { 19 | Bukkit.getServer().getPluginManager().registerEvents(this, plugin); 20 | } 21 | 22 | @EventHandler 23 | public void onDamage(EntityDamageByEntityEvent event) { 24 | if (event.getEntity() instanceof Player && event.getDamager() instanceof Player) { 25 | Player attacked = (Player) event.getEntity(); 26 | Player attacker = (Player) event.getDamager(); 27 | 28 | for (String claim : plugin.getClaimManager().getClaimList()) { 29 | CuboidSelection selection = new CuboidSelection( 30 | plugin.getClaimManager().getClaimWorld(claim), 31 | plugin.getClaimManager().getLocation(claim, "cornerA"), 32 | plugin.getClaimManager().getLocation(claim, "cornerB")); 33 | if (selection.contains(attacked.getLocation()) && !plugin.getClaimManager().isPvPClaim(claim)) 34 | return; 35 | if (selection.contains(attacker.getLocation()) && !plugin.getClaimManager().isPvPClaim(claim)) 36 | return; 37 | } 38 | 39 | if (plugin.getStaffManager().isStaffMode(attacker)) return; 40 | 41 | if (plugin.getKbManager().hasKnockBackEnabled()) { 42 | double vecX = plugin.getKbManager().getKbX(); 43 | double vecY = plugin.getKbManager().getKbY(); 44 | double vecZ = plugin.getKbManager().getKbZ(); 45 | Vector dir = attacker.getLocation().getDirection(); 46 | Vector vec = new Vector(dir.getX() * vecX, vecY, dir.getZ() * vecZ); 47 | attacked.setVelocity(vec); 48 | double highestKB = attacked.getLocation().getBlockY() - attacker.getLocation().getBlockY(); 49 | double heightKB = plugin.getKbManager().getHeightKB(); 50 | Vector dir2 = attacker.getLocation().getDirection(); 51 | 52 | ComboFly.get().getServer().getScheduler().runTaskLaterAsynchronously(ComboFly.get(), () -> { 53 | if (maxHeight) { 54 | if (highestKB == heightKB) { 55 | Vector vec2 = new Vector(dir2.getX() * vecX, 0, dir2.getZ() * vecZ); 56 | attacked.setVelocity(vec2); 57 | } 58 | } 59 | if (highestKB > heightKB) { 60 | Vector vec2 = new Vector(dir2.getX() * vecX, -0.05, dir2.getZ() * vecZ); 61 | attacked.setVelocity(vec2); 62 | } 63 | }, 0L); 64 | } 65 | } 66 | } 67 | 68 | @EventHandler 69 | public void onTicksDamage(PlayerJoinEvent event) { 70 | if (plugin.getKbManager().hasMaxTicksEnabled()) { 71 | int ticks = ComboFly.get().getMainConfig().getInt("HIT-TICKS.TICKS"); 72 | event.getPlayer().setMaximumNoDamageTicks(ticks); 73 | } 74 | } 75 | } 76 | 77 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/listeners/PlayerListener.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.listeners; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | 5 | import dev.panda.combofly.commands.essentials.BuildCommand; 6 | import dev.panda.combofly.profile.Profile; 7 | import org.apache.commons.lang.WordUtils; 8 | import org.bukkit.*; 9 | import org.bukkit.entity.Player; 10 | import org.bukkit.event.EventHandler; 11 | import org.bukkit.event.Listener; 12 | import org.bukkit.event.block.BlockBreakEvent; 13 | import org.bukkit.event.block.BlockPlaceEvent; 14 | import org.bukkit.event.entity.FoodLevelChangeEvent; 15 | import org.bukkit.event.entity.PlayerDeathEvent; 16 | 17 | import dev.panda.chat.ChatUtil; 18 | import org.bukkit.event.player.*; 19 | import org.bukkit.event.weather.WeatherChangeEvent; 20 | import org.bukkit.event.world.ChunkUnloadEvent; 21 | 22 | public class PlayerListener implements Listener { 23 | 24 | public PlayerListener() { 25 | Bukkit.getServer().getPluginManager().registerEvents(this, ComboFly.get()); 26 | } 27 | 28 | @EventHandler 29 | private void cancelSpawn(PlayerMoveEvent event) { 30 | if (ComboFly.get().getSpawnManager().hasCooldown(event.getPlayer())) { 31 | if (event.getFrom().getBlockX() == event.getTo().getBlockX() 32 | && event.getFrom().getBlockY() == event.getTo().getBlockY() 33 | && event.getFrom().getBlockZ() == event.getTo().getBlockZ()) 34 | return; 35 | ComboFly.get().getSpawnManager().removeRunnable(event.getPlayer()); 36 | ComboFly.get().getSpawnManager().removeCooldown(event.getPlayer()); 37 | event.getPlayer().sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPAWN.CANCEL"))); 38 | } 39 | } 40 | 41 | @EventHandler 42 | private void onQuit(PlayerQuitEvent event) { 43 | event.setQuitMessage(null); 44 | } 45 | 46 | @EventHandler 47 | public void onDropItem(PlayerDropItemEvent event) { 48 | if (event.getPlayer().getGameMode() != GameMode.CREATIVE) { 49 | event.setCancelled(true); 50 | } 51 | } 52 | 53 | @EventHandler 54 | public void onFoodLevelChange(FoodLevelChangeEvent event) { 55 | event.setCancelled(true); 56 | } 57 | 58 | @EventHandler 59 | private void onPlace(BlockPlaceEvent event) { 60 | Player player = event.getPlayer(); 61 | event.setCancelled(!BuildCommand.mode.contains(player.getName())); 62 | } 63 | 64 | @EventHandler 65 | private void onBreak(BlockBreakEvent event) { 66 | Player player = event.getPlayer(); 67 | event.setCancelled(!BuildCommand.mode.contains(player.getName())); 68 | } 69 | 70 | @EventHandler 71 | private void onWeather(WeatherChangeEvent event){ 72 | event.setCancelled(true); 73 | } 74 | 75 | @EventHandler 76 | private void onChunkUnload(ChunkUnloadEvent event) { 77 | event.setCancelled(true); 78 | } 79 | } -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/listeners/ShopListener.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.listeners; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.combofly.profile.Profile; 5 | import dev.panda.chat.ChatUtil; 6 | import dev.panda.combofly.utilities.Ints; 7 | import org.bukkit.Bukkit; 8 | import org.bukkit.Material; 9 | import org.bukkit.block.Block; 10 | import org.bukkit.block.BlockState; 11 | import org.bukkit.block.Sign; 12 | import org.bukkit.entity.Player; 13 | import org.bukkit.event.EventHandler; 14 | import org.bukkit.event.Listener; 15 | import org.bukkit.event.block.Action; 16 | import org.bukkit.event.player.PlayerInteractEvent; 17 | import org.bukkit.inventory.ItemStack; 18 | 19 | public class ShopListener implements Listener { 20 | 21 | public ShopListener() { 22 | Bukkit.getPluginManager().registerEvents(this, ComboFly.get()); 23 | } 24 | 25 | @EventHandler 26 | @Deprecated 27 | public void SignBuy(PlayerInteractEvent event){ 28 | if (event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { 29 | Player player = event.getPlayer(); 30 | Block block = event.getClickedBlock(); 31 | BlockState state = block.getState(); 32 | if (state instanceof Sign){ 33 | Sign sign = (Sign) state; 34 | String line1 = sign.getLine(0); 35 | String line2 = sign.getLine(1); 36 | String line3 = sign.getLine(2); 37 | String line4 = sign.getLine(3); 38 | if (line1.contains("[Buy]")) { 39 | if (line2.contains(":")) { 40 | Material material = Material.matchMaterial(line2.replace("_", "").split(":")[0]); 41 | Integer amount = Ints.tryParse(line3); 42 | if (amount != null && material != null && line4.contains("$")) { 43 | int money = Integer.parseInt(line4.replace("$", "")); 44 | 45 | if (money > Profile.getProfiles().get(player.getUniqueId()).getBalance()) { 46 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SHOP.ENOUGH-MONEY"))); 47 | return; 48 | } 49 | 50 | int data = Integer.parseInt(line2.split(":")[1]); 51 | int playerBalance = (int) ComboFly.get().getBalanceType().getBalance(player); 52 | ComboFly.get().getBalanceType().removeBalance(player, playerBalance - money); 53 | player.getInventory().addItem(this.getItemData(material.getId(), amount, data)); 54 | } 55 | } 56 | Material material = Material.matchMaterial(line2.replace("_", "")); 57 | Integer amount = Ints.tryParse(line3); 58 | if (amount != null && material != null && line4.contains("$")) { 59 | int money = Integer.parseInt(line4.replace("$", "")); 60 | 61 | if (money > Profile.getProfiles().get(player.getUniqueId()).getBalance()) { 62 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SHOP.ENOUGH-MONEY"))); 63 | return; 64 | } 65 | 66 | int playerBalance = (int) ComboFly.get().getBalanceType().getBalance(player); 67 | ComboFly.get().getBalanceType().removeBalance(player, playerBalance - money); 68 | player.getInventory().addItem(this.getItem(material.getId(), amount)); 69 | } 70 | } 71 | } 72 | } 73 | } 74 | 75 | private ItemStack getItemData(int id, int amount, int data) { 76 | return new ItemStack(id, amount, (short) data); 77 | } 78 | 79 | private ItemStack getItem(int id, int amount) { 80 | return new ItemStack(id, amount); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/managers/ClaimManager.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.managers; 2 | 3 | import com.sk89q.worldedit.bukkit.selections.Selection; 4 | import dev.panda.combofly.ComboFly; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.Location; 7 | import org.bukkit.World; 8 | 9 | import java.util.Set; 10 | 11 | public class ClaimManager { 12 | 13 | public void createClaimPvP(String claim, Selection sel) { 14 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".WORLD", sel.getMaximumPoint().getWorld().getName()); 15 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".PVP", true); 16 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerA.x", sel.getMaximumPoint().getX()); 17 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerA.y", sel.getMaximumPoint().getY()); 18 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerA.z", sel.getMaximumPoint().getZ()); 19 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerB.x", sel.getMinimumPoint().getX()); 20 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerB.y", sel.getMinimumPoint().getY()); 21 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerB.z", sel.getMinimumPoint().getZ()); 22 | ComboFly.get().getClaimConfig().save(); 23 | ComboFly.get().getClaimConfig().reload(); 24 | } 25 | 26 | public void createClaimNoPvP(String claim, Selection sel) { 27 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".WORLD", sel.getMaximumPoint().getWorld().getName()); 28 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".PVP", false); 29 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerA.x", sel.getMaximumPoint().getX()); 30 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerA.y", sel.getMaximumPoint().getY()); 31 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerA.z", sel.getMaximumPoint().getZ()); 32 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerB.x", sel.getMinimumPoint().getX()); 33 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerB.y", sel.getMinimumPoint().getY()); 34 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim + ".cornerB.z", sel.getMinimumPoint().getZ()); 35 | ComboFly.get().getClaimConfig().save(); 36 | ComboFly.get().getClaimConfig().reload(); 37 | } 38 | 39 | public void deleteClaim(String claim) { 40 | ComboFly.get().getClaimConfig().getConfiguration().set("CLAIMS." + claim, null); 41 | ComboFly.get().getClaimConfig().save(); 42 | ComboFly.get().getClaimConfig().reload(); 43 | } 44 | 45 | public Location getLocation(String claim, String corner) { 46 | World world = Bukkit.getWorld(ComboFly.get().getClaimConfig().getString("CLAIMS." + claim + ".WORLD")); 47 | double x = ComboFly.get().getClaimConfig().getDouble("CLAIMS." + claim + "." + corner + ".x"); 48 | double y = ComboFly.get().getClaimConfig().getDouble("CLAIMS." + claim + "." + corner + ".y"); 49 | double z = ComboFly.get().getClaimConfig().getDouble("CLAIMS." + claim + "." + corner + ".z"); 50 | return new Location(world, x, y, z); 51 | } 52 | 53 | public boolean isPvPClaim(String claim) { 54 | return ComboFly.get().getClaimConfig().getBoolean("CLAIMS." + claim + ".PVP"); 55 | } 56 | 57 | public World getClaimWorld(String claim) { 58 | return Bukkit.getWorld(ComboFly.get().getClaimConfig().getString("CLAIMS." + claim + ".WORLD")); 59 | } 60 | 61 | public Set getClaimList() { 62 | return ComboFly.get().getClaimConfig().getConfiguration().getConfigurationSection("CLAIMS").getKeys(false); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/managers/CombatManager.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.managers; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import org.bukkit.entity.Player; 6 | 7 | import java.util.HashMap; 8 | import java.util.UUID; 9 | 10 | @Getter 11 | @Setter 12 | public class CombatManager { 13 | 14 | private HashMap cooldown; 15 | private int time; 16 | 17 | public CombatManager() { 18 | this.cooldown = new HashMap<>(); 19 | this.time = 30; 20 | } 21 | 22 | public boolean hasCooldown(Player player) { 23 | return this.cooldown.containsKey(player.getUniqueId()) && cooldown.get(player.getUniqueId()) > System.currentTimeMillis(); 24 | } 25 | 26 | public String getCooldown(Player player) { 27 | return String.valueOf((this.cooldown.get(player.getUniqueId()) / 1000) - (System.currentTimeMillis() / 1000)); 28 | } 29 | 30 | public void setCooldown(Player player) { 31 | this.cooldown.put(player.getUniqueId(), System.currentTimeMillis() + (this.getTime() * 1000)); 32 | } 33 | 34 | public void removeCooldown(Player player) { 35 | this.cooldown.remove(player.getUniqueId()); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/managers/EnderpearlManager.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.managers; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import org.bukkit.entity.Player; 7 | 8 | import java.util.HashMap; 9 | import java.util.UUID; 10 | 11 | @Getter 12 | @Setter 13 | public class EnderpearlManager { 14 | 15 | private HashMap cooldown; 16 | private int time; 17 | 18 | public EnderpearlManager() { 19 | this.cooldown = new HashMap<>(); 20 | this.time = ComboFly.get().getMessageConfig().getInt("ENDERPEARL.COOLDOWN"); 21 | } 22 | 23 | public boolean hasCooldown(Player player) { 24 | return this.cooldown.containsKey(player.getUniqueId()) && cooldown.get(player.getUniqueId()) > System.currentTimeMillis(); 25 | } 26 | 27 | public String getCooldown(Player player) { 28 | return String.valueOf((this.cooldown.get(player.getUniqueId()) / 1000) - (System.currentTimeMillis() / 1000)); 29 | } 30 | 31 | public void setCooldown(Player player) { 32 | this.cooldown.put(player.getUniqueId(), System.currentTimeMillis() + (this.getTime() * 1000)); 33 | } 34 | 35 | public void removeCooldown(Player player) { 36 | this.cooldown.remove(player.getUniqueId()); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/managers/FreezeManager.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.managers; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import org.bukkit.entity.Player; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | public class FreezeManager { 11 | 12 | public List freeze = new ArrayList<>(); 13 | 14 | public boolean isFrozen(Player player) { 15 | return freeze.contains(player.getName()); 16 | } 17 | 18 | public void setFreeze(Player player) { 19 | freeze.add(player.getName()); 20 | this.frozenMessage(player); 21 | } 22 | 23 | public void removeFreeze(Player player) { 24 | freeze.remove(player.getName()); 25 | } 26 | 27 | private void frozenMessage(Player player) { 28 | for (String lines : ComboFly.get().getMessageConfig().getStringList("FREEZE.FROZEN")) { 29 | player.sendMessage(ChatUtil.translate(lines)); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/managers/KBManager.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.managers; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | 5 | public class KBManager { 6 | 7 | public boolean hasKnockBackEnabled() { 8 | return ComboFly.get().getMainConfig().getBoolean("KNOCKBACK.ENABLE"); 9 | } 10 | public boolean hasMaxTicksEnabled() { 11 | return ComboFly.get().getMainConfig().getBoolean("HIT-TICKS.ENABLE"); 12 | } 13 | 14 | public void setKnockBack(double X, double Y, double Z) { 15 | ComboFly.get().getMainConfig().getConfiguration().set("KNOCKBACK.X", X); 16 | ComboFly.get().getMainConfig().getConfiguration().set("KNOCKBACK.Y", Y); 17 | ComboFly.get().getMainConfig().getConfiguration().set("KNOCKBACK.Z", Z); 18 | ComboFly.get().getMainConfig().save(); 19 | ComboFly.get().getMainConfig().reload(); 20 | } 21 | public double getKbX() { return ComboFly.get().getMainConfig().getDouble("KNOCKBACK.X"); } 22 | public double getKbY() { return ComboFly.get().getMainConfig().getDouble("KNOCKBACK.Y"); } 23 | public double getKbZ() { return ComboFly.get().getMainConfig().getDouble("KNOCKBACK.Z"); } 24 | 25 | public void setHeightKB(double HeightKB){ 26 | ComboFly.get().getMainConfig().getConfiguration().set("KNOCKBACK.MAXHEIGHT", HeightKB); 27 | ComboFly.get().getMainConfig().save(); 28 | ComboFly.get().getMainConfig().reload(); 29 | } 30 | public double getHeightKB(){ 31 | return ComboFly.get().getMainConfig().getDouble("KNOCKBACK.MAXHEIGHT"); 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/managers/KillStreakManager.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.managers; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.Material; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.inventory.ItemStack; 9 | import org.bukkit.inventory.meta.Repairable; 10 | 11 | public class KillStreakManager { 12 | 13 | public void messageKillStreak(int streak, Player player) { 14 | String message = ComboFly.get().getMainConfig().getString("KILLSTREAK.MESSAGE") 15 | .replace("{streak}", String.valueOf(streak)) 16 | .replace("{player}", player.getName()); 17 | Bukkit.broadcastMessage(ChatUtil.translate(message)); 18 | } 19 | 20 | public void messageReward(int streak, Player player){ 21 | for (String message : ComboFly.get().getMainConfig().getConfiguration().getConfigurationSection("KILLSTREAK.REWARDS.STREAK." + streak + ".MESSAGE").getKeys(false)) { 22 | player.sendMessage(ChatUtil.translate(message)); 23 | } 24 | } 25 | 26 | public void getRepairAll(Player p) { 27 | for (String streak : ComboFly.get().getMainConfig().getConfiguration().getConfigurationSection("KILLSTREAK.REWARDS.STREAK").getKeys(false)) { 28 | if (ComboFly.get().getMainConfig().getBoolean("KILLSTREAK.REWARDS.STREAK." + streak + ".REPAIRALL")) { 29 | for (ItemStack items : p.getInventory().getContents()) { 30 | this.canRepair(items); 31 | } 32 | for (ItemStack items : p.getInventory().getArmorContents()) { 33 | this.canRepair(items); 34 | } 35 | p.updateInventory(); 36 | } 37 | } 38 | } 39 | public void getReward(int streak, Player player) { 40 | for (String commands : ComboFly.get().getMainConfig().getStringList("KILLSTREAK.REWARDS.STREAK." + streak + ".COMMANDS")) { 41 | Bukkit.dispatchCommand(Bukkit.getConsoleSender(), commands 42 | .replace("{player}", player.getName())); 43 | } 44 | } 45 | private void canRepair(ItemStack item) { 46 | if (item instanceof Repairable) { 47 | item.setDurability((short)0); 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/managers/SpeedManager.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.managers; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import org.bukkit.entity.Player; 6 | 7 | public class SpeedManager { 8 | 9 | private int walkSpeed; 10 | private int flySpeed; 11 | 12 | public SpeedManager() { 13 | this.walkSpeed = 0; 14 | this.flySpeed = 0; 15 | } 16 | 17 | public void getWalkSpeed(String amount, Player player) { 18 | try { 19 | this.walkSpeed = Integer.parseInt(amount); 20 | } 21 | catch (NumberFormatException e) { 22 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPEED.WALK.WRONG-FORMAT"))); 23 | return; 24 | } 25 | if (this.walkSpeed < 1 || this.walkSpeed > 10) { 26 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPEED.WALK.WRONG-FORMAT"))); 27 | return; 28 | } 29 | player.setWalkSpeed((float) this.walkSpeed / 10); 30 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPEED.WALK.SPEED") 31 | .replace("{speed}", String.valueOf(this.walkSpeed)))); 32 | } 33 | 34 | public void getFlySpeed(String amount, Player player) { 35 | try { 36 | this.flySpeed = Integer.parseInt(amount); 37 | } 38 | catch (NumberFormatException e) { 39 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPEED.FLY.WRONG-FORMAT"))); 40 | return; 41 | } 42 | if (this.flySpeed < 1 || this.flySpeed > 10) { 43 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPEED.FLY.WRONG-FORMAT"))); 44 | return; 45 | } 46 | player.setFlySpeed((float) this.flySpeed / 10); 47 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPEED.FLY.SPEED") 48 | .replace("{speed}", String.valueOf(this.flySpeed)))); 49 | } 50 | } -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/managers/VanishManager.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.managers; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.entity.Player; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | public class VanishManager { 11 | 12 | public List vanish = new ArrayList<>(); 13 | 14 | public boolean isVanish(Player player) { 15 | return vanish.contains(player.getName()); 16 | } 17 | 18 | public void setVanish(Player player) { 19 | vanish.add(player.getName()); 20 | for (Player online : Bukkit.getServer().getOnlinePlayers()) { 21 | if (ComboFly.get().getStaffManager().isStaff(online)) { 22 | online.showPlayer(player); 23 | } 24 | else { 25 | online.hidePlayer(player); 26 | } 27 | } 28 | } 29 | 30 | public void removeVanish(Player player) { 31 | vanish.remove(player.getName()); 32 | for (Player online : Bukkit.getServer().getOnlinePlayers()) { 33 | online.showPlayer(player); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/managers/WarpManager.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.managers; 2 | 3 | import java.util.Set; 4 | 5 | import dev.panda.combofly.ComboFly; 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.Location; 8 | import org.bukkit.World; 9 | import org.bukkit.entity.Player; 10 | 11 | public class WarpManager { 12 | 13 | public void createWarp(String warp, Player player) { 14 | ComboFly.get().getWarpConfig().getConfiguration().set("WARPS." + warp + ".WORLD", player.getWorld().getName()); 15 | ComboFly.get().getWarpConfig().getConfiguration().set("WARPS." + warp + ".X", player.getLocation().getX()); 16 | ComboFly.get().getWarpConfig().getConfiguration().set("WARPS." + warp + ".Y", player.getLocation().getY()); 17 | ComboFly.get().getWarpConfig().getConfiguration().set("WARPS." + warp + ".Z", player.getLocation().getZ()); 18 | ComboFly.get().getWarpConfig().getConfiguration().set("WARPS." + warp + ".YAW", player.getLocation().getYaw()); 19 | ComboFly.get().getWarpConfig().getConfiguration().set("WARPS." + warp + ".PITCH", player.getLocation().getPitch()); 20 | ComboFly.get().getWarpConfig().save(); 21 | ComboFly.get().getWarpConfig().reload(); 22 | } 23 | 24 | public void deleteWarp(String warp) { 25 | ComboFly.get().getWarpConfig().getConfiguration().set("WARPS." + warp, null); 26 | ComboFly.get().getWarpConfig().save(); 27 | ComboFly.get().getWarpConfig().reload(); 28 | } 29 | 30 | public Location getWarpLocation(String warp) { 31 | return new Location( 32 | getWarpWorld(warp), 33 | getWarpX(warp), 34 | getWarpY(warp), 35 | getWarpZ(warp), 36 | getWarpYaw(warp), 37 | getWarpPitch(warp)); 38 | } 39 | 40 | public Set getWarps() { 41 | return ComboFly.get().getWarpConfig().getConfiguration().getConfigurationSection("WARPS").getKeys(false); 42 | } 43 | 44 | private World getWarpWorld(String warp) { 45 | return Bukkit.getWorld(ComboFly.get().getWarpConfig().getString("WARPS." + warp + ".WORLD")); 46 | } 47 | 48 | private double getWarpX(String warp) { 49 | return ComboFly.get().getWarpConfig().getDouble("WARPS." + warp + ".X"); 50 | } 51 | 52 | private double getWarpY(String warp) { 53 | return ComboFly.get().getWarpConfig().getDouble("WARPS." + warp + ".Y"); 54 | } 55 | 56 | private double getWarpZ(String warp) { 57 | return ComboFly.get().getWarpConfig().getDouble("WARPS." + warp + ".Z"); 58 | } 59 | 60 | private int getWarpYaw(String warp) { 61 | return ComboFly.get().getWarpConfig().getInt("WARPS." + warp + ".YAW"); 62 | } 63 | 64 | private int getWarpPitch(String warp) { 65 | return ComboFly.get().getWarpConfig().getInt("WARPS." + warp + ".PITCH"); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/profile/Profile.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.profile; 2 | 3 | import com.google.common.collect.Lists; 4 | import com.google.common.collect.Maps; 5 | import dev.panda.combofly.ComboFly; 6 | import dev.panda.combofly.profile.comparator.ProfileDeathsComparator; 7 | import dev.panda.combofly.profile.comparator.ProfileKillsComparator; 8 | import dev.panda.combofly.profile.entry.KDEntry; 9 | import dev.panda.file.FileConfig; 10 | import lombok.Getter; 11 | import lombok.Setter; 12 | import org.bukkit.Bukkit; 13 | import org.bukkit.entity.Player; 14 | 15 | import java.util.*; 16 | import java.util.function.Supplier; 17 | import java.util.stream.Collectors; 18 | 19 | @Getter @Setter 20 | public class Profile implements Supplier { 21 | 22 | @Getter public static Map profiles = Maps.newHashMap(); 23 | @Getter public static Map> leaderboards = Maps.newHashMap(); 24 | private final UUID uuid; 25 | private String name; 26 | private KDEntry kd; 27 | private int balance; 28 | 29 | public Profile(UUID uuid, String name) { 30 | this.uuid = uuid; 31 | this.name = name; 32 | this.kd = new KDEntry(0, 0); 33 | } 34 | 35 | public static void init() { 36 | ComboFly.get().getServer().getScheduler().runTaskTimerAsynchronously(ComboFly.get(), () -> { 37 | for (Player online : Bukkit.getOnlinePlayers()) { 38 | profiles.get(online.getUniqueId()).save(online); 39 | } 40 | }, 6000L, 6000L); 41 | 42 | ComboFly.get().getProfileConfig().getConfiguration().getConfigurationSection("PROFILES").getKeys(false).forEach(uuids -> { 43 | UUID uuid = UUID.fromString(uuids); 44 | Profile profile = new Profile(uuid, Bukkit.getOfflinePlayer(uuid).getName()); 45 | profile.load(); 46 | profiles.put(uuid, profile); 47 | }); 48 | 49 | ComboFly.get().getServer().getScheduler().runTaskTimerAsynchronously(ComboFly.get(), () -> { 50 | leaderboards.clear(); 51 | leaderboards.put("kills", profiles.values().stream() 52 | .sorted(new ProfileKillsComparator().reversed()) 53 | .collect(Collectors.toList())); 54 | leaderboards.put("deaths", profiles.values().stream() 55 | .sorted(new ProfileDeathsComparator().reversed()) 56 | .collect(Collectors.toList())); 57 | }, 40L, 1800L); 58 | } 59 | 60 | public static Profile get(UUID uuid) { 61 | return profiles.get(uuid); 62 | } 63 | 64 | public void save(Player player) { 65 | FileConfig config = ComboFly.get().getProfileConfig(); 66 | 67 | if (player != null) config.getConfiguration().set("PROFILES." + uuid + ".name", player.getName()); 68 | config.getConfiguration().set("PROFILES." + uuid + ".kills", kd.getKills()); 69 | config.getConfiguration().set("PROFILES." + uuid + ".deaths", kd.getDeaths()); 70 | config.getConfiguration().set("PROFILES." + uuid + ".balance", balance); 71 | 72 | config.save(); 73 | config.reload(); 74 | } 75 | 76 | public void load() { 77 | FileConfig config = ComboFly.get().getProfileConfig(); 78 | try { 79 | this.name = Bukkit.getOfflinePlayer(uuid).getName(); 80 | this.kd.setKills(config.getInt("PROFILES." + uuid + ".kills")); 81 | this.kd.setDeaths(config.getInt("PROFILES." + uuid + ".deaths")); 82 | this.balance = config.getInt("PROFILES." + uuid + ".balance"); 83 | } 84 | catch (Exception exception) { 85 | this.kd.setKills(0); 86 | this.kd.setDeaths(0); 87 | this.balance = 0; 88 | } 89 | } 90 | 91 | @Override 92 | public Profile get() { 93 | return this; 94 | } 95 | } -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/profile/commands/EnderChestCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.profile.commands; 2 | 3 | import dev.panda.chat.ChatUtil; 4 | import dev.panda.combofly.ComboFly; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.entity.Player; 10 | 11 | public class EnderChestCommand extends BaseCommand { 12 | 13 | @Command(name = "enderchest", permission = "pandafly.enderchest", aliases = {"ec", "echest"}) 14 | @Override 15 | public void onCommand(CommandArgs command) { 16 | Player player = command.getPlayer(); 17 | String[] args = command.getArgs(); 18 | 19 | if (args.length < 1) { 20 | if (ComboFly.get().getCombatManager().hasCooldown(player)) { 21 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPAWN.COMBAT"))); 22 | return; 23 | } 24 | 25 | player.openInventory(player.getEnderChest()); 26 | return; 27 | } 28 | 29 | if (ComboFly.get().getCombatManager().hasCooldown(player)) { 30 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("SPAWN.COMBAT"))); 31 | return; 32 | } 33 | 34 | if (!player.hasPermission("pandafly.enderchest.others")) { 35 | player.openInventory(player.getEnderChest()); 36 | return; 37 | } 38 | 39 | Player target = Bukkit.getPlayer(args[0]); 40 | 41 | if (target == null) { 42 | player.sendMessage(ChatUtil.translate("&cPlayer '" + args[0] + "' not found.")); 43 | return; 44 | } 45 | 46 | player.openInventory(target.getEnderChest()); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/profile/commands/KillStreakCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.profile.commands; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.command.BaseCommand; 6 | import dev.panda.command.Command; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.entity.Player; 9 | 10 | public class KillStreakCommand extends BaseCommand { 11 | 12 | @Command(name = "killstreak", permission = "pandafly.killstreak") 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | Player player = command.getPlayer(); 16 | 17 | ComboFly.get().getMainConfig().getStringList("KILLSTREAK.COMMAND").forEach(key -> player.sendMessage(ChatUtil.translate(key))); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/profile/commands/balance/PayCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.profile.commands.balance; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.chat.ChatUtil; 5 | import dev.panda.combofly.utilities.Ints; 6 | import dev.panda.command.BaseCommand; 7 | import dev.panda.command.CommandArgs; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.entity.Player; 10 | 11 | public class PayCommand extends BaseCommand { 12 | 13 | @Override 14 | public void onCommand(CommandArgs command) { 15 | Player player = command.getPlayer(); 16 | String[] args = command.getArgs(); 17 | String label = command.getLabel(); 18 | 19 | if (!player.hasPermission("pandafly.pay")) { 20 | player.hasPermission(ChatUtil.translate("&cYou don't have permission.")); 21 | return; 22 | } 23 | 24 | if (args.length < 2) { 25 | player.sendMessage(ChatUtil.translate("&cUsage: /" + label + " ")); 26 | return; 27 | } 28 | 29 | Player target = Bukkit.getPlayer(args[0]); 30 | 31 | if (target == null) { 32 | player.sendMessage(ChatUtil.translate("&cPlayer not found.")); 33 | return; 34 | } 35 | 36 | if (player.equals(target)) { 37 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("BALANCE.PAY-SELF"))); 38 | return; 39 | } 40 | 41 | Integer amount = Ints.tryParse(args[1]); 42 | 43 | if (amount == null) { 44 | player.sendMessage(ChatUtil.translate("&cAmount must be a number.")); 45 | return; 46 | } 47 | 48 | if (amount <= 0) { 49 | player.sendMessage(ChatUtil.translate("&cAmount must be positive.")); 50 | return; 51 | } 52 | 53 | int playerBalance = (int) ComboFly.get().getBalanceType().getBalance(player); 54 | int targetBalance = (int) ComboFly.get().getBalanceType().getBalance(target); 55 | 56 | if (playerBalance < amount) { 57 | ComboFly.get().getMainConfig().getStringList("PAY-ENOUGH-BALANCE").forEach(key -> player.sendMessage(key 58 | .replace("{amount}", String.valueOf(playerBalance)))); 59 | return; 60 | } 61 | 62 | ComboFly.get().getBalanceType().setBalance(player, playerBalance - amount); 63 | ComboFly.get().getBalanceType().setBalance(target, targetBalance + amount); 64 | player.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("BALANCE.PAY-SEND") 65 | .replace("{amount}", String.valueOf(amount)) 66 | .replace("{target}", target.getName()))); 67 | target.sendMessage(ChatUtil.translate(ComboFly.get().getMessageConfig().getString("BALANCE.PAY-RECEIVE") 68 | .replace("{amount}", String.valueOf(amount)) 69 | .replace("{player}", player.getName()))); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/profile/commands/leaderboard/LeaderboardCommand.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.profile.commands.leaderboard; 2 | 3 | import dev.panda.combofly.profile.commands.leaderboard.menu.LeaderboardMenu; 4 | import dev.panda.command.BaseCommand; 5 | import dev.panda.command.Command; 6 | import dev.panda.command.CommandArgs; 7 | import org.bukkit.entity.Player; 8 | 9 | public class LeaderboardCommand extends BaseCommand { 10 | 11 | @Command(name = "leaderboard", aliases = {"tops", "top", "topkills", "topdeaths"}) 12 | @Override 13 | public void onCommand(CommandArgs commandArgs) { 14 | Player player = commandArgs.getPlayer(); 15 | 16 | new LeaderboardMenu().openMenu(player); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/profile/commands/leaderboard/menu/LeaderboardMenu.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.profile.commands.leaderboard.menu; 2 | 3 | import com.google.common.collect.Lists; 4 | import com.google.common.collect.Maps; 5 | import dev.panda.chat.ChatUtil; 6 | import dev.panda.combofly.profile.Profile; 7 | import dev.panda.combofly.utilities.menu.Button; 8 | import dev.panda.combofly.utilities.menu.Menu; 9 | import dev.panda.item.ItemBuilder; 10 | import org.bukkit.Material; 11 | import org.bukkit.entity.Player; 12 | import org.bukkit.inventory.ItemStack; 13 | 14 | import java.util.List; 15 | import java.util.Map; 16 | import java.util.concurrent.atomic.AtomicInteger; 17 | 18 | public class LeaderboardMenu extends Menu { 19 | 20 | @Override 21 | public String getTitle(Player player) { 22 | return "&6&lLeaderboard"; 23 | } 24 | 25 | @Override 26 | public int getSize() { 27 | return 9*3; 28 | } 29 | 30 | @Override 31 | public Map getButtons(Player player) { 32 | Map buttons = Maps.newHashMap(); 33 | buttons.put(12, new KillsButton()); 34 | buttons.put(14, new DeathsButton()); 35 | return buttons; 36 | } 37 | 38 | private static class KillsButton extends Button { 39 | 40 | @Override 41 | public ItemStack getButtonItem(Player player) { 42 | List lore = Lists.newArrayList(); 43 | lore.add(ChatUtil.NORMAL_LINE); 44 | AtomicInteger pos = new AtomicInteger(1); 45 | Profile.getLeaderboards().get("kills").stream().limit(10).forEach(profile -> 46 | lore.add(ChatUtil.translate("&7" + pos.getAndIncrement() + ") " + "&a" + profile.getName() + " &7(" + profile.getKd().getKills() + ")"))); 47 | lore.add(ChatUtil.NORMAL_LINE); 48 | return new ItemBuilder(Material.EMERALD) 49 | .name("&2Top Kills") 50 | .lore(lore) 51 | .build(); 52 | } 53 | } 54 | 55 | private static class DeathsButton extends Button { 56 | 57 | @Override 58 | public ItemStack getButtonItem(Player player) { 59 | List lore = Lists.newArrayList(); 60 | lore.add(ChatUtil.NORMAL_LINE); 61 | AtomicInteger pos = new AtomicInteger(1); 62 | Profile.getLeaderboards().get("deaths").stream().limit(10).forEach(profile -> 63 | lore.add(ChatUtil.translate("&7" + pos.getAndIncrement() + ") " + "&a" + profile.getName() + " &7(" + profile.getKd().getDeaths() + ")"))); 64 | lore.add(ChatUtil.NORMAL_LINE); 65 | return new ItemBuilder(Material.EMERALD) 66 | .name("&2Top Deaths") 67 | .lore(lore) 68 | .build(); 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/profile/comparator/ProfileDeathsComparator.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.profile.comparator; 2 | 3 | import dev.panda.combofly.profile.Profile; 4 | 5 | import java.util.Comparator; 6 | 7 | public class ProfileDeathsComparator implements Comparator { 8 | @Override 9 | public int compare(Profile o1, Profile o2) { 10 | return Integer.compare(o1.getKd().getDeaths(), o2.getKd().getDeaths()); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/profile/comparator/ProfileKillsComparator.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.profile.comparator; 2 | 3 | import dev.panda.combofly.profile.Profile; 4 | 5 | import java.util.Comparator; 6 | 7 | public class ProfileKillsComparator implements Comparator { 8 | @Override 9 | public int compare(Profile o1, Profile o2) { 10 | return Integer.compare(o1.getKd().getKills(), o2.getKd().getKills()); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/profile/entry/KDEntry.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.profile.entry; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter @Setter 8 | @AllArgsConstructor 9 | public class KDEntry { 10 | 11 | private int kills, deaths; 12 | 13 | public void incrementKills() { 14 | this.kills += 1; 15 | } 16 | 17 | public void decrementKills(int amount) { 18 | this.kills -= amount; 19 | } 20 | 21 | public void incrementDeaths() { 22 | this.deaths += 1; 23 | } 24 | 25 | public void decrementDeaths(int amount) { 26 | this.deaths -= amount; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/Animation.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | 5 | import java.util.List; 6 | import java.util.concurrent.atomic.AtomicInteger; 7 | 8 | public class Animation { 9 | 10 | public static String title, footer; 11 | 12 | public static void init() { 13 | List titles = ComboFly.get().getScoreboardConfig().getStringList("TITLE"); 14 | List footers = ComboFly.get().getScoreboardConfig().getStringList("FOOTER"); 15 | 16 | title = titles.get(0); 17 | footer = footers.get(0); 18 | 19 | if (ComboFly.get().getScoreboardConfig().getBoolean("TITLE-ANIMATION-ENABLE")) { 20 | AtomicInteger atomicInteger = new AtomicInteger(); 21 | 22 | ComboFly.get().getServer().getScheduler().runTaskTimerAsynchronously(ComboFly.get(), () -> { 23 | if (atomicInteger.get() == titles.size()) atomicInteger.set(0); 24 | 25 | title = titles.get(atomicInteger.getAndIncrement()); 26 | 27 | }, 0L, (long) (ComboFly.get().getScoreboardConfig().getDouble("TITLE-TASK") * 20L)); 28 | } 29 | 30 | if (ComboFly.get().getScoreboardConfig().getBoolean("FOOTER-ANIMATION-ENABLE")) { 31 | AtomicInteger atomicInteger = new AtomicInteger(); 32 | 33 | ComboFly.get().getServer().getScheduler().runTaskTimerAsynchronously(ComboFly.get(), () -> { 34 | if (atomicInteger.get() == footers.size()) atomicInteger.set(0); 35 | 36 | footer = footers.get(atomicInteger.getAndIncrement()); 37 | 38 | }, 0L, (long) (ComboFly.get().getScoreboardConfig().getDouble("FOOTER-TASK") * 20L)); 39 | } 40 | } 41 | 42 | public static String getScoreboardTitle() { 43 | return title; 44 | } 45 | 46 | public static String getScoreboardFooter() { 47 | return footer; 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/Cooldown.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class Cooldown { 7 | 8 | private long start = System.currentTimeMillis(); 9 | private long expire; 10 | private boolean notified; 11 | 12 | public Cooldown(long duration) { 13 | this.expire = this.start + duration; 14 | 15 | if (duration == 0) { 16 | this.notified = true; 17 | } 18 | } 19 | 20 | public long getPassed() { 21 | return System.currentTimeMillis() - this.start; 22 | } 23 | 24 | public long getRemaining() { 25 | return this.expire - System.currentTimeMillis(); 26 | } 27 | 28 | public boolean hasExpired() { 29 | return System.currentTimeMillis() - this.expire >= 0; 30 | } 31 | 32 | public String getTimeLeft() { 33 | if (this.getRemaining() >= 60_000) { 34 | return TimeUtil.millisToRoundedTime(this.getRemaining()); 35 | } else { 36 | return TimeUtil.millisToSeconds(this.getRemaining()); 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/Description.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities; 2 | 3 | import java.util.List; 4 | 5 | import dev.panda.combofly.ComboFly; 6 | 7 | public class Description { 8 | 9 | public static String getName() { 10 | return ComboFly.get().getDescription().getName(); 11 | } 12 | 13 | public static String getVersion() { 14 | return ComboFly.get().getDescription().getVersion(); 15 | } 16 | 17 | public static List getAuthors() { 18 | return ComboFly.get().getDescription().getAuthors(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/Ints.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities; 2 | 3 | public class Ints { 4 | 5 | public static Integer tryParse(String string) { 6 | try { 7 | return Integer.parseInt(string); 8 | } catch (IllegalArgumentException ex) { 9 | return null; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/LocationUtil.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.Location; 5 | import org.bukkit.World; 6 | 7 | public class LocationUtil { 8 | 9 | public static Location[] getFaces(Location start) { 10 | Location[] faces = new Location[4]; 11 | faces[0] = new Location(start.getWorld(), start.getX() + 1, start.getY(), start.getZ()); 12 | faces[1] = new Location(start.getWorld(), start.getX() - 1, start.getY(), start.getZ()); 13 | faces[2] = new Location(start.getWorld(), start.getX(), start.getY() + 1, start.getZ()); 14 | faces[3] = new Location(start.getWorld(), start.getX(), start.getY() - 1, start.getZ()); 15 | return faces; 16 | } 17 | 18 | public static String serialize(Location location) { 19 | if (location == null) { 20 | return "null"; 21 | } 22 | 23 | return location.getWorld().getName() + ":" + location.getX() + ":" + location.getY() + ":" + location.getZ() + 24 | ":" + location.getYaw() + ":" + location.getPitch(); 25 | } 26 | 27 | public static Location deserialize(String source) { 28 | if (source == null) { 29 | return null; 30 | } 31 | 32 | String[] split = source.split(":"); 33 | World world = Bukkit.getServer().getWorld(split[0]); 34 | 35 | if (world == null) { 36 | return null; 37 | } 38 | 39 | return new Location(world, Double.parseDouble(split[1]), Double.parseDouble(split[2]), Double.parseDouble(split[3]), Float.parseFloat(split[4]), Float.parseFloat(split[5])); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/PlayerUtil.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.GameMode; 5 | import org.bukkit.entity.Player; 6 | import org.bukkit.inventory.ItemStack; 7 | import org.bukkit.potion.PotionEffect; 8 | import org.bukkit.potion.PotionEffectType; 9 | 10 | import java.util.UUID; 11 | 12 | public class PlayerUtil { 13 | 14 | public static void reset(Player player) { 15 | reset(player, true); 16 | } 17 | 18 | public static void reset(Player player, boolean resetHeldSlot) { 19 | player.setHealth(20.0D); 20 | player.setSaturation(20.0F); 21 | player.setFallDistance(0.0F); 22 | player.setFoodLevel(20); 23 | player.setFireTicks(0); 24 | player.setMaximumNoDamageTicks(20); 25 | player.setExp(0.0F); 26 | player.setLevel(0); 27 | player.setAllowFlight(false); 28 | player.setFlying(false); 29 | player.spigot().setCollidesWithEntities(true); 30 | player.setGameMode(GameMode.SURVIVAL); 31 | player.getInventory().setArmorContents(new ItemStack[4]); 32 | player.getInventory().setContents(new ItemStack[36]); 33 | player.getActivePotionEffects().forEach(effect -> player.removePotionEffect(effect.getType())); 34 | 35 | if (resetHeldSlot) { 36 | player.getInventory().setHeldItemSlot(0); 37 | } 38 | 39 | player.updateInventory(); 40 | } 41 | 42 | public static void denyMovement(Player player) { 43 | player.setFlying(false); 44 | player.setWalkSpeed(0.0F); 45 | player.setSprinting(false); 46 | player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, Integer.MAX_VALUE, 200)); 47 | } 48 | 49 | public static void allowMovement(Player player) { 50 | player.setFlying(false); 51 | player.setWalkSpeed(0.2F); 52 | player.setFoodLevel(20); 53 | player.setSprinting(true); 54 | player.removePotionEffect(PotionEffectType.JUMP); 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/Time.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities; 2 | 3 | import org.apache.commons.lang.time.DurationFormatUtils; 4 | 5 | public class Time { 6 | 7 | public static String formatIntMin(int time) { 8 | return String.format("%02d:%02d", time / 60, time % 60); 9 | } 10 | 11 | public static String formatLongMin(long time) { 12 | long totalSecs = time / 1000L; 13 | return String.format("%02d:%02d", totalSecs / 60L, totalSecs % 60L); 14 | } 15 | 16 | public static String formatDuration(long input) { 17 | return DurationFormatUtils.formatDurationWords(input, true, true); 18 | } 19 | 20 | public static int format(String input) { 21 | if (input == null || input.isEmpty()) { 22 | return -1; 23 | } 24 | int result = 0; 25 | StringBuilder number = new StringBuilder(); 26 | for (int i = 0; i < input.length(); ++i) { 27 | char c = input.charAt(i); 28 | if (Character.isDigit(c)) { 29 | number.append(c); 30 | } else { 31 | String str; 32 | if (Character.isLetter(c) && !(str = number.toString()).isEmpty()) { 33 | result += convert(Integer.parseInt(str), c); 34 | number = new StringBuilder(); 35 | } 36 | } 37 | } 38 | return result; 39 | } 40 | 41 | private static int convert(int value, char unit) { 42 | switch (unit) { 43 | case 'h': { 44 | return value * 60 * 60; 45 | } 46 | case 'm': { 47 | return value * 60; 48 | } 49 | case 's': { 50 | return value; 51 | } 52 | default: { 53 | return -1; 54 | } 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/TimeUtil.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities; 2 | 3 | import java.sql.Timestamp; 4 | import java.text.DecimalFormat; 5 | import java.text.SimpleDateFormat; 6 | import java.util.Calendar; 7 | import java.util.Date; 8 | import java.util.regex.Matcher; 9 | import java.util.regex.Pattern; 10 | 11 | public final class TimeUtil { 12 | 13 | private static final String HOUR_FORMAT = "%02d:%02d:%02d"; 14 | private static final String MINUTE_FORMAT = "%02d:%02d"; 15 | 16 | private TimeUtil() { 17 | throw new RuntimeException("Cannot instantiate a utility class."); 18 | } 19 | 20 | public static String millisToTimer(long millis) { 21 | long seconds = millis / 1000L; 22 | 23 | if (seconds > 3600L) { 24 | return String.format(HOUR_FORMAT, seconds / 3600L, seconds % 3600L / 60L, seconds % 60L); 25 | } else { 26 | return String.format(MINUTE_FORMAT, seconds / 60L, seconds % 60L); 27 | } 28 | } 29 | 30 | /** 31 | * Return the amount of seconds from milliseconds. 32 | * Note: We explicitly use 1000.0F (float) instead of 1000L (long). 33 | * 34 | * @param millis the amount of time in milliseconds 35 | * @return the seconds 36 | */ 37 | public static String millisToSeconds(long millis) { 38 | return new DecimalFormat("#0.0").format(millis / 1000.0F); 39 | } 40 | 41 | public static String dateToString(Date date, String secondaryColor) { 42 | Calendar calendar = Calendar.getInstance(); 43 | calendar.setTime(date); 44 | 45 | return new SimpleDateFormat("MMM dd yyyy " + (secondaryColor == null ? "" : secondaryColor) + 46 | "(hh:mm aa zz)").format(date); 47 | } 48 | 49 | public static Timestamp addDuration(long duration) { 50 | return truncateTimestamp(new Timestamp(System.currentTimeMillis() + duration)); 51 | } 52 | 53 | public static Timestamp truncateTimestamp(Timestamp timestamp) { 54 | if (timestamp.toLocalDateTime().getYear() > 2037) { 55 | timestamp.setYear(2037); 56 | } 57 | 58 | return timestamp; 59 | } 60 | 61 | public static Timestamp addDuration(Timestamp timestamp) { 62 | return truncateTimestamp(new Timestamp(System.currentTimeMillis() + timestamp.getTime())); 63 | } 64 | 65 | public static Timestamp fromMillis(long millis) { 66 | return new Timestamp(millis); 67 | } 68 | 69 | public static Timestamp getCurrentTimestamp() { 70 | return new Timestamp(System.currentTimeMillis()); 71 | } 72 | 73 | public static String millisToRoundedTime(long millis) { 74 | millis += 1L; 75 | 76 | long seconds = millis / 1000L; 77 | long minutes = seconds / 60L; 78 | long hours = minutes / 60L; 79 | long days = hours / 24L; 80 | long weeks = days / 7L; 81 | long months = weeks / 4L; 82 | long years = months / 12L; 83 | 84 | if (years > 0) { 85 | return years + " year" + (years == 1 ? "" : "s"); 86 | } else if (months > 0) { 87 | return months + " month" + (months == 1 ? "" : "s"); 88 | } else if (weeks > 0) { 89 | return weeks + " week" + (weeks == 1 ? "" : "s"); 90 | } else if (days > 0) { 91 | return days + " day" + (days == 1 ? "" : "s"); 92 | } else if (hours > 0) { 93 | return hours + " hour" + (hours == 1 ? "" : "s"); 94 | } else if (minutes > 0) { 95 | return minutes + " minute" + (minutes == 1 ? "" : "s"); 96 | } else { 97 | return seconds + " second" + (seconds == 1 ? "" : "s"); 98 | } 99 | } 100 | 101 | public static long parseTime(String time) { 102 | long totalTime = 0L; 103 | boolean found = false; 104 | Matcher matcher = Pattern.compile("\\d+\\D+").matcher(time); 105 | 106 | while (matcher.find()) { 107 | String s = matcher.group(); 108 | Long value = Long.parseLong(s.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)")[0]); 109 | String type = s.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)")[1]; 110 | 111 | switch (type) { 112 | case "s": 113 | totalTime += value; 114 | found = true; 115 | break; 116 | case "m": 117 | totalTime += value * 60; 118 | found = true; 119 | break; 120 | case "h": 121 | totalTime += value * 60 * 60; 122 | found = true; 123 | break; 124 | case "d": 125 | totalTime += value * 60 * 60 * 24; 126 | found = true; 127 | break; 128 | case "w": 129 | totalTime += value * 60 * 60 * 24 * 7; 130 | found = true; 131 | break; 132 | case "M": 133 | totalTime += value * 60 * 60 * 24 * 30; 134 | found = true; 135 | break; 136 | case "y": 137 | totalTime += value * 60 * 60 * 24 * 365; 138 | found = true; 139 | break; 140 | } 141 | } 142 | 143 | return !found ? -1 : totalTime * 1000; 144 | } 145 | 146 | } 147 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/Utils.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities; 2 | 3 | import com.google.common.base.Preconditions; 4 | import com.sk89q.worldedit.bukkit.WorldEditPlugin; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.Location; 7 | import org.bukkit.World; 8 | import org.bukkit.block.Block; 9 | import org.bukkit.entity.Player; 10 | 11 | import java.lang.reflect.Method; 12 | import java.util.Collection; 13 | 14 | public class Utils { 15 | 16 | public static WorldEditPlugin getWorldEdit() { 17 | return (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit"); 18 | } 19 | 20 | public static Location getHighestLocation(Location origin) { 21 | return getHighestLocation(origin, null); 22 | } 23 | 24 | public static Location getHighestLocation(Location origin, Location def) { 25 | Preconditions.checkNotNull(origin, "The location cannot be null"); 26 | Location cloned = origin.clone(); 27 | World world = cloned.getWorld(); 28 | 29 | int x = cloned.getBlockX(); 30 | int y = world.getMaxHeight(); 31 | int z = cloned.getBlockZ(); 32 | 33 | while (y > origin.getBlockY()) { 34 | Block block = world.getBlockAt(x, --y, z); 35 | if (!block.isEmpty()) { 36 | Location next = block.getLocation(); 37 | next.setPitch(origin.getPitch()); 38 | next.setYaw(origin.getYaw()); 39 | return next; 40 | } 41 | } 42 | return def; 43 | } 44 | 45 | public static int getPlayerPing(Player player) { 46 | try { 47 | String a = Bukkit.getServer().getClass().getPackage().getName().substring(23); 48 | Class b = Class.forName("org.bukkit.craftbukkit." + a + ".entity.CraftPlayer"); 49 | Object c = b.getMethod("getHandle").invoke(player); 50 | return (int) c.getClass().getDeclaredField("ping").get(c); 51 | } 52 | catch (Exception e) { 53 | return 0; 54 | } 55 | } 56 | 57 | public static int getPlayersAmount() { 58 | try { 59 | Method onlinePlayersMethod = Class.forName("org.bukkit.Server").getMethod("getOnlinePlayers"); 60 | return onlinePlayersMethod.getReturnType().equals(Collection.class) ? 61 | ((Collection) onlinePlayersMethod.invoke(Bukkit.getServer())).size() 62 | : ((Player[]) onlinePlayersMethod.invoke(Bukkit.getServer())).length; 63 | } catch (Exception ignore) { 64 | return 0; 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/hooks/PandaAbilityHook.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.hooks; 2 | 3 | import dev.panda.ability.PandaAbilityAPI; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import lombok.experimental.UtilityClass; 7 | 8 | /** 9 | * Created by Risas 10 | * Project: PandaFly 11 | * Date: 08-11-2021 - 13:37 12 | * Twitter: @RisasDev 13 | * GitHub: https://github.com/RisasDev 14 | */ 15 | 16 | @UtilityClass 17 | public class PandaAbilityHook { 18 | 19 | @Getter @Setter 20 | private boolean pandaAbility; 21 | 22 | @Getter @Setter 23 | private PandaAbilityAPI pandaAbilityAPI; 24 | 25 | 26 | public void init() { 27 | setPandaAbility(true); 28 | setPandaAbilityAPI(new PandaAbilityAPI()); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/hooks/PlaceholderAPIHook.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.hooks; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import dev.panda.combofly.profile.Profile; 5 | import me.clip.placeholderapi.expansion.PlaceholderExpansion; 6 | import org.bukkit.entity.Player; 7 | 8 | /** 9 | * Created by Risas 10 | * Project: PandaFly 11 | * Date: 08-11-2021 - 13:36 12 | * Twitter: @RisasDev 13 | * GitHub: https://github.com/RisasDev 14 | */ 15 | public class PlaceholderAPIHook extends PlaceholderExpansion { 16 | 17 | private final ComboFly plugin; 18 | 19 | public PlaceholderAPIHook(ComboFly plugin) { 20 | this.plugin = plugin; 21 | } 22 | 23 | @Override 24 | public boolean persist(){ 25 | return true; 26 | } 27 | 28 | @Override 29 | public boolean canRegister(){ 30 | return true; 31 | } 32 | 33 | @Override 34 | public String getAuthor(){ 35 | return "Aleesk, TulioTriste, Risas"; 36 | } 37 | 38 | @Override 39 | public String getIdentifier(){ 40 | return "PandaFly"; 41 | } 42 | 43 | @Override 44 | public String getVersion(){ 45 | return plugin.getDescription().getVersion(); 46 | } 47 | 48 | @Override 49 | public String onPlaceholderRequest(Player player, String identifier) { 50 | if (player == null) return ""; 51 | 52 | switch (identifier) { 53 | case "kills": return String.valueOf(Profile.getProfiles().get(player.getUniqueId()).getKd().getKills()); 54 | case "deaths": return String.valueOf(Profile.getProfiles().get(player.getUniqueId()).getKd().getDeaths()); 55 | case "balance": return String.valueOf(Profile.getProfiles().get(player.getUniqueId()).getBalance()); 56 | default: return null; 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/menu/Button.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.menu; 2 | 3 | import dev.panda.item.ItemBuilder; 4 | import org.bukkit.Material; 5 | import org.bukkit.Sound; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.event.inventory.ClickType; 8 | import org.bukkit.inventory.ItemStack; 9 | 10 | public abstract class Button { 11 | 12 | public static Button placeholder(Material material, final int data, String title) { 13 | return (new Button() { 14 | public ItemStack getButtonItem(Player player) { 15 | return new ItemBuilder(material) 16 | .data(data) 17 | .name(title) 18 | .build(); 19 | } 20 | }); 21 | } 22 | 23 | public static void playFail(Player player) { 24 | player.playSound(player.getLocation(), Sound.DIG_GRASS, 20F, 0.1F); 25 | 26 | } 27 | 28 | public static void playSuccess(Player player) { 29 | player.playSound(player.getLocation(), Sound.NOTE_PIANO, 20F, 15F); 30 | } 31 | 32 | public static void playNeutral(Player player) { 33 | player.playSound(player.getLocation(), Sound.CLICK, 20F, 1F); 34 | } 35 | 36 | public abstract ItemStack getButtonItem(Player player); 37 | 38 | public void clicked(Player player, int slot, ClickType clickType, int hotbarButton) { 39 | 40 | } 41 | 42 | public boolean shouldUpdate(Player player, int slot, ClickType clickType) { 43 | return false; 44 | } 45 | 46 | public boolean shouldCancel(Player player, int slot, ClickType clickType) { 47 | return true; 48 | } 49 | 50 | public boolean shouldShift(Player player, int slot, ClickType clickType) { 51 | return true; 52 | } 53 | } -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/menu/ButtonListener.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.menu; 2 | 3 | import dev.panda.combofly.ComboFly; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.entity.Player; 6 | import org.bukkit.event.EventHandler; 7 | import org.bukkit.event.EventPriority; 8 | import org.bukkit.event.Listener; 9 | import org.bukkit.event.inventory.ClickType; 10 | import org.bukkit.event.inventory.InventoryClickEvent; 11 | import org.bukkit.event.inventory.InventoryCloseEvent; 12 | 13 | public class ButtonListener implements Listener { 14 | 15 | public ButtonListener() { 16 | Bukkit.getPluginManager().registerEvents(this, ComboFly.get()); 17 | } 18 | 19 | @EventHandler(priority = EventPriority.HIGHEST) 20 | public void onButtonPress(InventoryClickEvent event) { 21 | Player player = (Player) event.getWhoClicked(); 22 | 23 | Menu openMenu = Menu.currentlyOpenedMenus.get(player.getName()); 24 | 25 | if (openMenu != null) { 26 | if (event.getSlot() != event.getRawSlot()) { 27 | if ((event.getClick() == ClickType.SHIFT_LEFT || event.getClick() == ClickType.SHIFT_RIGHT)) { 28 | event.setCancelled(false); 29 | } 30 | return; 31 | } 32 | 33 | if (openMenu.getButtons().containsKey(event.getSlot())) { 34 | Button button = openMenu.getButtons().get(event.getSlot()); 35 | boolean shouldCancel = button.shouldCancel(player, event.getSlot(), event.getClick()); 36 | boolean shouldShift = button.shouldShift(player, event.getSlot(), event.getClick()); 37 | 38 | if (shouldCancel && shouldShift) { 39 | event.setCancelled(true); 40 | } 41 | else { 42 | event.setCancelled(shouldCancel); 43 | } 44 | 45 | button.clicked(player, event.getSlot(), event.getClick(), event.getHotbarButton()); 46 | 47 | if (Menu.currentlyOpenedMenus.containsKey(player.getName())) { 48 | Menu newMenu = Menu.currentlyOpenedMenus.get(player.getName()); 49 | if (newMenu == openMenu) { 50 | if (openMenu.isUpdateAfterClick()) { 51 | openMenu.setClosedByMenu(true); 52 | newMenu.openMenu(player); 53 | } 54 | } 55 | } 56 | else if (button.shouldUpdate(player, event.getSlot(), event.getClick())) { 57 | openMenu.setClosedByMenu(true); 58 | openMenu.openMenu(player); 59 | } 60 | } 61 | } 62 | } 63 | 64 | @EventHandler(priority = EventPriority.HIGH) 65 | public void onInventoryClose(InventoryCloseEvent event) { 66 | Player player = (Player) event.getPlayer(); 67 | Menu openMenu = Menu.currentlyOpenedMenus.get(player.getName()); 68 | 69 | if (openMenu != null) { 70 | Menu.currentlyOpenedMenus.remove(player.getName()); 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/menu/Menu.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.menu; 2 | 3 | import dev.panda.chat.ChatUtil; 4 | import dev.panda.item.ItemBuilder; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | import org.bukkit.Bukkit; 8 | import org.bukkit.Material; 9 | import org.bukkit.entity.Player; 10 | import org.bukkit.inventory.Inventory; 11 | import org.bukkit.inventory.ItemStack; 12 | 13 | import java.util.HashMap; 14 | import java.util.Map; 15 | 16 | @Getter @Setter 17 | public abstract class Menu { 18 | 19 | public static Map currentlyOpenedMenus = new HashMap<>(); 20 | @Getter private Map buttons = new HashMap<>(); 21 | private boolean autoUpdate = false; 22 | private boolean updateAfterClick = true; 23 | private boolean closedByMenu = false; 24 | private boolean placeholder = false; 25 | private Button placeholderButton = Button.placeholder(Material.STAINED_GLASS_PANE, 7, " "); 26 | 27 | private ItemStack createItemStack(Player player, Button button) { 28 | return new ItemBuilder(button.getButtonItem(player)).build(); 29 | } 30 | 31 | public void openMenu(final Player player) { 32 | this.buttons = this.getButtons(player); 33 | 34 | Menu previousMenu = Menu.currentlyOpenedMenus.get(player.getName()); 35 | Inventory inventory = null; 36 | String title = ChatUtil.translate(this.getTitle(player)); 37 | int size = this.getSize() == -1 ? this.size(this.buttons) : this.getSize(); 38 | boolean update = false; 39 | 40 | if (title.length() > 32) { 41 | title = title.substring(0, 32); 42 | } 43 | 44 | if (player.getOpenInventory() != null) { 45 | if (previousMenu == null) { 46 | player.closeInventory(); 47 | } 48 | else { 49 | int previousSize = player.getOpenInventory().getTopInventory().getSize(); 50 | 51 | if (previousSize == size && player.getOpenInventory().getTopInventory().getTitle().equals(title)) { 52 | inventory = player.getOpenInventory().getTopInventory(); 53 | update = true; 54 | } 55 | else { 56 | previousMenu.setClosedByMenu(true); 57 | player.closeInventory(); 58 | } 59 | } 60 | } 61 | 62 | if (inventory == null) { 63 | inventory = Bukkit.createInventory(player, size, title); 64 | } 65 | 66 | inventory.setContents(new ItemStack[inventory.getSize()]); 67 | 68 | currentlyOpenedMenus.put(player.getName(), this); 69 | 70 | for (Map.Entry buttonEntry : this.buttons.entrySet()) { 71 | inventory.setItem(buttonEntry.getKey(), createItemStack(player, buttonEntry.getValue())); 72 | } 73 | 74 | if (this.isPlaceholder()) { 75 | Button fillButton = this.getPlaceholderButton() == null ? placeholderButton : this.getPlaceholderButton(); 76 | 77 | for (int index = 0; index < size; index++) { 78 | if (this.buttons.get(index) == null) { 79 | this.buttons.put(index, fillButton); 80 | inventory.setItem(index, fillButton.getButtonItem(player)); 81 | } 82 | } 83 | } 84 | 85 | if (update) { 86 | player.updateInventory(); 87 | } 88 | else { 89 | player.openInventory(inventory); 90 | } 91 | 92 | this.setClosedByMenu(false); 93 | } 94 | 95 | public int size(Map buttons) { 96 | int highest = 0; 97 | 98 | for (int buttonValue : buttons.keySet()) { 99 | if (buttonValue > highest) { 100 | highest = buttonValue; 101 | } 102 | } 103 | 104 | return (int) (Math.ceil((highest + 1) / 9D) * 9D); 105 | } 106 | 107 | public int getSlot(int x, int y) { 108 | return ((9 * y) + x); 109 | } 110 | 111 | public int getSize() { 112 | return -1; 113 | } 114 | 115 | public Button getPlaceholderButton() { 116 | return null; 117 | } 118 | 119 | public abstract String getTitle(Player player); 120 | 121 | public abstract Map getButtons(Player player); 122 | } -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/menu/buttons/AirButton.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.menu.buttons; 2 | 3 | import dev.panda.combofly.utilities.menu.Button; 4 | import dev.panda.item.ItemBuilder; 5 | import org.bukkit.Material; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.event.inventory.ClickType; 8 | import org.bukkit.inventory.ItemStack; 9 | 10 | public class AirButton extends Button { 11 | 12 | @Override 13 | public ItemStack getButtonItem(Player player) { 14 | return new ItemBuilder(Material.AIR).build(); 15 | } 16 | 17 | @Override 18 | public boolean shouldCancel(Player player, int slot, ClickType clickType) { 19 | return true; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/menu/buttons/BackButton.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.menu.buttons; 2 | 3 | import dev.panda.combofly.utilities.menu.Button; 4 | import dev.panda.combofly.utilities.menu.Menu; 5 | import dev.panda.item.ItemBuilder; 6 | import lombok.AllArgsConstructor; 7 | import org.bukkit.Material; 8 | import org.bukkit.entity.Player; 9 | import org.bukkit.event.inventory.ClickType; 10 | import org.bukkit.inventory.ItemStack; 11 | 12 | @AllArgsConstructor 13 | public class BackButton extends Button { 14 | 15 | private final Menu back; 16 | 17 | @Override 18 | public ItemStack getButtonItem(Player player) { 19 | return new ItemBuilder(Material.REDSTONE) 20 | .name("&c&lBack") 21 | .lore( 22 | "&cClick here to return", 23 | "&cto the previous menu." 24 | ) 25 | .build(); 26 | } 27 | 28 | @Override 29 | public void clicked(Player player, int i, ClickType clickType, int hb) { 30 | Button.playNeutral(player); 31 | this.back.openMenu(player); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/menu/buttons/CloseButton.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.menu.buttons; 2 | 3 | import dev.panda.combofly.utilities.menu.Button; 4 | import dev.panda.item.ItemBuilder; 5 | import org.bukkit.Material; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.event.inventory.ClickType; 8 | import org.bukkit.inventory.ItemStack; 9 | 10 | public class CloseButton extends Button { 11 | 12 | @Override 13 | public ItemStack getButtonItem(Player player) { 14 | return new ItemBuilder(Material.INK_SACK) 15 | .data(1) 16 | .name("&cClose") 17 | .build(); 18 | } 19 | 20 | @Override 21 | public void clicked(Player player, int i, ClickType clickType, int hb) { 22 | playNeutral(player); 23 | player.closeInventory(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/menu/buttons/PageInfoButton.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.menu.buttons; 2 | 3 | import dev.panda.combofly.utilities.menu.Button; 4 | import dev.panda.combofly.utilities.menu.pagination.PaginatedMenu; 5 | import dev.panda.item.ItemBuilder; 6 | import lombok.AllArgsConstructor; 7 | import org.bukkit.Material; 8 | import org.bukkit.entity.Player; 9 | import org.bukkit.event.inventory.ClickType; 10 | import org.bukkit.inventory.ItemStack; 11 | 12 | @AllArgsConstructor 13 | public class PageInfoButton extends Button { 14 | 15 | private final PaginatedMenu paginatedMenu; 16 | 17 | @Override 18 | public ItemStack getButtonItem(Player player) { 19 | return new ItemBuilder(Material.NETHER_STAR) 20 | .name("&ePage Info") 21 | .lore("&e" + paginatedMenu.getPage() + "&7/&a" + paginatedMenu.getPages(player)) 22 | .build(); 23 | } 24 | 25 | @Override 26 | public boolean shouldCancel(Player player, int slot, ClickType clickType) { 27 | return true; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/menu/pagination/JumpToPageButton.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.menu.pagination; 2 | 3 | import dev.panda.chat.ChatUtil; 4 | import dev.panda.combofly.utilities.menu.Button; 5 | import dev.panda.item.ItemBuilder; 6 | import lombok.AllArgsConstructor; 7 | import org.bukkit.Material; 8 | import org.bukkit.entity.Player; 9 | import org.bukkit.event.inventory.ClickType; 10 | import org.bukkit.inventory.ItemStack; 11 | 12 | @AllArgsConstructor 13 | public class JumpToPageButton extends Button { 14 | 15 | private final int page; 16 | private final PaginatedMenu menu; 17 | private final boolean current; 18 | 19 | @Override 20 | public ItemStack getButtonItem(Player player) { 21 | ItemBuilder itemBuilder = new ItemBuilder(this.current ? Material.ENCHANTED_BOOK : Material.BOOK, this.page); 22 | itemBuilder.name(ChatUtil.translate("&cPage " + this.page)); 23 | 24 | if (this.current) { 25 | itemBuilder.lore( 26 | "", 27 | ChatUtil.translate("&aCurrent page") 28 | ); 29 | } 30 | 31 | return itemBuilder.build(); 32 | } 33 | 34 | @Override 35 | public void clicked(Player player, int i, ClickType clickType, int hb) { 36 | this.menu.modPage(player, this.page - this.menu.getPage()); 37 | Button.playNeutral(player); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/menu/pagination/PageButton.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.menu.pagination; 2 | 3 | import dev.panda.combofly.utilities.menu.Button; 4 | import dev.panda.item.ItemBuilder; 5 | import lombok.AllArgsConstructor; 6 | import org.bukkit.Material; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.event.inventory.ClickType; 9 | import org.bukkit.inventory.ItemStack; 10 | 11 | @AllArgsConstructor 12 | public class PageButton extends Button { 13 | 14 | private final int mod; 15 | private final PaginatedMenu menu; 16 | 17 | @Override 18 | public ItemStack getButtonItem(Player player) { 19 | ItemBuilder itemBuilder = new ItemBuilder(Material.CARPET); 20 | 21 | if (mod > 0) { 22 | itemBuilder.data((short) 13); 23 | } 24 | else { 25 | itemBuilder.data((short) 14); 26 | } 27 | 28 | if (this.hasNext(player)) { 29 | itemBuilder.name(this.mod > 0 ? "&aNext page" : "&cPrevious page"); 30 | } 31 | else { 32 | itemBuilder.name("&7" + (this.mod > 0 ? "Last page" : "First page")); 33 | } 34 | 35 | return itemBuilder.build(); 36 | } 37 | 38 | @Override 39 | public void clicked(Player player, int i, ClickType clickType, int hb) { 40 | if (hasNext(player)) { 41 | this.menu.modPage(player, this.mod); 42 | Button.playNeutral(player); 43 | } else { 44 | Button.playFail(player); 45 | } 46 | } 47 | 48 | private boolean hasNext(Player player) { 49 | int pg = this.menu.getPage() + this.mod; 50 | return pg > 0 && this.menu.getPages(player) >= pg; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/menu/pagination/PaginatedMenu.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.menu.pagination; 2 | 3 | import dev.panda.combofly.utilities.menu.Button; 4 | import dev.panda.combofly.utilities.menu.Menu; 5 | import lombok.Getter; 6 | import org.bukkit.entity.Player; 7 | 8 | import java.util.HashMap; 9 | import java.util.Map; 10 | 11 | public abstract class PaginatedMenu extends Menu { 12 | 13 | @Getter 14 | private int page = 1; 15 | 16 | { 17 | setUpdateAfterClick(false); 18 | } 19 | 20 | @Override 21 | public String getTitle(Player player) { 22 | return getPrePaginatedTitle(player) + " - " + page + "/" + getPages(player); 23 | } 24 | 25 | public final void modPage(Player player, int mod) { 26 | page += mod; 27 | getButtons().clear(); 28 | openMenu(player); 29 | } 30 | 31 | public final int getPages(Player player) { 32 | int buttonAmount = getAllPagesButtons(player).size(); 33 | 34 | if (buttonAmount == 0) { 35 | return 1; 36 | } 37 | 38 | return (int) Math.ceil(buttonAmount / (double) getMaxItemsPerPage(player)); 39 | } 40 | 41 | @Override 42 | public final Map getButtons(Player player) { 43 | int minIndex = (int) ((double) (page - 1) * getMaxItemsPerPage(player)); 44 | int maxIndex = (int) ((double) (page) * getMaxItemsPerPage(player)); 45 | 46 | HashMap buttons = new HashMap<>(); 47 | 48 | for (Map.Entry entry : getAllPagesButtons(player).entrySet()) { 49 | int ind = entry.getKey(); 50 | 51 | if (ind >= minIndex && ind < maxIndex) { 52 | ind -= (int) ((double) (getMaxItemsPerPage(player)) * (page - 1)); 53 | buttons.put(ind, entry.getValue()); 54 | } 55 | } 56 | 57 | Map global = getGlobalButtons(player); 58 | 59 | if (global != null) { 60 | buttons.putAll(global); 61 | } 62 | 63 | return buttons; 64 | } 65 | 66 | public int getMaxItemsPerPage(Player player) { 67 | return 18; 68 | } 69 | 70 | public Map getGlobalButtons(Player player) { 71 | return null; 72 | } 73 | 74 | public abstract String getPrePaginatedTitle(Player player); 75 | 76 | public abstract Map getAllPagesButtons(Player player); 77 | } 78 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/menu/pagination/ViewAllPagesMenu.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.menu.pagination; 2 | 3 | import dev.panda.combofly.utilities.menu.Button; 4 | import dev.panda.combofly.utilities.menu.Menu; 5 | import dev.panda.combofly.utilities.menu.buttons.BackButton; 6 | import lombok.Getter; 7 | import org.bukkit.entity.Player; 8 | 9 | import java.util.HashMap; 10 | import java.util.Map; 11 | 12 | public class ViewAllPagesMenu extends Menu { 13 | 14 | @Getter PaginatedMenu menu; 15 | 16 | @Override 17 | public String getTitle(Player player) { 18 | return "Jump to page"; 19 | } 20 | 21 | @Override 22 | public Map getButtons(Player player) { 23 | HashMap buttons = new HashMap<>(); 24 | 25 | buttons.put(0, new BackButton(menu)); 26 | 27 | int index = 10; 28 | 29 | for (int i = 1; i <= menu.getPages(player); i++) { 30 | buttons.put(index++, new JumpToPageButton(i, menu, menu.getPage() == i)); 31 | 32 | if ((index - 8) % 9 == 0) { 33 | index += 2; 34 | } 35 | } 36 | 37 | return buttons; 38 | } 39 | 40 | @Override 41 | public boolean isAutoUpdate() { 42 | return true; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/scoreboard/Assemble.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.scoreboard; 2 | 3 | import java.util.Map; 4 | import java.util.UUID; 5 | import java.util.concurrent.ConcurrentHashMap; 6 | 7 | import dev.panda.combofly.utilities.scoreboard.events.AssembleBoardCreateEvent; 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | 11 | import org.bukkit.Bukkit; 12 | import org.bukkit.entity.Player; 13 | import org.bukkit.event.HandlerList; 14 | import org.bukkit.plugin.java.JavaPlugin; 15 | 16 | @Getter @Setter 17 | public class Assemble { 18 | 19 | private JavaPlugin plugin; 20 | private AssembleAdapter adapter; 21 | private Map boards; 22 | private AssembleThread thread; 23 | private AssembleListener listeners; 24 | private long ticks = 2; 25 | private boolean hook = false; 26 | private AssembleStyle assembleStyle = AssembleStyle.KOHI; 27 | 28 | public Assemble(JavaPlugin plugin, AssembleAdapter adapter) { 29 | if (plugin == null) { 30 | throw new RuntimeException("Assemble can not be instantiated without a plugin instance!"); 31 | } 32 | 33 | this.plugin = plugin; 34 | this.adapter = adapter; 35 | this.boards = new ConcurrentHashMap<>(); 36 | 37 | this.setup(); 38 | } 39 | 40 | public void setup() { 41 | listeners = new AssembleListener(this); 42 | 43 | //Register Events 44 | this.plugin.getServer().getPluginManager().registerEvents(listeners, this.plugin); 45 | 46 | //Ensure that the thread has stopped running 47 | if (this.thread != null) { 48 | this.thread.stop(); 49 | this.thread = null; 50 | } 51 | 52 | //Register new boards for existing online players 53 | for (Player player : Bukkit.getOnlinePlayers()) { 54 | //Make sure it doesn't double up 55 | AssembleBoardCreateEvent createEvent = new AssembleBoardCreateEvent(player); 56 | 57 | Bukkit.getPluginManager().callEvent(createEvent); 58 | if (createEvent.isCancelled()) { 59 | return; 60 | } 61 | 62 | getBoards().put(player.getUniqueId(), new AssembleBoard(player, this)); 63 | } 64 | 65 | //Start Thread 66 | this.thread = new AssembleThread(this); 67 | } 68 | 69 | public void cleanup() { 70 | if (this.thread != null) { 71 | this.thread.stop(); 72 | this.thread = null; 73 | } 74 | 75 | if (listeners != null) { 76 | HandlerList.unregisterAll(listeners); 77 | listeners = null; 78 | } 79 | 80 | for (UUID uuid : getBoards().keySet()) { 81 | Player player = Bukkit.getPlayer(uuid); 82 | getBoards().remove(uuid); 83 | player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard()); 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/scoreboard/AssembleAdapter.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.scoreboard; 2 | 3 | import java.util.List; 4 | import org.bukkit.entity.Player; 5 | 6 | public interface AssembleAdapter { 7 | 8 | String getTitle(Player player); 9 | 10 | List getLines(Player player); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/scoreboard/AssembleBoard.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.scoreboard; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.UUID; 6 | import java.util.concurrent.ThreadLocalRandom; 7 | 8 | import dev.panda.combofly.utilities.scoreboard.events.AssembleBoardCreatedEvent; 9 | import lombok.Getter; 10 | import org.bukkit.Bukkit; 11 | import org.bukkit.ChatColor; 12 | import org.bukkit.entity.Player; 13 | import org.bukkit.scoreboard.DisplaySlot; 14 | import org.bukkit.scoreboard.Objective; 15 | import org.bukkit.scoreboard.Scoreboard; 16 | 17 | @Getter 18 | public class AssembleBoard { 19 | 20 | // We assign a unique identifier (random string of ChatColor values) 21 | // to each board entry to: bypass the 32 char limit, using 22 | // a team's prefix & suffix and a team entry's display name, and to 23 | // track the order of entries; 24 | private final List entries = new ArrayList<>(); 25 | private final List identifiers = new ArrayList<>(); 26 | private Scoreboard scoreboard; 27 | private Objective objective; 28 | private UUID uuid; 29 | 30 | private Assemble assemble; 31 | 32 | public AssembleBoard(Player player, Assemble assemble) { 33 | this.assemble = assemble; 34 | this.setup(player); 35 | this.uuid = player.getUniqueId(); 36 | } 37 | 38 | private void setup(Player player) { 39 | // Register new scoreboard if needed 40 | if (getAssemble().isHook() || !(player.getScoreboard() == Bukkit.getScoreboardManager().getMainScoreboard())) { 41 | this.scoreboard = player.getScoreboard(); 42 | } else { 43 | this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); 44 | } 45 | 46 | // Setup sidebar objective 47 | this.objective = this.scoreboard.registerNewObjective("Default", "dummy"); 48 | this.objective.setDisplaySlot(DisplaySlot.SIDEBAR); 49 | this.objective.setDisplayName(getAssemble().getAdapter().getTitle(player)); 50 | 51 | // Update scoreboard 52 | player.setScoreboard(this.scoreboard); 53 | 54 | //Send Update 55 | AssembleBoardCreatedEvent createdEvent = new AssembleBoardCreatedEvent(this); 56 | Bukkit.getPluginManager().callEvent(createdEvent); 57 | } 58 | 59 | public AssembleBoardEntry getEntryAtPosition(int pos) { 60 | if (pos >= this.entries.size()) { 61 | return null; 62 | } else { 63 | return this.entries.get(pos); 64 | } 65 | } 66 | 67 | public String getUniqueIdentifier(String text) { 68 | String identifier = getRandomChatColor() + ChatColor.WHITE; 69 | 70 | while (this.identifiers.contains(identifier)) { 71 | identifier = identifier + getRandomChatColor() + ChatColor.WHITE; 72 | } 73 | 74 | // This is rare, but just in case, make the method recursive 75 | if (identifier.length() > 16) { 76 | return this.getUniqueIdentifier(text); 77 | } 78 | 79 | // Add our identifier to the list so there are no duplicates 80 | this.identifiers.add(identifier); 81 | 82 | return identifier; 83 | } 84 | 85 | // Gets a random ChatColor and returns the String value of it 86 | private static String getRandomChatColor() { 87 | return ChatColor.values()[ThreadLocalRandom.current().nextInt(ChatColor.values().length)].toString(); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/scoreboard/AssembleBoardEntry.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.scoreboard; 2 | 3 | import lombok.Setter; 4 | import org.bukkit.ChatColor; 5 | import org.bukkit.scoreboard.Score; 6 | import org.bukkit.scoreboard.Scoreboard; 7 | import org.bukkit.scoreboard.Team; 8 | 9 | public class AssembleBoardEntry { 10 | 11 | private final AssembleBoard board; 12 | @Setter private String text, identifier; 13 | private Team team; 14 | 15 | public AssembleBoardEntry(AssembleBoard board, String text) { 16 | this.board = board; 17 | this.text = text; 18 | this.identifier = this.board.getUniqueIdentifier(text); 19 | 20 | this.setup(); 21 | } 22 | 23 | public void setup() { 24 | final Scoreboard scoreboard = this.board.getScoreboard(); 25 | 26 | if (scoreboard == null) { 27 | return; 28 | } 29 | 30 | 31 | String teamName = this.identifier; 32 | 33 | // This shouldn't happen, but just in case 34 | if (teamName.length() > 16) { 35 | teamName = teamName.substring(0, 16); 36 | } 37 | 38 | Team team = scoreboard.getTeam(teamName); 39 | 40 | // Register the team if it does not exist 41 | if (team == null) { 42 | team = scoreboard.registerNewTeam(teamName); 43 | } 44 | 45 | // Add the entry to the team 46 | if (!team.getEntries().contains(this.identifier)) { 47 | team.addEntry(this.identifier); 48 | } 49 | 50 | // Add the entry if it does not exist 51 | if (!this.board.getEntries().contains(this)) { 52 | this.board.getEntries().add(this); 53 | } 54 | 55 | this.team = team; 56 | } 57 | 58 | public void send(int position) { 59 | if (this.text.length() > 16) { 60 | String prefix = this.text.substring(0, 16); 61 | String suffix; 62 | 63 | if (prefix.charAt(15) == ChatColor.COLOR_CHAR) { 64 | prefix = prefix.substring(0, 15); 65 | suffix = this.text.substring(15, this.text.length()); 66 | } else if (prefix.charAt(14) == ChatColor.COLOR_CHAR) { 67 | prefix = prefix.substring(0, 14); 68 | suffix = this.text.substring(14, this.text.length()); 69 | } else { 70 | if (ChatColor.getLastColors(prefix).equalsIgnoreCase(ChatColor.getLastColors(this.identifier))) { 71 | suffix = this.text.substring(16, this.text.length()); 72 | } else { 73 | suffix = ChatColor.getLastColors(prefix) + this.text.substring(16, this.text.length()); 74 | } 75 | } 76 | 77 | if (suffix.length() > 16) { 78 | suffix = suffix.substring(0, 16); 79 | } 80 | 81 | this.team.setPrefix(prefix); 82 | this.team.setSuffix(suffix); 83 | } else { 84 | this.team.setPrefix(this.text); 85 | this.team.setSuffix(""); 86 | } 87 | 88 | Score score = this.board.getObjective().getScore(this.identifier); 89 | score.setScore(position); 90 | } 91 | 92 | public void remove() { 93 | this.board.getIdentifiers().remove(this.identifier); 94 | this.board.getScoreboard().resetScores(this.identifier); 95 | } 96 | 97 | } 98 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/scoreboard/AssembleListener.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.scoreboard; 2 | 3 | import dev.panda.combofly.utilities.scoreboard.events.AssembleBoardCreateEvent; 4 | import dev.panda.combofly.utilities.scoreboard.events.AssembleBoardDestroyEvent; 5 | import lombok.Getter; 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.event.EventHandler; 8 | import org.bukkit.event.Listener; 9 | import org.bukkit.event.player.PlayerJoinEvent; 10 | import org.bukkit.event.player.PlayerQuitEvent; 11 | 12 | @Getter 13 | public class AssembleListener implements Listener { 14 | 15 | private final Assemble assemble; 16 | 17 | public AssembleListener(Assemble assemble) { 18 | this.assemble = assemble; 19 | } 20 | 21 | @EventHandler 22 | public void onPlayerJoin(PlayerJoinEvent event) { 23 | AssembleBoardCreateEvent createEvent = new AssembleBoardCreateEvent(event.getPlayer()); 24 | 25 | Bukkit.getPluginManager().callEvent(createEvent); 26 | if (createEvent.isCancelled()) { 27 | return; 28 | } 29 | 30 | getAssemble().getBoards().put(event.getPlayer().getUniqueId(), new AssembleBoard(event.getPlayer(), getAssemble())); 31 | } 32 | 33 | @EventHandler 34 | public void onPlayerQuit(PlayerQuitEvent event) { 35 | AssembleBoardDestroyEvent destroyEvent = new AssembleBoardDestroyEvent(event.getPlayer()); 36 | 37 | Bukkit.getPluginManager().callEvent(destroyEvent); 38 | if (destroyEvent.isCancelled()) { 39 | return; 40 | } 41 | 42 | getAssemble().getBoards().remove(event.getPlayer().getUniqueId()); 43 | event.getPlayer().setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard()); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/scoreboard/AssembleStyle.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.scoreboard; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum AssembleStyle { 7 | 8 | KOHI(true, 15); 9 | 10 | private boolean descending; 11 | private int startNumber; 12 | 13 | AssembleStyle(boolean descending, int startNumber) { 14 | this.descending = descending; 15 | this.startNumber = startNumber; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/scoreboard/events/AssembleBoardCreateEvent.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.scoreboard.events; 2 | 3 | import lombok.Getter; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.event.Cancellable; 6 | import org.bukkit.event.Event; 7 | import org.bukkit.event.HandlerList; 8 | 9 | @Getter 10 | public class AssembleBoardCreateEvent extends Event implements Cancellable { 11 | 12 | @Getter public static HandlerList handlerList = new HandlerList(); 13 | 14 | private Player player; 15 | private boolean cancelled = false; 16 | 17 | public AssembleBoardCreateEvent(Player player) { 18 | this.player = player; 19 | } 20 | 21 | @Override 22 | public void setCancelled(boolean b) { 23 | this.cancelled = b; 24 | } 25 | 26 | @Override 27 | public HandlerList getHandlers() { 28 | return handlerList; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/scoreboard/events/AssembleBoardCreatedEvent.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.scoreboard.events; 2 | 3 | import dev.panda.combofly.utilities.scoreboard.AssembleBoard; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import org.bukkit.event.Event; 7 | import org.bukkit.event.HandlerList; 8 | 9 | @Getter @Setter 10 | public class AssembleBoardCreatedEvent extends Event { 11 | 12 | @Getter public static HandlerList handlerList = new HandlerList(); 13 | 14 | private boolean cancelled = false; 15 | private final AssembleBoard board; 16 | 17 | public AssembleBoardCreatedEvent(AssembleBoard board) { 18 | this.board = board; 19 | } 20 | 21 | @Override 22 | public HandlerList getHandlers() { 23 | return handlerList; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/scoreboard/events/AssembleBoardDestroyEvent.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.scoreboard.events; 2 | 3 | import lombok.Getter; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.event.Cancellable; 6 | import org.bukkit.event.Event; 7 | import org.bukkit.event.HandlerList; 8 | 9 | @Getter 10 | public class AssembleBoardDestroyEvent extends Event implements Cancellable { 11 | 12 | @Getter public static HandlerList handlerList = new HandlerList(); 13 | 14 | private Player player; 15 | private boolean cancelled = false; 16 | 17 | public AssembleBoardDestroyEvent(Player player) { 18 | this.player = player; 19 | } 20 | 21 | @Override 22 | public void setCancelled(boolean b) { 23 | this.cancelled = b; 24 | } 25 | 26 | @Override 27 | public HandlerList getHandlers() { 28 | return handlerList; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/dev/panda/combofly/utilities/scoreboard/listener/AssembleListener.java: -------------------------------------------------------------------------------- 1 | package dev.panda.combofly.utilities.scoreboard.listener; 2 | 3 | import dev.panda.combofly.utilities.scoreboard.Assemble; 4 | import dev.panda.combofly.utilities.scoreboard.AssembleBoard; 5 | import dev.panda.combofly.utilities.scoreboard.events.AssembleBoardCreateEvent; 6 | import dev.panda.combofly.utilities.scoreboard.events.AssembleBoardDestroyEvent; 7 | import org.bukkit.Bukkit; 8 | import org.bukkit.event.Event; 9 | import org.bukkit.event.EventHandler; 10 | import org.bukkit.event.Listener; 11 | import org.bukkit.event.player.PlayerJoinEvent; 12 | import org.bukkit.event.player.PlayerQuitEvent; 13 | 14 | public class AssembleListener implements Listener { 15 | 16 | private final Assemble assemble; 17 | 18 | public AssembleListener(final Assemble assemble) { 19 | this.assemble = assemble; 20 | } 21 | 22 | @EventHandler 23 | public void onPlayerJoin(final PlayerJoinEvent event) { 24 | final AssembleBoardCreateEvent createEvent = new AssembleBoardCreateEvent(event.getPlayer()); 25 | Bukkit.getPluginManager().callEvent(createEvent); 26 | 27 | if (createEvent.isCancelled()) { 28 | return; 29 | } 30 | 31 | this.getAssemble().getBoards().put(event.getPlayer().getUniqueId(), 32 | new AssembleBoard(event.getPlayer(), this.getAssemble())); 33 | } 34 | 35 | @EventHandler 36 | public void onPlayerQuit(final PlayerQuitEvent event) { 37 | final AssembleBoardDestroyEvent destroyEvent = new AssembleBoardDestroyEvent(event.getPlayer()); 38 | Bukkit.getPluginManager().callEvent(destroyEvent); 39 | 40 | if (destroyEvent.isCancelled()) { 41 | return; 42 | } 43 | 44 | this.getAssemble().getBoards().remove(event.getPlayer().getUniqueId()); 45 | event.getPlayer().setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard()); 46 | } 47 | 48 | public Assemble getAssemble() { 49 | return this.assemble; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/resources/claims.yml: -------------------------------------------------------------------------------- 1 | CLAIMS: {} -------------------------------------------------------------------------------- /src/main/resources/config.yml: -------------------------------------------------------------------------------- 1 | # Type of Balance 2 | # [NORMAL, VAULT] 3 | BALANCE-TYPE: NORMAL 4 | 5 | #TICKS PER HIT 6 | HIT-TICKS: 7 | ENABLE: true 8 | TICKS: 1 9 | 10 | #KB STANDAR X = 0.18 | Y = 0.16 | Z = 0.18 | MAXHEIGHT = 1.5 11 | KNOCKBACK: 12 | ENABLE: true 13 | X: 0.18 14 | Y: 0.16 15 | Z: 0.18 16 | ENABLE-MAXHEIGHT: true 17 | MAXHEIGHT: 1.5 18 | 19 | DISCORD: "discord.pandacommunity.org" 20 | STORE: "store.pandacommunity.us" 21 | TEAMSPEAK: "ts.pandacommunity.us" 22 | TWITTER: "twitter.com/PandaPlugins" 23 | WEBSITE: "www.pandacommunity.org" 24 | 25 | STAFF: 26 | ENABLE: true 27 | STAFFMODE-JOIN: true 28 | JOIN-MESSAGE: 29 | ENABLE: true 30 | MESSAGE: "&7(&bStaff&7) &b{staff} &fjoin the server." 31 | QUIT-MESSAGE: 32 | ENABLE: true 33 | MESSAGE: "&7(&bStaff&7) &b{staff} &fleft the server." 34 | 35 | WELCOME-MESSAGE: 36 | STATUS: true 37 | MESSAGE: 38 | - "&fWelcome &4{player} &fto &cComboFly &7[&c#{playercount}&7]" 39 | 40 | JOIN-MESSAGE: 41 | STATUS: true 42 | MESSAGE: 43 | - "&7&m----------------------------------------------" 44 | - "&fWelcome &c&l{player} &fto &4&lPanda Community" 45 | - "" 46 | - "&c» &fDiscord: &c{discord}" 47 | - "&c» &7Store: &c{store}" 48 | - "&c» &7Teamspeak: &c{teamspeak}" 49 | - "&c» &7Twitter: &c{twitter}" 50 | - "&c» &7Website: &c{website}" 51 | - "&7&m----------------------------------------------" 52 | 53 | ONLINE-DONATORS-ANNOUNCE: 54 | NO-PLAYERS: true 55 | TOGGLE: true 56 | MESSAGE: 57 | - "&7&m---------------------------------------------" 58 | - "&cOnline Donators &7» &c{donators}" 59 | - "" 60 | - "&7You can buy rank at &c{store}" 61 | - "&7&m---------------------------------------------" 62 | MESSAGE-NO-DONATORS: "&fNo online donators." 63 | 64 | NO-PERMISSION: 65 | CONSOLE: "&cNo Console." 66 | PLAYER: "&cNo permission." 67 | 68 | PLAYER-NOTFOUND: 69 | MESSAGE: "&cPlayer '&f{argument}&c' not found." 70 | 71 | DEFAULT-MONEY: 250 72 | 73 | KOTH-REWARDS: 74 | - "say Winner {winner}" 75 | 76 | KILL-MONEY: 77 | ENABLE: true 78 | MONEY: 100 79 | KILL-MESSAGE: "&fYou earned &a${money} &ffor killing &c{target}&f." 80 | 81 | KIT-DEFAULT: "" 82 | 83 | KILL-REWARD: 84 | ENABLE: true 85 | REWARD: 86 | - "crate givekey {player} Kill 1" 87 | 88 | DEFAULT-KIT-ON-JOIN: true 89 | 90 | KILLSTREAK: 91 | COMMAND: 92 | - "&7&m---------------------------------------" 93 | - "&c&lKillStreak Info" 94 | - "" 95 | - "&c» &f3 Kills: &cRepair All." 96 | - "&c» &f5 Kills: &cInvisibility Effect (3 min)." 97 | - "&c» &f10 Kills: &cStrength II Effect (30 sec)." 98 | - "&c» &f12 Kills: &cSpeed IV Effect (1 min)." 99 | - "&c» &f15 Kills: &cRepair All." 100 | - "&c» &f20 Kills: &cStrength II (3 min) & Speed IV (3 min)." 101 | - "&7&m---------------------------------------" 102 | MESSAGE: "&4[KillStreak] &7{player} &creached a &7{streak} &ckillstreak!." 103 | #You can put any amount of killstreak, just copy and paste as you like. 104 | REWARDS: 105 | STREAK: 106 | "3": 107 | REPAIRALL: true 108 | MESSAGE: "&aYour entire inventory has been repaired." 109 | "5": 110 | REPAIRALL: false 111 | COMMANDS: 112 | - effect {player} INVISIBILITY 180 113 | MESSAGE: "&aYou have received invisibility for 3 minutes." 114 | "10": 115 | REPAIRALL: false 116 | COMMANDS: 117 | - effect {player} INCREASE_DAMAGE 30 1 118 | MESSAGE: "&aYou have received strength II for 30 seconds." 119 | "12": 120 | REPAIRALL: false 121 | COMMANDS: 122 | - effect {player} SPEED 60 3 123 | MESSAGE: "&aYou have received speed IV for 1 minute." 124 | "15": 125 | REPAIRALL: true 126 | MESSAGE: "&aYour entire inventory has been repaired." 127 | "20": 128 | REPAIRALL: false 129 | COMMANDS: 130 | - effect {player} INCREASE_DAMAGE 180 1 131 | - effect {player} SPEED 180 3 132 | MESSAGE: "&aYou have received strength II & speed IV for 3 minutes." -------------------------------------------------------------------------------- /src/main/resources/kit.yml: -------------------------------------------------------------------------------- 1 | KITS: {} -------------------------------------------------------------------------------- /src/main/resources/koths.yml: -------------------------------------------------------------------------------- 1 | KOTHS: {} -------------------------------------------------------------------------------- /src/main/resources/plugin.yml: -------------------------------------------------------------------------------- 1 | main: dev.panda.combofly.ComboFly 2 | name: PandaFly 3 | version: ${project.version} 4 | authors: ["KenAlesk", "TulioTriste", "Risas"] 5 | load: POSTWORLD -------------------------------------------------------------------------------- /src/main/resources/profile.yml: -------------------------------------------------------------------------------- 1 | PROFILES: {} -------------------------------------------------------------------------------- /src/main/resources/scoreboard.yml: -------------------------------------------------------------------------------- 1 | TITLE-ANIMATION-ENABLE: true 2 | TITLE-TASK: 0.3 3 | TITLE: 4 | - "&c&lCombo &7| &fSeason #2" 5 | - "&f&lC&c&lombo &7| &fSeason #2" 6 | - "&f&lCo&c&lmbo &7| &fSeason #2" 7 | - "&f&lCom&c&lbo &7| &fSeason #2" 8 | - "&f&lComb&c&lo &7| &fSeason #2" 9 | - "&f&lCombo &7| &fSeason #2" 10 | LINES: 11 | - "&7&m---------------------" 12 | - "{staffmode}" 13 | - "&fKills&7: &c{kills}" 14 | - "&fDeaths&7: &c{deaths}" 15 | - "&fMoney&7: &c{balance}" 16 | - "&4Combat&7: &c{combat}s" 17 | - "&3Enderpearl&7: &c{enderpearl}s" 18 | - "&aSpawn&7: &c{spawn}s" 19 | - "{pandaAbility}" 20 | - "{koth}" 21 | - "&7&m---------------------" 22 | 23 | KOTH: 24 | - "&7&m---------------------" 25 | - "&9&l{koth}&7: &r{time}" 26 | - "&b{capper}" 27 | 28 | FOOTER-ENABLE: true 29 | FOOTER-ANIMATION-ENABLE: true 30 | FOOTER-TASK: 2.0 31 | FOOTER: 32 | - "&o&7pandacommunity.org" 33 | - "&o&9discord.pandacommunity.org" 34 | - "&o&b@PandaPlugins" 35 | 36 | VARIABLES: 37 | STAFFMODE: 38 | - "&4&lStaffMode" 39 | - "&fVanish&7: &c{vanish}" 40 | - "&fOnline&7: &c{online}" 41 | - "&7&m---------------------" 42 | 43 | PANDAABILITY: 44 | GLOBAL-COOLDOWN: "%name%&f: %cooldown%" 45 | COOLDOWNS: "%name%&f: &c%cooldown%" -------------------------------------------------------------------------------- /src/main/resources/spawn.yml: -------------------------------------------------------------------------------- 1 | SPAWN: {} -------------------------------------------------------------------------------- /src/main/resources/staff-items.yml: -------------------------------------------------------------------------------- 1 | PHASE: 2 | ENABLE: true 3 | ITEM: "COMPASS" 4 | DATA: 0 5 | NAME: "&6Phase &7(Left/Right Click)" 6 | SLOT: 0 7 | 8 | INSPECTOR: 9 | ENABLE: true 10 | ITEM: "BOOK" 11 | DATA: 0 12 | NAME: "&6Inspector &7(Right Click)" 13 | SLOT: 1 14 | 15 | WORLD-EDIT: 16 | ENABLE: true 17 | ITEM: "WOOD_AXE" 18 | DATA: 0 19 | NAME: "&6WorldEdit &7(Left/Right Click)" 20 | SLOT: 2 21 | 22 | FREEZE: 23 | ENABLE: true 24 | ITEM: "PACKED_ICE" 25 | DATA: 0 26 | NAME: "&6Freeze &7(Right Click)" 27 | SLOT: 4 28 | 29 | MINER: 30 | ENABLE: true 31 | ITEM: "DIAMOND_PICKAXE" 32 | DATA: 0 33 | NAME: "&6Miners &7(Right Click)" 34 | SLOT: 5 35 | 36 | STAFF-ONLINE: 37 | ENABLE: true 38 | ITEM: "FEATHER" 39 | DATA: 0 40 | NAME: "&6Staff Online &7(Right Click)" 41 | SLOT: 6 42 | 43 | VANISH-ON: 44 | ENABLE: true 45 | ITEM: "INK_SACK" 46 | DATA: 10 47 | NAME: "&6Vanish&7: &aON &7(Right Click)" 48 | SLOT: 7 49 | 50 | VANISH-OFF: 51 | ENABLE: true 52 | ITEM: "INK_SACK" 53 | DATA: 8 54 | NAME: "&6Vanish&7: &cOFF &7(Right Click)" 55 | SLOT: 7 56 | 57 | RANDOM-TELEPORT: 58 | ENABLE: true 59 | ITEM: "BEACON" 60 | DATA: 0 61 | NAME: "&6Random Teleport &7(Right Click)" 62 | SLOT: 8 -------------------------------------------------------------------------------- /src/main/resources/tablist.yml: -------------------------------------------------------------------------------- 1 | # Information Variables: {name}, {rank}, {rank-prefix}, {rank-suffix}, {ping} 2 | # Network Variables: {online}, {slots} 3 | # Social Variables: {discord}, {store}, {teamspeak}, {twitter}, {website} 4 | # WARNING: All Tablist sections must contain 20 lines! 5 | ENABLE: true #Restart the server when you change this option 6 | TABLIST-HEADER: "&c&lPanda Community" 7 | TABLIST-FOOTER: "&7&opandamc.us" 8 | TABLIST: 9 | LEFT: 10 | - "" 11 | - "&7&m--------------------" 12 | - "" 13 | - "" 14 | - "" 15 | - "" 16 | - "" 17 | - "&c&lStatistics" 18 | - " &7\u27A5 &fKills: &f{kills}" 19 | - " &7\u27A5 &fDeaths&7: &f{deaths}" 20 | - " &7\u27A5 &fBalance&7: &f{balance}" 21 | - "" 22 | - "" 23 | - "" 24 | - "" 25 | - "" 26 | - "" 27 | - "&7&m--------------------" 28 | - "&cTwitter" 29 | - "&f{twitter}" 30 | CENTER: 31 | - "&c&lPanda Community" 32 | - "&7&m-------------------" 33 | - "" 34 | - "" 35 | - "" 36 | - "" 37 | - "&c&lServer" 38 | - " &7\u27A5 &fCombo" 39 | - "" 40 | - "" 41 | - "" 42 | - "&c&lPlayers" 43 | - " &7\u27A5 &f{online}/{slots}" 44 | - "" 45 | - "" 46 | - "" 47 | - "" 48 | - "&7&m--------------------" 49 | - "&cStore" 50 | - "&f{store}" 51 | RIGHT: 52 | - "" 53 | - "&7&m--------------------" 54 | - "" 55 | - "" 56 | - "" 57 | - "" 58 | - "" 59 | - "&c&lYour Information" 60 | - " &7\u27A5 &fName&7: &f{name}" 61 | - " &7\u27A5 &fRank&7: &f{rank-suffix}" 62 | - " &7\u27A5 &fPing&7: &f{ping}" 63 | - "" 64 | - "" 65 | - "" 66 | - "" 67 | - "" 68 | - "" 69 | - "&7&m--------------------" 70 | - "&cTeamspeak" 71 | - "&f{teamspeak}" 72 | EXTERNAL-RIGHT: #ONLY WORK IN 1.8 73 | - "" 74 | - "&7&m--------------------" 75 | - "" 76 | - "" 77 | - "" 78 | - "" 79 | - "" 80 | - "" 81 | - "&fIf you need help," 82 | - "&fyou can use the" 83 | - "&c/help &fcommand." 84 | - "" 85 | - "" 86 | - "" 87 | - "" 88 | - "" 89 | - "" 90 | - "&7&m--------------------" 91 | - "&cWebsite" 92 | - "&f{website}" -------------------------------------------------------------------------------- /src/main/resources/warp.yml: -------------------------------------------------------------------------------- 1 | WARPS: {} --------------------------------------------------------------------------------