JSONify the arcade server motd
This commit is contained in:
parent
d8e58baea7
commit
bffd474322
|
@ -0,0 +1,100 @@
|
|||
package mineplex.core.game.status;
|
||||
|
||||
import mineplex.core.account.permissions.PermissionGroup;
|
||||
import mineplex.core.common.Constants;
|
||||
|
||||
public class GameInfo
|
||||
{
|
||||
|
||||
public static GameInfo fromString(String json)
|
||||
{
|
||||
return Constants.GSON.fromJson(json, GameInfo.class);
|
||||
}
|
||||
|
||||
private final String _game, _mode, _map, _serverType;
|
||||
private final int _timer;
|
||||
private final String[] _votingOn;
|
||||
private final PermissionGroup _hostRank;
|
||||
private final GameDisplayStatus _status;
|
||||
private final GameJoinStatus _joinable;
|
||||
|
||||
public GameInfo(String game, String mode, String map, String serverType, int timer, String[] votingOn, PermissionGroup hostRank, GameDisplayStatus status, GameJoinStatus joinable)
|
||||
{
|
||||
_game = game;
|
||||
_mode = mode;
|
||||
_map = map;
|
||||
_serverType = serverType;
|
||||
_timer = timer;
|
||||
_votingOn = votingOn;
|
||||
_hostRank = hostRank;
|
||||
_status = status;
|
||||
_joinable = joinable;
|
||||
}
|
||||
|
||||
public String getGame()
|
||||
{
|
||||
return _game;
|
||||
}
|
||||
|
||||
public String getMode()
|
||||
{
|
||||
return _mode;
|
||||
}
|
||||
|
||||
public String getMap()
|
||||
{
|
||||
return _map;
|
||||
}
|
||||
|
||||
public String getServerType()
|
||||
{
|
||||
return _serverType;
|
||||
}
|
||||
|
||||
public int getTimer()
|
||||
{
|
||||
return _timer;
|
||||
}
|
||||
|
||||
public String[] getVotingOn()
|
||||
{
|
||||
return _votingOn;
|
||||
}
|
||||
|
||||
public PermissionGroup getHostRank()
|
||||
{
|
||||
return _hostRank;
|
||||
}
|
||||
|
||||
public GameDisplayStatus getStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
public GameJoinStatus getJoinable()
|
||||
{
|
||||
return _joinable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return Constants.GSON.toJson(this);
|
||||
}
|
||||
|
||||
public enum GameDisplayStatus
|
||||
{
|
||||
WAITING,
|
||||
VOTING,
|
||||
STARTING,
|
||||
IN_PROGRESS,
|
||||
CLOSING
|
||||
}
|
||||
|
||||
public enum GameJoinStatus
|
||||
{
|
||||
OPEN,
|
||||
RANKS_ONLY,
|
||||
CLOSED
|
||||
}
|
||||
}
|
|
@ -30,6 +30,7 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
|||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerLoginEvent;
|
||||
import org.bukkit.event.player.PlayerLoginEvent.Result;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.server.ServerListPingEvent;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
|
@ -80,6 +81,9 @@ import mineplex.core.gadget.event.ToggleMobsEvent;
|
|||
import mineplex.core.gadget.types.Gadget;
|
||||
import mineplex.core.gadget.types.GadgetType;
|
||||
import mineplex.core.game.MineplexGameManager;
|
||||
import mineplex.core.game.status.GameInfo;
|
||||
import mineplex.core.game.status.GameInfo.GameDisplayStatus;
|
||||
import mineplex.core.game.status.GameInfo.GameJoinStatus;
|
||||
import mineplex.core.game.winstreaks.WinStreakManager;
|
||||
import mineplex.core.google.GoogleSheetsManager;
|
||||
import mineplex.core.hologram.HologramManager;
|
||||
|
@ -170,6 +174,8 @@ import nautilus.game.arcade.managers.chat.GameChatManager;
|
|||
import nautilus.game.arcade.managers.lobby.LobbyManager;
|
||||
import nautilus.game.arcade.managers.lobby.current.NewGameLobbyManager;
|
||||
import nautilus.game.arcade.managers.lobby.legacy.LegacyGameLobbyManager;
|
||||
import nautilus.game.arcade.managers.voting.Vote;
|
||||
import nautilus.game.arcade.managers.voting.types.GameVote;
|
||||
|
||||
public class ArcadeManager extends MiniPlugin implements IRelation
|
||||
{
|
||||
|
@ -1010,13 +1016,13 @@ public class ArcadeManager extends MiniPlugin implements IRelation
|
|||
}
|
||||
|
||||
@EventHandler
|
||||
public void MessageMOTD(ServerListPingEvent event)
|
||||
public void motdPing(ServerListPingEvent event)
|
||||
{
|
||||
event.setMaxPlayers(_serverConfig.MaxPlayers);
|
||||
|
||||
if (UtilServer.isTestServer(false))
|
||||
{
|
||||
event.setMotd(ChatColor.GOLD + "Private Mineplex Test Server");
|
||||
event.setMotd(C.cGold + "Private Mineplex Test Server");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1025,59 +1031,93 @@ public class ArcadeManager extends MiniPlugin implements IRelation
|
|||
{
|
||||
if (_gameHostManager.isHostExpired())
|
||||
{
|
||||
event.setMotd(ChatColor.RED + "Finished");
|
||||
event.setMotd(C.cRed + "Finished");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!GetServerConfig().PublicServer || GetServerConfig().PlayerServerWhitelist || _gameHostManager.isCommunityServer())
|
||||
{
|
||||
event.setMotd(ChatColor.GRAY + "Private");
|
||||
event.setMotd(C.cGray + "Private");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
String game = "Waiting For Players";
|
||||
String map = game;
|
||||
boolean nullGame = _game == null;
|
||||
String game = null, mode = null, map = null;
|
||||
int timer = -1;
|
||||
String[] votingOn = null;
|
||||
PermissionGroup hostRank = null;
|
||||
GameDisplayStatus status;
|
||||
|
||||
// Vote in progress
|
||||
if (_gameCreationManager.getVotingManager().isVoteInProgress())
|
||||
{
|
||||
game = _gameCreationManager.getNextGameType() == null ? "Voting" : _gameCreationManager.getNextGameType().getName();
|
||||
map = "Voting";
|
||||
}
|
||||
else if (!_serverConfig.GameVoting && !_serverConfig.GameList.isEmpty())
|
||||
{
|
||||
game = _serverConfig.GameList.get(0).getName();
|
||||
}
|
||||
status = GameDisplayStatus.VOTING;
|
||||
|
||||
if (_game != null && _game.WorldData != null)
|
||||
{
|
||||
game = _game.GetName();
|
||||
map = _game.WorldData.MapName;
|
||||
}
|
||||
|
||||
String extrainformation = "|" + _serverConfig.ServerType + "|" + game + "|" + map;
|
||||
|
||||
if (_gameHostManager.isPrivateServer() && _gameHostManager.hasPermission(Perm.FEATURED_SERVER))
|
||||
{
|
||||
extrainformation += "|HostRank." + _gameHostManager.getHostRank().name();
|
||||
}
|
||||
|
||||
if (_game == null || _game.GetState() == GameState.Recruit)
|
||||
{
|
||||
if (_game != null && _game.GetCountdown() != -1)
|
||||
// Null game - GameVote
|
||||
if (nullGame)
|
||||
{
|
||||
event.setMotd(ChatColor.GREEN + "Starting in " + _game.GetCountdown() + " Seconds" + extrainformation);
|
||||
game = "Voting";
|
||||
map = game;
|
||||
|
||||
Vote vote = _gameCreationManager.getVotingManager().getCurrentVote();
|
||||
|
||||
if (vote instanceof GameVote)
|
||||
{
|
||||
votingOn = ((GameVote) vote).getValues().stream()
|
||||
.map(GameType::getName)
|
||||
.toArray(String[]::new);
|
||||
}
|
||||
}
|
||||
// MapVote
|
||||
else
|
||||
{
|
||||
event.setMotd(ChatColor.GREEN + "Recruiting" + extrainformation);
|
||||
game = _game.GetName();
|
||||
mode = _game.GetMode();
|
||||
map = "Voting";
|
||||
}
|
||||
}
|
||||
//In Progress
|
||||
// No vote and game null. Staff-1 or pre game voting
|
||||
else if (nullGame)
|
||||
{
|
||||
status = GameDisplayStatus.WAITING;
|
||||
}
|
||||
// Game not null
|
||||
else
|
||||
{
|
||||
event.setMotd(ChatColor.YELLOW + "In Progress" + extrainformation);
|
||||
game = _game.GetName();
|
||||
mode = _game.GetMode();
|
||||
map = _game.WorldData.MapName;
|
||||
|
||||
// Game not in progress
|
||||
if (_game.inLobby())
|
||||
{
|
||||
timer = _game.GetCountdown();
|
||||
|
||||
// Counting down
|
||||
if (timer != -1)
|
||||
{
|
||||
status = GameDisplayStatus.STARTING;
|
||||
}
|
||||
else
|
||||
{
|
||||
status = GameDisplayStatus.WAITING;
|
||||
}
|
||||
}
|
||||
// Game in progress
|
||||
else
|
||||
{
|
||||
status = GameDisplayStatus.IN_PROGRESS;
|
||||
}
|
||||
}
|
||||
|
||||
// MPS
|
||||
if (_gameHostManager.isPrivateServer() && _gameHostManager.getHostRank().hasPermission(Perm.FEATURED_SERVER))
|
||||
{
|
||||
hostRank = _gameHostManager.getHostRank();
|
||||
}
|
||||
|
||||
event.setMotd(new GameInfo(game, mode, map, _serverConfig.ServerType, timer, votingOn, hostRank, status, getJoinable()).toString());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
@ -1193,56 +1233,62 @@ public class ArcadeManager extends MiniPlugin implements IRelation
|
|||
return;
|
||||
}
|
||||
|
||||
// Reserved Slot Check
|
||||
if (Bukkit.getOnlinePlayers().size() >= Bukkit.getServer().getMaxPlayers())
|
||||
GameJoinStatus joinable = getJoinable();
|
||||
|
||||
if (joinable != GameJoinStatus.OPEN)
|
||||
{
|
||||
if (client.hasPermission(Perm.JOIN_FULL_STAFF))
|
||||
{
|
||||
event.allow();
|
||||
event.setResult(PlayerLoginEvent.Result.ALLOWED);
|
||||
return;
|
||||
}
|
||||
else if (client.hasPermission(Perm.JOIN_FULL) || _donationManager.Get(player).ownsUnknownSalesPackage(_serverConfig.ServerType + " ULTRA"))
|
||||
|
||||
boolean canOverflow = client.hasPermission(Perm.JOIN_FULL) || _donationManager.Get(player).ownsUnknownSalesPackage(_serverConfig.ServerType + " ULTRA");
|
||||
|
||||
if (canOverflow)
|
||||
{
|
||||
String reason = C.Bold + "Server has reached max capacity for gameplay purposes.";
|
||||
|
||||
if (_serverConfig.HardMaxPlayerCap)
|
||||
if (joinable == GameJoinStatus.RANKS_ONLY)
|
||||
{
|
||||
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, reason);
|
||||
return;
|
||||
event.allow();
|
||||
}
|
||||
else if (Bukkit.getServer().getOnlinePlayers().size() / Bukkit.getMaxPlayers() > 1.5)
|
||||
else
|
||||
{
|
||||
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, reason);
|
||||
return;
|
||||
event.disallow(Result.KICK_OTHER, C.Bold + "Server has reached max capacity for gameplay purposes.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (joinable == GameJoinStatus.RANKS_ONLY)
|
||||
{
|
||||
event.disallow(Result.KICK_OTHER, C.Bold + "Server has reached max capacity for gameplay purposes.");
|
||||
}
|
||||
else
|
||||
{
|
||||
event.disallow(Result.KICK_OTHER, C.Bold + "Server Full > Purchase Ultra at www.mineplex.com/shop");
|
||||
}
|
||||
else if (_gameHostManager.isEventServer() && Bukkit.getServer().getOnlinePlayers().size() >= 128)
|
||||
{
|
||||
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, reason);
|
||||
return;
|
||||
}
|
||||
|
||||
event.allow();
|
||||
event.setResult(PlayerLoginEvent.Result.ALLOWED);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Server Full > Purchase Ultra at www.mineplex.com/shop");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void AdminOP(PlayerJoinEvent event)
|
||||
private GameJoinStatus getJoinable()
|
||||
{
|
||||
if (_clientManager.Get(event.getPlayer()).hasPermission(Perm.AUTO_OP))
|
||||
if (Bukkit.getOnlinePlayers().size() >= Bukkit.getServer().getMaxPlayers())
|
||||
{
|
||||
event.getPlayer().setOp(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
event.getPlayer().setOp(false);
|
||||
if (_serverConfig.HardMaxPlayerCap || (double) Bukkit.getServer().getOnlinePlayers().size() / Bukkit.getMaxPlayers() > 1.5 || (_gameHostManager.isEventServer() && Bukkit.getServer().getOnlinePlayers().size() >= 128))
|
||||
{
|
||||
return GameJoinStatus.CLOSED;
|
||||
}
|
||||
|
||||
return GameJoinStatus.RANKS_ONLY;
|
||||
}
|
||||
|
||||
return GameJoinStatus.OPEN;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void adminOP(PlayerJoinEvent event)
|
||||
{
|
||||
event.getPlayer().setOp(_clientManager.Get(event.getPlayer()).hasPermission(Perm.AUTO_OP));
|
||||
}
|
||||
|
||||
public boolean IsAlive(Player player)
|
||||
|
|
|
@ -14,7 +14,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
|||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.game.region.GameRejoinManager;
|
||||
import mineplex.core.game.rejoin.GameRejoinManager;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
|
|
Loading…
Reference in New Issue