diff --git a/Populator/src/main/java/net/nonswag/fvr/populator/Populator.java b/Populator/src/main/java/net/nonswag/fvr/populator/Populator.java index b4bf91d..8e7c8aa 100755 --- a/Populator/src/main/java/net/nonswag/fvr/populator/Populator.java +++ b/Populator/src/main/java/net/nonswag/fvr/populator/Populator.java @@ -60,7 +60,6 @@ public void onEnable() { } } catch (Exception e) { e.printStackTrace(); - } finally { } }, 1); } diff --git a/out/production/walls/net/nonswag/fvr/walls/Walls$1.class b/out/production/walls/net/nonswag/fvr/walls/Walls$1.class index 7e3cc2a..561a7dd 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/Walls$1.class and b/out/production/walls/net/nonswag/fvr/walls/Walls$1.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/Walls$GameState.class b/out/production/walls/net/nonswag/fvr/walls/Walls$GameState.class index 10f9484..e10795f 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/Walls$GameState.class and b/out/production/walls/net/nonswag/fvr/walls/Walls$GameState.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/Walls$PlayerJoinType.class b/out/production/walls/net/nonswag/fvr/walls/Walls$PlayerJoinType.class index a9d2c76..4427562 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/Walls$PlayerJoinType.class and b/out/production/walls/net/nonswag/fvr/walls/Walls$PlayerJoinType.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/Walls$Sort.class b/out/production/walls/net/nonswag/fvr/walls/Walls$Sort.class index 40e9326..0c1aeb5 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/Walls$Sort.class and b/out/production/walls/net/nonswag/fvr/walls/Walls$Sort.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/Walls$Team.class b/out/production/walls/net/nonswag/fvr/walls/Walls$Team.class index cc83c32..879057d 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/Walls$Team.class and b/out/production/walls/net/nonswag/fvr/walls/Walls$Team.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/Walls.class b/out/production/walls/net/nonswag/fvr/walls/Walls.class index 4e8d2d9..255c9ee 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/Walls.class and b/out/production/walls/net/nonswag/fvr/walls/Walls.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/api/GameStarter$1.class b/out/production/walls/net/nonswag/fvr/walls/api/GameStarter$1.class index 9e878b0..299296a 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/api/GameStarter$1.class and b/out/production/walls/net/nonswag/fvr/walls/api/GameStarter$1.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/api/GameStarter.class b/out/production/walls/net/nonswag/fvr/walls/api/GameStarter.class index d321c63..b7b4466 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/api/GameStarter.class and b/out/production/walls/net/nonswag/fvr/walls/api/GameStarter.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/api/Notifier.class b/out/production/walls/net/nonswag/fvr/walls/api/Notifier.class index 00a129a..76bbcac 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/api/Notifier.class and b/out/production/walls/net/nonswag/fvr/walls/api/Notifier.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/api/PlayerVisibility.class b/out/production/walls/net/nonswag/fvr/walls/api/PlayerVisibility.class index 8dc8941..b871ffe 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/api/PlayerVisibility.class and b/out/production/walls/net/nonswag/fvr/walls/api/PlayerVisibility.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/commands/WallsCommand.class b/out/production/walls/net/nonswag/fvr/walls/commands/WallsCommand.class index 271aec3..c6beaca 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/commands/WallsCommand.class and b/out/production/walls/net/nonswag/fvr/walls/commands/WallsCommand.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/listeners/ChatListener.class b/out/production/walls/net/nonswag/fvr/walls/listeners/ChatListener.class index 7b7e5db..cbc5d2e 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/listeners/ChatListener.class and b/out/production/walls/net/nonswag/fvr/walls/listeners/ChatListener.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/listeners/ConnectionListener$1.class b/out/production/walls/net/nonswag/fvr/walls/listeners/ConnectionListener$1.class index 0180d30..f5b9ae8 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/listeners/ConnectionListener$1.class and b/out/production/walls/net/nonswag/fvr/walls/listeners/ConnectionListener$1.class differ diff --git a/out/production/walls/net/nonswag/fvr/walls/listeners/ConnectionListener.class b/out/production/walls/net/nonswag/fvr/walls/listeners/ConnectionListener.class index 890fd57..713be07 100644 Binary files a/out/production/walls/net/nonswag/fvr/walls/listeners/ConnectionListener.class and b/out/production/walls/net/nonswag/fvr/walls/listeners/ConnectionListener.class differ diff --git a/src/main/java/net/nonswag/fvr/walls/Walls.java b/src/main/java/net/nonswag/fvr/walls/Walls.java index 80451af..38f99af 100644 --- a/src/main/java/net/nonswag/fvr/walls/Walls.java +++ b/src/main/java/net/nonswag/fvr/walls/Walls.java @@ -154,7 +154,6 @@ public double getKD() { public static final List teamCaptains = new ArrayList<>(); - public static String logPlayer = null; public static final String levelName; private static String nextMap; public static final String DISCORD = "https://discord.gg/vpAgZxQ"; diff --git a/src/main/java/net/nonswag/fvr/walls/api/GameStarter.java b/src/main/java/net/nonswag/fvr/walls/api/GameStarter.java index 9029964..17204e9 100644 --- a/src/main/java/net/nonswag/fvr/walls/api/GameStarter.java +++ b/src/main/java/net/nonswag/fvr/walls/api/GameStarter.java @@ -5,6 +5,7 @@ import net.nonswag.fvr.walls.Walls.Team; import net.nonswag.fvr.walls.Walls.WallsPlayer; import net.nonswag.fvr.walls.commands.FullKitCommand; +import net.nonswag.fvr.walls.commands.WallsCommand; import net.nonswag.fvr.walls.kits.BasicPlayerKit; import net.nonswag.fvr.walls.kits.ProStartPlayerKitPerks; import net.nonswag.fvr.walls.kits.VipStartPlayerKitPerks; @@ -15,6 +16,7 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; public class GameStarter { @@ -84,12 +86,40 @@ public static void startGame(Map players, final Walls walls) walls.kickOffCompassThread(); Notifier.broadcast("Enemy Finder Compass now activated."); + countForVotes(); + if (Walls.diamondWalls) FullKitCommand.fullDiamond(walls); else if (Walls.ironWalls) FullKitCommand.fullIron(walls); walls.clock.setClock(walls.getPeaceTimeMins() * 60, walls::dropWalls); walls.getPlayerScoreBoard().updateScoreboardScores(); } + private static void countForVotes() { + int ironVotes = WallsCommand.IRON_VOTES.size(); + int diamondVotes = WallsCommand.DIAMOND_VOTES.size(); + + if (ironVotes + diamondVotes > 0) { + if (diamondVotes > ironVotes) { + Notifier.broadcast("DiamondWalls won with " + diamondVotes + " votes"); + Walls.diamondWalls = true; + Walls.ironWalls = false; + } else if (ironVotes > diamondVotes) { + Notifier.broadcast("IronWalls won with " + ironVotes + " votes"); + Walls.diamondWalls = false; + Walls.ironWalls = true; + } else { + boolean diamond = ThreadLocalRandom.current().nextBoolean(); + Notifier.broadcast("§aThe voting ended in a draw! The server voted for " + (diamond ? "§bDiamondWalls" : "§7IronWalls")); + Walls.diamondWalls = diamond; + Walls.ironWalls = !diamond; + } + } + + + WallsCommand.IRON_VOTES.clear(); + WallsCommand.DIAMOND_VOTES.clear(); + } + private static int getSmallestTeam(Walls myWalls) { int smallestTeam = 100; diff --git a/src/main/java/net/nonswag/fvr/walls/api/Notifier.java b/src/main/java/net/nonswag/fvr/walls/api/Notifier.java index c41cdcf..49b2b76 100644 --- a/src/main/java/net/nonswag/fvr/walls/api/Notifier.java +++ b/src/main/java/net/nonswag/fvr/walls/api/Notifier.java @@ -10,9 +10,8 @@ import java.util.UUID; public class Notifier { - - private static final String PREFIX = "§6§lWalls§r "; - public static final String STAFF_CHAT = "§c[§bStaffChat§c] §b"; + public static final String PREFIX = "§6§lWalls§r "; + private static final String STAFF_CHAT = "§c[§bStaffChat§c] §b"; public static void error(CommandSender sender, String message) { sender.sendMessage(PREFIX + ChatColor.RED + message); diff --git a/src/main/java/net/nonswag/fvr/walls/api/PlayerVisibility.java b/src/main/java/net/nonswag/fvr/walls/api/PlayerVisibility.java index f3f26f0..4dab9d9 100644 --- a/src/main/java/net/nonswag/fvr/walls/api/PlayerVisibility.java +++ b/src/main/java/net/nonswag/fvr/walls/api/PlayerVisibility.java @@ -1,8 +1,11 @@ package net.nonswag.fvr.walls.api; +import net.minecraft.server.v1_8_R3.EntityPlayer; +import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo; import net.nonswag.fvr.walls.Walls; import net.nonswag.fvr.walls.Walls.Team; import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.Player; import java.util.UUID; @@ -13,7 +16,7 @@ public static void makeSpecInvisible(Walls walls, Player spec) { for (Team team : Team.values()) { for (UUID fighter : walls.getTeamList(team)) { Player player = Bukkit.getPlayer(fighter); - if (player != null) player.hidePlayer(spec); + if (player != null) hidePlayer(player, spec); } } } @@ -30,10 +33,17 @@ public static void makeSpecVisToSpecs(Walls walls, Player spec) { public static void hideAllSpecs(Walls walls, Player player) { for (UUID spectator : walls.getTeamList(Team.SPECTATORS)) { Player all = Bukkit.getPlayer(spectator); - if (all != null) player.hidePlayer(all); + if (all != null) hidePlayer(player, all); } } + private static void hidePlayer(Player viewer, Player viewed) { + viewer.hidePlayer(viewed); + EntityPlayer viewerHandle = ((CraftPlayer) viewer).getHandle(); + EntityPlayer viewedHandle = ((CraftPlayer) viewed).getHandle(); + viewerHandle.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, viewedHandle)); + } + public static void makeInVisPlayerNowVisible(Player wasInvisible) { for (Player all : Bukkit.getOnlinePlayers()) all.showPlayer(wasInvisible); } diff --git a/src/main/java/net/nonswag/fvr/walls/commands/WallsCommand.java b/src/main/java/net/nonswag/fvr/walls/commands/WallsCommand.java index 12c416c..03ffb34 100644 --- a/src/main/java/net/nonswag/fvr/walls/commands/WallsCommand.java +++ b/src/main/java/net/nonswag/fvr/walls/commands/WallsCommand.java @@ -1,5 +1,6 @@ package net.nonswag.fvr.walls.commands; +import lombok.RequiredArgsConstructor; import net.nonswag.fvr.walls.Walls; import net.nonswag.fvr.walls.Walls.PlayerJoinType; import net.nonswag.fvr.walls.Walls.Team; @@ -15,52 +16,76 @@ import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; +import java.util.*; import static net.nonswag.fvr.walls.api.Notifier.*; +@RequiredArgsConstructor public class WallsCommand implements CommandExecutor { private final Walls walls; - public WallsCommand(Walls walls) { - this.walls = walls; - } - @Override public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { if (args.length < 1) { - if (sender instanceof Player) error(sender, "usage: /walls votestart"); - if (sender.isOp()) { - error(sender, "usage: /walls drop | rank | autostartplayers | clanrename | clanbattle | captain | restricted | diamondwalls | ironwalls | fixdb"); - } - } else if (args[0].equalsIgnoreCase("diamondwalls")) { - if (sender.isOp()) broadcast("Set diamondwalls to " + (Walls.diamondWalls = !Walls.diamondWalls)); - else error(sender, "You have no rights to do this"); - } else if (args[0].equalsIgnoreCase("ironwalls")) { - if (sender.isOp()) broadcast("Set ironwalls to " + (Walls.ironWalls = !Walls.ironWalls)); - else error(sender, "You have no rights to do this"); - } else if (args[0].equalsIgnoreCase("stop")) stop(sender); + if (sender instanceof Player) error(sender, "usage: /walls voteStart | voteIron | voteDiamond"); + if (sender.isOp()) error(sender, "usage: /walls drop | rank | autoStartPlayers | clanRename | " + + "clanBattle | captain | restricted | diamondWalls | ironWalls | fixdb | stop | chat | " + + "noStaffChat | start | addPlayer | silence | captain"); + } else if (args[0].equalsIgnoreCase("voteDiamond")) voteDiamond(sender); + else if (args[0].equalsIgnoreCase("voteIron")) voteIron(sender); + else if (args[0].equalsIgnoreCase("diamondWalls")) diamondWalls(sender); + else if (args[0].equalsIgnoreCase("ironWalls")) ironWalls(sender); + else if (args[0].equalsIgnoreCase("stop")) stop(sender); else if (args[0].equalsIgnoreCase("fixdb")) fixdb(sender); - else if (args[0].equalsIgnoreCase("votestart")) votestart(sender); + else if (args[0].equalsIgnoreCase("voteStart")) voteStart(sender); else if (args[0].equalsIgnoreCase("chat")) chatListener(sender); - else if (args[0].equalsIgnoreCase("nostaffchat")) noStaffChat(sender); + else if (args[0].equalsIgnoreCase("noStaffChat")) noStaffChat(sender); else if (args[0].equalsIgnoreCase("start")) startWalls(sender); - else if (args[0].equalsIgnoreCase("addplayer")) addPlayer(sender, args); + else if (args[0].equalsIgnoreCase("addPlayer")) addPlayer(sender, args); else if (args[0].equalsIgnoreCase("silence")) silenceComand(sender); - else if (args[0].equalsIgnoreCase("clanrename")) setClanName(sender, args); + else if (args[0].equalsIgnoreCase("clanRename")) setClanName(sender, args); else if (args[0].equalsIgnoreCase("drop")) drop(sender); else if (args[0].equalsIgnoreCase("rank")) setRank(sender, args); - else if (args[0].equalsIgnoreCase("autostartplayers")) setAutoStartPlayers(sender, args); - else if (args[0].equalsIgnoreCase("clanbattle")) toggleClanBattle(sender); + else if (args[0].equalsIgnoreCase("autoStartPlayers")) setAutoStartPlayers(sender, args); + else if (args[0].equalsIgnoreCase("clanBattle")) toggleClanBattle(sender); else if (args[0].equalsIgnoreCase("restricted")) setPlayerJoinRestriction(sender, args); - else if (args[0].equalsIgnoreCase("captain")) this.addCaptain(sender, args); - else if (args[0].equalsIgnoreCase("logPlayer")) this.logPlayer(sender, args); + else if (args[0].equalsIgnoreCase("captain")) addCaptain(sender, args); else error(sender, args[0] + " is not a valid argument"); return true; } + public static final Set DIAMOND_VOTES = Collections.newSetFromMap(new WeakHashMap<>()); + public static final Set IRON_VOTES = Collections.newSetFromMap(new WeakHashMap<>()); + + private void vote(CommandSender sender, Set set, String type) { + if (sender instanceof Player) { + if (set.equals(IRON_VOTES)) DIAMOND_VOTES.remove(sender); + if (set.equals(DIAMOND_VOTES)) IRON_VOTES.remove(sender); + if (!set.contains(sender)) { + set.add((Player) sender); + Notifier.broadcast(sender.getName() + " voted for " + type + " walls §8(§7" + set.size() + "§8)"); + } else Notifier.error(sender, "You already voted for " + type + " walls"); + } else error(sender, "This is a player command"); + } + + private void voteDiamond(CommandSender sender) { + vote(sender, DIAMOND_VOTES, "diamond"); + } + + private void voteIron(CommandSender sender) { + vote(sender, IRON_VOTES, "iron"); + } + + private static void diamondWalls(CommandSender sender) { + if (sender.isOp()) broadcast("Set diamondwalls to " + (Walls.diamondWalls = !Walls.diamondWalls)); + else error(sender, "You have no rights to do this"); + } + + private static void ironWalls(CommandSender sender) { + if (sender.isOp()) broadcast("Set ironwalls to " + (Walls.ironWalls = !Walls.ironWalls)); + else error(sender, "You have no rights to do this"); + } + public static boolean FIX_DB = false; private void fixdb(CommandSender sender) { @@ -76,7 +101,7 @@ private void fixdb(CommandSender sender) { public static final List VOTES = new ArrayList<>(); - private void votestart(CommandSender sender) { + private void voteStart(CommandSender sender) { if (sender instanceof Player) { Player player = (Player) sender; if (walls.starting) error(player, "The game is already starting"); @@ -97,7 +122,7 @@ private void autoStart() { walls.starting = true; } else { int players = Walls.preGameAutoStartPlayers / 2 - VOTES.size(); - broadcast(players + " more vote" + (players != 1 ? "s are" : " is") + " needed §8(§7/walls votestart§8)"); + broadcast(players + " more vote" + (players != 1 ? "s are" : " is") + " needed §8(§7/walls voteStart§8)"); } } @@ -280,15 +305,4 @@ private void toggleClanBattle(CommandSender sender) { success(sender, "Yup. ClanBattle set to " + Walls.clanBattle); } else error(sender, "You have no rights to do this"); } - - private void logPlayer(CommandSender sender, String[] args) { - if (sender.isOp()) { - if (args.length == 2) { - Walls.logPlayer = args[1]; - success(sender, "Now Logging data for: " + Walls.logPlayer); - } else { - error(sender, "Nope."); - } - } else error(sender, "You have no rights to do this"); - } } diff --git a/src/main/java/net/nonswag/fvr/walls/listeners/ChatListener.java b/src/main/java/net/nonswag/fvr/walls/listeners/ChatListener.java index bd1fef3..c0df0ce 100644 --- a/src/main/java/net/nonswag/fvr/walls/listeners/ChatListener.java +++ b/src/main/java/net/nonswag/fvr/walls/listeners/ChatListener.java @@ -25,7 +25,7 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { String rank = twp.getRank().display(); String clan = ""; if (twp.getClan() != null) { - clan = ChatColor.DARK_RED + "" + ChatColor.BOLD + ChatColor.translateAlternateColorCodes('&', twp.getClan()) + ChatColor.WHITE + "◊"; + clan = ChatColor.DARK_RED + String.valueOf(ChatColor.BOLD) + ChatColor.translateAlternateColorCodes('&', twp.getClan()) + ChatColor.WHITE + "◊"; } switch (walls.getGameState()) { case PREGAME: diff --git a/src/main/java/net/nonswag/fvr/walls/listeners/ConnectionListener.java b/src/main/java/net/nonswag/fvr/walls/listeners/ConnectionListener.java index 707b0b4..7a308df 100644 --- a/src/main/java/net/nonswag/fvr/walls/listeners/ConnectionListener.java +++ b/src/main/java/net/nonswag/fvr/walls/listeners/ConnectionListener.java @@ -3,6 +3,10 @@ import lombok.RequiredArgsConstructor; import me.filoghost.holographicdisplays.api.HolographicDisplaysAPI; import me.filoghost.holographicdisplays.api.hologram.Hologram; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; import net.nonswag.fvr.walls.Walls; import net.nonswag.fvr.walls.api.GameStarter; import net.nonswag.fvr.walls.api.Notifier; @@ -39,6 +43,16 @@ public void onPlayerJoin(PlayerJoinEvent event) { case PREGAME: player.setTeam(Walls.Team.SPECTATORS); walls.getSpectatorKit().givePlayerKit(event.getPlayer()); + event.getPlayer().sendMessage(new ComponentBuilder(Notifier.PREFIX) + .append("Click to vote for ") + .append("§b§nDiamondWalls") + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/walls voteDiamond")) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponent[]{new TextComponent("/walls voteDiamond")})) + .append(" or ", ComponentBuilder.FormatRetention.NONE) + .append("§7§nIronWalls") + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/walls voteIron")) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponent[]{new TextComponent("/walls voteIron")})) + .create()); event.getPlayer().setHealth(20); event.getPlayer().setFoodLevel(20); walls.getPlayerScoreBoard().setScoreBoard(event.getPlayer()); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 8f01f50..694b362 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,24 +1,40 @@ # TheWalls -Language: en + +# the peace time before the walls drop (in minutes) peaceTimeMins: 15 + +# the amount of players required to start a game automatically preGameAutoStartPlayers: 4 + +# the time til the game automatically starts (in seconds) preGameAutoStartSeconds: 120 + +# the time the game takes to start after reaching the player cap or force starting it (in seconds) gameStartSeconds: 30 + +# the time a player counts as "in combat" without fighting (in seconds) combatRelogTime: 10 + +# the time a player has to reconnect before being disqualified (in seconds) relogTime: 90 + +# every player receives a golden apple before fighting +# no natural regeneration (only magic) UHCMode: false -# -------------------------------------- + # tournamentMode true will prevent "autostart happening" requires an op / admin to start the game. tournamentMode: false -# -------------------------------------- + # 0-ANYONE, 1-VIP, 2-PRO, 3-LEGENDARY, 4-STAFF playerJoinRestriction: ANYONE + +# disables the ability to select a team allowPickTeams: true + # Either diamond or iron walls diamondWalls: false ironWalls: false -# -------------------------------------- -# -------------------------------------- + # clanBattle allows clan naming - which affects team names. restricts to only those with the clan names to join and play. clanBattle: false clan-1: clan 1