567 lines
30 KiB
Java

package nl.Steffion.BlockHunt;
import java.util.ArrayList;
import java.util.List;
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import me.libraryaddict.disguise.disguisetypes.MiscDisguise;
import nl.Steffion.BlockHunt.Arena.ArenaState;
import nl.Steffion.BlockHunt.PermissionsC.Permissions;
import nl.Steffion.BlockHunt.Commands.CMDcreate;
import nl.Steffion.BlockHunt.Commands.CMDhelp;
import nl.Steffion.BlockHunt.Commands.CMDinfo;
import nl.Steffion.BlockHunt.Commands.CMDjoin;
import nl.Steffion.BlockHunt.Commands.CMDleave;
import nl.Steffion.BlockHunt.Commands.CMDlist;
import nl.Steffion.BlockHunt.Commands.CMDnotfound;
import nl.Steffion.BlockHunt.Commands.CMDreload;
import nl.Steffion.BlockHunt.Commands.CMDremove;
import nl.Steffion.BlockHunt.Commands.CMDset;
import nl.Steffion.BlockHunt.Commands.CMDsetwarp;
import nl.Steffion.BlockHunt.Commands.CMDshop;
import nl.Steffion.BlockHunt.Commands.CMDstart;
import nl.Steffion.BlockHunt.Commands.CMDtokens;
import nl.Steffion.BlockHunt.Commands.CMDwand;
import nl.Steffion.BlockHunt.Listeners.OnBlockBreakEvent;
import nl.Steffion.BlockHunt.Listeners.OnBlockPlaceEvent;
import nl.Steffion.BlockHunt.Listeners.OnEntityDamageByEntityEvent;
import nl.Steffion.BlockHunt.Listeners.OnEntityDamageEvent;
import nl.Steffion.BlockHunt.Listeners.OnFoodLevelChangeEvent;
import nl.Steffion.BlockHunt.Listeners.OnInventoryClickEvent;
import nl.Steffion.BlockHunt.Listeners.OnInventoryCloseEvent;
import nl.Steffion.BlockHunt.Listeners.OnPlayerDropItemEvent;
import nl.Steffion.BlockHunt.Listeners.OnPlayerInteractEvent;
import nl.Steffion.BlockHunt.Listeners.OnPlayerMoveEvent;
import nl.Steffion.BlockHunt.Listeners.OnPlayerQuitEvent;
import nl.Steffion.BlockHunt.Listeners.OnSignChangeEvent;
import nl.Steffion.BlockHunt.Managers.CommandManager;
import nl.Steffion.BlockHunt.Managers.ConfigManager;
import nl.Steffion.BlockHunt.Managers.MessageManager;
import nl.Steffion.BlockHunt.Managers.PermissionsManager;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.WordUtils;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin;
public class BlockHunt extends JavaPlugin implements Listener {
/**
* Steffion's Engine - Made by Steffion.
*
* You're allowed to use this engine for own usage, you're not allowed to
* republish the engine. Using this for your own plugin is allowed when a
* credit is placed somewhere in the plugin.
*
* Thanks for your cooperate!
*
* @author Steffion
*/
public static PluginDescriptionFile pdfFile;
public static BlockHunt plugin;
@SuppressWarnings("serial")
public static List<String> BlockHuntCMD = new ArrayList<String>() {
{
add("info");
add("help");
add("reload");
add("join");
add("leave");
add("list");
add("shop");
add("start");
add("wand");
add("create");
add("set");
add("setwarp");
add("remove");
add("tokens");
}
};
public static CommandManager CMD;
public static CommandManager CMDinfo;
public static CommandManager CMDhelp;
public static CommandManager CMDreload;
public static CommandManager CMDjoin;
public static CommandManager CMDleave;
public static CommandManager CMDlist;
public static CommandManager CMDshop;
public static CommandManager CMDstart;
public static CommandManager CMDwand;
public static CommandManager CMDcreate;
public static CommandManager CMDset;
public static CommandManager CMDsetwarp;
public static CommandManager CMDremove;
public static CommandManager CMDtokens;
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
getServer().getPluginManager().registerEvents(new OnBlockBreakEvent(), this);
getServer().getPluginManager().registerEvents(new OnBlockPlaceEvent(), this);
getServer().getPluginManager().registerEvents(new OnEntityDamageByEntityEvent(), this);
getServer().getPluginManager().registerEvents(new OnEntityDamageEvent(), this);
getServer().getPluginManager().registerEvents(new OnFoodLevelChangeEvent(), this);
getServer().getPluginManager().registerEvents(new OnInventoryClickEvent(), this);
getServer().getPluginManager().registerEvents(new OnInventoryCloseEvent(), this);
// Removed - This is handled by WorldGuard now.
// getServer().getPluginManager().registerEvents(
// new OnPlayerCommandPreprocessEvent(), this);
getServer().getPluginManager().registerEvents(new OnPlayerDropItemEvent(), this);
getServer().getPluginManager().registerEvents(new OnPlayerInteractEvent(), this);
getServer().getPluginManager().registerEvents(new OnPlayerMoveEvent(), this);
getServer().getPluginManager().registerEvents(new OnPlayerQuitEvent(), this);
getServer().getPluginManager().registerEvents(new OnSignChangeEvent(), this);
ConfigurationSerialization.registerClass(Arena.class, "BlockHuntArena");
pdfFile = getDescription();
plugin = this;
ConfigManager.newFiles();
CMD = new CommandManager("BlockHunt", "BlockHunt", null, null, Permissions.info, ConfigC.help_info, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_info), BlockHuntCMD,
new CMDinfo(), null);
CMDinfo = new CommandManager("BlockHunt INFO", "BlockHunt", "info", "i", Permissions.info, ConfigC.help_info, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_info),
BlockHuntCMD, new CMDinfo(), "/BlockHunt [info|i]");
CMDhelp = new CommandManager("BlockHunt HELP", "BlockHunt", "help", "h", Permissions.help, ConfigC.help_help, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_help),
BlockHuntCMD, new CMDhelp(), "/BlockHunt <help|h> [page number]");
CMDreload = new CommandManager("BlockHunt RELOAD", "BlockHunt", "reload", "r", Permissions.reload, ConfigC.help_reload,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_reload), BlockHuntCMD, new CMDreload(), "/BlockHunt <reload|r>");
CMDjoin = new CommandManager("BlockHunt JOIN", "BlockHunt", "join", "j", Permissions.join, ConfigC.help_join, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_join),
BlockHuntCMD, new CMDjoin(), "/BlockHunt <join|j> <arenaname>");
CMDleave = new CommandManager("BlockHunt LEAVE", "BlockHunt", "leave", "l", Permissions.leave, ConfigC.help_leave,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_leave), BlockHuntCMD, new CMDleave(), "/BlockHunt <leave|l>");
CMDlist = new CommandManager("BlockHunt LIST", "BlockHunt", "list", "li", Permissions.list, ConfigC.help_list, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_list),
BlockHuntCMD, new CMDlist(), "/BlockHunt <list|li>");
CMDshop = new CommandManager("BlockHunt SHOP", "BlockHunt", "shop", "sh", Permissions.shop, ConfigC.help_shop, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_shop),
BlockHuntCMD, new CMDshop(), "/BlockHunt <shop|sh>");
CMDstart = new CommandManager("BlockHunt START", "BlockHunt", "start", "go", Permissions.start, ConfigC.help_start,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_start), BlockHuntCMD, new CMDstart(), "/BlockHunt <start|go> <arenaname>");
CMDwand = new CommandManager("BlockHunt WAND", "BlockHunt", "wand", "w", Permissions.create, ConfigC.help_wand, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_wand),
BlockHuntCMD, new CMDwand(), "/BlockHunt <wand|w>");
CMDcreate = new CommandManager("BlockHunt CREATE", "BlockHunt", "create", "c", Permissions.create, ConfigC.help_create,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_create), BlockHuntCMD, new CMDcreate(), "/BlockHunt <create|c> <arenaname>");
CMDset = new CommandManager("BlockHunt SET", "BlockHunt", "set", "s", Permissions.set, ConfigC.help_set, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_set),
BlockHuntCMD, new CMDset(), "/BlockHunt <set|s> <arenaname>");
CMDsetwarp = new CommandManager("BlockHunt SETWARP", "BlockHunt", "setwarp", "sw", Permissions.setwarp, ConfigC.help_setwarp,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_setwarp), BlockHuntCMD, new CMDsetwarp(),
"/BlockHunt <setwarp|sw> <lobby|hiders|seekers|spawn> <arenaname>");
CMDremove = new CommandManager("BlockHunt REMOVE", "BlockHunt", "remove", "delete", Permissions.remove, ConfigC.help_remove,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_remove), BlockHuntCMD, new CMDremove(), "/BlockHunt <remove|delete> <arenaname>");
CMDtokens = new CommandManager("BlockHunt TOKENS", "BlockHunt", "tokens", "t", Permissions.tokens, ConfigC.help_tokens,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_tokens), BlockHuntCMD, new CMDtokens(), "/BlockHunt <tokens|t> <set|add|take> <playername> <amount>");
if (!getServer().getPluginManager().isPluginEnabled("LibsDisguises")) {
MessageManager.broadcastFMessage(ConfigC.error_libsDisguisesNotInstalled);
Bukkit.getServer().getPluginManager().disablePlugin(this);
return;
}
if (!getServer().getPluginManager().isPluginEnabled("ProtocolLib")) {
MessageManager.broadcastFMessage(ConfigC.error_protocolLibNotInstalled);
Bukkit.getServer().getPluginManager().disablePlugin(this);
return;
}
ArenaHandler.loadArenas();
MessageManager.sendFMessage(null, ConfigC.log_enabledPlugin, "name-" + BlockHunt.pdfFile.getName(), "version-" + BlockHunt.pdfFile.getVersion(), "authors-"
+ BlockHunt.pdfFile.getAuthors().get(0));
// Welcome to the massive game loop!!
getServer().getScheduler().runTaskTimer(this, () -> {
for (Arena arena : MemoryStorage.arenaList) {
if (arena.gameState == ArenaState.WAITING) {
if (arena.playersInArena.size() >= arena.minPlayers) {
arena.gameState = ArenaState.STARTING;
arena.timer = arena.timeInLobbyUntilStart;
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-" + arena.timeInLobbyUntilStart);
}
} else if (arena.gameState == ArenaState.STARTING) {
arena.timer = arena.timer - 1;
if (arena.timer > 0) {
if (arena.timer == 60) {
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-60");
} else if (arena.timer == 30) {
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-30");
} else if (arena.timer == 10) {
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-10");
} else if (arena.timer == 5) {
arena.lobbyWarp.getWorld().playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 0);
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-5");
} else if (arena.timer == 4) {
arena.lobbyWarp.getWorld().playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 0);
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-4");
} else if (arena.timer == 3) {
arena.lobbyWarp.getWorld().playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-3");
} else if (arena.timer == 2) {
arena.lobbyWarp.getWorld().playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-2");
} else if (arena.timer == 1) {
arena.lobbyWarp.getWorld().playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 2);
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-1");
}
} else {
arena.gameState = ArenaState.INGAME;
arena.timer = arena.gameTime;
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaStarted, "secs-" + arena.waitingTimeSeeker);
for (int i = arena.amountSeekersOnStart; i > 0; i = i - 1) {
boolean loop = true;
Player seeker = arena.playersInArena.get(MemoryStorage.random.nextInt(arena.playersInArena.size()));
for (Player playerCheck : arena.playersInArena) {
if (MemoryStorage.choosenSeeker.get(playerCheck) != null) {
if (MemoryStorage.choosenSeeker.get(playerCheck)) {
seeker = playerCheck;
MemoryStorage.choosenSeeker.remove(playerCheck);
} else {
if (seeker.equals(playerCheck)) {
i = i + 1;
loop = false;
}
}
}
}
if (loop) {
if (!arena.seekers.contains(seeker)) {
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameSeekerChoosen, "seeker-" + seeker.getName());
arena.seekers.add(seeker);
seeker.teleport(arena.seekersWarp);
seeker.getInventory().clear();
seeker.updateInventory();
seeker.setWalkSpeed(0.3F);
MemoryStorage.seekertime.put(seeker, arena.waitingTimeSeeker);
} else {
i = i + 1;
}
}
}
for (Player arenaPlayer : arena.playersInArena) {
if (!arena.seekers.contains(arenaPlayer)) {
arenaPlayer.getInventory().clear();
arenaPlayer.updateInventory();
ItemStack block = arena.disguiseBlocks.get(MemoryStorage.random.nextInt(arena.disguiseBlocks.size()));
if (MemoryStorage.choosenBlock.get(arenaPlayer) != null) {
block = MemoryStorage.choosenBlock.get(arenaPlayer);
MemoryStorage.choosenBlock.remove(arenaPlayer);
}
MiscDisguise disguise = new MiscDisguise(DisguiseType.FALLING_BLOCK, block.getType(),0);
DisguiseAPI.disguiseToAll(arenaPlayer, disguise);
arenaPlayer.teleport(arena.hidersWarp);
ItemStack blockCount = new ItemStack(block.getType(), 5);
blockCount.setDurability(block.getDurability());
arenaPlayer.getInventory().setItem(8, blockCount);
arenaPlayer.getInventory().setHelmet(new ItemStack(block));
MemoryStorage.pBlock.put(arenaPlayer, block);
String blockName = block.getType().name();
blockName = WordUtils.capitalizeFully(blockName.replace("_", " "));
MessageManager.sendFMessage(arenaPlayer, ConfigC.normal_ingameBlock,
"block-" + blockName);
}
}
}
}
for (Player player : arena.seekers) {
if (player.getInventory().getItem(0) == null || player.getInventory().getItem(0).getType() != Material.DIAMOND_SWORD) {
player.getInventory().clear(); // semi prevent duping infinite swords. TODO: Fix this properly
ItemStack i = new ItemStack(Material.DIAMOND_SWORD, 1);
i.addUnsafeEnchantment(Enchantment.DAMAGE_ALL, 10);
player.getInventory().setItem(0, i);
player.getInventory().setHelmet(new ItemStack(Material.IRON_HELMET, 1));
player.getInventory().setChestplate(new ItemStack(Material.IRON_CHESTPLATE, 1));
player.getInventory().setLeggings(new ItemStack(Material.IRON_LEGGINGS, 1));
player.getInventory().setBoots(new ItemStack(Material.IRON_BOOTS, 1));
ItemStack infBow = new ItemStack(Material.BOW, 1);
infBow.addEnchantment(Enchantment.ARROW_INFINITE, 1);
player.getInventory().setItem(1, infBow);
player.getInventory().setItem(2, new ItemStack(Material.ARROW, 1));
player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_USE, 1, 1);
}
if (MemoryStorage.seekertime.get(player) != null) {
MemoryStorage.seekertime.put(player, MemoryStorage.seekertime.get(player) - 1);
if (MemoryStorage.seekertime.get(player) <= 0) {
player.teleport(arena.hidersWarp);
MemoryStorage.seekertime.remove(player);
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameSeekerSpawned, "playername-" + player.getName());
}
}
}
if (arena.gameState == ArenaState.INGAME) {
arena.timer = arena.timer - 1;
if (arena.timer > 0) {
if (arena.timer == arena.gameTime - arena.timeUntilHidersSword) {
ItemStack sword = new ItemStack(Material.WOODEN_SWORD, 1);
sword.addUnsafeEnchantment(Enchantment.KNOCKBACK, 2);
for (Player arenaPlayer : arena.playersInArena) {
if (!arena.seekers.contains(arenaPlayer)) {
arenaPlayer.getInventory().addItem(sword);
MessageManager.sendFMessage(arenaPlayer, ConfigC.normal_ingameGivenSword);
}
}
}
// blockAnnouncer code.
if ((arena.blockAnnouncerTime > 0) && (arena.timer == arena.blockAnnouncerTime)) {
ArrayList<String> remainingBlocks = new ArrayList<>();
for (Player arenaPlayer : arena.playersInArena) {
if (!arena.seekers.contains(arenaPlayer)) {
String block = arenaPlayer.getInventory().getItem(8).getType().name();
block = WordUtils.capitalizeFully(block.replace("_", " "));
if (!remainingBlocks.contains(block)) { //Don't print double up block names.
remainingBlocks.add(block);
}
}
}
String blocklist = StringUtils.join(remainingBlocks, ", ");
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameBlocksLeft, "1-" + blocklist);
}
if (arena.timer == 190) {
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameArenaEnd, "1-190");
} else if (arena.timer == 60) {
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameArenaEnd, "1-60");
} else if (arena.timer == 30) {
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameArenaEnd, "1-30");
} else if (arena.timer == 10) {
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameArenaEnd, "1-10");
} else if (arena.timer == 5) {
arena.lobbyWarp.getWorld().playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 0);
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameArenaEnd, "1-5");
} else if (arena.timer == 4) {
arena.lobbyWarp.getWorld().playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 0);
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameArenaEnd, "1-4");
} else if (arena.timer == 3) {
arena.lobbyWarp.getWorld().playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameArenaEnd, "1-3");
} else if (arena.timer == 2) {
arena.lobbyWarp.getWorld().playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameArenaEnd, "1-2");
} else if (arena.timer == 1) {
arena.lobbyWarp.getWorld().playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 2);
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameArenaEnd, "1-1");
}
} else {
ArenaHandler.hidersWin(arena);
return;
}
for (Player player : arena.playersInArena) {
if (!arena.seekers.contains(player)) {
Location pLoc = player.getLocation();
Location moveLoc = MemoryStorage.moveLoc.get(player);
ItemStack block = player.getInventory().getItem(8);
if (block == null) {
if (MemoryStorage.pBlock.get(player) != null) {
block = MemoryStorage.pBlock.get(player);
player.getInventory().setItem(8, block);
player.updateInventory();
}
}
if (moveLoc != null) {
if (moveLoc.getX() == pLoc.getX() && moveLoc.getY() == pLoc.getY() && moveLoc.getZ() == pLoc.getZ()) {
if (block.getAmount() > 1) {
block.setAmount(block.getAmount() - 1);
} else {
Block pBlock = player.getLocation().getBlock();
BlockData pBlockData = pBlock.getBlockData();
if (pBlockData.getMaterial().equals(Material.AIR) || pBlockData.getMaterial().equals(Material.WATER)
|| pBlockData.getMaterial().equals(Material.WATER)) {
if (pBlockData.getMaterial().equals(Material.WATER) || pBlockData.getMaterial().equals(Material.WATER)) {
MemoryStorage.hiddenLocWater.put(player, true);
} else {
MemoryStorage.hiddenLocWater.put(player, false);
}
if (DisguiseAPI.isDisguised(player)) {
DisguiseAPI.undisguiseToAll(player);
for (Player pl : Bukkit.getOnlinePlayers()) {
if (!pl.equals(player)) {
pl.hidePlayer(player);
pl.sendBlockChange(pBlock.getLocation(), block.getType().createBlockData());
}
}
block.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
player.playSound(pLoc, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
MemoryStorage.hiddenLoc.put(player, moveLoc);
String blockName = block.getType().name();
blockName = WordUtils.capitalizeFully(blockName.replace("_", " "));
MessageManager.sendFMessage(player, ConfigC.normal_ingameNowSolid, "block-"
+ blockName);
}
for (Player pl : Bukkit.getOnlinePlayers()) {
if (!pl.equals(player)) {
pl.hidePlayer(player);
pl.sendBlockChange(pBlock.getLocation(), block.getType().createBlockData());
}
}
} else {
MessageManager.sendFMessage(player, ConfigC.warning_ingameNoSolidPlace);
}
}
} else {
block.setAmount(5);
if (!DisguiseAPI.isDisguised(player)) {
SolidBlockHandler.makePlayerUnsolid(player);
}
}
}
}
}
ScoreboardHandler.updateScoreboard(arena); // TODO Only do this when needed (player added/removed)
}
for (Player pl : arena.playersInArena) {
pl.setLevel(arena.timer);
pl.setGameMode(GameMode.SURVIVAL);
}
}
SignsHandler.updateSigns(); //TODO Only do this when needed (gamestate change or player count change)
}, 0, 20);
}
public void onDisable() {
for (Arena arena : MemoryStorage.arenaList) {
String cause = "[BlockHunt] Arena " + arena.arenaName + " has been stopped";
ArenaHandler.stopArena(arena, cause, ConfigC.warning_arenaStopped);
}
MessageManager.sendFMessage(null, ConfigC.log_disabledPlugin, "name-" + BlockHunt.pdfFile.getName(), "version-" + BlockHunt.pdfFile.getVersion(), "authors-"
+ BlockHunt.pdfFile.getAuthors().get(0));
}
/**
* Args to String. Makes 1 string.
*
* @param input
* String list which should be converted to a string.
* @param startArg
* Start on this length.
*
* @return The converted string.
*/
public static String stringBuilder(String[] input, int startArg) {
if (input.length - startArg <= 0) {
return null;
}
StringBuilder sb = new StringBuilder(input[startArg]);
for (int i = ++startArg; i < input.length; i++) {
sb.append(' ').append(input[i]);
}
return sb.toString();
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
Player player = null;
if (sender instanceof Player) {
player = (Player) sender;
}
for (CommandManager command : MemoryStorage.commands) {
String[] argsSplit = null;
String[] argsSplitAlias = null;
if (command.args != null && command.argsalias != null) {
argsSplit = command.args.split("/");
argsSplitAlias = command.argsalias.split("/");
}
if (cmd.getName().equalsIgnoreCase(command.label)) {
boolean equals = true;
if (argsSplit == null) {
equals = args.length == 0;
} else {
if (args.length >= argsSplit.length) {
for (int i2 = argsSplit.length - 1; i2 >= 0; i2 = i2 - 1) {
int loc = argsSplit.length - i2 - 1;
if (!argsSplit[loc].equalsIgnoreCase(args[loc]) && !argsSplitAlias[loc].equalsIgnoreCase(args[loc])) {
equals = false;
}
}
} else {
equals = false;
}
}
if (equals) {
if (PermissionsManager.hasPerm(player, command.permission, true)) {
if (command.enabled) {
command.CMD.execute(player, cmd, label, args);
} else {
MessageManager.sendFMessage(player, ConfigC.error_commandNotEnabled);
}
}
return true;
}
}
}
new CMDnotfound().execute(player,cmd,label, args);;
return true;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] args) {
for (CommandManager command : MemoryStorage.commands) {
if (cmd.getName().equalsIgnoreCase(command.label)) {
if (args.length == 1) {
return command.mainTABlist;
}
}
}
return null;
}
/**
* Short a String for like the Scoreboard title.
*
* @param string
* String to be shorten.
* @param maxLenght
* Max lenght of the characters.
* @return Shorten string, else normal string.
*/
public static String cutString(String string, int maxLenght) {
if (string.length() > maxLenght) {
string = string.substring(0, maxLenght);
}
return string;
}
}