Changes package name, and cleans up code a little bit
This commit is contained in:
539
src/main/java/net/knarcraft/blockhunt/BlockHunt.java
Normal file
539
src/main/java/net/knarcraft/blockhunt/BlockHunt.java
Normal 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;
|
||||
}
|
||||
}
|
126
src/main/java/net/knarcraft/blockhunt/ConfigC.java
Normal file
126
src/main/java/net/knarcraft/blockhunt/ConfigC.java
Normal 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("_", ".");
|
||||
}
|
||||
}
|
236
src/main/java/net/knarcraft/blockhunt/InventoryHandler.java
Normal file
236
src/main/java/net/knarcraft/blockhunt/InventoryHandler.java
Normal 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);
|
||||
}
|
||||
}
|
65
src/main/java/net/knarcraft/blockhunt/MemoryStorage.java
Normal file
65
src/main/java/net/knarcraft/blockhunt/MemoryStorage.java
Normal 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<>();
|
||||
}
|
37
src/main/java/net/knarcraft/blockhunt/PermissionsC.java
Normal file
37
src/main/java/net/knarcraft/blockhunt/PermissionsC.java
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
35
src/main/java/net/knarcraft/blockhunt/PlayerArenaData.java
Normal file
35
src/main/java/net/knarcraft/blockhunt/PlayerArenaData.java
Normal 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;
|
||||
}
|
||||
}
|
11
src/main/java/net/knarcraft/blockhunt/PlayerHandler.java
Normal file
11
src/main/java/net/knarcraft/blockhunt/PlayerHandler.java
Normal 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);
|
||||
}
|
||||
}
|
84
src/main/java/net/knarcraft/blockhunt/ScoreboardHandler.java
Normal file
84
src/main/java/net/knarcraft/blockhunt/ScoreboardHandler.java
Normal 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());
|
||||
}
|
||||
}
|
142
src/main/java/net/knarcraft/blockhunt/SignsHandler.java
Normal file
142
src/main/java/net/knarcraft/blockhunt/SignsHandler.java
Normal 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();
|
||||
}
|
||||
|
||||
}
|
63
src/main/java/net/knarcraft/blockhunt/SolidBlockHandler.java
Normal file
63
src/main/java/net/knarcraft/blockhunt/SolidBlockHandler.java
Normal 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);
|
||||
}
|
||||
|
||||
}
|
171
src/main/java/net/knarcraft/blockhunt/arena/Arena.java
Normal file
171
src/main/java/net/knarcraft/blockhunt/arena/Arena.java
Normal 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
|
||||
);
|
||||
}
|
||||
|
||||
}
|
468
src/main/java/net/knarcraft/blockhunt/arena/ArenaHandler.java
Normal file
468
src/main/java/net/knarcraft/blockhunt/arena/ArenaHandler.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
@@ -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
|
||||
|
||||
}
|
11
src/main/java/net/knarcraft/blockhunt/arena/ArenaState.java
Normal file
11
src/main/java/net/knarcraft/blockhunt/arena/ArenaState.java
Normal file
@@ -0,0 +1,11 @@
|
||||
package net.knarcraft.blockhunt.arena;
|
||||
|
||||
public enum ArenaState {
|
||||
|
||||
WAITING,
|
||||
STARTING,
|
||||
IN_GAME,
|
||||
RESTARTING,
|
||||
DISABLED
|
||||
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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);
|
||||
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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();
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
|
||||
}
|
@@ -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;
|
||||
}
|
||||
|
||||
}
|
@@ -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;
|
||||
}
|
||||
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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();
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
149
src/main/java/net/knarcraft/blockhunt/manager/ConfigManager.java
Normal file
149
src/main/java/net/knarcraft/blockhunt/manager/ConfigManager.java
Normal 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);
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user