Changes package name, and cleans up code a little bit

This commit is contained in:
2023-07-06 17:43:51 +02:00
parent f8292f54b7
commit 177f585145
53 changed files with 591 additions and 606 deletions

View File

@@ -0,0 +1,539 @@
package net.knarcraft.blockhunt;
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import me.libraryaddict.disguise.disguisetypes.MiscDisguise;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import net.knarcraft.blockhunt.arena.ArenaState;
import net.knarcraft.blockhunt.command.CreateCommand;
import net.knarcraft.blockhunt.command.HelpCommand;
import net.knarcraft.blockhunt.command.InfoCommand;
import net.knarcraft.blockhunt.command.JoinCommand;
import net.knarcraft.blockhunt.command.LeaveCommand;
import net.knarcraft.blockhunt.command.ListCommand;
import net.knarcraft.blockhunt.command.NotFoundCommand;
import net.knarcraft.blockhunt.command.ReloadCommand;
import net.knarcraft.blockhunt.command.RemoveCommand;
import net.knarcraft.blockhunt.command.SetCommand;
import net.knarcraft.blockhunt.command.SetWarpCommand;
import net.knarcraft.blockhunt.command.ShopCommand;
import net.knarcraft.blockhunt.command.StartCommand;
import net.knarcraft.blockhunt.command.TokensCommand;
import net.knarcraft.blockhunt.command.WandCommand;
import net.knarcraft.blockhunt.listener.OnBlockBreakEvent;
import net.knarcraft.blockhunt.listener.OnBlockPlaceEvent;
import net.knarcraft.blockhunt.listener.OnEntityDamageByEntityEvent;
import net.knarcraft.blockhunt.listener.OnEntityDamageEvent;
import net.knarcraft.blockhunt.listener.OnFoodLevelChangeEvent;
import net.knarcraft.blockhunt.listener.OnInventoryClickEvent;
import net.knarcraft.blockhunt.listener.OnInventoryCloseEvent;
import net.knarcraft.blockhunt.listener.OnPlayerDropItemEvent;
import net.knarcraft.blockhunt.listener.OnPlayerInteractEvent;
import net.knarcraft.blockhunt.listener.OnPlayerMoveEvent;
import net.knarcraft.blockhunt.listener.OnPlayerQuitEvent;
import net.knarcraft.blockhunt.listener.OnPlayerSwapHandItemsEvent;
import net.knarcraft.blockhunt.listener.OnPlayerTeleportEvent;
import net.knarcraft.blockhunt.listener.OnSignChangeEvent;
import net.knarcraft.blockhunt.manager.CommandManager;
import net.knarcraft.blockhunt.manager.ConfigManager;
import net.knarcraft.blockhunt.manager.MessageManager;
import net.knarcraft.blockhunt.manager.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.World;
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;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class BlockHunt extends JavaPlugin implements Listener {
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
public static PluginDescriptionFile pdfFile;
public static BlockHunt plugin;
@SuppressWarnings("serial")
public static final List<String> BlockHuntCMD = new ArrayList<>() {
{
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);
getServer().getPluginManager().registerEvents(new OnPlayerSwapHandItemsEvent(), this);
getServer().getPluginManager().registerEvents(new OnPlayerDropItemEvent(), this);
getServer().getPluginManager().registerEvents(new OnPlayerInteractEvent(), this);
getServer().getPluginManager().registerEvents(new OnPlayerMoveEvent(), this);
getServer().getPluginManager().registerEvents(new OnPlayerTeleportEvent(), 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, PermissionsC.Permissions.info, ConfigC.help_info, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_info), BlockHuntCMD,
new InfoCommand(), null);
CMDInfo = new CommandManager("BlockHunt INFO", "BlockHunt", "info", "i", PermissionsC.Permissions.info, ConfigC.help_info, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_info),
BlockHuntCMD, new InfoCommand(), "/BlockHunt [info|i]");
CMDHelp = new CommandManager("BlockHunt HELP", "BlockHunt", "help", "h", PermissionsC.Permissions.help, ConfigC.help_help, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_help),
BlockHuntCMD, new HelpCommand(), "/BlockHunt <help|h> [page number]");
CMDReload = new CommandManager("BlockHunt RELOAD", "BlockHunt", "reload", "r", PermissionsC.Permissions.reload, ConfigC.help_reload,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_reload), BlockHuntCMD, new ReloadCommand(), "/BlockHunt <reload|r>");
CMDJoin = new CommandManager("BlockHunt JOIN", "BlockHunt", "join", "j", PermissionsC.Permissions.join, ConfigC.help_join, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_join),
BlockHuntCMD, new JoinCommand(), "/BlockHunt <join|j> <arena name>");
CMDLeave = new CommandManager("BlockHunt LEAVE", "BlockHunt", "leave", "l", PermissionsC.Permissions.leave, ConfigC.help_leave,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_leave), BlockHuntCMD, new LeaveCommand(), "/BlockHunt <leave|l>");
CMDList = new CommandManager("BlockHunt LIST", "BlockHunt", "list", "li", PermissionsC.Permissions.list, ConfigC.help_list, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_list),
BlockHuntCMD, new ListCommand(), "/BlockHunt <list|li>");
CMDShop = new CommandManager("BlockHunt SHOP", "BlockHunt", "shop", "sh", PermissionsC.Permissions.shop, ConfigC.help_shop, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_shop),
BlockHuntCMD, new ShopCommand(), "/BlockHunt <shop|sh>");
CMDStart = new CommandManager("BlockHunt START", "BlockHunt", "start", "go", PermissionsC.Permissions.start, ConfigC.help_start,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_start), BlockHuntCMD, new StartCommand(), "/BlockHunt <start|go> <arena name>");
CMDWand = new CommandManager("BlockHunt WAND", "BlockHunt", "wand", "w", PermissionsC.Permissions.create, ConfigC.help_wand, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_wand),
BlockHuntCMD, new WandCommand(), "/BlockHunt <wand|w>");
CMDCreate = new CommandManager("BlockHunt CREATE", "BlockHunt", "create", "c", PermissionsC.Permissions.create, ConfigC.help_create,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_create), BlockHuntCMD, new CreateCommand(), "/BlockHunt <create|c> <arena name>");
CMDSet = new CommandManager("BlockHunt SET", "BlockHunt", "set", "s", PermissionsC.Permissions.set, ConfigC.help_set, (Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_set),
BlockHuntCMD, new SetCommand(), "/BlockHunt <set|s> <arena name>");
CMDSetWarp = new CommandManager("BlockHunt SETWARP", "BlockHunt", "setwarp", "sw", PermissionsC.Permissions.setwarp, ConfigC.help_setwarp,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_setwarp), BlockHuntCMD, new SetWarpCommand(),
"/BlockHunt <setwarp|sw> <lobby|hiders|seekers|spawn> <arena name>");
CMDRemove = new CommandManager("BlockHunt REMOVE", "BlockHunt", "remove", "delete", PermissionsC.Permissions.remove, ConfigC.help_remove,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_remove), BlockHuntCMD, new RemoveCommand(), "/BlockHunt <remove|delete> <arena name>");
CMDTokens = new CommandManager("BlockHunt TOKENS", "BlockHunt", "tokens", "t", PermissionsC.Permissions.tokens, ConfigC.help_tokens,
(Boolean) MemoryStorage.config.get(ConfigC.commandEnabled_tokens), BlockHuntCMD, new TokensCommand(), "/BlockHunt <tokens|t> <set|add|take> <player name> <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 || arena.timer == 30 || arena.timer == 10) {
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-" + arena.timer);
} else if (arena.timer <= 5) {
World world = arena.lobbyWarp.getWorld();
if (world != null) {
int pitch = (int) (2 - Math.floor(arena.timer / 2.0));
world.playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, pitch);
}
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-" + arena.timer);
}
} else {
arena.gameState = ArenaState.IN_GAME;
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);
PlayerHandler.teleport(seeker, 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());
DisguiseAPI.disguiseToAll(arenaPlayer, disguise);
PlayerHandler.teleport(arenaPlayer, arena.hidersWarp);
ItemStack blockCount = new ItemStack(block.getType(), 5);
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) {
PlayerHandler.teleport(player, arena.hidersWarp);
MemoryStorage.seekertime.remove(player);
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameSeekerSpawned, "playername-" + player.getName());
}
}
}
if (arena.gameState == ArenaState.IN_GAME) {
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 || arena.timer == 60 || arena.timer == 30 || arena.timer == 10) {
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameArenaEnd, "1-" + arena.timer);
} else if (arena.timer <= 5) {
World world = arena.lobbyWarp.getWorld();
if (world != null) {
int pitch = (int) (2 - Math.floor(arena.timer / 2.0));
world.playSound(arena.lobbyWarp, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, pitch);
}
ArenaHandler.sendFMessage(arena, ConfigC.normal_lobbyArenaIsStarting, "1-" + arena.timer);
}
} 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(this, 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(this, 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);
if (arena.seekers.contains(pl)) {
pl.setGameMode(GameMode.SURVIVAL);
} else {
pl.setGameMode(GameMode.ADVENTURE);
}
}
}
SignsHandler.updateSigns(); //TODO Only do this when needed (game-state 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(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull 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;
break;
}
}
} else {
equals = false;
}
}
if (equals) {
if (PermissionsManager.hasPerm(player, command.permission, true)) {
if (command.enabled) {
return command.CMD.execute(player, cmd, label, args);
} else {
MessageManager.sendFMessage(player, ConfigC.error_commandNotEnabled);
}
}
return true;
}
}
}
new NotFoundCommand().execute(player, cmd, label, args);
return true;
}
@Override
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull 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 shortened.
* @param maxLength Max length of the characters.
* @return Shorten string, else normal string.
*/
public static String cutString(String string, int maxLength) {
if (string.length() > maxLength) {
string = string.substring(0, maxLength);
}
return string;
}
}

View File

@@ -0,0 +1,126 @@
package net.knarcraft.blockhunt;
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
import net.knarcraft.blockhunt.manager.ConfigManager;
public enum ConfigC {
chat_tag("[" + BlockHunt.pdfFile.getName() + "] ", MemoryStorage.config), chat_normal("&b", MemoryStorage.config), chat_warning("&c", MemoryStorage.config), chat_error("&c", MemoryStorage.config), chat_arg("&e",
MemoryStorage.config), chat_header("&9", MemoryStorage.config), chat_headerhigh("%H_______.[ %A%header%%H ]._______", MemoryStorage.config),
commandEnabled_info(true, MemoryStorage.config), commandEnabled_help(true, MemoryStorage.config), commandEnabled_reload(true, MemoryStorage.config), commandEnabled_join(true, MemoryStorage.config), commandEnabled_leave(
true, MemoryStorage.config), commandEnabled_list(true, MemoryStorage.config), commandEnabled_shop(true, MemoryStorage.config), commandEnabled_start(true, MemoryStorage.config), commandEnabled_wand(true,
MemoryStorage.config), commandEnabled_create(true, MemoryStorage.config), commandEnabled_set(true, MemoryStorage.config), commandEnabled_setwarp(true, MemoryStorage.config), commandEnabled_remove(true,
MemoryStorage.config), commandEnabled_tokens(true, MemoryStorage.config),
autoUpdateCheck(true, MemoryStorage.config), autoDownloadUpdate(false, MemoryStorage.config),
wandIDname("STICK", MemoryStorage.config), wandName("%A&l" + BlockHunt.pdfFile.getName() + "%N's selection wand", MemoryStorage.config), wandDescription(new String[]{
"%NUse this item to select an arena for your arena.", "%ALeft-Click%N to select point #1.", "%ARight-Click%N to select point #2.",
"%NUse the create command to define your arena.", "%A/" + BlockHunt.pdfFile.getName() + " <help|h>"}, MemoryStorage.config),
shop_title("%H&lBlockHunt %NShop", MemoryStorage.config), shop_price("%NPrice: %A%amount% %Ntokens.", MemoryStorage.config),
shop_blockChooserv1Enabled(true, MemoryStorage.config), shop_blockChooserv1IDname("BOOK", MemoryStorage.config), shop_blockChooserv1Price(3000, MemoryStorage.config), shop_blockChooserv1Name(
"%H&lBlockHunt Chooser", MemoryStorage.config), shop_blockChooserv1Description(new String[]{"%NUse this item before the arena starts.",
"%ARight-Click%N in the lobby and choose", "%Nthe block you want to be!", "&6Unlimited uses."}, MemoryStorage.config),
shop_BlockHuntPassv2Enabled(true, MemoryStorage.config), shop_BlockHuntPassv2IDName("NAME_TAG", MemoryStorage.config), shop_BlockHuntPassv2Price(150, MemoryStorage.config), shop_BlockHuntPassv2Name(
"%H&lBlockHunt Pass", MemoryStorage.config), shop_BlockHuntPassv2Description(new String[]{"%NUse this item before the arena starts.",
"%ARight-Click%N in the lobby and choose", "%Nif you want to be a Hider or a Seeker!", "&61 time use.",}, MemoryStorage.config),
sign_LEAVE(new String[]{"%H[" + BlockHunt.pdfFile.getName() + "%H]", "&4LEAVE", "&8Right-Click", "&8To leave."}, MemoryStorage.config), sign_SHOP(new String[]{
"%H[" + BlockHunt.pdfFile.getName() + "%H]", "&4SHOP", "&8Right-Click", "&8To shop."}, MemoryStorage.config), sign_WAITING(new String[]{
"%H[" + BlockHunt.pdfFile.getName() + "%H]", "%A%arenaname%", "%A%players%%N/%A%maxplayers%", "&8Waiting..."}, MemoryStorage.config), sign_STARTING(new String[]{
"%H[" + BlockHunt.pdfFile.getName() + "%H]", "%A%arenaname%", "%A%players%%N/%A%maxplayers%", "&2Start: %A%timeleft%"}, MemoryStorage.config), sign_INGAME(new String[]{
"%H[" + BlockHunt.pdfFile.getName() + "%H]", "%A%arenaname%", "%A%players%%N/%A%maxplayers%", "%EIngame: %A%timeleft%"}, MemoryStorage.config),
scoreboard_enabled(true, MemoryStorage.config), scoreboard_title("%H[" + BlockHunt.pdfFile.getName() + "]", MemoryStorage.config), scoreboard_timeleft("%ATime left:", MemoryStorage.config), scoreboard_seekers(
"%NSeekers:", MemoryStorage.config), scoreboard_hiders("%NHiders:", MemoryStorage.config),
requireInventoryClearOnJoin(false, MemoryStorage.config),
log_enabledPlugin("%TAG%N%name%&a&k + %N%version% is now Enabled. Made by %A%authors%%N.", MemoryStorage.messages), log_disabledPlugin(
"%TAG%N%name%&c&k - %N%version% is now Disabled. Made by %A%authors%%N.", MemoryStorage.messages),
help_info("%NDisplays the plugin's info.", MemoryStorage.messages), help_help("%NShows a list of commands.", MemoryStorage.messages), help_reload("%NReloads all configs.", MemoryStorage.messages), help_join(
"%NJoins a " + BlockHunt.pdfFile.getName() + " game.", MemoryStorage.messages), help_leave("%NLeave a " + BlockHunt.pdfFile.getName() + " game.", MemoryStorage.messages), help_list(
"%NShows a list of available arenas.", MemoryStorage.messages), help_shop("%NOpens the " + BlockHunt.pdfFile.getName() + " shop.", MemoryStorage.messages), help_start(
"%NForces an arena to start.", MemoryStorage.messages), help_wand("%NGives you the wand selection tool.", MemoryStorage.messages), help_create(
"%NCreates an arena from your selection.", MemoryStorage.messages), help_set("%NOpens a panel to set settings.", MemoryStorage.messages), help_setwarp(
"%NSets warps for your arena.", MemoryStorage.messages), help_remove("%NDeletes an Arena.", MemoryStorage.messages), help_tokens("%NChange someones tokens.", MemoryStorage.messages),
button_add("%NAdd %A%1%%N to %A%2%%N", MemoryStorage.messages), button_add2("Add", MemoryStorage.messages), button_setting("%NSetting %A%1%%N is now: %A%2%%N.", MemoryStorage.messages), button_remove(
"%NRemove %A%1%%N from %A%2%%N", MemoryStorage.messages), button_remove2("Remove", MemoryStorage.messages),
normal_reloadedConfigs("%TAG&aReloaded all configs!", MemoryStorage.messages), normal_joinJoinedArena("%TAG%A%playername%%N joined your arena. (%A%1%%N/%A%2%%N)", MemoryStorage.messages), normal_leaveYouLeft(
"%TAG%NYou left the arena! Thanks for playing!", MemoryStorage.messages), normal_leaveLeftArena("%TAG%A%playername%%N left your arena. (%A%1%%N/%A%2%%N)", MemoryStorage.messages), normal_startForced(
"%TAG%NYou forced to start arena '%A%arenaname%%N'!", MemoryStorage.messages), normal_wandGaveWand("%TAG%NHere you go! &o(Use the %A&o%type%%N&o!)", MemoryStorage.messages), normal_wandSetPosition(
"%TAG%NSet position %A#%number%%N to location: (%A%x%%N, %A%y%%N, %A%z%%N).", MemoryStorage.messages), normal_createCreatedArena(
"%TAG%NCreated an arena with the name '%A%name%%N'.", MemoryStorage.messages), normal_lobbyArenaIsStarting("%TAG%NThe arena will start in %A%1%%N second(s)!", MemoryStorage.messages), normal_lobbyArenaStarted(
"%TAG%NThe arena has been started! The seeker is coming to find you in %A%secs%%N seconds!", MemoryStorage.messages), normal_ingameSeekerChoosen(
"%TAG%NPlayer %A%seeker%%N has been choosen as seeker!", MemoryStorage.messages), normal_ingameBlock("%TAG%NYou're disguised as a(n) '%A%block%%N' block.", MemoryStorage.messages), normal_ingameArenaEnd(
"%TAG%NThe arena will end in %A%1%%N second(s)!", MemoryStorage.messages), normal_ingameSeekerSpawned("%TAG%A%playername%%N has spawned as a seeker!", MemoryStorage.messages), normal_ingameGivenSword(
"%TAG%NYou were given a sword!", MemoryStorage.messages), normal_ingameHiderDied("%TAG%NHider %A%playername%%N was killed by %A%killer%%N!", MemoryStorage.messages), normal_ingameHidersLeft(
"%NHider(s) left: %A%left%%N", MemoryStorage.messages), normal_ingameSeekerDied("%TAG%NSeeker %A%playername%%N died and will respawn in %A%secs%%N seconds!", MemoryStorage.messages), normal_winSeekers(
"%TAG%NThe %ASEEKERS%N have won!", MemoryStorage.messages), normal_winHiders("%TAG%NThe %AHIDERS%N have won!", MemoryStorage.messages), normal_setwarpWarpSet(
"%TAG%NSet warp '%A%warp%%N' to your location!", MemoryStorage.messages), normal_addedToken("%TAG%A%amount%%N tokens were added to your account!", MemoryStorage.messages), normal_removeRemovedArena(
"%TAG%NRemoved arena '%A%name%%N'!", MemoryStorage.messages), normal_tokensChanged("%TAG%N%option% %A%amount%%N tokens %option2% %A%playername%%N.", MemoryStorage.messages), normal_tokensChangedPerson(
"%TAG%NPlayer %A%playername%%N %N%option% %A%amount%%N %option2% your tokens.", MemoryStorage.messages), normal_ingameNowSolid(
"%TAG%NYou're now a solid '%A%block%%N' block!", MemoryStorage.messages), normal_ingameNoMoreSolid("%TAG%NYou're no longer a solid block!", MemoryStorage.messages), normal_shopBoughtItem(
"%TAG%NYou've bought the '%A%itemname%%N' item!", MemoryStorage.messages), normal_shopChoosenBlock("%TAG%NYou've choosen to be a(n) '%A%block%%N' block!", MemoryStorage.messages), normal_shopChoosenSeeker(
"%TAG%NYou've choosen to be a %Aseeker%N!", MemoryStorage.messages), normal_shopChoosenHiders("%TAG%NYou've choosen to be a %Ahider%N!", MemoryStorage.messages), normal_ingameBlocksLeft("%TAG%NRemaining blocks: %A%1%%N", MemoryStorage.messages),
warning_lobbyNeedAtleast("%TAG%WYou need atleast %A%1% player(s) to start the game!", MemoryStorage.messages), warning_ingameNEWSeekerChoosen(
"%TAG%WThe last seeker left and a new seeker has been choosen!", MemoryStorage.messages), warning_unableToCommand(
"%TAG%WSorry but that command is disabled in the arena.", MemoryStorage.messages), warning_ingameNoSolidPlace("%TAG%WThat's not a valid place to become solid!",
MemoryStorage.messages), warning_arenaStopped("%TAG%WThe arena has been forced to stop!", MemoryStorage.messages),
error_noPermission("%TAG%EYou don't have the permissions to do that!", MemoryStorage.messages), error_notANumber("%TAG%E'%A%1%%E' is not a number!", MemoryStorage.messages), error_commandNotEnabled(
"%TAG%EThis command has been disabled!", MemoryStorage.messages), error_commandNotFound("%TAG%ECouldn't find the command. Try %A/" + BlockHunt.pdfFile.getName()
+ " help %Efor more info.", MemoryStorage.messages), error_notEnoughArguments("%TAG%EYou're missing arguments, correct syntax: %A%syntax%", MemoryStorage.messages), error_libsDisguisesNotInstalled(
"%TAG%EThe plugin '%ALib's Disguises%E' is required to run this plugin! Intall it or it won't work!", MemoryStorage.messages), error_protocolLibNotInstalled(
"%TAG%EThe plugin '%AProtocolLib%E' is required to run this plugin! Intall it or it won't work!", MemoryStorage.messages), error_noArena(
"%TAG%ENo arena found with the name '%A%name%%E'.", MemoryStorage.messages), error_onlyIngame("%TAG%EThis is an only in-game command!", MemoryStorage.messages), error_joinAlreadyJoined(
"%TAG%EYou've already joined an arena!", MemoryStorage.messages), error_joinNoBlocksSet("%TAG%EThere are none blocks set for this arena. Notify the administrator.",
MemoryStorage.messages), error_joinWarpsNotSet("%TAG%EThere are no warps set for this arena. Notify the administrator.", MemoryStorage.messages), error_joinArenaIngame(
"%TAG%EThis game has already started.", MemoryStorage.messages), error_joinFull("%TAG%EUnable to join this arena. It's full!", MemoryStorage.messages), error_joinInventoryNotEmpty(
"%TAG%EYour inventory should be empty before joining!", MemoryStorage.messages), error_leaveNotInArena("%TAG%EYou're not in an arena!", MemoryStorage.messages), error_createSelectionFirst(
"%TAG%EMake a selection first. Use the wand command: %A/" + BlockHunt.pdfFile.getName() + " <wand|w>%E.", MemoryStorage.messages), error_createNotSameWorld(
"%TAG%EMake your selection points in the same world!", MemoryStorage.messages), error_setTooHighNumber("%TAG%EThat amount is too high! Max amount is: %A%max%%E.",
MemoryStorage.messages), error_setTooLowNumber("%TAG%EThat amount is too low! Minimal amount is: %A%min%%E.", MemoryStorage.messages), error_setNotABlock(
"%TAG%EThat is not a block!", MemoryStorage.messages), error_setwarpWarpNotFound("%TAG%EWarp '%A%warp%%E' is not valid!", MemoryStorage.messages), error_tokensPlayerNotOnline(
"%TAG%ENo player found with the name '%A%playername%%E'!", MemoryStorage.messages), error_tokensUnknownsetting("%TAG%E'%A%option%%E' is not a known option!", MemoryStorage.messages), error_shopNeedMoreTokens(
"%TAG%EYou need more tokens before you can buy this item.", MemoryStorage.messages), error_shopMaxSeekersReached(
"%TAG%ESorry, the maximum amount of seekers has been reached!", MemoryStorage.messages), error_shopMaxHidersReached(
"%TAG%ESorry, the maximum amount of hiders has been reached!", MemoryStorage.messages),
error_teleportFailed("%TAG%EUnable to teleport you into the arena.", MemoryStorage.messages),
error_teleportBlocked("%TAG%EYou cannot teleport while playing!", MemoryStorage.messages);
public final Object value;
public final ConfigManager config;
public final String location;
/**
* Makes an object from the list above.
*
* @param value Setting in the config file.
* @param config The config file.
*/
ConfigC(Object value, ConfigManager config) {
this.value = value;
this.config = config;
this.location = this.name().replaceAll("_", ".");
}
}

View File

@@ -0,0 +1,236 @@
package net.knarcraft.blockhunt;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaProperty;
import net.knarcraft.blockhunt.manager.MessageManager;
import net.knarcraft.blockhunt.manager.PermissionsManager;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
public class InventoryHandler {
public static void openPanel(Player player, String arenaname) {
Arena arena = null;
for (Arena arena2 : MemoryStorage.arenaList) {
if (arena2.arenaName.equalsIgnoreCase(arenaname)) {
arena = arena2;
}
}
if (arena != null) {
String shorten = arena.arenaName;
arenaname = arena.arenaName;
if (shorten.length() > 6) {
shorten = shorten.substring(0, 6);
}
Inventory panel = Bukkit.createInventory(null, 54, MessageManager.replaceAll("\u00A7r%N&lBlockHunt Arena: %A" + shorten));
ItemStack arenaNameNote = new ItemStack(Material.PAPER, 1);
ItemMeta arenaNameNote_IM = arenaNameNote.getItemMeta();
arenaNameNote_IM.setDisplayName(MessageManager.replaceAll("%NBlockHunt arena: %A" + arena.arenaName));
arenaNameNote.setItemMeta(arenaNameNote_IM);
panel.setItem(0, arenaNameNote);
//
ItemStack maxPlayers_UP = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack maxPlayers = new ItemStack(Material.BEDROCK, arena.maxPlayers);
ItemStack maxPlayers_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack minPlayers_UP = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack minPlayers = new ItemStack(Material.BEDROCK, arena.minPlayers);
ItemStack minPlayers_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack amountSeekersOnStart_UP = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack amountSeekersOnStart = new ItemStack(Material.BEDROCK, arena.amountSeekersOnStart);
ItemStack amountSeekersOnStart_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack timeInLobbyUntilStart_UP = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack timeInLobbyUntilStart = new ItemStack(Material.BEDROCK, arena.timeInLobbyUntilStart);
ItemStack timeInLobbyUntilStart_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack waitingTimeSeeker_UP = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack waitingTimeSeeker = new ItemStack(Material.BEDROCK, arena.waitingTimeSeeker);
ItemStack waitingTimeSeeker_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack gameTime_UP = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack gameTime = new ItemStack(Material.BEDROCK, arena.gameTime);
ItemStack gameTime_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack disguiseBlocks_NOTE = new ItemStack(Material.BOOK, 1);
ItemMeta disguiseBlocks_NOTE_IM = disguiseBlocks_NOTE.getItemMeta();
disguiseBlocks_NOTE_IM.setDisplayName(MessageManager.replaceAll("%NSet the %AdisguiseBlocks%N."));
disguiseBlocks_NOTE.setItemMeta(disguiseBlocks_NOTE_IM);
panel.setItem(36, disguiseBlocks_NOTE);
ItemStack blockAnnouncerTime_UP = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack blockAnnouncerTime = new ItemStack(Material.BEDROCK, arena.blockAnnouncerTime);
ItemStack blockAnnouncerTime_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack timeUntilHidersSword_UP = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack timeUntilHidersSword = new ItemStack(Material.BEDROCK, arena.timeUntilHidersSword);
ItemStack timeUntilHidersSword_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack hidersTokenWin_UP = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack hidersTokenWin = new ItemStack(Material.BEDROCK, arena.hidersTokenWin);
ItemStack hidersTokenWin_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack seekersTokenWin_UP = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack seekersTokenWin = new ItemStack(Material.BEDROCK, arena.seekersTokenWin);
ItemStack seekersTokenWin_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack killTokens_UP = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack killTokens = new ItemStack(Material.BEDROCK, arena.killTokens);
ItemStack killTokens_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
//
updownButton(panel, arena, ArenaProperty.MAX_PLAYERS, "maxPlayers", "1", maxPlayers_UP, maxPlayers, maxPlayers_DOWN, 1, 10, 19);
updownButton(panel, arena, ArenaProperty.MIN_PLAYERS, "minPlayers", "1", minPlayers_UP, minPlayers, minPlayers_DOWN, 2, 11, 20);
updownButton(panel, arena, ArenaProperty.AMOUNT_SEEKERS_ON_START, "amountSeekersOnStart", "1", amountSeekersOnStart_UP, amountSeekersOnStart,
amountSeekersOnStart_DOWN, 4, 13, 22);
updownButton(panel, arena, ArenaProperty.TIME_IN_LOBBY_UNTIL_START, "timeInLobbyUntilStart", "1 %Nsecond", timeInLobbyUntilStart_UP, timeInLobbyUntilStart,
timeInLobbyUntilStart_DOWN, 6, 15, 24);
updownButton(panel, arena, ArenaProperty.WAITING_TIME_SEEKER, "waitingTimeSeeker", "1 %Nsecond", waitingTimeSeeker_UP, waitingTimeSeeker, waitingTimeSeeker_DOWN,
7, 16, 25);
updownButton(panel, arena, ArenaProperty.GAME_TIME, "gameTime", "1 %Nsecond", gameTime_UP, gameTime, gameTime_DOWN, 8, 17, 26);
updownButton(panel, arena, ArenaProperty.BLOCK_ANNOUNCER_TIME, "blockAnnouncerTime", "5 %Nseconds", blockAnnouncerTime_UP, blockAnnouncerTime,
blockAnnouncerTime_DOWN, 29, 38, 47);
updownButton(panel, arena, ArenaProperty.TIME_UNTIL_HIDERS_SWORD, "timeUntilHidersSword", "1 %Nsecond", timeUntilHidersSword_UP, timeUntilHidersSword,
timeUntilHidersSword_DOWN, 30, 39, 48);
updownButton(panel, arena, ArenaProperty.HIDERS_TOKEN_WIN, "hidersTokenWin", "1 %Ntoken", hidersTokenWin_UP, hidersTokenWin, hidersTokenWin_DOWN, 32, 41, 50);
updownButton(panel, arena, ArenaProperty.SEEKERS_TOKEN_WIN, "seekersTokenWin", "1 %Ntoken", seekersTokenWin_UP, seekersTokenWin, seekersTokenWin_DOWN, 33, 42, 51);
updownButton(panel, arena, ArenaProperty.KILL_TOKENS, "killTokens", "1 %Ntoken", killTokens_UP, killTokens, killTokens_DOWN, 34, 43, 52);
player.openInventory(panel);
} else {
MessageManager.sendFMessage(player, ConfigC.error_noArena, "name-" + arenaname);
}
}
public static void updownButton(Inventory panel, Arena arena, ArenaProperty at, String option, String addremove, ItemStack UP, ItemStack BUTTON, ItemStack DOWN, int up,
int button, int down) {
ItemMeta UP_IM = UP.getItemMeta();
UP_IM.setDisplayName(MessageManager.replaceAll((String) MemoryStorage.messages.get(ConfigC.button_add), "1-" + addremove, "2-" + option));
UP.setItemMeta(UP_IM);
int setting = switch (at) {
case MAX_PLAYERS -> arena.maxPlayers;
case MIN_PLAYERS -> arena.minPlayers;
case AMOUNT_SEEKERS_ON_START -> arena.amountSeekersOnStart;
case TIME_IN_LOBBY_UNTIL_START -> arena.timeInLobbyUntilStart;
case WAITING_TIME_SEEKER -> arena.waitingTimeSeeker;
case GAME_TIME -> arena.gameTime;
case TIME_UNTIL_HIDERS_SWORD -> arena.timeUntilHidersSword;
case BLOCK_ANNOUNCER_TIME -> arena.blockAnnouncerTime;
case HIDERS_TOKEN_WIN -> arena.hidersTokenWin;
case SEEKERS_TOKEN_WIN -> arena.seekersTokenWin;
case KILL_TOKENS -> arena.killTokens;
default -> 0;
};
ItemMeta BUTTON_IM = BUTTON.getItemMeta();
BUTTON_IM.setDisplayName(MessageManager.replaceAll((String) MemoryStorage.messages.get(ConfigC.button_setting), "1-" + option, "2-" + setting));
BUTTON.setItemMeta(BUTTON_IM);
ItemMeta DOWN_IM = DOWN.getItemMeta();
DOWN_IM.setDisplayName(MessageManager.replaceAll((String) MemoryStorage.messages.get(ConfigC.button_remove), "1-" + addremove, "2-" + option));
DOWN.setItemMeta(DOWN_IM);
panel.setItem(up, UP);
panel.setItem(button, BUTTON);
panel.setItem(down, DOWN);
}
public static void openDisguiseBlocks(Arena arena, Player player) {
String arenaname = arena.arenaName;
Inventory panel = Bukkit.createInventory(null, 36, MessageManager.replaceAll("%N&lDisguiseBlocks"));
ItemStack arenaNameNote = new ItemStack(Material.PAPER, 1);
ItemMeta arenaNameNote_IM = arenaNameNote.getItemMeta();
arenaNameNote_IM.setDisplayName(MessageManager.replaceAll("%NDisguiseBlocks of arena: %A" + arenaname));
ArrayList<String> lores = new ArrayList<>();
lores.add(MessageManager.replaceAll("%NPlace the DisguiseBlocks inside this inventory."));
arenaNameNote_IM.setLore(lores);
arenaNameNote.setItemMeta(arenaNameNote_IM);
panel.setItem(0, arenaNameNote);
if (arena.disguiseBlocks != null) {
for (int i = arena.disguiseBlocks.size(); i > 0; i = i - 1) {
panel.setItem(i, arena.disguiseBlocks.get(i - 1));
}
}
player.openInventory(panel);
}
public static void openShop(Player player) {
Inventory shop = Bukkit.createInventory(null, 9, MessageManager.replaceAll("\u00A7r" + MemoryStorage.config.get(ConfigC.shop_title)));
if (MemoryStorage.shop.getFile().get(player.getName() + ".tokens") == null) {
MemoryStorage.shop.getFile().set(player.getName() + ".tokens", 0);
MemoryStorage.shop.save();
}
int playerTokens = MemoryStorage.shop.getFile().getInt(player.getName() + ".tokens");
List<String> lores = new ArrayList<>();
List<String> lores2 = new ArrayList<>();
ItemStack shopTokens = new ItemStack(Material.EMERALD, 1);
ItemMeta shopTokens_IM = shopTokens.getItemMeta();
shopTokens_IM.setDisplayName(MessageManager.replaceAll("%N&lTokens: %A" + playerTokens));
shopTokens.setItemMeta(shopTokens_IM);
ItemStack shopBlockChooser = new ItemStack(Material.getMaterial((String) MemoryStorage.config.get(ConfigC.shop_blockChooserv1IDname)), 1);
ItemMeta shopBlockChooser_IM = shopBlockChooser.getItemMeta();
shopBlockChooser_IM.setDisplayName(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.shop_blockChooserv1Name)));
lores = MemoryStorage.config.getFile().getStringList(ConfigC.shop_blockChooserv1Description.location);
lores2 = new ArrayList<>();
for (String lore : lores) {
lores2.add(MessageManager.replaceAll(lore));
}
lores2.add(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.shop_price), "amount-" + MemoryStorage.config.get(ConfigC.shop_blockChooserv1Price)));
shopBlockChooser_IM.setLore(lores2);
shopBlockChooser.setItemMeta(shopBlockChooser_IM);
ItemStack shopBlockHuntPass = new ItemStack(Material.getMaterial((String) MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2IDName)), 1);
ItemMeta shopBlockHuntPass_IM = shopBlockHuntPass.getItemMeta();
shopBlockHuntPass_IM.setDisplayName(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Name)));
lores = MemoryStorage.config.getFile().getStringList(ConfigC.shop_BlockHuntPassv2Description.location);
lores2 = new ArrayList<>();
for (String lore : lores) {
lores2.add(MessageManager.replaceAll(lore));
}
lores2.add(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.shop_price), "amount-" + MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Price)));
shopBlockHuntPass_IM.setLore(lores2);
shopBlockHuntPass.setItemMeta(shopBlockHuntPass_IM);
shop.setItem(0, shopTokens);
if ((Boolean) MemoryStorage.config.get(ConfigC.shop_blockChooserv1Enabled)
&& (MemoryStorage.shop.getFile().get(player.getName() + ".blockchooser") == null && !PermissionsManager.hasPerm(player, PermissionsC.Permissions.shopblockchooser, false))) {
shop.setItem(1, shopBlockChooser);
}
if ((Boolean) MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Enabled)) {
shop.setItem(2, shopBlockHuntPass);
}
player.openInventory(shop);
}
}

View File

@@ -0,0 +1,65 @@
package net.knarcraft.blockhunt;
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.manager.CommandManager;
import net.knarcraft.blockhunt.manager.ConfigManager;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class MemoryStorage {
/*
* Standard stuff.
*/
public static final ArrayList<String> newFiles = new ArrayList<>();
public static final ArrayList<CommandManager> commands = new ArrayList<>();
/*
* If you want another file to be created. Copy and paste this line.
*/
public static final ConfigManager config = new ConfigManager("config");
public static final ConfigManager messages = new ConfigManager("messages");
public static final ConfigManager arenas = new ConfigManager("arenas");
public static final ConfigManager signs = new ConfigManager("signs");
public static final ConfigManager shop = new ConfigManager("shop");
/*
* Add any variable you need in different classes here:
*/
public static final HashMap<Player, Location> pos1 = new HashMap<>();
public static final HashMap<Player, Location> pos2 = new HashMap<>();
public static final ArrayList<Arena> arenaList = new ArrayList<>();
public static final Random random = new Random();
public static final HashMap<Player, Integer> seekertime = new HashMap<>();
public static final HashMap<Player, PlayerArenaData> pData = new HashMap<>();
public static final HashMap<Player, ItemStack> choosenBlock = new HashMap<>();
public static final HashMap<Player, Boolean> choosenSeeker = new HashMap<>();
public static final HashMap<Player, ItemStack> pBlock = new HashMap<>();
public static final HashMap<Player, Location> moveLoc = new HashMap<>();
public static final HashMap<Player, Location> hiddenLoc = new HashMap<>();
public static final HashMap<Player, Boolean> hiddenLocWater = new HashMap<>();
public static final Map<Player, Location> teleportLoc = new HashMap<>();
}

View File

@@ -0,0 +1,37 @@
package net.knarcraft.blockhunt;
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
public class PermissionsC {
public static final String main = BlockHunt.pdfFile.getName().toLowerCase() + ".";
public enum PType {
ALL, PLAYER, MODERATOR, ADMIN, OP
}
public enum Permissions {
info("info", PType.ALL), help("help", PType.ALL), reload("reload", PType.ADMIN), join("join", PType.PLAYER), joinfull("joinfull", PType.MODERATOR), joinsign(
"joinsign", PType.PLAYER), leave("leave", PType.PLAYER), list("list", PType.PLAYER), shop("shop", PType.PLAYER), shopblockchooser("shop.blockchooser",
PType.ADMIN), start("start", PType.MODERATOR), create("create", PType.ADMIN), set("set", PType.MODERATOR), setwarp("setwarp", PType.MODERATOR), signcreate(
"signcreate", PType.MODERATOR), remove("remove", PType.ADMIN), tokens("tokens", PType.ADMIN), allcommands("allcommands", PType.OP);
public final String perm;
public final PType type;
Permissions(String perm, PType type) {
this.perm = perm;
this.type = type;
}
}
}

View File

@@ -0,0 +1,35 @@
package net.knarcraft.blockhunt;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import java.util.Collection;
public class PlayerArenaData {
public final GameMode pGameMode;
public final ItemStack[] pInventory;
public final ItemStack[] pArmor;
public final Float pEXP;
public final Integer pEXPL;
public final Double pMaxHealth;
public final Double pHealth;
public final Integer pFood;
public final Collection<PotionEffect> pPotionEffects;
public final boolean pFlying;
public PlayerArenaData(Location pLocation, GameMode pGameMode, ItemStack[] pInventory, ItemStack[] pArmor, Float pEXP, Integer pEXPL, Double pMaxHealth, Double pHealth, Integer pFood,
Collection<PotionEffect> pPotionEffects, boolean pFlying) {
this.pGameMode = pGameMode;
this.pInventory = pInventory;
this.pArmor = pArmor;
this.pEXP = pEXP;
this.pEXPL = pEXPL;
this.pMaxHealth = pMaxHealth;
this.pHealth = pHealth;
this.pFood = pFood;
this.pPotionEffects = pPotionEffects;
this.pFlying = pFlying;
}
}

View File

@@ -0,0 +1,11 @@
package net.knarcraft.blockhunt;
import org.bukkit.Location;
import org.bukkit.entity.Player;
public class PlayerHandler {
public static boolean teleport(Player player, Location location) {
MemoryStorage.teleportLoc.put(player, location);
return player.teleport(location);
}
}

View File

@@ -0,0 +1,84 @@
package net.knarcraft.blockhunt;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaState;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Score;
import org.bukkit.scoreboard.Scoreboard;
public class ScoreboardHandler {
public static void createScoreboard(Arena arena) {
if ((Boolean) MemoryStorage.config.get(ConfigC.scoreboard_enabled)) {
Scoreboard board = arena.scoreboard;
if (board.getObjective(arena.arenaName) != null) {
updateScoreboard(arena);
return;
}
String displayName = BlockHunt.cutString(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.scoreboard_title)), 32);
Objective object = board.registerNewObjective(BlockHunt.cutString(arena.arenaName, 32), "dummy", displayName);
object.setDisplaySlot(DisplaySlot.SIDEBAR);
String temp = BlockHunt.cutString(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.scoreboard_timeleft)), 32);
Score timeleft = object.getScore(temp);
timeleft.setScore(arena.timer);
temp = BlockHunt.cutString(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.scoreboard_seekers)), 32);
Score seekers = object.getScore(temp);
seekers.setScore(arena.seekers.size());
temp = BlockHunt.cutString(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.scoreboard_hiders)), 32);
Score hiders = object.getScore(temp);
hiders.setScore(arena.playersInArena.size() - arena.seekers.size());
if (arena.gameState == ArenaState.IN_GAME) {
for (Player pl : arena.playersInArena) {
pl.setScoreboard(board);
}
} else {
for (Player pl : arena.playersInArena) {
pl.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
}
}
}
}
public static void updateScoreboard(Arena arena) {
if ((Boolean) MemoryStorage.config.get(ConfigC.scoreboard_enabled)) {
Scoreboard board = arena.scoreboard;
Objective object = board.getObjective(DisplaySlot.SIDEBAR);
object.setDisplayName(BlockHunt.cutString(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.scoreboard_title)), 32));
String temp = BlockHunt.cutString(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.scoreboard_timeleft)), 32);
Score timeleft = object.getScore(temp);
timeleft.setScore(arena.timer);
temp = BlockHunt.cutString(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.scoreboard_seekers)), 32);
Score seekers = object.getScore(temp);
seekers.setScore(arena.seekers.size());
temp = BlockHunt.cutString(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.scoreboard_hiders)), 32);
Score hiders = object.getScore(temp);
hiders.setScore(arena.playersInArena.size() - arena.seekers.size());
if (arena.gameState == ArenaState.IN_GAME) {
for (Player pl : arena.playersInArena) {
pl.setScoreboard(board);
}
} else {
for (Player pl : arena.playersInArena) {
pl.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
}
}
}
}
public static void removeScoreboard(Player player) {
player.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
}
}

View File

@@ -0,0 +1,142 @@
package net.knarcraft.blockhunt;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaState;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.Location;
import org.bukkit.block.Sign;
import org.bukkit.event.block.SignChangeEvent;
import java.util.List;
public class SignsHandler {
public static void createSign(SignChangeEvent event, String[] lines, Location location) {
if (lines[1] != null) {
if (lines[1].equalsIgnoreCase("leave")) {
saveSign("leave", location);
} else if (lines[1].equalsIgnoreCase("shop")) {
saveSign("shop", location);
} else {
boolean saved = false;
for (Arena arena : MemoryStorage.arenaList) {
if (lines[1].equals(arena.arenaName)) {
saveSign(arena.arenaName, location);
saved = true;
}
}
if (!saved) {
MessageManager.sendFMessage(event.getPlayer(), ConfigC.error_noArena, "name-" + lines[1]);
}
}
}
}
private static void saveSign(String key, Location location) {
boolean saved = false;
int number = 1;
while (!saved) {
if (MemoryStorage.signs.getFile().get(key + "_" + number) == null) {
MemoryStorage.signs.getFile().set(key + "_" + number + ".arenaName", key);
MemoryStorage.signs.getFile().set(key + "_" + number + ".location", location);
MemoryStorage.signs.save();
saved = true;
} else {
number = number + 1;
}
}
}
public static void removeSign(Location location) {
//TODO: This seems really inefficient
for (String sign : MemoryStorage.signs.getFile().getKeys(false)) {
Location loc = (Location) MemoryStorage.signs.getFile().get(sign + ".location");
if (loc.equals(location)) {
MemoryStorage.signs.getFile().set(sign, null);
MemoryStorage.signs.save();
}
}
}
public static boolean isSign(Location location) {
for (String sign : MemoryStorage.signs.getFile().getKeys(false)) {
Location loc = (Location) MemoryStorage.signs.getFile().get(sign + ".location");
if (loc == null) {
throw new IllegalArgumentException("Sign location could not be loaded.");
}
if (loc.equals(location)) {
return true;
}
}
return false;
}
public static void updateSigns() {
//TODO: Instead of this awful method of signs updating every second for no reason, it would be preferable for
// sign changes to be directly triggered when its contents changes
MemoryStorage.signs.load(); //TODO: This loads from disk once every second which seems unnecessary
for (String sign : MemoryStorage.signs.getFile().getKeys(false)) {
Location location = (Location) MemoryStorage.signs.getFile().get(sign + ".location");
if (location == null) {
throw new IllegalArgumentException("Sign location could not be loaded.");
}
if (location.getWorld() == null) {
throw new IllegalArgumentException("Sign world is null!");
}
// check if that area is actually loaded. If not move on.
if (!location.getWorld().isChunkLoaded(location.getBlockX() >> 4, location.getBlockZ() >> 4)) {
continue;
}
if (location.getBlock().getState() instanceof Sign signBlock) {
String[] lines = signBlock.getLines();
if (sign.contains("leave")) {
drawSign(MemoryStorage.config.getFile().getStringList(ConfigC.sign_LEAVE.location), signBlock);
} else if (sign.contains("shop")) {
drawSign(MemoryStorage.config.getFile().getStringList(ConfigC.sign_SHOP.location), signBlock);
} else {
drawArenaSign(lines[1], signBlock);
}
} else {
removeSign(location);
}
}
}
private static void drawArenaSign(String arenaName, Sign signBlock) {
for (Arena arena : MemoryStorage.arenaList) {
//Find the correct arena
if (!arenaName.endsWith(arena.arenaName)) {
continue;
}
if (arena.gameState.equals(ArenaState.WAITING)) {
drawSign(MemoryStorage.config.getFile().getStringList(ConfigC.sign_WAITING.location), signBlock, arena);
} else if (arena.gameState.equals(ArenaState.STARTING)) {
drawSign(MemoryStorage.config.getFile().getStringList(ConfigC.sign_STARTING.location), signBlock, arena);
} else if (arena.gameState.equals(ArenaState.IN_GAME)) {
drawSign(MemoryStorage.config.getFile().getStringList(ConfigC.sign_INGAME.location), signBlock, arena);
}
}
}
private static void drawSign(List<String> signLines, Sign signBlock, Arena arena) {
drawSign(signLines, signBlock, "arenaname-" + arena.arenaName, "players-" + arena.playersInArena.size(),
"maxplayers-" + arena.maxPlayers, "timeleft-" + arena.timer);
}
private static void drawSign(List<String> signLines, Sign signBlock, String... variables) {
int lineCount = 0;
for (String line : signLines) {
if (lineCount <= 3) {
signBlock.setLine(lineCount, MessageManager.replaceAll(line, variables));
}
lineCount = lineCount + 1;
}
signBlock.update();
}
}

View File

@@ -0,0 +1,63 @@
package net.knarcraft.blockhunt;
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import me.libraryaddict.disguise.disguisetypes.MiscDisguise;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class SolidBlockHandler {
public static void makePlayerUnsolid(Player player) {
ItemStack block = player.getInventory().getItem(8);
if (block == null) {
player.sendMessage(ChatColor.RED + "Unable to hide you because your inventory block is missing!");
System.out.println("[BlockHunt] ERROR: " + player.getName() + " could not be hidden because their inventory block was missing!");
return;
}
Block pBlock = player.getLocation().getBlock();
if (MemoryStorage.hiddenLoc.get(player) != null) {
pBlock = MemoryStorage.hiddenLoc.get(player).getBlock();
}
block.setAmount(5);
for (Player pl : Bukkit.getOnlinePlayers()) {
if (pl.equals(player)) {
continue;
}
if (MemoryStorage.hiddenLocWater.get(player) != null) {
if (MemoryStorage.hiddenLocWater.get(player)) {
pl.sendBlockChange(pBlock.getLocation(), Bukkit.createBlockData(Material.WATER));
} else {
pl.sendBlockChange(pBlock.getLocation(), Bukkit.createBlockData(Material.AIR));
}
} else {
pl.sendBlockChange(pBlock.getLocation(), Bukkit.createBlockData(Material.AIR));
}
MemoryStorage.hiddenLocWater.remove(player);
}
player.playSound(player.getLocation(), Sound.ENTITY_BAT_HURT, 1, 1);
block.removeEnchantment(Enchantment.DURABILITY);
for (Player playerShow : Bukkit.getOnlinePlayers()) {
playerShow.showPlayer(BlockHunt.plugin, player);
}
MiscDisguise disguise = new MiscDisguise(DisguiseType.FALLING_BLOCK, block.getType());
DisguiseAPI.disguiseToAll(player, disguise);
MessageManager.sendFMessage(player, ConfigC.normal_ingameNoMoreSolid);
}
}

View File

@@ -0,0 +1,171 @@
package net.knarcraft.blockhunt.arena;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.SerializableAs;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SerializableAs("BlockHuntArena")
public class Arena implements ConfigurationSerializable {
public final String arenaName;
public final Location pos1;
public final Location pos2;
public int maxPlayers;
public int minPlayers;
public int amountSeekersOnStart;
public int timeInLobbyUntilStart;
public int waitingTimeSeeker;
public int gameTime;
public int timeUntilHidersSword;
public int blockAnnouncerTime;
public final boolean seekersCanHurtSeekers;
public final boolean hidersCanHurtSeekers;
public final boolean hidersCanHurtHiders;
public final boolean seekersTakeFallDamage;
public final boolean hidersTakeFallDamage;
public List<ItemStack> disguiseBlocks;
public Location lobbyWarp;
public Location hidersWarp;
public Location seekersWarp;
public Location spawnWarp;
public final List<String> seekersWinCommands;
public final List<String> hidersWinCommands;
public final List<String> allowedCommands;
public int seekersTokenWin;
public int hidersTokenWin;
public int killTokens;
public final List<Player> playersInArena;
public ArenaState gameState;
public int timer;
public final List<Player> seekers;
public final Scoreboard scoreboard;
public Arena(String arenaName, Location pos1, Location pos2, int maxPlayers, int minPlayers, int amountSeekersOnStart,
int timeInLobbyUntilStart, int waitingTimeSeeker, int gameTime, int timeUntilHidersSword,
int blockAnnouncerTime, boolean seekersCanHurtSeekers, boolean hidersCanHurtSeekers,
boolean hidersCanHurtHiders, boolean seekersTakeFallDamage, boolean hidersTakeFallDamage,
List<ItemStack> disguiseBlocks, Location lobbyWarp, Location hidersWarp, Location seekersWarp,
Location spawnWarp, List<String> seekersWinCommands, List<String> hidersWinCommands,
List<String> allowedCommands, int seekersTokenWin, int hidersTokenWin, int killTokens,
List<Player> playersInArena, ArenaState gameState, int timer, List<Player> seekers,
Scoreboard scoreboard) {
this.arenaName = arenaName;
this.pos1 = pos1;
this.pos2 = pos2;
this.maxPlayers = maxPlayers;
this.minPlayers = minPlayers;
this.amountSeekersOnStart = amountSeekersOnStart;
this.timeInLobbyUntilStart = timeInLobbyUntilStart;
this.waitingTimeSeeker = waitingTimeSeeker;
this.gameTime = gameTime;
this.timeUntilHidersSword = timeUntilHidersSword;
this.blockAnnouncerTime = blockAnnouncerTime;
this.seekersCanHurtSeekers = seekersCanHurtSeekers;
this.hidersCanHurtHiders = hidersCanHurtHiders;
this.hidersCanHurtSeekers = hidersCanHurtSeekers;
this.seekersTakeFallDamage = seekersTakeFallDamage;
this.hidersTakeFallDamage = hidersTakeFallDamage;
this.disguiseBlocks = disguiseBlocks;
this.lobbyWarp = lobbyWarp;
this.hidersWarp = hidersWarp;
this.seekersWarp = seekersWarp;
this.spawnWarp = spawnWarp;
this.seekersWinCommands = seekersWinCommands;
this.hidersWinCommands = hidersWinCommands;
this.allowedCommands = allowedCommands;
this.seekersTokenWin = seekersTokenWin;
this.hidersTokenWin = hidersTokenWin;
this.killTokens = killTokens;
this.playersInArena = playersInArena;
this.gameState = gameState;
this.timer = timer;
this.seekers = seekers;
this.scoreboard = scoreboard;
}
@Override
public @NotNull Map<String, Object> serialize() {
Map<String, Object> map = new HashMap<>();
map.put("arenaName", arenaName);
map.put("pos1", pos1);
map.put("pos2", pos2);
map.put("maxPlayers", maxPlayers);
map.put("minPlayers", minPlayers);
map.put("amountSeekersOnStart", amountSeekersOnStart);
map.put("timeInLobbyUntilStart", timeInLobbyUntilStart);
map.put("waitingTimeSeeker", waitingTimeSeeker);
map.put("gameTime", gameTime);
map.put("timeUntilHidersSword", timeUntilHidersSword);
map.put("blockAnnouncerTime", blockAnnouncerTime);
map.put("seekersCanHurtSeekers", seekersCanHurtSeekers);
map.put("hidersCanHurtSeekers", hidersCanHurtSeekers);
map.put("hidersCanHurtHiders", hidersCanHurtHiders);
map.put("seekersTakeFallDamage", seekersTakeFallDamage);
map.put("hidersTakeFallDamage", hidersTakeFallDamage);
map.put("disguiseBlocks", disguiseBlocks);
map.put("lobbyWarp", lobbyWarp);
map.put("hidersWarp", hidersWarp);
map.put("seekersWarp", seekersWarp);
map.put("spawnWarp", spawnWarp);
map.put("seekersWinCommands", seekersWinCommands);
map.put("hidersWinCommands", hidersWinCommands);
map.put("allowedCommands", allowedCommands);
map.put("seekersTokenWin", seekersTokenWin);
map.put("hidersTokenWin", hidersTokenWin);
map.put("killTokens", killTokens);
return map;
}
@SuppressWarnings({"unchecked", "unused"})
public static Arena deserialize(Map<String, Object> map) {
Location loc = new Location(Bukkit.getWorld("world"), 0, 0, 0, 0, 0);
ScoreboardManager scoreboardManager = Bukkit.getScoreboardManager();
Scoreboard scoreboard = null;
if (scoreboardManager != null) {
scoreboard = scoreboardManager.getNewScoreboard();
}
return new Arena(
(String) map.getOrDefault("arenaName", "UNKNOWN_NAME"),
(Location) map.getOrDefault("pos1", loc),
(Location) map.getOrDefault("pos2", loc),
(Integer) map.getOrDefault("maxPlayers", 12),
(Integer) map.getOrDefault("minPlayers", 3),
(Integer) map.getOrDefault("amountSeekersOnStart", 1),
(Integer) map.getOrDefault("timeInLobbyUntilStart", 90),
(Integer) map.getOrDefault("waitingTimeSeeker", 20),
(Integer) map.getOrDefault("gameTime", 200),
(Integer) map.getOrDefault("timeUntilHidersSword", 30),
(Integer) map.getOrDefault("blockAnnouncerTime", 45),
(Boolean) map.getOrDefault("seekersCanHurtSeekers", false),
(Boolean) map.getOrDefault("hidersCanHurtSeekers", true),
(Boolean) map.getOrDefault("hidersCanHurtHiders", false),
(Boolean) map.getOrDefault("seekersTakeFallDamage", false),
(Boolean) map.getOrDefault("hidersTakeFallDamage", false),
(List<ItemStack>) map.getOrDefault("disguiseBlocks", new ArrayList<ItemStack>()),
(Location) map.getOrDefault("lobbyWarp", loc),
(Location) map.getOrDefault("hidersWarp", loc),
(Location) map.getOrDefault("seekersWarp", loc),
(Location) map.getOrDefault("spawnWarp", loc),
(List<String>) map.getOrDefault("seekersWinCommands", new ArrayList<String>()),
(List<String>) map.getOrDefault("hidersWinCommands", new ArrayList<String>()),
(List<String>) map.getOrDefault("allowedCommands", new ArrayList<String>()),
(Integer) map.getOrDefault("seekersTokenWin", 10),
(Integer) map.getOrDefault("hidersTokenWin", 50),
(Integer) map.getOrDefault("killTokens", 8),
new ArrayList<>(), ArenaState.WAITING, 0, new ArrayList<>(), scoreboard
);
}
}

View File

@@ -0,0 +1,468 @@
package net.knarcraft.blockhunt.arena;
import me.libraryaddict.disguise.DisguiseAPI;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.PermissionsC;
import net.knarcraft.blockhunt.PlayerArenaData;
import net.knarcraft.blockhunt.PlayerHandler;
import net.knarcraft.blockhunt.ScoreboardHandler;
import net.knarcraft.blockhunt.SignsHandler;
import net.knarcraft.blockhunt.event.EndArenaEvent;
import net.knarcraft.blockhunt.event.JoinArenaEvent;
import net.knarcraft.blockhunt.event.LeaveArenaEvent;
import net.knarcraft.blockhunt.manager.MessageManager;
import net.knarcraft.blockhunt.manager.PermissionsManager;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.attribute.Attribute;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffect;
import java.util.ArrayList;
import java.util.List;
public class ArenaHandler {
public static void loadArenas() {
MemoryStorage.arenaList.clear();
for (String arenaName : MemoryStorage.arenas.getFile().getKeys(false)) {
MemoryStorage.arenaList.add((Arena) MemoryStorage.arenas.getFile().get(arenaName));
}
for (Arena arena : MemoryStorage.arenaList) {
ScoreboardHandler.createScoreboard(arena);
}
}
public static void sendMessage(Arena arena, String message, String... vars) {
for (Player player : arena.playersInArena) {
String pMessage = message.replaceAll("%player%", player.getDisplayName());
player.sendMessage(MessageManager.replaceAll(pMessage, vars));
}
}
public static void sendFMessage(Arena arena, ConfigC location, String... vars) {
for (Player player : arena.playersInArena) {
String pMessage = location.config.getFile().get(location.location).toString().replaceAll("%player%", player.getDisplayName());
player.sendMessage(MessageManager.replaceAll(pMessage, vars));
}
}
public static void playerJoinArena(Player player, String arenaName) {
boolean found = false;
boolean alreadyJoined = false;
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena != null && arena.playersInArena.contains(player)) {
alreadyJoined = true;
break;
}
}
if (!alreadyJoined) {
for (Arena arena : MemoryStorage.arenaList) {
if (arena.arenaName.equalsIgnoreCase(arenaName)) {
found = true;
if (arena.disguiseBlocks.isEmpty()) {
MessageManager.sendFMessage(player, ConfigC.error_joinNoBlocksSet);
} else {
boolean inventoryEmpty = true;
for (ItemStack inventoryItem : player.getInventory()) {
if (inventoryItem != null) {
if (inventoryItem.getType() != Material.AIR) {
inventoryEmpty = false;
}
}
}
for (ItemStack inventoryItem : player.getInventory().getArmorContents()) {
if (inventoryItem != null) {
if (inventoryItem.getType() != Material.AIR) {
inventoryEmpty = false;
}
}
}
if ((Boolean) MemoryStorage.config.get(ConfigC.requireInventoryClearOnJoin) && !inventoryEmpty) {
MessageManager.sendFMessage(player, ConfigC.error_joinInventoryNotEmpty);
return;
}
Location zero = new Location(Bukkit.getWorld(player.getWorld().getName()), 0, 0, 0, 0, 0);
if (arena.lobbyWarp != null && arena.hidersWarp != null && arena.seekersWarp != null && arena.spawnWarp != null) {
if (!arena.lobbyWarp.equals(zero) && !arena.hidersWarp.equals(zero) && !arena.seekersWarp.equals(zero) && !arena.spawnWarp.equals(zero)) {
if (arena.gameState == ArenaState.WAITING || arena.gameState == ArenaState.STARTING) {
if (arena.playersInArena.size() >= arena.maxPlayers) {
if (!PermissionsManager.hasPerm(player, PermissionsC.Permissions.joinfull, false)) {
MessageManager.sendFMessage(player, ConfigC.error_joinFull);
return;
}
}
boolean canWarp = PlayerHandler.teleport(player, arena.lobbyWarp);
if (!canWarp) {
MessageManager.sendFMessage(player, ConfigC.error_teleportFailed);
return;
}
System.out.println("[BlockHunt] " + player.getName() + " has joined " + arenaName);
arena.playersInArena.add(player);
JoinArenaEvent event = new JoinArenaEvent(player, arena);
Bukkit.getPluginManager().callEvent(event);
PlayerArenaData pad = new PlayerArenaData(player.getLocation(), player.getGameMode(), player.getInventory().getContents(), player
.getInventory().getArmorContents(), player.getExp(), player.getLevel(), player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(), player.getHealth(), player.getFoodLevel(),
player.getActivePotionEffects(), player.getAllowFlight());
MemoryStorage.pData.put(player, pad);
player.setGameMode(GameMode.SURVIVAL);
for (PotionEffect pe : player.getActivePotionEffects()) {
player.removePotionEffect(pe.getType());
}
player.setFoodLevel(20);
player.setHealth(20);
player.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(20);
player.setLevel(arena.timer);
player.setExp(0);
player.getInventory().clear();
player.getInventory().setHelmet(new ItemStack(Material.AIR));
player.getInventory().setChestplate(new ItemStack(Material.AIR));
player.getInventory().setLeggings(new ItemStack(Material.AIR));
player.getInventory().setBoots(new ItemStack(Material.AIR));
player.setFlying(false);
player.setAllowFlight(false);
player.setWalkSpeed(0.2F);
// Fix for client not showing players after
// they join
for (Player otherPlayer : arena.playersInArena) {
if (otherPlayer.canSee(player)) {
otherPlayer.showPlayer(BlockHunt.plugin, player); // Make
}
// new
// player
// visible
// to
// others
if (player.canSee(otherPlayer)) {
player.showPlayer(BlockHunt.plugin, otherPlayer); // Make
}
// other
// players
// visible
// to
// new
// player
}
if ((Boolean) MemoryStorage.config.get(ConfigC.shop_blockChooserv1Enabled)) {
if (MemoryStorage.shop.getFile().get(player.getName() + ".blockchooser") != null
|| PermissionsManager.hasPerm(player, PermissionsC.Permissions.shopblockchooser, false)) {
ItemStack shopBlockChooser = new ItemStack(Material.getMaterial((String) MemoryStorage.config.get(ConfigC.shop_blockChooserv1IDname)), 1);
ItemMeta shopBlockChooser_IM = shopBlockChooser.getItemMeta();
shopBlockChooser_IM.setDisplayName(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.shop_blockChooserv1Name)));
List<String> loreStrings = MemoryStorage.config.getFile().getStringList(ConfigC.shop_blockChooserv1Description.location);
List<String> loreStrings2 = new ArrayList<>();
for (String lore : loreStrings) {
loreStrings2.add(MessageManager.replaceAll(lore));
}
shopBlockChooser_IM.setLore(loreStrings2);
shopBlockChooser.setItemMeta(shopBlockChooser_IM);
player.getInventory().addItem(shopBlockChooser);
}
}
if ((Boolean) MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Enabled)) {
if (MemoryStorage.shop.getFile().getInt(player.getName() + ".blockhuntpass") != 0) {
ItemStack shopBlockHuntPass = new ItemStack(Material.getMaterial((String) MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2IDName)),
1);
ItemMeta shopBlockHuntPass_IM = shopBlockHuntPass.getItemMeta();
shopBlockHuntPass_IM.setDisplayName(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Name)));
List<String> loreStrings = MemoryStorage.config.getFile().getStringList(ConfigC.shop_BlockHuntPassv2Description.location);
List<String> loreStrings2 = new ArrayList<>();
for (String lore : loreStrings) {
loreStrings2.add(MessageManager.replaceAll(lore));
}
shopBlockHuntPass_IM.setLore(loreStrings2);
shopBlockHuntPass.setItemMeta(shopBlockHuntPass_IM);
shopBlockHuntPass.setAmount(MemoryStorage.shop.getFile().getInt(player.getName() + ".blockhuntpass"));
player.getInventory().addItem(shopBlockHuntPass);
}
}
player.updateInventory();
DisguiseAPI.undisguiseToAll(player);
ArenaHandler.sendFMessage(arena, ConfigC.normal_joinJoinedArena, "playername-" + player.getName(),
"1-" + arena.playersInArena.size(), "2-" + arena.maxPlayers);
if (arena.playersInArena.size() < arena.minPlayers) {
sendFMessage(arena, ConfigC.warning_lobbyNeedAtleast, "1-" + arena.minPlayers);
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_joinArenaIngame);
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_joinWarpsNotSet);
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_joinWarpsNotSet);
}
}
}
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_joinAlreadyJoined);
return;
}
if (!found) {
MessageManager.sendFMessage(player, ConfigC.error_noArena, "name-" + arenaName);
}
SignsHandler.updateSigns();
}
public static void playerLeaveArena(Player player, boolean message, boolean cleanup) {
Arena arena = null;
for (Arena arena2 : MemoryStorage.arenaList) {
if (arena2.playersInArena != null) {
if (arena2.playersInArena.contains(player)) {
arena = arena2;
}
}
}
if (arena != null) {
System.out.println("[BlockHunt] " + player.getName() + " has left " + arena.arenaName);
LeaveArenaEvent event = new LeaveArenaEvent(player, arena);
Bukkit.getPluginManager().callEvent(event);
if (cleanup) {
arena.playersInArena.remove(player);
if (arena.seekers.contains(player)) {
arena.seekers.remove(player);
}
if (arena.playersInArena.size() < arena.minPlayers && arena.gameState.equals(ArenaState.STARTING)) {
arena.gameState = ArenaState.WAITING;
arena.timer = 0;
sendFMessage(arena, ConfigC.warning_lobbyNeedAtleast, "1-" + arena.minPlayers);
}
if (arena.playersInArena.size() <= 1 && arena.gameState == ArenaState.IN_GAME) {
if (arena.seekers.size() >= arena.playersInArena.size()) {
ArenaHandler.seekersWin(arena);
} else {
ArenaHandler.hidersWin(arena);
}
}
if (arena.seekers.size() >= arena.playersInArena.size()) {
ArenaHandler.seekersWin(arena);
}
if (arena.seekers.size() <= 0 && arena.gameState == ArenaState.IN_GAME) {
Player seeker = arena.playersInArena.get(MemoryStorage.random.nextInt(arena.playersInArena.size()));
ArenaHandler.sendFMessage(arena, ConfigC.warning_ingameNEWSeekerChoosen, "seeker-" + seeker.getName());
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameSeekerChoosen, "seeker-" + seeker.getName());
DisguiseAPI.undisguiseToAll(seeker);
for (Player pl : Bukkit.getOnlinePlayers()) {
pl.showPlayer(BlockHunt.plugin, seeker);
}
seeker.getInventory().clear();
arena.seekers.add(seeker);
PlayerHandler.teleport(seeker, arena.seekersWarp);
MemoryStorage.seekertime.put(seeker, arena.waitingTimeSeeker);
seeker.setWalkSpeed(0.3F);
// Fix for client not showing players after they join
for (Player otherPlayer : arena.playersInArena) {
if (otherPlayer.canSee(player)) {
otherPlayer.showPlayer(BlockHunt.plugin, player); // Make new player
}
// visible to others
if (player.canSee(otherPlayer)) {
player.showPlayer(BlockHunt.plugin, otherPlayer); // Make other
}
// players visible
// to new player
}
}
}
PlayerArenaData pad = new PlayerArenaData(null, null, null, null, null, null, null, null, null, null, false);
if (MemoryStorage.pData.get(player) != null) {
pad = MemoryStorage.pData.get(player);
}
player.getInventory().clear();
player.getInventory().setContents(pad.pInventory);
player.getInventory().setArmorContents(pad.pArmor);
player.updateInventory();
player.setExp(pad.pEXP);
player.setLevel(pad.pEXPL);
player.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(pad.pMaxHealth);
player.setHealth(pad.pHealth);
player.setFoodLevel(pad.pFood);
player.addPotionEffects(pad.pPotionEffects);
PlayerHandler.teleport(player, arena.spawnWarp);
player.setGameMode(pad.pGameMode);
player.setAllowFlight(pad.pFlying);
if (player.getAllowFlight()) {
player.setFlying(true);
}
player.setWalkSpeed(0.2F);
MemoryStorage.pData.remove(player);
MemoryStorage.choosenBlock.remove(player);
for (Player pl : Bukkit.getOnlinePlayers()) {
pl.showPlayer(BlockHunt.plugin, player);
if (MemoryStorage.hiddenLoc.get(player) != null) {
if (MemoryStorage.hiddenLocWater.get(player) != null) {
Block pBlock = MemoryStorage.hiddenLoc.get(player).getBlock();
if (MemoryStorage.hiddenLocWater.get(player)) {
pl.sendBlockChange(pBlock.getLocation(), Bukkit.createBlockData(Material.WATER));
} else {
pl.sendBlockChange(pBlock.getLocation(), Bukkit.createBlockData(Material.AIR));
}
}
}
DisguiseAPI.undisguiseToAll(player);
}
ScoreboardHandler.removeScoreboard(player);
MessageManager.sendFMessage(player, ConfigC.normal_leaveYouLeft);
if (message) {
ArenaHandler.sendFMessage(arena, ConfigC.normal_leaveLeftArena, "playername-" + player.getName(), "1-" + arena.playersInArena.size(), "2-"
+ arena.maxPlayers);
}
} else {
if (message) {
MessageManager.sendFMessage(player, ConfigC.error_leaveNotInArena);
}
return;
}
SignsHandler.updateSigns();
}
public static void seekersWin(Arena arena) {
String cause = "[BlockHunt] Seekers have won " + arena.arenaName;
List<Player> winners = new ArrayList<>();
List<Player> losers = new ArrayList<>();
for (Player player : arena.playersInArena) {
if (arena.seekers.contains(player)) {
winners.add(player);
if (arena.seekersWinCommands != null) {
for (String command : arena.seekersWinCommands) {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replaceAll("%player%", player.getDisplayName()));
}
if (MemoryStorage.shop.getFile().get(player.getName() + ".tokens") == null) {
MemoryStorage.shop.getFile().set(player.getName() + ".tokens", 0);
MemoryStorage.shop.save();
}
int playerTokens = MemoryStorage.shop.getFile().getInt(player.getName() + ".tokens");
MemoryStorage.shop.getFile().set(player.getName() + ".tokens", playerTokens + arena.seekersTokenWin);
MemoryStorage.shop.save();
MessageManager.sendFMessage(player, ConfigC.normal_addedToken, "amount-" + arena.seekersTokenWin);
}
} else {
losers.add(player);
}
}
EndArenaEvent event = new EndArenaEvent(winners, losers, arena);
Bukkit.getServer().getPluginManager().callEvent(event);
stopArena(arena, cause, ConfigC.normal_winSeekers);
}
public static void hidersWin(Arena arena) {
String cause = "[BlockHunt] Hiders have won " + arena.arenaName;
List<Player> winners = new ArrayList<>();
List<Player> losers = new ArrayList<>();
for (Player player : arena.playersInArena) {
if (arena.seekers.contains(player)) {
losers.add(player);
} else {
winners.add(player);
if (arena.hidersWinCommands != null) {
for (String command : arena.hidersWinCommands) {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replaceAll("%player%", player.getDisplayName()));
}
if (MemoryStorage.shop.getFile().get(player.getName() + ".tokens") == null) {
MemoryStorage.shop.getFile().set(player.getName() + ".tokens", 0);
MemoryStorage.shop.save();
}
int playerTokens = MemoryStorage.shop.getFile().getInt(player.getName() + ".tokens");
MemoryStorage.shop.getFile().set(player.getName() + ".tokens", playerTokens + arena.hidersTokenWin);
MemoryStorage.shop.save();
MessageManager.sendFMessage(player, ConfigC.normal_addedToken, "amount-" + arena.hidersTokenWin);
}
}
}
EndArenaEvent event = new EndArenaEvent(winners, losers, arena);
Bukkit.getServer().getPluginManager().callEvent(event);
stopArena(arena, cause, ConfigC.normal_winHiders);
}
public static void stopArena(Arena arena, String cause, ConfigC message) {
System.out.println(cause);
ArenaHandler.sendFMessage(arena, message);
arena.seekers.clear();
for (Player player : arena.playersInArena) {
playerLeaveArena(player, false, false);
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 1);
}
arena.gameState = ArenaState.WAITING;
arena.timer = 0;
arena.playersInArena.clear();
}
public static boolean noPlayersInArenas() {
// Check if there are any players in any arena (quick way to early exit for event handlers)
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.size() > 0) {
return false;
}
}
return true;
}
}

View File

@@ -0,0 +1,17 @@
package net.knarcraft.blockhunt.arena;
public enum ArenaProperty {
MAX_PLAYERS,
MIN_PLAYERS,
AMOUNT_SEEKERS_ON_START,
TIME_IN_LOBBY_UNTIL_START,
WAITING_TIME_SEEKER,
GAME_TIME,
TIME_UNTIL_HIDERS_SWORD,
HIDERS_TOKEN_WIN,
SEEKERS_TOKEN_WIN,
KILL_TOKENS,
BLOCK_ANNOUNCER_TIME
}

View File

@@ -0,0 +1,11 @@
package net.knarcraft.blockhunt.arena;
public enum ArenaState {
WAITING,
STARTING,
IN_GAME,
RESTARTING,
DISABLED
}

View File

@@ -0,0 +1,47 @@
package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.ScoreboardHandler;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaState;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
import java.util.ArrayList;
public class CreateCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
if (player != null) {
if (args.length <= 1) {
MessageManager.sendFMessage(player, ConfigC.error_notEnoughArguments, "syntax-" + BlockHunt.CMDCreate.usage);
} else {
if (MemoryStorage.pos1.get(player) != null && MemoryStorage.pos2.get(player) != null) {
if (MemoryStorage.pos1.get(player).getWorld().equals(MemoryStorage.pos2.get(player).getWorld())) {
Arena arena = new Arena(args[1], MemoryStorage.pos1.get(player), MemoryStorage.pos2.get(player), 12, 3, 1, 50, 20, 300, 30, 45, false, false, false, false, false, new ArrayList<>(), null, null, null,
null, new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), 10, 50, 8, new ArrayList<>(), ArenaState.WAITING,
0, new ArrayList<>(), Bukkit.getScoreboardManager().getNewScoreboard());
MemoryStorage.arenas.getFile().set(args[1], arena);
MemoryStorage.arenas.save();
MemoryStorage.signs.load();
MemoryStorage.arenaList.add(arena);
ScoreboardHandler.createScoreboard(arena);
MessageManager.sendFMessage(player, ConfigC.normal_createCreatedArena, "name-" + args[1]);
} else {
MessageManager.sendFMessage(player, ConfigC.error_createNotSameWorld);
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_createSelectionFirst);
}
}
}
return true;
}
}

View File

@@ -0,0 +1,21 @@
package net.knarcraft.blockhunt.command;
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public abstract class DefaultCommand {
public abstract boolean execute(Player player, Command cmd, String label, String[] args);
}

View File

@@ -0,0 +1,88 @@
package net.knarcraft.blockhunt.command;
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.manager.CommandManager;
import net.knarcraft.blockhunt.manager.MessageManager;
import net.knarcraft.blockhunt.manager.PermissionsManager;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class HelpCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
int amountCommands = 0;
for (CommandManager command : MemoryStorage.commands) {
if (command.usage != null) {
amountCommands = amountCommands + 1;
}
}
int maxPages = (int) Math.round(amountCommands / 3.0);
if (maxPages <= 0) {
maxPages = 1;
}
int page = 1;
if (args.length == 1) {
MessageManager.sendFMessage(player, ConfigC.chat_headerhigh, "header-" + BlockHunt.pdfFile.getName() + " %Nhelp page %A" + page + "%N/%A" + maxPages);
int i = 1;
for (CommandManager command : MemoryStorage.commands) {
if (i <= 4) {
if (command.usage != null) {
if (PermissionsManager.hasPerm(player, command.permission, false)) {
MessageManager.sendMessage(player, "%A" + command.usage + "%N - " + MemoryStorage.messages.getFile().get(command.help.location));
} else {
MessageManager.sendMessage(player, "%MemoryStorage" + command.usage + "%N - " + MemoryStorage.messages.getFile().get(command.help.location));
}
i = i + 1;
}
}
}
} else {
try {
page = Integer.parseInt(args[1]);
} catch (NumberFormatException ignored) {
}
if (maxPages < page) {
maxPages = page;
}
MessageManager.sendFMessage(player, ConfigC.chat_headerhigh, "header-" + BlockHunt.pdfFile.getName() + " %Nhelp page %A" + page + "%N/%A" + maxPages);
int i = 1;
for (CommandManager command : MemoryStorage.commands) {
if (i <= (page * 4) + 4) {
if (command.usage != null) {
if (i >= ((page - 1) * 4) + 1 && i <= ((page - 1) * 4) + 4) {
if (PermissionsManager.hasPerm(player, command.permission, false)) {
MessageManager.sendMessage(player, "%A" + command.usage + "%N - " + MemoryStorage.messages.getFile().get(command.help.location));
} else {
MessageManager.sendMessage(player, "%MemoryStorage" + command.usage + "%N - " + MemoryStorage.messages.getFile().get(command.help.location));
}
}
i = i + 1;
}
}
}
}
MessageManager.sendFMessage(player, ConfigC.chat_headerhigh, "header-&oHelp Page");
return true;
}
}

View File

@@ -0,0 +1,35 @@
package net.knarcraft.blockhunt.command;
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class InfoCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
MessageManager.sendFMessage(player, ConfigC.chat_headerhigh, "header-" + BlockHunt.pdfFile.getName());
MessageManager.sendMessage(player, "%A%name%%N made by %A%authors%%N.", "name-" + BlockHunt.pdfFile.getName(), "authors-" + BlockHunt.pdfFile.getAuthors().get(0));
MessageManager.sendMessage(player, "%NVersion: %A%version%%N.", "version-" + BlockHunt.pdfFile.getVersion());
MessageManager.sendMessage(player, "%NType %A%helpusage% %Nfor help.", "helpusage-" + BlockHunt.CMDHelp.usage);
MessageManager.sendMessage(player, "%NDev-Page: %Ahttp://dev.bukkit.org/bukkit-plugins/blockhunt/");
MessageManager.sendMessage(player, "%NDonations are welcome!");
MessageManager.sendMessage(player, "%NMade by help from some friends &c<3%N!");
MessageManager.sendFMessage(player, ConfigC.chat_headerhigh, "header-&oInfo Page");
return true;
}
}

View File

@@ -0,0 +1,25 @@
package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class JoinCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
if (player != null) {
if (args.length <= 1) {
MessageManager.sendFMessage(player, ConfigC.error_notEnoughArguments, "syntax-" + BlockHunt.CMDJoin.usage);
} else {
ArenaHandler.playerJoinArena(player, args[1]);
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_onlyIngame);
}
return true;
}
}

View File

@@ -0,0 +1,20 @@
package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class LeaveCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
if (player != null) {
ArenaHandler.playerLeaveArena(player, true, true);
} else {
MessageManager.sendFMessage(player, ConfigC.error_onlyIngame);
}
return true;
}
}

View File

@@ -0,0 +1,28 @@
package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class ListCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
MessageManager.sendFMessage(player, ConfigC.chat_headerhigh, "header-" + BlockHunt.pdfFile.getName());
if (MemoryStorage.arenaList.size() >= 1) {
MessageManager.sendMessage(player, "&7Available arena(s):");
for (Arena arena : MemoryStorage.arenaList) {
MessageManager.sendMessage(player, "%A" + arena.arenaName);
}
} else {
MessageManager.sendMessage(player, "&7&oNo arenas available...");
MessageManager.sendMessage(player, "&7&oCreate an arena first please.");
}
MessageManager.sendFMessage(player, ConfigC.chat_headerhigh, "header-&oArenas list");
return true;
}
}

View File

@@ -0,0 +1,26 @@
package net.knarcraft.blockhunt.command;
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class NotFoundCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
MessageManager.sendFMessage(player, ConfigC.error_commandNotFound);
return true;
}
}

View File

@@ -0,0 +1,44 @@
package net.knarcraft.blockhunt.command;
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import net.knarcraft.blockhunt.manager.ConfigManager;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class ReloadCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
ConfigManager.newFiles();
MemoryStorage.config.load();
MemoryStorage.messages.load();
MemoryStorage.arenas.load();
MemoryStorage.signs.load();
MemoryStorage.shop.load();
for (Arena arena : MemoryStorage.arenaList) {
String cause = "[BlockHunt] Arena " + arena.arenaName + " has been stopped";
ArenaHandler.stopArena(arena, cause, ConfigC.warning_arenaStopped);
}
ArenaHandler.loadArenas();
MessageManager.sendFMessage(player, ConfigC.normal_reloadedConfigs);
return true;
}
}

View File

@@ -0,0 +1,52 @@
package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class RemoveCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
if (player != null) {
if (args.length <= 1) {
MessageManager.sendFMessage(player, ConfigC.error_notEnoughArguments, "syntax-" + BlockHunt.CMDRemove.usage);
} else {
for (Arena arena : MemoryStorage.arenaList) {
if (args[1].equalsIgnoreCase(arena.arenaName)) {
MessageManager.sendFMessage(player, ConfigC.normal_removeRemovedArena, "name-" + args[1]);
MemoryStorage.arenas.getFile().set(args[1], null);
for (String sign : MemoryStorage.signs.getFile().getKeys(false)) {
if (MemoryStorage.signs.getFile().get(sign + ".arenaName").toString().equalsIgnoreCase(args[1])) {
Location signLoc = (Location) MemoryStorage.signs.getFile().get(sign + ".location");
signLoc.getBlock().setType(Material.AIR);
signLoc.getWorld().playEffect(signLoc, Effect.MOBSPAWNER_FLAMES, 0);
signLoc.getWorld().playSound(signLoc, Sound.ENTITY_ENDER_DRAGON_FLAP, 1, 1);
MemoryStorage.signs.getFile().set(sign, null);
}
}
MemoryStorage.arenas.save();
MemoryStorage.signs.load();
MemoryStorage.arenaList.remove(arena);
return true;
}
}
MessageManager.sendFMessage(player, ConfigC.error_noArena, "name-" + args[1]);
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_onlyIngame);
}
return true;
}
}

View File

@@ -0,0 +1,26 @@
package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.InventoryHandler;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class SetCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
if (player != null) {
if (args.length <= 1) {
MessageManager.sendFMessage(player, ConfigC.error_notEnoughArguments, "syntax-" + BlockHunt.CMDSet.usage);
} else {
String arenaname = args[1];
InventoryHandler.openPanel(player, arenaname);
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_onlyIngame);
}
return true;
}
}

View File

@@ -0,0 +1,66 @@
package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class SetWarpCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
if (player != null) {
if (args.length <= 2) {
MessageManager.sendFMessage(player, ConfigC.error_notEnoughArguments, "syntax-" + BlockHunt.CMDSetWarp.usage);
} else {
String arenaname = args[2];
String warpname = args[1];
Arena arena = null;
for (Arena arena2 : MemoryStorage.arenaList) {
if (arena2.arenaName.equalsIgnoreCase(arenaname)) {
arena = arena2;
}
}
if (arena != null) {
Location loc = player.getLocation();
if (warpname.equalsIgnoreCase("lobby")) {
arena.lobbyWarp = loc;
save(arena);
MessageManager.sendFMessage(player, ConfigC.normal_setwarpWarpSet, "warp-" + warpname);
} else if (warpname.equalsIgnoreCase("hiders")) {
arena.hidersWarp = loc;
save(arena);
MessageManager.sendFMessage(player, ConfigC.normal_setwarpWarpSet, "warp-" + warpname);
} else if (warpname.equalsIgnoreCase("seekers")) {
arena.seekersWarp = loc;
save(arena);
MessageManager.sendFMessage(player, ConfigC.normal_setwarpWarpSet, "warp-" + warpname);
} else if (warpname.equalsIgnoreCase("spawn")) {
arena.spawnWarp = loc;
save(arena);
MessageManager.sendFMessage(player, ConfigC.normal_setwarpWarpSet, "warp-" + warpname);
} else {
MessageManager.sendFMessage(player, ConfigC.error_setwarpWarpNotFound, "warp-" + warpname);
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_noArena, "name-" + arenaname);
}
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_onlyIngame);
}
return true;
}
public void save(Arena arena) {
MemoryStorage.arenas.getFile().set(arena.arenaName, arena);
MemoryStorage.arenas.save();
ArenaHandler.loadArenas();
}
}

View File

@@ -0,0 +1,14 @@
package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.InventoryHandler;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class ShopCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
InventoryHandler.openShop(player);
return true;
}
}

View File

@@ -0,0 +1,56 @@
package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaState;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class StartCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
if (player != null) {
if (args.length <= 1) {
MessageManager.sendFMessage(player, ConfigC.error_notEnoughArguments, "syntax-" + BlockHunt.CMDStart.usage);
} else {
Arena arena = null;
for (Arena arena2 : MemoryStorage.arenaList) {
if (arena2.arenaName.equalsIgnoreCase(args[1])) {
arena = arena2;
}
}
if (arena != null) {
if (arena.gameState.equals(ArenaState.WAITING)) {
if (arena.playersInArena.size() >= 2) {
arena.timer = 11;
arena.gameState = ArenaState.STARTING;
MessageManager.sendFMessage(player, ConfigC.normal_startForced, "arenaname-" + arena.arenaName);
} else {
MessageManager.sendFMessage(player, ConfigC.warning_lobbyNeedAtleast, "1-2");
}
} else if (arena.gameState.equals(ArenaState.STARTING)) {
if (arena.playersInArena.size() < arena.maxPlayers) {
if (arena.timer >= 10) {
arena.timer = 11;
}
} else {
arena.timer = 1;
}
MessageManager.sendFMessage(player, ConfigC.normal_startForced, "arenaname-" + arena.arenaName);
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_noArena, "name-" + args[1]);
}
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_onlyIngame);
}
return true;
}
}

View File

@@ -0,0 +1,79 @@
package net.knarcraft.blockhunt.command;
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
public class TokensCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
if (args.length <= 3) {
MessageManager.sendFMessage(player, ConfigC.error_notEnoughArguments, "syntax-" + BlockHunt.CMDTokens.usage);
} else {
String option = args[1];
String playerName = args[2];
int amount;
try {
amount = Integer.parseInt(args[3]);
} catch (NumberFormatException e) {
MessageManager.sendFMessage(player, ConfigC.error_notANumber, "1-" + args[3]);
return true;
}
Player tokenPlayer = Bukkit.getPlayer(playerName);
if (tokenPlayer == null) {
MessageManager.sendFMessage(player, ConfigC.error_tokensPlayerNotOnline, "playername-" + playerName);
return true;
}
String name = "\u00A78Console";
if (player != null) {
name = player.getName();
}
if (option.equalsIgnoreCase("set")) {
MemoryStorage.shop.getFile().set(tokenPlayer.getName() + ".tokens", amount);
MemoryStorage.shop.save();
MessageManager.sendFMessage(player, ConfigC.normal_tokensChanged, "option-Set", "playername-" + tokenPlayer.getName(), "option2-to", "amount-" + amount);
MessageManager.sendFMessage(tokenPlayer, ConfigC.normal_tokensChangedPerson, "option-set", "playername-" + name, "option2-to", "amount-" + amount);
} else if (option.equalsIgnoreCase("add")) {
int tokens = 0;
if (MemoryStorage.shop.getFile().getInt(tokenPlayer.getName() + ".tokens") != 0) {
tokens = MemoryStorage.shop.getFile().getInt(tokenPlayer.getName() + ".tokens");
}
MemoryStorage.shop.getFile().set(tokenPlayer.getName() + ".tokens", tokens + amount);
MemoryStorage.shop.save();
MessageManager.sendFMessage(player, ConfigC.normal_tokensChanged, "option-Added", "playername-" + tokenPlayer.getName(), "option2-to", "amount-" + amount);
MessageManager.sendFMessage(tokenPlayer, ConfigC.normal_tokensChangedPerson, "option-added", "playername-" + name, "option2-to", "amount-" + amount);
} else if (option.equalsIgnoreCase("take")) {
int tokens = 0;
if (MemoryStorage.shop.getFile().getInt(tokenPlayer.getName() + ".tokens") != 0) {
tokens = MemoryStorage.shop.getFile().getInt(tokenPlayer.getName() + ".tokens");
}
MemoryStorage.shop.getFile().set(tokenPlayer.getName() + ".tokens", tokens - amount);
MemoryStorage.shop.save();
MessageManager.sendFMessage(player, ConfigC.normal_tokensChanged, "option-Took", "playername-" + tokenPlayer.getName(), "option2-from", "amount-" + amount);
MessageManager.sendFMessage(tokenPlayer, ConfigC.normal_tokensChangedPerson, "option-took", "playername-" + name, "option2-from", "amount-" + amount);
} else {
MessageManager.sendFMessage(player, ConfigC.error_tokensUnknownsetting, "option-" + option);
}
}
return true;
}
}

View File

@@ -0,0 +1,41 @@
package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
public class WandCommand extends DefaultCommand {
@Override
public boolean execute(Player player, Command cmd, String label, String[] args) {
if (player != null) {
ItemStack wand = new ItemStack(Material.getMaterial((String) MemoryStorage.config.get(ConfigC.wandIDname)));
ItemMeta im = wand.getItemMeta();
im.setDisplayName(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.wandName)));
MemoryStorage.config.load();
List<String> lores = MemoryStorage.config.getFile().getStringList(ConfigC.wandDescription.location);
List<String> lores2 = new ArrayList<>();
for (String lore : lores) {
lores2.add(MessageManager.replaceAll(lore));
}
im.setLore(lores2);
wand.setItemMeta(im);
player.getInventory().addItem(wand);
player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 5, 0);
MessageManager.sendFMessage(player, ConfigC.normal_wandGaveWand, "type-" + wand.getType().toString().replaceAll("_", " ").toLowerCase());
} else {
MessageManager.sendFMessage(player, ConfigC.error_onlyIngame);
}
return true;
}
}

View File

@@ -0,0 +1,44 @@
package net.knarcraft.blockhunt.event;
import net.knarcraft.blockhunt.arena.Arena;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class EndArenaEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private List<Player> winners = null;
private List<Player> losers = null;
private Arena arena = null;
public EndArenaEvent(List<Player> winners, List<Player> losers, Arena arena) {
this.winners = winners;
this.losers = losers;
this.arena = arena;
}
public List<Player> getWinners() {
return winners;
}
public List<Player> getLosers() {
return losers;
}
public Arena getArena() {
return arena;
}
public @NotNull HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@@ -0,0 +1,36 @@
package net.knarcraft.blockhunt.event;
import net.knarcraft.blockhunt.arena.Arena;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
public class JoinArenaEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private Player player = null;
private Arena arena = null;
public JoinArenaEvent(Player player, Arena arena) {
this.player = player;
this.arena = arena;
}
public Player getPlayer() {
return player;
}
public Arena getArena() {
return arena;
}
public @NotNull HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@@ -0,0 +1,36 @@
package net.knarcraft.blockhunt.event;
import net.knarcraft.blockhunt.arena.Arena;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
public class LeaveArenaEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private Player player = null;
private Arena arena = null;
public LeaveArenaEvent(Player player, Arena arena) {
this.player = player;
this.arena = arena;
}
public Player getPlayer() {
return player;
}
public Arena getArena() {
return arena;
}
public @NotNull HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@@ -0,0 +1,28 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
public class OnBlockBreakEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onBlockBreakEvent(BlockBreakEvent event) {
// Early exit if no one is in any arena
if (ArenaHandler.noPlayersInArenas()) {
return;
}
Player player = event.getPlayer();
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
event.setCancelled(true);
}
}
}
}

View File

@@ -0,0 +1,28 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
public class OnBlockPlaceEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onBlockPlaceEvent(BlockPlaceEvent event) {
// Early exit if no one is in any arena
if (ArenaHandler.noPlayersInArenas()) {
return;
}
Player player = event.getPlayer();
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
event.setCancelled(true);
}
}
}
}

View File

@@ -0,0 +1,174 @@
package net.knarcraft.blockhunt.listener;
import me.libraryaddict.disguise.DisguiseAPI;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.PlayerHandler;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import net.knarcraft.blockhunt.arena.ArenaState;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.apache.commons.lang.StringUtils;
import org.bukkit.GameMode;
import org.bukkit.Sound;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.projectiles.ProjectileSource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class OnEntityDamageByEntityEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {
if (!(event.getEntity() instanceof Player player) || event.getEntity() == null) {
// We only care about player damage
return;
}
// Early exit if no one is in any arena
if (ArenaHandler.noPlayersInArenas()) {
return;
}
Player damager = null;
if (event.getDamager() instanceof Player) {
damager = (Player) event.getDamager();
} else {
if ((event.getCause() == DamageCause.PROJECTILE) && (event.getDamager() instanceof Arrow arrow)) {
// If damage was caused by an arrow, find out who shot the arrow
ProjectileSource shooter = arrow.getShooter();
if (shooter instanceof Player) {
damager = (Player) shooter;
}
}
}
// Always block all damage not dealt by a player
if (damager == null || !(damager instanceof Player)) {
event.setCancelled(true);
return;
}
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
if (arena.gameState == ArenaState.WAITING || arena.gameState == ArenaState.STARTING) {
// Always cancel damage when players are waiting
event.setCancelled(true);
return;
} else {
// Seeker receiving damage
if (arena.seekers.contains(player)) {
if (arena.seekers.contains(damager)) {
// Seeker damaged by seeker
if (!arena.seekersCanHurtSeekers) {
event.setCancelled(true);
return;
}
} else {
// Seeker damaged by hider
if (!arena.hidersCanHurtSeekers) {
event.setCancelled(true);
return;
}
}
} else {
// Hider damaged by hider
if (!arena.hidersCanHurtHiders && !arena.seekers.contains(damager)) {
event.setCancelled(true);
return;
}
}
// The damage is allowed, so lets handle it!
player.getWorld().playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 1, 1);
if (event.getDamage() >= player.getHealth()) {
player.setHealth(20);
event.setCancelled(true);
// try moving everything to the next tick to prevent "Removing entity while ticking" errors
Player finalDamager = damager;
player.getServer().getScheduler().runTask(BlockHunt.plugin, () -> {
DisguiseAPI.undisguiseToAll(player);
MemoryStorage.pBlock.remove(player);
if (!arena.seekers.contains(player)) {
if (MemoryStorage.shop.getFile().get(finalDamager.getName() + ".tokens") == null) {
MemoryStorage.shop.getFile().set(finalDamager.getName() + ".tokens", 0);
MemoryStorage.shop.save();
}
int damagerTokens = MemoryStorage.shop.getFile().getInt(finalDamager.getName() + ".tokens");
MemoryStorage.shop.getFile().set(finalDamager.getName() + ".tokens", damagerTokens + arena.killTokens);
MemoryStorage.shop.save();
MessageManager.sendFMessage(finalDamager, ConfigC.normal_addedToken, "amount-" + arena.killTokens);
if (MemoryStorage.shop.getFile().get(player.getName() + ".tokens") == null) {
MemoryStorage.shop.getFile().set(player.getName() + ".tokens", 0);
MemoryStorage.shop.save();
}
int playerTokens = MemoryStorage.shop.getFile().getInt(player.getName() + ".tokens");
float addingTokens = ((float) arena.hidersTokenWin - (((float) arena.timer / (float) arena.gameTime) * (float) arena.hidersTokenWin));
MemoryStorage.shop.getFile().set(player.getName() + ".tokens", playerTokens + (int) addingTokens);
MemoryStorage.shop.save();
MessageManager.sendFMessage(player, ConfigC.normal_addedToken, "amount-" + (int) addingTokens);
arena.seekers.add(player);
player.setWalkSpeed(0.3F);
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameHiderDied, "playername-" + player.getDisplayName(), "killer-" + finalDamager.getDisplayName());
int hidercount = (arena.playersInArena.size() - arena.seekers.size());
if ((hidercount <= 3) && (hidercount > 0)) {
List<String> hiders = new ArrayList<>();
for (Player p : arena.playersInArena) {
if (!arena.seekers.contains(p)) {
hiders.add(p.getName());
}
}
Collections.sort(hiders);
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameHidersLeft, "left-" + StringUtils.join(hiders.toArray(), ", "));
} else {
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameHidersLeft, "left-" + hidercount);
}
}
player.getInventory().clear();
player.updateInventory();
if (arena.seekers.size() >= arena.playersInArena.size()) {
ArenaHandler.seekersWin(arena);
} else {
DisguiseAPI.undisguiseToAll(player);
MemoryStorage.seekertime.put(player, arena.waitingTimeSeeker);
PlayerHandler.teleport(player, arena.seekersWarp);
player.setGameMode(GameMode.SURVIVAL);
player.setWalkSpeed(0.3F);
// Fix for client not showing players after they join
for (Player otherplayer : arena.playersInArena) {
if (otherplayer.canSee(player)) {
otherplayer.showPlayer(BlockHunt.plugin, player); // Make new player visible to others
}
if (player.canSee(otherplayer)) {
player.showPlayer(BlockHunt.plugin, otherplayer); // Make other players visible to new player
}
}
}
});
}
}
}
}
}
}

View File

@@ -0,0 +1,61 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
public class OnEntityDamageEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onEntityDamageEvent(EntityDamageEvent event) {
// Early exit if no one is in any arena
if (ArenaHandler.noPlayersInArenas()) {
return;
}
Entity ent = event.getEntity();
if (ent instanceof Player) {
Player player = (Player) event.getEntity();
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
DamageCause cause = event.getCause();
switch (cause) {
case ENTITY_ATTACK:
case PROJECTILE:
// Do nothing about damage from an entity
// Any entity damage that makes it to here was already allowed by the EntityDamageByEntity event
break;
case FALL:
// Should we prevent the fall damage?
if (arena.seekers.contains(player)) {
if (!arena.seekersTakeFallDamage) {
// Prevent seeker fall damage (if configured)
event.setCancelled(true);
return;
}
} else {
if (!arena.hidersTakeFallDamage) {
// Prevent hider fall damage (if configured)
event.setCancelled(true);
return;
}
}
break;
default:
// Cancel all non-entity damage for all players (lava, drowning, fire, etc)
event.setCancelled(true);
break;
}
return;
}
}
}
}
}

View File

@@ -0,0 +1,23 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.FoodLevelChangeEvent;
public class OnFoodLevelChangeEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onFoodLevelChangeEvent(FoodLevelChangeEvent event) {
Player player = (Player) event.getEntity();
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
event.setCancelled(true);
}
}
}
}

View File

@@ -0,0 +1,283 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.InventoryHandler;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import net.knarcraft.blockhunt.arena.ArenaProperty;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.apache.commons.lang.WordUtils;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack;
public class OnInventoryClickEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onInventoryClickEvent(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked();
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
event.setCancelled(true);
}
}
Inventory inv = event.getInventory();
InventoryView invView = event.getView();
if (inv.getType().equals(InventoryType.CHEST)) {
if (invView.getTitle().contains("DisguiseBlocks")) {
if (event.getCurrentItem() != null) {
if (!event.getCurrentItem().getType().isBlock()) {
if (!event.getCurrentItem().getType().equals(Material.FLOWER_POT)) {
event.setCancelled(true);
MessageManager.sendFMessage(player, ConfigC.error_setNotABlock);
}
}
}
return;
}
// Early exit if this isnt a blockhunt inventory
if (!invView.getTitle().contains("BlockHunt")) {
return;
}
if (invView.getTitle().startsWith("\u00A7r")) {
if (invView.getTitle().equals(MessageManager.replaceAll("\u00A7r" + MemoryStorage.config.get(ConfigC.shop_title)))) {
event.setCancelled(true);
ItemStack item = event.getCurrentItem();
if (MemoryStorage.shop.getFile().get(player.getName() + ".tokens") == null) {
MemoryStorage.shop.getFile().set(player.getName() + ".tokens", 0);
MemoryStorage.shop.save();
}
int playerTokens = MemoryStorage.shop.getFile().getInt(player.getName() + ".tokens");
if (item == null) {
return;
}
if (item.getType().equals(Material.AIR)) {
return;
}
if (item.getItemMeta().getDisplayName() == null) {
return;
}
if (item.getItemMeta().getDisplayName().equals(MessageManager.replaceAll(MemoryStorage.config.get(ConfigC.shop_blockChooserv1Name).toString()))) {
if (playerTokens >= (Integer) MemoryStorage.config.get(ConfigC.shop_blockChooserv1Price)) {
MemoryStorage.shop.getFile().set(player.getName() + ".blockchooser", true);
MemoryStorage.shop.getFile().set(player.getName() + ".tokens", playerTokens - (Integer) MemoryStorage.config.get(ConfigC.shop_blockChooserv1Price));
MemoryStorage.shop.save();
MessageManager.sendFMessage(player, ConfigC.normal_shopBoughtItem, "itemname-" + MemoryStorage.config.get(ConfigC.shop_blockChooserv1Name));
} else {
MessageManager.sendFMessage(player, ConfigC.error_shopNeedMoreTokens);
}
} else if (item.getItemMeta().getDisplayName().equals(MessageManager.replaceAll(MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Name).toString()))) {
if (playerTokens >= (Integer) MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Price)) {
if (MemoryStorage.shop.getFile().get(player.getName() + ".blockhuntpass") == null) {
MemoryStorage.shop.getFile().set(player.getName() + ".blockhuntpass", 0);
MemoryStorage.shop.save();
}
MemoryStorage.shop.getFile().set(player.getName() + ".blockhuntpass", (Integer) MemoryStorage.shop.getFile().get(player.getName() + ".blockhuntpass") + 1);
MemoryStorage.shop.getFile().set(player.getName() + ".tokens", playerTokens - (Integer) MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Price));
MemoryStorage.shop.save();
MessageManager.sendFMessage(player, ConfigC.normal_shopBoughtItem, "itemname-" + MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Name));
} else {
MessageManager.sendFMessage(player, ConfigC.error_shopNeedMoreTokens);
}
}
InventoryHandler.openShop(player);
} else if (invView.getTitle().contains(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.shop_blockChooserv1Name)))) {
event.setCancelled(true);
if (event.getCurrentItem() != null) {
if (event.getCurrentItem().getType().isBlock()) {
MemoryStorage.choosenBlock.put(player, event.getCurrentItem());
String blockName = event.getCurrentItem().getType().name();
blockName = WordUtils.capitalizeFully(blockName.replace("_", " "));
MessageManager.sendFMessage(player, ConfigC.normal_shopChoosenBlock, "block-"
+ blockName);
} else {
MessageManager.sendFMessage(player, ConfigC.error_setNotABlock);
}
}
} else if (invView.getTitle().contains(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Name)))) {
event.setCancelled(true);
if (event.getCurrentItem() != null) {
if (event.getCurrentItem().getType().equals(Material.BLUE_WOOL)) {
int i = 0;
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
for (Player playerCheck : arena.playersInArena) {
if (MemoryStorage.choosenSeeker.get(playerCheck) != null) {
if (MemoryStorage.choosenSeeker.get(playerCheck)) {
i = i + 1;
}
}
}
}
if (i >= arena.amountSeekersOnStart) {
MessageManager.sendFMessage(player, ConfigC.error_shopMaxSeekersReached);
} else {
MemoryStorage.choosenSeeker.put(player, true);
player.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
player.updateInventory();
MessageManager.sendFMessage(player, ConfigC.normal_shopChoosenSeeker);
inv.clear();
if (MemoryStorage.shop.getFile().getInt(player.getName() + ".blockhuntpass") == 1) {
MemoryStorage.shop.getFile().set(player.getName() + ".blockhuntpass", null);
MemoryStorage.shop.save();
} else {
MemoryStorage.shop.getFile().set(player.getName() + ".blockhuntpass", MemoryStorage.shop.getFile().getInt(player.getName() + ".blockhuntpass") - 1);
MemoryStorage.shop.save();
}
}
}
} else if (event.getCurrentItem().getType().equals(Material.RED_WOOL)) {
int i = 0;
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
for (Player playerCheck : arena.playersInArena) {
if (MemoryStorage.choosenSeeker.get(playerCheck) != null) {
if (!MemoryStorage.choosenSeeker.get(playerCheck)) {
i = i + 1;
}
}
}
}
if (i >= (arena.playersInArena.size() - 1)) {
MessageManager.sendFMessage(player, ConfigC.error_shopMaxHidersReached);
} else {
MemoryStorage.choosenSeeker.put(player, false);
player.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
player.updateInventory();
MessageManager.sendFMessage(player, ConfigC.normal_shopChoosenHiders);
inv.clear();
if (MemoryStorage.shop.getFile().getInt(player.getName() + ".blockhuntpass") == 1) {
MemoryStorage.shop.getFile().set(player.getName() + ".blockhuntpass", null);
MemoryStorage.shop.save();
} else {
MemoryStorage.shop.getFile().set(player.getName() + ".blockhuntpass", MemoryStorage.shop.getFile().getInt(player.getName() + ".blockhuntpass") - 1);
MemoryStorage.shop.save();
}
}
}
}
}
} else {
event.setCancelled(true);
ItemStack item = event.getCurrentItem();
String arenaname = inv.getItem(0).getItemMeta().getDisplayName().replaceAll(MessageManager.replaceAll("%NBlockHunt arena: %A"), "");
Arena arena = null;
for (Arena arena2 : MemoryStorage.arenaList) {
if (arena2.arenaName.equalsIgnoreCase(arenaname)) {
arena = arena2;
}
}
if (item == null) {
return;
}
if (item.getType().equals(Material.AIR)) {
return;
}
if (!item.getItemMeta().hasDisplayName()) {
return;
}
if (item.getType().equals(Material.GOLD_NUGGET)) {
if (item.getItemMeta().getDisplayName().contains("maxPlayers")) {
updownButton(player, item, arena, ArenaProperty.MAX_PLAYERS, arena.maxPlayers, Bukkit.getMaxPlayers(), 2, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("minPlayers")) {
updownButton(player, item, arena, ArenaProperty.MIN_PLAYERS, arena.minPlayers, Bukkit.getMaxPlayers() - 1, 2, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("amountSeekersOnStart")) {
updownButton(player, item, arena, ArenaProperty.AMOUNT_SEEKERS_ON_START, arena.amountSeekersOnStart, arena.maxPlayers - 1, 1, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("timeInLobbyUntilStart")) {
updownButton(player, item, arena, ArenaProperty.TIME_IN_LOBBY_UNTIL_START, arena.timeInLobbyUntilStart, 1000, 5, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("waitingTimeSeeker")) {
updownButton(player, item, arena, ArenaProperty.WAITING_TIME_SEEKER, arena.waitingTimeSeeker, 1000, 5, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("gameTime")) {
updownButton(player, item, arena, ArenaProperty.GAME_TIME, arena.gameTime, 1000, 5, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("blockAnnouncerTime")) {
updownButton(player, item, arena, ArenaProperty.BLOCK_ANNOUNCER_TIME, arena.blockAnnouncerTime, 1000, 0, 5, 5);
} else if (item.getItemMeta().getDisplayName().contains("timeUntilHidersSword")) {
updownButton(player, item, arena, ArenaProperty.TIME_UNTIL_HIDERS_SWORD, arena.timeUntilHidersSword, 1000, 0, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("hidersTokenWin")) {
updownButton(player, item, arena, ArenaProperty.HIDERS_TOKEN_WIN, arena.hidersTokenWin, 1000, 0, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("seekersTokenWin")) {
updownButton(player, item, arena, ArenaProperty.SEEKERS_TOKEN_WIN, arena.seekersTokenWin, 1000, 0, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("killTokens")) {
updownButton(player, item, arena, ArenaProperty.KILL_TOKENS, arena.killTokens, 1000, 0, 1, 1);
}
save(arena);
InventoryHandler.openPanel(player, arena.arenaName);
} else if (item.getType().equals(Material.BOOK)) {
if (item.getItemMeta().getDisplayName().contains("disguiseBlocks")) {
InventoryHandler.openDisguiseBlocks(arena, player);
}
}
}
}
}
}
public void save(Arena arena) {
MemoryStorage.arenas.getFile().set(arena.arenaName, arena);
MemoryStorage.arenas.save();
ArenaHandler.loadArenas();
}
public static void updownButton(Player player, ItemStack item, Arena arena, ArenaProperty at, int option, int max, int min, int add, int remove) {
if (item.getItemMeta().getDisplayName().contains((String) MemoryStorage.messages.get(ConfigC.button_add2))) {
if (option < max) {
switch (at) {
case MAX_PLAYERS -> arena.maxPlayers = option + add;
case MIN_PLAYERS -> arena.minPlayers = option + add;
case AMOUNT_SEEKERS_ON_START -> arena.amountSeekersOnStart = option + add;
case TIME_IN_LOBBY_UNTIL_START -> arena.timeInLobbyUntilStart = option + add;
case WAITING_TIME_SEEKER -> arena.waitingTimeSeeker = option + add;
case GAME_TIME -> arena.gameTime = option + add;
case BLOCK_ANNOUNCER_TIME -> arena.blockAnnouncerTime = option + add;
case TIME_UNTIL_HIDERS_SWORD -> arena.timeUntilHidersSword = option + add;
case HIDERS_TOKEN_WIN -> arena.hidersTokenWin = option + add;
case SEEKERS_TOKEN_WIN -> arena.seekersTokenWin = option + add;
case KILL_TOKENS -> arena.killTokens = option + add;
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_setTooHighNumber, "max-" + max);
}
} else if (item.getItemMeta().getDisplayName().contains((String) MemoryStorage.messages.get(ConfigC.button_remove2))) {
if (option > min) {
switch (at) {
case MAX_PLAYERS -> arena.maxPlayers = option - remove;
case MIN_PLAYERS -> arena.minPlayers = option - remove;
case AMOUNT_SEEKERS_ON_START -> arena.amountSeekersOnStart = option - remove;
case TIME_IN_LOBBY_UNTIL_START -> arena.timeInLobbyUntilStart = option - remove;
case WAITING_TIME_SEEKER -> arena.waitingTimeSeeker = option - remove;
case GAME_TIME -> arena.gameTime = option - remove;
case BLOCK_ANNOUNCER_TIME -> arena.blockAnnouncerTime = option - remove;
case TIME_UNTIL_HIDERS_SWORD -> arena.timeUntilHidersSword = option - remove;
case HIDERS_TOKEN_WIN -> arena.hidersTokenWin = option - remove;
case SEEKERS_TOKEN_WIN -> arena.seekersTokenWin = option - remove;
case KILL_TOKENS -> arena.killTokens = option - remove;
}
} else {
MessageManager.sendFMessage(player, ConfigC.error_setTooLowNumber, "min-" + min);
}
}
}
}

View File

@@ -0,0 +1,60 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
public class OnInventoryCloseEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onInventoryCloseEvent(InventoryCloseEvent event) {
Inventory inv = event.getInventory();
InventoryView invView = event.getView();
if (inv.getType().equals(InventoryType.CHEST)) {
if (invView.getTitle().contains("DisguiseBlocks")) {
String arenaname = inv.getItem(0).getItemMeta().getDisplayName().replaceAll(MessageManager.replaceAll("%NDisguiseBlocks of arena: %A"), "");
Arena arena = null;
for (Arena arena2 : MemoryStorage.arenaList) {
if (arena2.arenaName.equalsIgnoreCase(arenaname)) {
arena = arena2;
}
}
ArrayList<ItemStack> blocks = new ArrayList<>();
for (ItemStack item : inv.getContents()) {
if (item != null) {
if (!item.getType().equals(Material.PAPER)) {
if (item.getType().equals(Material.FLOWER_POT)) {
blocks.add(new ItemStack(Material.FLOWER_POT));
} else {
blocks.add(item);
}
}
}
}
arena.disguiseBlocks = blocks;
save(arena);
}
}
}
public void save(Arena arena) {
MemoryStorage.arenas.getFile().set(arena.arenaName, arena);
MemoryStorage.arenas.save();
ArenaHandler.loadArenas();
}
}

View File

@@ -0,0 +1,23 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerDropItemEvent;
public class OnPlayerDropItemEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerDropItemEvent(PlayerDropItemEvent event) {
Player player = event.getPlayer();
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
event.setCancelled(true);
}
}
}
}

View File

@@ -0,0 +1,168 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.InventoryHandler;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.PermissionsC;
import net.knarcraft.blockhunt.SignsHandler;
import net.knarcraft.blockhunt.SolidBlockHandler;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import net.knarcraft.blockhunt.arena.ArenaState;
import net.knarcraft.blockhunt.manager.MessageManager;
import net.knarcraft.blockhunt.manager.PermissionsManager;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
public class OnPlayerInteractEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerInteractEvent(PlayerInteractEvent event) {
Player player = event.getPlayer();
Block block = event.getClickedBlock();
if (PermissionsManager.hasPerm(player, PermissionsC.Permissions.create, false)) {
ItemStack item = player.getInventory().getItemInMainHand();
if (item.getType() != Material.AIR) {
if (item.getItemMeta().hasDisplayName()) {
ItemMeta im = item.getItemMeta();
if (im.getDisplayName().equals(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.wandName)))) {
Action action = event.getAction();
if (event.hasBlock()) {
Location location = event.getClickedBlock().getLocation();
if (action.equals(Action.LEFT_CLICK_BLOCK)) {
event.setCancelled(true);
if (MemoryStorage.pos1.get(player) == null || !MemoryStorage.pos1.get(player).equals(location)) {
MessageManager.sendFMessage(player, ConfigC.normal_wandSetPosition, "number-1",
"pos-%N(%A" + location.getBlockX() + "%N, %A" + location.getBlockY() + "%N, %A" + location.getBlockZ() + "%N)", "x-"
+ location.getBlockX(), "y-" + location.getBlockY(), "z-" + location.getBlockZ());
MemoryStorage.pos1.put(player, location);
}
} else if (action.equals(Action.RIGHT_CLICK_BLOCK)) {
event.setCancelled(true);
if (MemoryStorage.pos2.get(player) == null || !MemoryStorage.pos2.get(player).equals(location)) {
MessageManager.sendFMessage(player, ConfigC.normal_wandSetPosition, "number-2",
"pos-%N(%A" + location.getBlockX() + "%N, %A" + location.getBlockY() + "%N, %A" + location.getBlockZ() + "%N)", "x-"
+ location.getBlockX(), "y-" + location.getBlockY(), "z-" + location.getBlockZ());
MemoryStorage.pos2.put(player, location);
}
}
}
}
}
}
}
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (event.getClickedBlock() != null) {
if (event.getClickedBlock().getState() instanceof Sign) {
if (SignsHandler.isSign(event.getClickedBlock().getLocation())) {
Sign sign = (Sign) event.getClickedBlock().getState();
if (sign.getLine(1) != null) {
if (sign.getLine(1).equals(MessageManager.replaceAll(MemoryStorage.config.getFile().getStringList(ConfigC.sign_LEAVE.location).get(1)))) {
if (PermissionsManager.hasPerm(player, PermissionsC.Permissions.joinsign, true)) {
ArenaHandler.playerLeaveArena(player, true, true);
}
} else if (sign.getLine(1).equals(MessageManager.replaceAll(MemoryStorage.config.getFile().getStringList(ConfigC.sign_SHOP.location).get(1)))) {
if (PermissionsManager.hasPerm(player, PermissionsC.Permissions.shop, true)) {
InventoryHandler.openShop(player);
}
} else {
for (Arena arena : MemoryStorage.arenaList) {
if (sign.getLines()[1].contains(arena.arenaName)) {
if (PermissionsManager.hasPerm(player, PermissionsC.Permissions.joinsign, true)) {
ArenaHandler.playerJoinArena(player, arena.arenaName);
}
}
}
}
}
}
}
}
}
if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK) {
if (event.getClickedBlock().getType() != Material.AIR) {
if (event.getClickedBlock().getType().equals(Material.ENCHANTING_TABLE) || event.getClickedBlock().getType().equals(Material.CRAFTING_TABLE)
|| event.getClickedBlock().getType().equals(Material.FURNACE) || event.getClickedBlock().getType().equals(Material.CHEST)
|| event.getClickedBlock().getType().equals(Material.ANVIL) || event.getClickedBlock().getType().equals(Material.ENDER_CHEST)
|| event.getClickedBlock().getType().equals(Material.JUKEBOX) || block.getRelative(event.getBlockFace()).getType().equals(Material.FIRE)) {
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
event.setCancelled(true);
}
}
}
}
}
if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK) {
for (Arena arena : MemoryStorage.arenaList) {
if (arena.seekers.contains(player)) {
for (Player pl : arena.playersInArena) {
if (MemoryStorage.hiddenLoc.get(pl) != null) {
Block pLoc = event.getClickedBlock();
Block moveLocBlock = MemoryStorage.hiddenLoc.get(pl).getBlock();
if (moveLocBlock.getX() == pLoc.getX() && moveLocBlock.getY() == pLoc.getY() && moveLocBlock.getZ() == pLoc.getZ()) {
MemoryStorage.moveLoc.put(pl, new Location(pl.getWorld(), 0, 0, 0));
pl.getWorld().playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 1, 1);
SolidBlockHandler.makePlayerUnsolid(pl);
}
}
}
}
}
}
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player) && (arena.gameState.equals(ArenaState.WAITING) || arena.gameState.equals(ArenaState.STARTING))) {
event.setCancelled(true);
ItemStack item = player.getInventory().getItemInMainHand();
if (item.getType() != Material.AIR) {
if (item.getItemMeta().getDisplayName() != null) {
if (item.getItemMeta().getDisplayName().equals(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.shop_blockChooserv1Name)))) {
Inventory blockChooser = Bukkit.createInventory(null, 36, MessageManager.replaceAll("\u00A7r" + MemoryStorage.config.get(ConfigC.shop_blockChooserv1Name)));
if (arena.disguiseBlocks != null) {
for (int i = arena.disguiseBlocks.size(); i > 0; i = i - 1) {
blockChooser.setItem(i - 1, arena.disguiseBlocks.get(i - 1));
}
}
player.openInventory(blockChooser);
}
if (item.getItemMeta().getDisplayName().equals(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Name)))) {
Inventory BlockHuntPass = Bukkit.createInventory(null, 9, MessageManager.replaceAll("\u00A7r" + MemoryStorage.config.get(ConfigC.shop_BlockHuntPassv2Name)));
ItemStack BlockHuntPassSEEKER = new ItemStack(Material.BLUE_WOOL, 1);
ItemMeta BlockHuntPassIM = BlockHuntPassSEEKER.getItemMeta();
BlockHuntPassIM.setDisplayName(MessageManager.replaceAll("&eSEEKER"));
BlockHuntPassSEEKER.setItemMeta(BlockHuntPassIM);
BlockHuntPass.setItem(1, BlockHuntPassSEEKER);
ItemStack BlockHuntPassHIDER = new ItemStack(Material.RED_WOOL, 1);
BlockHuntPassIM.setDisplayName(MessageManager.replaceAll("&eHIDER"));
BlockHuntPassHIDER.setItemMeta(BlockHuntPassIM);
BlockHuntPass.setItem(7, BlockHuntPassHIDER);
player.openInventory(BlockHuntPass);
}
}
}
}
}
}
}

View File

@@ -0,0 +1,87 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.PlayerHandler;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import net.knarcraft.blockhunt.arena.ArenaState;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
public class OnPlayerMoveEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerMoveEvent(PlayerMoveEvent event) {
// Early exit if no one is in any arena
if (ArenaHandler.noPlayersInArenas()) {
return;
}
Player player = event.getPlayer();
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
if (arena.gameState == ArenaState.IN_GAME) {
MemoryStorage.moveLoc.put(player, player.getLocation());
if (arena.pos1 == null || arena.pos2 == null) {
BlockHunt.plugin.getLogger().info("Arena:" +
arena.arenaName + " appears to have bad coords : pos1:" +
((arena.pos1 != null) ? arena.pos1.toString() : " NULL") + " Pos2:" +
((arena.pos2 != null) ? arena.pos2.toString() : " NULL"));
BlockHunt.plugin.getLogger().info("Player has been returned to hiderswarp due to bad arena state");
//event.setCancelled(true);
Location loc = player.getLocation();
player.playEffect(loc, Effect.ENDER_SIGNAL, null);
player.playSound(loc, Sound.ENTITY_GHAST_SHOOT, 1, 1);
PlayerHandler.teleport(player, arena.hidersWarp);
return;
}
double maxX = Math.max(arena.pos1.getX(), arena.pos2.getX());
double minX = Math.min(arena.pos1.getX(), arena.pos2.getX());
double maxY = Math.max(arena.pos1.getY(), arena.pos2.getY());
double minY = Math.min(arena.pos1.getY(), arena.pos2.getY());
double maxZ = Math.max(arena.pos1.getZ(), arena.pos2.getZ());
double minZ = Math.min(arena.pos1.getZ(), arena.pos2.getZ());
Location loc = player.getLocation();
if (loc.getBlockX() > maxX) {
//event.setCancelled(true);
player.playEffect(loc, Effect.ENDER_SIGNAL, null);
player.playSound(loc, Sound.ENTITY_GHAST_SHOOT, 1, 1);
PlayerHandler.teleport(player, arena.hidersWarp);
} else if (loc.getBlockX() < minX) {
//event.setCancelled(true);
player.playEffect(loc, Effect.ENDER_SIGNAL, null);
player.playSound(loc, Sound.ENTITY_GHAST_SHOOT, 1, 1);
PlayerHandler.teleport(player, arena.hidersWarp);
} else if (loc.getBlockZ() > maxZ) {
//event.setCancelled(true);
player.playEffect(loc, Effect.ENDER_SIGNAL, null);
player.playSound(loc, Sound.ENTITY_GHAST_SHOOT, 1, 1);
PlayerHandler.teleport(player, arena.hidersWarp);
} else if (loc.getBlockZ() < minZ) {
//event.setCancelled(true);
player.playEffect(loc, Effect.ENDER_SIGNAL, null);
player.playSound(loc, Sound.ENTITY_GHAST_SHOOT, 1, 1);
PlayerHandler.teleport(player, arena.hidersWarp);
} else if (loc.getBlockY() > maxY) {
//event.setCancelled(true);
player.playEffect(loc, Effect.ENDER_SIGNAL, null);
player.playSound(loc, Sound.ENTITY_GHAST_SHOOT, 1, 1);
PlayerHandler.teleport(player, arena.hidersWarp);
} else if (loc.getBlockY() < minY) {
//event.setCancelled(true);
player.playEffect(loc, Effect.ENDER_SIGNAL, null);
player.playSound(loc, Sound.ENTITY_GHAST_SHOOT, 1, 1);
PlayerHandler.teleport(player, arena.hidersWarp);
}
}
}
}
}
}

View File

@@ -0,0 +1,25 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
public class OnPlayerQuitEvent implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerQuitEvent(PlayerQuitEvent event) {
Player player = event.getPlayer();
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
ArenaHandler.playerLeaveArena(player, true, true);
}
}
}
}

View File

@@ -0,0 +1,27 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
import net.knarcraft.blockhunt.arena.ArenaHandler;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
public class OnPlayerSwapHandItemsEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerSwapHandItemsEvent(PlayerSwapHandItemsEvent event) {
// Early exit if no one is in any arena
if (ArenaHandler.noPlayersInArenas()) {
return;
}
Player player = event.getPlayer();
for (Arena arena : MemoryStorage.arenaList) {
if (arena.playersInArena.contains(player)) {
event.setCancelled(true);
}
}
}
}

View File

@@ -0,0 +1,37 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.manager.MessageManager;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerTeleportEvent;
public class OnPlayerTeleportEvent implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerTeleportEvent(PlayerTeleportEvent event) {
Player player = event.getPlayer();
if (MemoryStorage.pData.get(player) != null) {
handlePlayer(event, player);
}
}
/**
* Handle a player that is in an arena
*
* @param event PlayerTeleportEvent
* @param player Player
*/
private void handlePlayer(PlayerTeleportEvent event, Player player) {
Location storedLoc = MemoryStorage.teleportLoc.remove(player);
Location to = event.getTo();
if (storedLoc == null || storedLoc.getWorld() != to.getWorld() || to.distanceSquared(storedLoc) > 1) {
MessageManager.sendFMessage(player, ConfigC.error_teleportBlocked);
event.setCancelled(true);
}
}
}

View File

@@ -0,0 +1,27 @@
package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.PermissionsC;
import net.knarcraft.blockhunt.SignsHandler;
import net.knarcraft.blockhunt.manager.PermissionsManager;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent;
public class OnSignChangeEvent implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onSignChangeEvent(SignChangeEvent event) {
Player player = event.getPlayer();
String[] lines = event.getLines();
if (lines[0] != null) {
if (lines[0].equalsIgnoreCase("[" + BlockHunt.pdfFile.getName() + "]")) {
if (PermissionsManager.hasPerm(player, PermissionsC.Permissions.signcreate, true)) {
SignsHandler.createSign(event, lines, event.getBlock().getLocation());
}
}
}
}
}

View File

@@ -0,0 +1,50 @@
package net.knarcraft.blockhunt.manager;
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.PermissionsC;
import net.knarcraft.blockhunt.command.DefaultCommand;
import java.util.List;
public class CommandManager {
public final String name;
public final String label;
public final String args;
public final String argsalias;
public final PermissionsC.Permissions permission;
public final ConfigC help;
public final boolean enabled;
public final List<String> mainTABlist;
public final DefaultCommand CMD;
public final String usage;
public CommandManager(String name, String label, String args, String argsalias, PermissionsC.Permissions permission, ConfigC help, Boolean enabled, List<String> mainTABlist,
DefaultCommand CMD, String usage) {
this.name = name;
this.label = label;
this.args = args;
this.argsalias = argsalias;
this.permission = permission;
this.help = help;
this.enabled = enabled;
this.mainTABlist = mainTABlist;
this.CMD = CMD;
this.usage = usage;
MemoryStorage.commands.add(this);
}
}

View File

@@ -0,0 +1,149 @@
package net.knarcraft.blockhunt.manager;
/**
* Steffion's Engine - Made by Steffion.
* <p>
* 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.
* <p>
* Thanks for your cooperate!
*
* @author Steffion
*/
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
public class ConfigManager {
private final String fileName;
private final File file;
private final FileConfiguration fileC;
private final ConfigurationSection fileCS;
private final File fileLocation;
/**
* Use this class to create an automated config file.
*
* @param fileName Name of the file.
*/
public ConfigManager(String fileName) {
this.fileName = fileName;
this.file = new File(BlockHunt.plugin.getDataFolder(), fileName + ".yml");
this.fileLocation = BlockHunt.plugin.getDataFolder();
this.fileC = new YamlConfiguration();
this.checkFile();
this.fileCS = fileC.getConfigurationSection("");
this.load();
}
/**
* Use this class to create an automated config file.
*
* @param fileName Name of the file.
* @param subdirectory Sub-Location of the file.
*/
public ConfigManager(String fileName, String subdirectory) {
this.fileName = fileName;
File directory = new File(BlockHunt.plugin.getDataFolder(), subdirectory);
this.file = new File(directory, fileName + ".yml");
this.fileLocation = directory;
this.fileC = new YamlConfiguration();
this.checkFile();
this.fileCS = fileC.getConfigurationSection("");
this.load();
}
/**
* Check if there are new files created if so, display a message to the
* console.
*/
public static void newFiles() {
ConfigManager.setDefaults();
for (String fileName : MemoryStorage.newFiles) {
MessageManager.sendMessage(null, "%TAG%WCouldn't find '%A%fileName%.yml%W'%A creating new one.", "fileName-" + fileName);
}
MemoryStorage.newFiles.clear();
}
/**
* Add config settings to the files if they don't exist.
*/
public static void setDefaults() {
for (ConfigC value : ConfigC.values()) {
value.config.load();
if (value.config.getFile().get(value.location) == null) {
value.config.getFile().set(value.location, value.value);
value.config.save();
}
}
}
/**
* Check if file exists, if not create one.
*/
public void checkFile() {
if (!this.file.exists()) {
try {
this.file.getParentFile().mkdirs();
this.file.createNewFile();
if (file.exists()) {
MemoryStorage.newFiles.add(this.fileName);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* Save the file.
*/
public void save() {
try {
this.fileC.save(this.file);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Load the file.
*/
public void load() {
this.checkFile();
if (this.file.exists()) {
try {
this.fileC.load(this.file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* Get the File. Very useful for just loading/saving.
*/
public FileConfiguration getFile() {
return this.fileC;
}
/**
* Get object from a Config.
*
* @param location Config location.
* @return Object
*/
public Object get(ConfigC location) {
return this.getFile().get(location.location);
}
}

View File

@@ -0,0 +1,169 @@
package net.knarcraft.blockhunt.manager;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.MemoryStorage;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class MessageManager {
/**
* 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
*/
/**
* Send a message to a player. Also replaces the "%player%" variable to the
* player's name.
*
* @param player The player receiving the message.
* @param message Message which needs to be sent to the player.
* @param vars Variables. Separated with a - . Ex: "playerName-" +
* player.getName();
*/
public static void sendMessage(Player player, String message, String... vars) {
if (player == null) {
Bukkit.getConsoleSender().sendMessage(MessageManager.replaceAll(message.replaceAll("%player%", "Console"), vars));
} else {
player.sendMessage(MessageManager.replaceAll(message.replaceAll("%player%", player.getDisplayName()), vars));
}
}
/**
* Send a message to a player from a Config. Also replaces the "%player%"
* variable to the player's name.
*
* @param player The player receiving the message.
* @param location Location in the config of the message being send.
* @param vars Variables. Seperated with a - . Ex: "playerName-" +
* player.getName();
*/
public static void sendFMessage(Player player, ConfigC location, String... vars) {
if (player == null) {
Bukkit.getConsoleSender().sendMessage(
MessageManager.replaceAll(location.config.getFile().get(location.location).toString().replaceAll("%player%", "Console"), vars));
} else {
player.sendMessage(MessageManager.replaceAll(location.config.getFile().get(location.location).toString().replaceAll("%player%", player.getDisplayName()), vars));
}
}
/**
* Send a message to all players online. Also replaces the "%player%"
* variable to the player's name.
*
* @param message Message which needs to be send to the player.
* @param vars Variables. Seperated with a - . Ex: "playerName-" +
* player.getName();
*/
public static void broadcastMessage(String message, String... vars) {
for (Player player : Bukkit.getOnlinePlayers()) {
player.sendMessage(MessageManager.replaceAll(message.replaceAll("%player%", player.getDisplayName()), vars));
}
Bukkit.getConsoleSender().sendMessage(MessageManager.replaceAll(message.replaceAll("%player%", "Console"), vars));
}
/**
* Send a message to all players online from a Config. Also replaces the
* "%player%" variable to the player's name.
*
* @param location Location in the config of the message being send.
* @param vars Variables . Seperated with a - . Ex: "playerName-" +
* player.getName();
*/
public static void broadcastFMessage(ConfigC location, String... vars) {
for (Player player : Bukkit.getOnlinePlayers()) {
player.sendMessage(MessageManager.replaceAll(location.config.getFile().get(
location.location).toString().replaceAll("%player%", player.getDisplayName()), vars));
}
Bukkit.getConsoleSender().sendMessage(MessageManager.replaceAll(location.config.getFile().get(
location.location).toString().replaceAll("%player%", "Console"), vars));
}
/**
* Replace all variables.
*
* @param message Message which needs to be replaced.
* @param vars Variables. Seperated with a - . Ex: "playerName-" +
* player.getName();
* @return String with the message with values replaced
*/
public static String replaceAll(String message, String... vars) {
return MessageManager.replaceColours(MessageManager.replaceColourVars(MessageManager.replaceVars(message, vars)));
}
/**
* Replace default Minecraft colour codes.
*
* @param message Message which needs to be replaced.
* @return Colour replaced message.
*/
public static String replaceColours(String message) {
return message.replaceAll("(&([a-fk-or0-9]))", "\u00A7$2");
}
/**
* Replace colour codes of this plugin.
*
* @param message Message which needs to be replaced.
* @return Colour replaced message.
*/
public static String replaceColourVars(String message) {
message = message.replaceAll("%N", CType.NORMAL());
message = message.replaceAll("%W", CType.WARNING());
message = message.replaceAll("%E", CType.ERROR());
message = message.replaceAll("%A", CType.ARG());
message = message.replaceAll("%H", CType.HEADER());
message = message.replaceAll("%TAG", CType.TAG());
return message;
}
/**
* Replace custom variables.
*
* @param message Message which needs to be replaced.
* @param vars Variables. Seperated with a - . Ex: "playerName-" +
* player.getName();
* @return Replaced String.
*/
public static String replaceVars(String message, String... vars) {
for (String var : vars) {
String[] split = var.split("-");
message = message.replaceAll("%" + split[0] + "%", split[1]);
}
return message;
}
public static class CType {
public static String NORMAL() {
return (String) MemoryStorage.config.get(ConfigC.chat_normal);
}
public static String WARNING() {
return (String) MemoryStorage.config.get(ConfigC.chat_warning);
}
public static String ERROR() {
return (String) MemoryStorage.config.get(ConfigC.chat_error);
}
public static String ARG() {
return (String) MemoryStorage.config.get(ConfigC.chat_arg);
}
public static String HEADER() {
return (String) MemoryStorage.config.get(ConfigC.chat_header);
}
public static String TAG() {
return (String) MemoryStorage.config.get(ConfigC.chat_header) + MemoryStorage.config.get(ConfigC.chat_tag) + MemoryStorage.config.get(ConfigC.chat_normal);
}
}
}

View File

@@ -0,0 +1,123 @@
package net.knarcraft.blockhunt.manager;
import net.knarcraft.blockhunt.ConfigC;
import net.knarcraft.blockhunt.PermissionsC;
import org.bukkit.entity.Player;
public class PermissionsManager {
/**
* 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
*/
/**
* Check if a player has the permission. Also checks * related permissions.
* This permission DOES HAVE TO be registered.
*
* @param player The player who needs the permission.
* @param perm The permission.
* @param message Send a message to the player saying you don't have the
* permission.
* @return True/False when either the player has the permission.
*/
public static boolean hasPerm(Player player, PermissionsC.Permissions perm, Boolean message) {
PermissionsC.PType type = perm.type;
if (player == null) {
return true;
}
if (type == PermissionsC.PType.ALL) {
return true;
} else if (type == PermissionsC.PType.OP) {
if (player.isOp()) {
return true;
}
} else if (type == PermissionsC.PType.ADMIN) {
if (player.hasPermission(PermissionsC.main + "admin")) {
return true;
}
} else if (type == PermissionsC.PType.MODERATOR) {
if (player.hasPermission(PermissionsC.main + "moderator")) {
return true;
}
} else if (type == PermissionsC.PType.PLAYER) {
if (player.hasPermission(PermissionsC.main + "player")) {
return true;
}
}
if (player.hasPermission("*")) {
return true;
} else if (player.hasPermission(PermissionsC.main + "*")) {
return true;
} else if (player.hasPermission(PermissionsC.main + perm.perm)) {
return true;
} else if (player.hasPermission(PermissionsC.main + perm.perm + ".*")) {
return true;
} else {
if (message) {
MessageManager.sendFMessage(player, ConfigC.error_noPermission);
}
}
return false;
}
/**
* Check if a player has the permission. Also checks * related permissions.
* This permission does NOT have to be registered.
*
* @param player The player who needs the permission.
* @param type Type permission.
* @param perm The permission.
* @param message Send a message to the player saying you don't have the
* permission.
* @return True/False when either the player has the permission.
*/
public static boolean hasRawPerm(Player player, PermissionsC.PType type, String perm, Boolean message) {
if (player == null) {
return true;
}
if (type == PermissionsC.PType.ALL) {
return true;
} else if (type == PermissionsC.PType.OP) {
if (player.isOp()) {
return true;
}
} else if (type == PermissionsC.PType.ADMIN) {
if (player.hasPermission(PermissionsC.main + "admin")) {
return true;
}
} else if (type == PermissionsC.PType.MODERATOR) {
if (player.hasPermission(PermissionsC.main + "moderator")) {
return true;
}
} else if (type == PermissionsC.PType.PLAYER) {
if (player.hasPermission(PermissionsC.main + "player")) {
return true;
}
}
if (player.hasPermission("*")) {
return true;
} else if (player.hasPermission(PermissionsC.main + "*")) {
return true;
} else if (player.hasPermission(perm)) {
return true;
} else if (player.hasPermission(perm)) {
return true;
} else {
if (message) {
MessageManager.sendFMessage(player, ConfigC.error_noPermission);
}
}
return false;
}
}