Solo Mode and Faster UHC
This commit is contained in:
parent
07c93606f8
commit
6a9648e646
|
@ -63,6 +63,7 @@ public class SkinData
|
|||
public final static SkinData WITCH = new SkinData("eyJ0aW1lc3RhbXAiOjE0NzM5OTEyMTE1NDQsInByb2ZpbGVJZCI6IjlmY2FlZDhiMTRiNTRmN2ZhNjRjYjYwNDBlNzA1MjcyIiwicHJvZmlsZU5hbWUiOiJMQ2FzdHIxIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81NDg1ZDZlMTBhNmNmMmY3Mzg2NmZhMGRiNjEzOWQ5NWViZDM0ZGZiMGY0YzAxMmRkM2YzYWYxMWQ5ZjQxYyJ9fX0=", "cojkGLflVWxwnhDXmHMke7crkeA78iUYOWY7H3YvMJFD+VZi9E7vUahLTTx5ELH+PvcaHJerSDmuV+Nasc3K2n6zlXXb0B7RB/ose/kdPxHAIJee7IbZX0iFNDn6irUSOS4wOYF/BwaqG3HmpoSxV52SGMs6kqTer2Rjg3X+XwYFFiDHAR/gwhfXLzrM1iBc171vgu6T+kx65iBHa/YB/V/mj8FSxwM0f5IsLpgAEdxDL9PvEKQWgWeZ1CAqEXlGnjPkd9oGzW0TgDz2MksBbYZ2kmn/S53kK9vCrVB7egZPS4VBtKpq1P7Jeu8rtgjnAKVFQJZ2lMHnVRuvGTd8JKoPHarUPpU2LURUMaCtHzSv9v/4gjkafnDhqxG4TTcr5hxFV+ho72HQchoeaUXzIO+Yo71zrVqkrS0hw6OtgMIBlvaGaEUsFvGiCZePBEiHojO43AKqJcJAVeT2RAzHcAaBAO79ACGjNKw/oj02rOurLha9i+99bKui96Eg7SS/nPchbmu5YQ9nSpkW+JeYXnBzGGzNG4y02VWgz15L718+8161zXobhuK07qlY9i1nipFbEJedqG0cfS+AUzauETFvS9nMtxhtftYPCIxm40GQj6e77asNCAEElGssaUGKO3bjm348+oF9tR/eBOYWJQ8kL46IQLDRoop7UhG4ewY=");
|
||||
public final static SkinData TURKEY = new SkinData("eyJ0aW1lc3RhbXAiOjE0NzU3NzM2MTc5MDQsInByb2ZpbGVJZCI6IjlmY2FlZDhiMTRiNTRmN2ZhNjRjYjYwNDBlNzA1MjcyIiwicHJvZmlsZU5hbWUiOiJMQ2FzdHIxIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8xYzdmYjczMTRkNmY1ZTMzNmVjN2ViNTI1ZGM0ODMzOWNhMjI4ZDk3ODU1MDM3ZDZhNDIwOGZjNzYwNDc1NiJ9fX0=", "eZWi1LOD8ke7MCUAfhspBCnyfCoGM8suFLKtbW6b27CURoRBG3eKIfwLYYeMp3ObjoZ8gCB90s28Qyw5XMzwvvowy9W/b5cYC0OzQ8+GR7tDZoWc28tGqGBM8cmDJIFQgZdceBIIr2lXeAvEJfLbyrus46hPjk8YTiQW2DsBq88BhKIy6Igb1rGqJ1goVERF07b6+/yMdLKCaT8OZFzKLXfo5rY5gr6HLnvsQiNL9aTrl74agXn1GUcP+QVNe7/c9lYmv5vLCBst1YiIPq27NZASZ++Fwyv6+PRlaFZZYtMHVd4UZeYPl7ak1Cdi/1sUcRpkBbJM8AHIrqq0iuXxrLbc6ldQ2cYQKHg9ljIpW/EZanuf6Wgm/LK1JnxXne9GUb/xPzB1EnZ95i8/u9WJa+NixEcfc3pAzDPYncIR8lishFwyBRta6BCG76U3UY2lQr3YD/48AJ49r7+WVU0gOP/h2SDSdAZHEdvkpVJ0w/xA+SevJ7Y7xA5EJ655YMQ0F8f3WUFTf1pFklE5E+fwkMVCWOPw7UMy558IcRSpdWAPPyf8sc7CpDqRk37/vXWRDa+7YBfgskK6B2eXowrzThUOBx+AmDTF3Rv8ZSr1Un0FWGi+GQ5ny7W9dJBMomzyMUbzz9stsCml5XB+6xLP2MD+9lO1bHipKS6qkhtZChE=");
|
||||
|
||||
|
||||
// Comments this out for now, so it doesn't load the player profile
|
||||
// A better way to do this would check for the properties when getting the skull or the skin
|
||||
// Might change on the next version
|
||||
|
|
|
@ -56,7 +56,8 @@ public enum GameDisplay
|
|||
SurvivalGamesTeams("Survival Games Teams", "Survival Games", Material.IRON_SWORD, (byte)0, GameCategory.TEAM_VARIANT, 23),
|
||||
Tug("Tug of Wool", Material.WHEAT, (byte)0, GameCategory.ARCADE, 44),
|
||||
TurfWars("Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE, 45),
|
||||
UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46),
|
||||
UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.TEAM_VARIANT, 46),
|
||||
UHCSolo("Ultra Hardcore Solo", "Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46),
|
||||
WitherAssault("Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE, 47),
|
||||
Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48),
|
||||
ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL, 49),
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
package nautilus.game.arcade;
|
||||
|
||||
import org.bukkit.Material;
|
||||
|
||||
import mineplex.core.common.MinecraftVersion;
|
||||
import mineplex.core.common.Pair;
|
||||
import mineplex.core.game.GameCategory;
|
||||
import mineplex.core.game.GameDisplay;
|
||||
|
||||
import nautilus.game.arcade.game.Game;
|
||||
import nautilus.game.arcade.game.games.baconbrawl.BaconBrawl;
|
||||
import nautilus.game.arcade.game.games.barbarians.Barbarians;
|
||||
|
@ -99,18 +102,16 @@ import nautilus.game.arcade.game.games.survivalgames.modes.UHCSurvivalgames;
|
|||
import nautilus.game.arcade.game.games.tug.Tug;
|
||||
import nautilus.game.arcade.game.games.turfforts.TurfForts;
|
||||
import nautilus.game.arcade.game.games.typewars.TypeWars;
|
||||
import nautilus.game.arcade.game.games.uhc.UHC;
|
||||
import nautilus.game.arcade.game.games.uhc.UHCSolo;
|
||||
import nautilus.game.arcade.game.games.uhc.UHCTeams;
|
||||
import nautilus.game.arcade.game.games.uhc.modes.Assassins;
|
||||
import nautilus.game.arcade.game.games.uhc.modes.BloodDiamonds;
|
||||
import nautilus.game.arcade.game.games.uhc.modes.CutClean;
|
||||
import nautilus.game.arcade.game.games.uhc.modes.GodBattles;
|
||||
import nautilus.game.arcade.game.games.valentines.Valentines;
|
||||
import nautilus.game.arcade.game.games.wither.WitherGame;
|
||||
import nautilus.game.arcade.game.games.wizards.Wizards;
|
||||
import nautilus.game.arcade.game.games.zombiesurvival.ZombieSurvival;
|
||||
|
||||
import org.bukkit.Material;
|
||||
|
||||
public enum GameType
|
||||
{
|
||||
//Mini
|
||||
|
@ -183,7 +184,8 @@ public enum GameType
|
|||
SurvivalGamesTeams(TeamSurvivalGames.class, GameDisplay.SurvivalGamesTeams, new GameType[]{GameType.SurvivalGames}, false),
|
||||
Tug(Tug.class, GameDisplay.Tug),
|
||||
TurfWars(TurfForts.class, GameDisplay.TurfWars),
|
||||
UHC(UHC.class, GameDisplay.UHC),
|
||||
UHC(UHCTeams.class, GameDisplay.UHC),
|
||||
UHCSolo(UHCSolo.class, GameDisplay.UHCSolo, new GameType[] { GameType.UHC }, false),
|
||||
WitherAssault(WitherGame.class, GameDisplay.WitherAssault),
|
||||
Wizards(Wizards.class, GameDisplay.Wizards, new Pair[]
|
||||
{
|
||||
|
@ -228,7 +230,6 @@ public enum GameType
|
|||
new GameMode(SkySmash.class, GameType.Skywars, "Sky Smash"),
|
||||
new GameMode(TeamBuild.class, GameType.Build, "Team Master Builders"),
|
||||
new GameMode(DukesOfDecoration.class, GameType.Build, "Dukes Of Decoration"),
|
||||
new GameMode(CutClean.class, GameType.UHC, "Cut Clean"),
|
||||
new GameMode(GodBattles.class, GameType.UHC, "God Battles"),
|
||||
new GameMode(BloodDiamonds.class, GameType.UHC, "Blood Diamonds"),
|
||||
new GameMode(Assassins.class, GameType.UHC, "Assassins"),
|
||||
|
|
|
@ -36,7 +36,9 @@ import org.bukkit.event.entity.FoodLevelChangeEvent;
|
|||
import org.bukkit.event.entity.ItemSpawnEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerLoginEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.world.WorldLoadEvent;
|
||||
import org.bukkit.scoreboard.NameTagVisibility;
|
||||
|
@ -61,6 +63,7 @@ import mineplex.core.common.util.UtilServer;
|
|||
import mineplex.core.common.util.UtilTabTitle;
|
||||
import mineplex.core.common.util.UtilTextMiddle;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.common.util.UtilTime.TimeUnit;
|
||||
import mineplex.core.disguise.disguises.DisguisePlayer;
|
||||
import mineplex.core.elo.EloPlayer;
|
||||
import mineplex.core.elo.EloTeam;
|
||||
|
@ -298,6 +301,9 @@ public abstract class Game implements Listener
|
|||
|
||||
public boolean SpeedMeasurement = false;
|
||||
|
||||
// Rejoining the game
|
||||
public long RejoinTime = 120000;
|
||||
|
||||
// Chat Stats
|
||||
public final ChatStatData Kills = new ChatStatData("Kills", "Kills", true);
|
||||
public final ChatStatData Assists = new ChatStatData("Assists", "Assists", true);
|
||||
|
@ -380,6 +386,11 @@ public abstract class Game implements Listener
|
|||
private HashMap<UUID, LinkedList<Triple<Double, Double, Double>>> _playerPastLocs = new HashMap<>();
|
||||
private Set<DebugCommand> _debugCommands = new HashSet<>();
|
||||
|
||||
public NautHashMap<String, Long> RejoinTimes = new NautHashMap<String, Long>();
|
||||
public NautHashMap<String, GameTeam> RejoinTeam = new NautHashMap<String, GameTeam>();
|
||||
public NautHashMap<String, Kit> RejoinKit = new NautHashMap<String, Kit>();
|
||||
public NautHashMap<String, Double> RejoinHealth = new NautHashMap<String, Double>();
|
||||
|
||||
public Game(ArcadeManager manager, GameType gameType, Kit[] kits, String[] gameDesc)
|
||||
{
|
||||
Manager = manager;
|
||||
|
@ -2412,4 +2423,148 @@ public abstract class Game implements Listener
|
|||
{
|
||||
return clazz.cast(_modules.get(clazz));
|
||||
}
|
||||
|
||||
/*
|
||||
* All code related to rejoining games.
|
||||
* Moved here from TeamGame
|
||||
*/
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void PlayerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
if (!InProgress())
|
||||
return;
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
GameTeam team = GetTeam(player);
|
||||
if (team == null) return;
|
||||
|
||||
if (!team.IsAlive(player))
|
||||
return;
|
||||
|
||||
if (player.isDead())
|
||||
return;
|
||||
|
||||
if (player.getWorld().getName().equalsIgnoreCase("world"))
|
||||
return;
|
||||
|
||||
if (!QuitOut)
|
||||
{
|
||||
//Store
|
||||
RejoinTimes.put(player.getName(), System.currentTimeMillis());
|
||||
RejoinTeam.put(player.getName(), team);
|
||||
|
||||
if (GetKit(player) != null)
|
||||
RejoinKit.put(player.getName(), GetKit(player));
|
||||
|
||||
RejoinHealth.put(player.getName(), player.getHealth());
|
||||
|
||||
if (!GetLocationStore().containsKey(player.getName()))
|
||||
{
|
||||
GetLocationStore().put(player.getName(), player.getLocation());
|
||||
}
|
||||
|
||||
//Announcement
|
||||
Announce(team.GetColor() + C.Bold + player.getName() + " has disconnected! " + UtilTime.convert(RejoinTime, 0, TimeUnit.MINUTES) + " minutes to rejoin.", false);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void PlayerLoginAllow(PlayerLoginEvent event)
|
||||
{
|
||||
if (!InProgress() || QuitOut)
|
||||
return;
|
||||
|
||||
//Rejoined
|
||||
GameTeam team = RejoinTeam.remove(event.getPlayer().getName());
|
||||
if (team != null && RejoinTimes.remove(event.getPlayer().getName()) != null)
|
||||
{
|
||||
team.AddPlayer(event.getPlayer(), true);
|
||||
Announce(team.GetColor() + C.Bold + event.getPlayer().getName() + " has reconnected!", false);
|
||||
|
||||
|
||||
Kit kit = RejoinKit.remove(event.getPlayer().getName());
|
||||
if (kit != null)
|
||||
_playerKit.put(event.getPlayer(), kit);
|
||||
}
|
||||
}
|
||||
|
||||
//Do this on Join, not Login, otherwise player no get heal.
|
||||
@EventHandler (priority = EventPriority.MONITOR)
|
||||
public void playerRejoinGame(PlayerJoinEvent event)
|
||||
{
|
||||
if (!InProgress() || QuitOut)
|
||||
return;
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (RejoinHealth.containsKey(player.getName()))
|
||||
{
|
||||
double health = RejoinHealth.remove(player.getName());
|
||||
if (health > 0)
|
||||
{
|
||||
getArcadeManager().runSyncLater(() ->
|
||||
{
|
||||
player.setHealth(health);
|
||||
}, 1L);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void PlayerRejoinExpire(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SEC || QuitOut)
|
||||
return;
|
||||
|
||||
Iterator<String> rejoinIterator = RejoinTimes.keySet().iterator();
|
||||
|
||||
while (rejoinIterator.hasNext())
|
||||
{
|
||||
String name = rejoinIterator.next();
|
||||
|
||||
if (!UtilTime.elapsed(RejoinTimes.get(name), RejoinTime))
|
||||
continue;
|
||||
|
||||
rejoinIterator.remove();
|
||||
|
||||
//Get Team (By Name)
|
||||
GameTeam team = RejoinTeam.remove(name);
|
||||
if (team != null)
|
||||
Announce(team.GetColor() + C.Bold + name + " did not reconnect in time!", false);
|
||||
|
||||
RejoinKit.remove(name);
|
||||
RejoinHealth.remove(name);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void RejoinCommand(PlayerCommandPreprocessEvent event)
|
||||
{
|
||||
if (!QuitOut && event.getPlayer().isOp() && event.getMessage().startsWith("/allowrejoin"))
|
||||
{
|
||||
String[] toks = event.getMessage().split(" ");
|
||||
|
||||
if (toks.length <= 1)
|
||||
{
|
||||
event.getPlayer().sendMessage("Missing Param!");
|
||||
}
|
||||
else
|
||||
{
|
||||
RejoinTimes.put(toks[1], System.currentTimeMillis());
|
||||
event.getPlayer().sendMessage("Allowed " + toks[1] + " to rejoin!");
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
protected void removePlayerFromRejoin(String name)
|
||||
{
|
||||
RejoinTimes.remove(name);
|
||||
RejoinKit.remove(name);
|
||||
RejoinTeam.remove(name);
|
||||
RejoinHealth.remove(name);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,15 +25,8 @@ import java.util.List;
|
|||
|
||||
public abstract class TeamGame extends Game
|
||||
{
|
||||
public long RejoinTime = 120000;
|
||||
|
||||
protected ArrayList<GameTeam> _places = new ArrayList<GameTeam>();
|
||||
|
||||
public NautHashMap<String, Long> RejoinTimes = new NautHashMap<String, Long>();
|
||||
public NautHashMap<String, GameTeam> RejoinTeam = new NautHashMap<String, GameTeam>();
|
||||
public NautHashMap<String, Kit> RejoinKit = new NautHashMap<String, Kit>();
|
||||
public NautHashMap<String, Double> RejoinHealth = new NautHashMap<String, Double>();
|
||||
|
||||
public TeamGame(ArcadeManager manager, GameType gameType, Kit[] kits, String[] gameDesc)
|
||||
{
|
||||
super(manager, gameType, kits, gameDesc);
|
||||
|
@ -74,137 +67,6 @@ public abstract class TeamGame extends Game
|
|||
return;
|
||||
|
||||
team.RemovePlayer(player);
|
||||
|
||||
if (player.isDead())
|
||||
return;
|
||||
|
||||
if (player.getWorld().getName().equalsIgnoreCase("world"))
|
||||
return;
|
||||
|
||||
if (!QuitOut)
|
||||
{
|
||||
//Store
|
||||
RejoinTimes.put(player.getName(), System.currentTimeMillis());
|
||||
RejoinTeam.put(player.getName(), team);
|
||||
|
||||
if (GetKit(player) != null)
|
||||
RejoinKit.put(player.getName(), GetKit(player));
|
||||
|
||||
RejoinHealth.put(player.getName(), player.getHealth());
|
||||
|
||||
if (!GetLocationStore().containsKey(player.getName()))
|
||||
{
|
||||
GetLocationStore().put(player.getName(), player.getLocation());
|
||||
}
|
||||
|
||||
//Announcement
|
||||
Announce(team.GetColor() + C.Bold + player.getName() + " has disconnected! " + UtilTime.convert(RejoinTime, 0, TimeUnit.MINUTES) + " minutes to rejoin.", false);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void PlayerLoginAllow(PlayerLoginEvent event)
|
||||
{
|
||||
if (!InProgress() || QuitOut)
|
||||
return;
|
||||
|
||||
//Rejoined
|
||||
GameTeam team = RejoinTeam.remove(event.getPlayer().getName());
|
||||
if (team != null && RejoinTimes.remove(event.getPlayer().getName()) != null)
|
||||
{
|
||||
team.AddPlayer(event.getPlayer(), true);
|
||||
Announce(team.GetColor() + C.Bold + event.getPlayer().getName() + " has reconnected!", false);
|
||||
|
||||
|
||||
Kit kit = RejoinKit.remove(event.getPlayer().getName());
|
||||
if (kit != null)
|
||||
_playerKit.put(event.getPlayer(), kit);
|
||||
|
||||
// final Player player = event.getPlayer();
|
||||
// Bukkit.getScheduler().runTaskLater(Manager.getPlugin(), new Runnable()
|
||||
// {
|
||||
// @Override
|
||||
// public void run()
|
||||
// {
|
||||
// if (RejoinHealth.containsKey(player.getName()))
|
||||
// {
|
||||
// double health = RejoinHealth.remove(player.getName());
|
||||
// player.setHealth(health);
|
||||
// player.sendMessage("DEBUG: restored hp to " + health);
|
||||
// }
|
||||
// }
|
||||
// }, 20);
|
||||
}
|
||||
}
|
||||
|
||||
//Do this on Join, not Login, otherwise player no get heal.
|
||||
@EventHandler (priority = EventPriority.MONITOR)
|
||||
public void playerRejoinGame(PlayerJoinEvent event)
|
||||
{
|
||||
if (!InProgress() || QuitOut)
|
||||
return;
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (RejoinHealth.containsKey(player.getName()))
|
||||
{
|
||||
double health = RejoinHealth.remove(player.getName());
|
||||
if (health > 0)
|
||||
{
|
||||
getArcadeManager().runSyncLater(() ->
|
||||
{
|
||||
player.setHealth(health);
|
||||
}, 1L);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void PlayerRejoinExpire(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SEC || QuitOut)
|
||||
return;
|
||||
|
||||
Iterator<String> rejoinIterator = RejoinTimes.keySet().iterator();
|
||||
|
||||
while (rejoinIterator.hasNext())
|
||||
{
|
||||
String name = rejoinIterator.next();
|
||||
|
||||
if (!UtilTime.elapsed(RejoinTimes.get(name), RejoinTime))
|
||||
continue;
|
||||
|
||||
rejoinIterator.remove();
|
||||
|
||||
//Get Team (By Name)
|
||||
GameTeam team = RejoinTeam.remove(name);
|
||||
if (team != null)
|
||||
Announce(team.GetColor() + C.Bold + name + " did not reconnect in time!", false);
|
||||
|
||||
RejoinKit.remove(name);
|
||||
RejoinHealth.remove(name);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void RejoinCommand(PlayerCommandPreprocessEvent event)
|
||||
{
|
||||
if (!QuitOut && event.getPlayer().isOp() && event.getMessage().startsWith("/allowrejoin"))
|
||||
{
|
||||
String[] toks = event.getMessage().split(" ");
|
||||
|
||||
if (toks.length <= 1)
|
||||
{
|
||||
event.getPlayer().sendMessage("Missing Param!");
|
||||
}
|
||||
else
|
||||
{
|
||||
RejoinTimes.put(toks[1], System.currentTimeMillis());
|
||||
event.getPlayer().sendMessage("Allowed " + toks[1] + " to rejoin!");
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void EndCheck()
|
||||
|
@ -312,12 +174,4 @@ public abstract class TeamGame extends Game
|
|||
|
||||
return players;
|
||||
}
|
||||
|
||||
protected void removePlayerFromRejoin(String name)
|
||||
{
|
||||
RejoinTimes.remove(name);
|
||||
RejoinKit.remove(name);
|
||||
RejoinTeam.remove(name);
|
||||
RejoinHealth.remove(name);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,14 @@ public class KitUHC extends ProgressingKit
|
|||
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ITEMS = {
|
||||
new ItemStack(Material.STONE_SWORD),
|
||||
new ItemStack(Material.STONE_PICKAXE),
|
||||
new ItemStack(Material.STONE_AXE),
|
||||
new ItemStack(Material.STONE_SPADE),
|
||||
new ItemStack(Material.APPLE, 3),
|
||||
};
|
||||
|
||||
private static final ItemStack IN_HAND = new ItemStack(Material.GOLD_SWORD);
|
||||
|
||||
public KitUHC(ArcadeManager manager)
|
||||
|
@ -33,6 +41,6 @@ public class KitUHC extends ProgressingKit
|
|||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
|
||||
player.getInventory().addItem(PLAYER_ITEMS);
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,57 @@
|
|||
package nautilus.game.arcade.game.games.uhc;
|
||||
|
||||
import org.bukkit.WorldBorder;
|
||||
|
||||
public class UHCBorder
|
||||
{
|
||||
|
||||
private static final int WARNING_TIME = 20;
|
||||
|
||||
private UHC _host;
|
||||
private int _startingSize;
|
||||
|
||||
private WorldBorder _worldBorder;
|
||||
|
||||
public UHCBorder(UHC host, int startingSize)
|
||||
{
|
||||
_host = host;
|
||||
_startingSize = startingSize;
|
||||
}
|
||||
|
||||
public void prepare()
|
||||
{
|
||||
_worldBorder = _host.WorldData.World.getWorldBorder();
|
||||
|
||||
_worldBorder.setCenter(0, 0);
|
||||
_worldBorder.setWarningTime(WARNING_TIME);
|
||||
|
||||
setSize(_startingSize, 0);
|
||||
}
|
||||
|
||||
public void setSize(double size, long seconds)
|
||||
{
|
||||
_worldBorder.setSize(size * 2, seconds);
|
||||
}
|
||||
|
||||
public void stop()
|
||||
{
|
||||
_worldBorder.setSize(_worldBorder.getSize());
|
||||
_worldBorder.setSize(99999);
|
||||
}
|
||||
|
||||
public double getSize()
|
||||
{
|
||||
if (_worldBorder == null)
|
||||
{
|
||||
return _startingSize;
|
||||
}
|
||||
|
||||
return _worldBorder.getSize();
|
||||
}
|
||||
|
||||
public double getMaxCords()
|
||||
{
|
||||
return getSize() / 2;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
package nautilus.game.arcade.game.games.uhc;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
public class UHCFreezer implements Listener
|
||||
{
|
||||
|
||||
private UHC _host;
|
||||
|
||||
private Set<UUID> _frozenPlayers = new HashSet<>();
|
||||
|
||||
public UHCFreezer(UHC host)
|
||||
{
|
||||
_host = host;
|
||||
|
||||
JavaPlugin plugin = host.Manager.getPlugin();
|
||||
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
}
|
||||
|
||||
public void freeze(Player player)
|
||||
{
|
||||
_frozenPlayers.add(player.getUniqueId());
|
||||
}
|
||||
|
||||
public void unfreeze(Player player)
|
||||
{
|
||||
_frozenPlayers.remove(player.getUniqueId());
|
||||
}
|
||||
|
||||
public void unfreeze()
|
||||
{
|
||||
_frozenPlayers.clear();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onMove(PlayerMoveEvent event)
|
||||
{
|
||||
if (!_host.IsLive() || !_frozenPlayers.contains(event.getPlayer().getUniqueId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Location from = event.getFrom();
|
||||
Location to = event.getTo();
|
||||
|
||||
if (from.getX() == to.getX() && from.getZ() == to.getZ())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.setTo(from);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
package nautilus.game.arcade.game.games.uhc;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
|
||||
public class UHCSolo extends UHC
|
||||
{
|
||||
|
||||
public UHCSolo(ArcadeManager manager)
|
||||
{
|
||||
this(manager, GameType.UHCSolo);
|
||||
}
|
||||
|
||||
public UHCSolo(ArcadeManager manager, GameType type)
|
||||
{
|
||||
super(manager, type);
|
||||
|
||||
DamageTeamSelf = true;
|
||||
SpawnNearAllies = false;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerTeamGeneration(GameStateChangeEvent event)
|
||||
{
|
||||
if (event.GetState() != GameState.Recruit)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_teamList = new ArrayList<>(Arrays.asList(_teamList.get(0)));
|
||||
|
||||
for (GameTeam team : _teamList)
|
||||
{
|
||||
team.SetName("Players");
|
||||
team.SetColor(ChatColor.YELLOW);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Player> getWinners()
|
||||
{
|
||||
if (GetState().ordinal() >= GameState.End.ordinal())
|
||||
{
|
||||
List<Player> places = GetTeamList().get(0).GetPlacements(true);
|
||||
|
||||
if (places.isEmpty() || !places.get(0).isOnline())
|
||||
return Arrays.asList();
|
||||
else
|
||||
return Arrays.asList(places.get(0));
|
||||
}
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Player> getLosers()
|
||||
{
|
||||
List<Player> winners = getWinners();
|
||||
|
||||
if (winners == null)
|
||||
return null;
|
||||
|
||||
List<Player> losers = GetTeamList().get(0).GetPlayers(false);
|
||||
|
||||
losers.removeAll(winners);
|
||||
|
||||
return losers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetMode()
|
||||
{
|
||||
return "UHC Solo";
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,125 @@
|
|||
package nautilus.game.arcade.game.games.uhc;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.game.modules.TeamModule;
|
||||
|
||||
public class UHCTeams extends UHC
|
||||
{
|
||||
|
||||
public UHCTeams(ArcadeManager manager)
|
||||
{
|
||||
this(manager, GameType.UHC);
|
||||
}
|
||||
|
||||
public UHCTeams(ArcadeManager manager, GameType type)
|
||||
{
|
||||
super(manager, type);
|
||||
|
||||
FillTeamsInOrderToCount = 2;
|
||||
DamageTeamSelf = false;
|
||||
DontAllowOverfill = true;
|
||||
|
||||
// NEVER EVER EVER USE THIS!!!!!
|
||||
//TeamMode = true;
|
||||
|
||||
// Load the Team Module
|
||||
new TeamModule().register(this);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void PlayerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
if (!InProgress())
|
||||
return;
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
GameTeam team = GetTeam(player);
|
||||
if (team == null) return;
|
||||
|
||||
if (!team.IsAlive(player))
|
||||
return;
|
||||
|
||||
team.RemovePlayer(player);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void TeamRename(GameStateChangeEvent event)
|
||||
{
|
||||
if (event.GetState() != GameState.Live)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (GameTeam team : GetTeamList())
|
||||
{
|
||||
// Big Team
|
||||
if (team.GetSize() > 2)
|
||||
{
|
||||
team.SetName("Team " + team.GetName());
|
||||
continue;
|
||||
}
|
||||
|
||||
String name = "";
|
||||
List<Player> players = team.GetPlayers(false);
|
||||
|
||||
for (int i = 0; i < players.size(); i++)
|
||||
{
|
||||
Player player = players.get(i);
|
||||
|
||||
name += player.getName();
|
||||
|
||||
if (i < players.size() - 1)
|
||||
{
|
||||
name += " & ";
|
||||
}
|
||||
}
|
||||
|
||||
team.SetName(name);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Player> getWinners()
|
||||
{
|
||||
if (WinnerTeam == null)
|
||||
return null;
|
||||
|
||||
return WinnerTeam.GetPlayers(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Player> getLosers()
|
||||
{
|
||||
if (WinnerTeam == null)
|
||||
return null;
|
||||
|
||||
List<Player> players = new ArrayList<>();
|
||||
|
||||
for (GameTeam team : GetTeamList())
|
||||
{
|
||||
if (team != WinnerTeam)
|
||||
players.addAll(team.GetPlayers(false));
|
||||
}
|
||||
|
||||
return players;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetMode()
|
||||
{
|
||||
return "UHC Teams";
|
||||
}
|
||||
|
||||
}
|
|
@ -12,17 +12,19 @@ import mineplex.core.common.util.UtilInv;
|
|||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.games.uhc.UHC;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.uhc.UHCSolo;
|
||||
|
||||
/**
|
||||
* Assassins gamemode for UHC
|
||||
*
|
||||
* @author xXVevzZXx
|
||||
*/
|
||||
public class Assassins extends UHC
|
||||
public class Assassins extends UHCSolo
|
||||
{
|
||||
|
||||
private HashMap<Player, Player> _assassins;
|
||||
|
|
|
@ -8,14 +8,14 @@ import org.bukkit.event.block.BlockBreakEvent;
|
|||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.game.games.uhc.UHC;
|
||||
import nautilus.game.arcade.game.games.uhc.UHCSolo;
|
||||
|
||||
/**
|
||||
* BloodDiamonds gamemode for UHC
|
||||
*
|
||||
* @author xXVevzZXx
|
||||
*/
|
||||
public class BloodDiamonds extends UHC
|
||||
public class BloodDiamonds extends UHCSolo
|
||||
{
|
||||
|
||||
private HashMap<Material, Double> _oreDamage;
|
||||
|
|
|
@ -1,68 +0,0 @@
|
|||
package nautilus.game.arcade.game.games.uhc.modes;
|
||||
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.game.games.uhc.UHC;
|
||||
import nautilus.game.arcade.game.modules.CutCleanModule;
|
||||
import nautilus.game.arcade.game.modules.ItemGiverModule;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
/*
|
||||
* The CutClean variant of UHC
|
||||
*
|
||||
* This is identical to UHC however iron and gold ore will immediately smelt
|
||||
* and mob drops will be immediately cooked
|
||||
*/
|
||||
public class CutClean extends UHC
|
||||
{
|
||||
// The amount of steak to give at the start of the game
|
||||
private static final int STEAK_AMOUNT = 15;
|
||||
|
||||
public CutClean(ArcadeManager manager)
|
||||
{
|
||||
super(manager, GameType.Brawl);
|
||||
|
||||
new CutCleanModule()
|
||||
.associateBlockDrop(
|
||||
Material.GOLD_ORE,
|
||||
new ItemBuilder(Material.GOLD_INGOT).build()
|
||||
)
|
||||
.associateBlockDrop(
|
||||
Material.IRON_ORE,
|
||||
new ItemBuilder(Material.IRON_INGOT).build()
|
||||
)
|
||||
.associateMobDrop(
|
||||
Material.RAW_BEEF,
|
||||
new ItemBuilder(Material.COOKED_BEEF).build()
|
||||
)
|
||||
.associateMobDrop(
|
||||
Material.RAW_CHICKEN,
|
||||
new ItemBuilder(Material.COOKED_CHICKEN).build()
|
||||
)
|
||||
.associateMobDrop(
|
||||
Material.RAW_FISH,
|
||||
new ItemBuilder(Material.COOKED_FISH).build()
|
||||
)
|
||||
.associateMobDrop(
|
||||
Material.PORK,
|
||||
new ItemBuilder(Material.GRILLED_PORK).build()
|
||||
)
|
||||
.associateMobDrop(
|
||||
Material.RABBIT,
|
||||
new ItemBuilder(Material.COOKED_RABBIT).build()
|
||||
)
|
||||
.register(this);
|
||||
|
||||
new ItemGiverModule()
|
||||
.withItem(new ItemStack(Material.COOKED_BEEF, STEAK_AMOUNT))
|
||||
.register(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetMode()
|
||||
{
|
||||
return "Cut Clean";
|
||||
}
|
||||
}
|
|
@ -1,28 +1,31 @@
|
|||
package nautilus.game.arcade.game.games.uhc.modes;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.game.games.uhc.UHC;
|
||||
import nautilus.game.arcade.game.modules.CutCleanModule;
|
||||
import nautilus.game.arcade.game.modules.ItemGiverModule;
|
||||
import nautilus.game.arcade.game.modules.OreVeinEditorModule;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.game.games.uhc.UHCSolo;
|
||||
import nautilus.game.arcade.game.modules.CutCleanModule;
|
||||
import nautilus.game.arcade.game.modules.ItemGiverModule;
|
||||
import nautilus.game.arcade.game.modules.OreVeinEditorModule;
|
||||
|
||||
/**
|
||||
* GodBattles gamemode for UHC
|
||||
*/
|
||||
public class GodBattles extends UHC
|
||||
public class GodBattles extends UHCSolo
|
||||
{
|
||||
// The set of materials which will be considered as an ore
|
||||
private static final Set<Material> ORE_MATERIALS = Sets.newHashSet(
|
||||
|
|
|
@ -1,11 +1,5 @@
|
|||
package nautilus.game.arcade.game.modules;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
|
@ -20,11 +14,18 @@ import org.bukkit.event.player.PlayerPickupItemEvent;
|
|||
import org.bukkit.inventory.CraftingInventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.ShapedRecipe;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
import org.bukkit.material.MaterialData;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
|
||||
public class PlayerHeadModule extends Module
|
||||
{
|
||||
private boolean _disableCraftingRegularApples = true;
|
||||
|
@ -36,7 +37,7 @@ public class PlayerHeadModule extends Module
|
|||
ShapedRecipe headApple2 = new ShapedRecipe(new ItemStack(Material.GOLDEN_APPLE, 1));
|
||||
headApple2.shape("GGG", "GHG", "GGG");
|
||||
headApple2.setIngredient('G', Material.GOLD_INGOT);
|
||||
headApple2.setIngredient('H', new MaterialData(Material.SKULL_ITEM, (byte) 3));
|
||||
headApple2.setIngredient('H', new MaterialData(Material.SKULL_ITEM, (byte) 2));
|
||||
UtilServer.getServer().addRecipe(headApple2);
|
||||
}
|
||||
|
||||
|
@ -69,7 +70,7 @@ public class PlayerHeadModule extends Module
|
|||
if (event.getItem().getItemStack().getType() == Material.SKULL_ITEM)
|
||||
{
|
||||
UtilPlayer.message(event.getPlayer(), " ");
|
||||
UtilPlayer.message(event.getPlayer(), C.cGreen + C.Bold + "You picked up a Player Head!");
|
||||
UtilPlayer.message(event.getPlayer(), C.cGreen + C.Bold + "You picked up a Golden Head!");
|
||||
UtilPlayer.message(event.getPlayer(), C.cWhite + "Craft a Golden Head Apple with it for ultimate healing.");
|
||||
UtilPlayer.message(event.getPlayer(), C.cWhite + "Use the recipe for Golden Apple, but Head replaces Apple.");
|
||||
UtilPlayer.message(event.getPlayer(), " ");
|
||||
|
@ -86,15 +87,7 @@ public class PlayerHeadModule extends Module
|
|||
if (team == null)
|
||||
return;
|
||||
|
||||
// Skull Drop
|
||||
ItemStack stack = new ItemBuilder(Material.SKULL_ITEM)
|
||||
.setData((short) 3)
|
||||
.setAmount(1)
|
||||
.setTitle(team.GetColor() + player.getName() + "'s Head")
|
||||
.setPlayerHead(player.getName())
|
||||
.build();
|
||||
|
||||
event.getDrops().add(stack);
|
||||
event.getDrops().add(getGoldenHead());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
@ -164,4 +157,13 @@ public class PlayerHeadModule extends Module
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public static final ItemStack getGoldenHead()
|
||||
{
|
||||
return new ItemBuilder(Material.SKULL_ITEM)
|
||||
.setData((short) 2)
|
||||
.setAmount(1)
|
||||
.setTitle(C.cGoldB + "Golden Head")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue