Merge pull request #1 from premium-server-menu to master

* commit '95a45409a98c141a115e463e56e440b204ae2029':
  Use UtilPlayer and F.main for messaging
  Fix flashing clock (oops!)
  Sound effects and knockbacks!
  Flashing wool instead of clock for the timer
  Change duration of timer. Don't punish a party if the leader has ultra
  Lighten load on our servers, not free servers!
  Lore edit on clock item
  Place players on correct server corresponding to their rank via portals
  Visual clock update
  Fix lore messages not displaying correctly under certain circumstances
  Use constants for lore messages on server page
  Prevent free players from joining servers before time limit
  Deny joining Premium servers through server command without premium
  Fix "Click to Spectate" formatting
  Identify free servers from server name
  Add Server Menu for Premium Servers. Item lore still needs some work
This commit is contained in:
Jonathan Williams 2014-08-01 02:05:39 -05:00
commit 53ce70488f
6 changed files with 396 additions and 146 deletions

View File

@ -2,7 +2,7 @@ package mineplex.core.portal.Commands;
import org.bukkit.entity.Player;
import mineplex.core.command.*;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.C;
import mineplex.core.common.util.Callback;
@ -84,6 +84,13 @@ public class ServerCommand extends CommandBase<Portal>
else
deniedAccess = true;
}
else if (!servUp.contains("FREE"))
{
if (playerRank.Has(Rank.ULTRA))
Plugin.SendPlayerToServerWithMessage(player, args[0]);
else
deniedAccess = true;
}
else
{
Plugin.SendPlayerToServerWithMessage(player, args[0]);

View File

@ -0,0 +1,19 @@
package mineplex.core.shop.item;
import org.bukkit.entity.Player;
public abstract class SingleButton implements IButton
{
public abstract void Clicked(Player player);
public void ClickedLeft(Player player)
{
Clicked(player);
}
public void ClickedRight(Player player)
{
Clicked(player);
}
}

View File

@ -9,4 +9,9 @@ public class ServerInfo
public String Map;
public String ServerType;
public String Game;
public boolean isFree()
{
return Name.contains("FREE");
}
}

View File

@ -5,6 +5,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@ -12,7 +13,6 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.Sound;
@ -25,6 +25,7 @@ import org.bukkit.event.entity.EntityPortalEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerPortalEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.Vector;
@ -62,6 +63,8 @@ import mineplex.hub.server.ui.ServerNpcShop;
public class ServerManager extends MiniPlugin
{
private static final Long FREE_PORTAL_TIMER = Duration.ofSeconds(60).toMillis();
private CoreClientManager _clientManager;
private DonationManager _donationManager;
private Portal _portal;
@ -78,6 +81,9 @@ public class ServerManager extends MiniPlugin
private NautHashMap<String, Long> _serverUpdate = new NautHashMap<String, Long>();
private NautHashMap<Vector, String> _serverPortalLocations = new NautHashMap<Vector, String>();
// Join Time for Free Players Timer
private NautHashMap<String, Long> _freeJoinTime = new NautHashMap<String, Long>();
private QueueShop _domShop;
private QuickShop _quickShop;
private LobbyShop _lobbyShop;
@ -131,17 +137,40 @@ public class ServerManager extends MiniPlugin
return;
}
Player player = (Player)event.getEntity();
if (!_hubManager.CanPortal(player))
{
UtilAction.velocity(player, UtilAlg.getTrajectory(player.getLocation(), _hubManager.GetSpawn()), 1, true, 0.8, 0, 1, true);
return;
}
final Player player = (Player)event.getEntity();
if (!Recharge.Instance.use(player, "Portal Server", 1000, false, false))
return;
long timeUntilPortal = getMillisecondsUntilPortal(player);
if (!_hubManager.CanPortal(player) || timeUntilPortal > 0)
{
if (timeUntilPortal > 0)
{
player.playSound(player.getEyeLocation(), Sound.CHICKEN_EGG_POP, 2, 2);
UtilPlayer.message(player, F.main("Server Portal", "You cannot join a server for " + C.cGreen + UtilTime.convertString(timeUntilPortal, 0, TimeUnit.SECONDS)));
}
UtilAction.velocity(player, UtilAlg.getTrajectory(player.getLocation(), _hubManager.GetSpawn()), 1.5, true, 0.8, 0, 1.0, true);
// Need to set their velocity again a tick later
// Setting Y-Velocity while in a portal doesn't seem to do anything... Science!
_plugin.getServer().getScheduler().runTask(_plugin, new Runnable()
{
@Override
public void run()
{
if (player != null && player.isOnline())
{
UtilAction.velocity(player, UtilAlg.getTrajectory(player.getLocation(), _hubManager.GetSpawn()), 1, true, 0.5, 0, 1.0, true);
}
}
});
return;
}
String serverName = _serverPortalLocations.get(player.getLocation().getBlock().getLocation().toVector());
if (serverName != null)
@ -158,11 +187,16 @@ public class ServerManager extends MiniPlugin
try
{
Collections.sort(serverList, new ServerSorter(slots));
boolean hasUltra = _clientManager.Get(player).GetRank().Has(Rank.ULTRA);
for (ServerInfo serverInfo : serverList)
{
if ((serverInfo.MOTD.contains("Starting") || serverInfo.MOTD.contains("Recruiting") || serverInfo.MOTD.contains("Waiting") || serverInfo.MOTD.contains("Cup")) && (serverInfo.MaxPlayers - serverInfo.CurrentPlayers) >= slots)
{
// Make sure ultra players get put on premium servers, non premium gets placed on free servers
if (hasUltra == serverInfo.isFree())
continue;
SelectServer(player, serverInfo);
return;
}
@ -174,7 +208,7 @@ public class ServerManager extends MiniPlugin
exception.printStackTrace();
}
player.sendMessage(F.main("Server Portal", "There are currently no joinable servers!"));
UtilPlayer.message(player, F.main("Server Portal", "There are currently no joinable servers!"));
}
}
@ -208,6 +242,17 @@ public class ServerManager extends MiniPlugin
{
event.getPlayer().getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.COMPASS.getId(), (byte)0, 1, ChatColor.GREEN + "Game Menu"));
event.getPlayer().getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.WATCH.getId(), (byte)0, 1, ChatColor.GREEN + "Lobby Menu"));
if (_clientManager.Get(event.getPlayer()).GetRank() == Rank.ALL)
{
_freeJoinTime.put(event.getPlayer().getName(), System.currentTimeMillis());
}
}
@EventHandler
public void playerQuit(PlayerQuitEvent event)
{
_freeJoinTime.remove(event.getPlayer().getName());
}
@EventHandler(priority = EventPriority.LOWEST)
@ -223,6 +268,36 @@ public class ServerManager extends MiniPlugin
}
}
public Long getMillisecondsUntilPortal(Player player)
{
// Party party = _partyManager.GetParty(player);
long timeLeft = 0;
if (_freeJoinTime.containsKey(player.getName()))
{
timeLeft = (_freeJoinTime.get(player.getName()) - System.currentTimeMillis()) + FREE_PORTAL_TIMER;
if (timeLeft <= 0)
{
_freeJoinTime.remove(player.getName());
timeLeft = 0;
}
}
// if (party != null)
// {
// if (player.getName().equals(party.GetLeader()))
// {
// for (Player partyPlayer : party.GetPlayersOnline())
// {
// if (!partyPlayer.equals(player))
// timeLeft = Math.max(timeLeft, getMillisecondsUntilPortal(partyPlayer));
// }
// }
// }
return timeLeft;
}
public void RemoveServer(String serverName)
{
for (String key : _serverKeyInfoMap.keySet())

View File

@ -4,26 +4,40 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.Rank;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilTime;
import mineplex.core.donation.DonationManager;
import mineplex.core.logger.Logger;
import mineplex.core.shop.item.ShopItem;
import mineplex.core.shop.item.SingleButton;
import mineplex.core.shop.page.ShopPageBase;
import mineplex.hub.server.ServerInfo;
import mineplex.hub.server.ServerManager;
import mineplex.hub.server.ServerSorter;
import mineplex.hub.server.ui.button.JoinServerButton;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
public class ServerNpcPage extends ShopPageBase<ServerManager, ServerNpcShop> implements IServerPage
{
// Shop Item Messages
private static final String MESSAGE_SHOP_URL = ChatColor.RESET + "www.mineplex.com/shop";
private static final String MESSAGE_REQUIRES_PREMIUM = ChatColor.RESET + C.cRed + "Premium requires " + Rank.ULTRA.GetTag(false, false) + C.cRed + " or " + Rank.HERO.GetTag(false, false);
private static final String MESSAGE_BETA_GET_ULTRA = ChatColor.RESET + C.Line + "Get Ultra to join Beta servers!";
private static final String MESSAGE_JOIN = ChatColor.RESET + C.Line + "Click to Join";
private static final String MESSAGE_IN_PROGRESS = ChatColor.RESET + C.Line + "Game in Progress.";
private static final String MESSAGE_SPECTATE = ChatColor.RESET + C.Line + "Click to Spectate";
private static final String MESSAGE_WAIT = ChatColor.RESET + C.Line + "and wait for next game!";
private static final String MESSAGE_FULL_GET_ULTRA = ChatColor.RESET + C.Line + "Get Ultra to join full servers!";
private static final String MESSAGE_RESTARTING = ChatColor.RESET + C.Line + "This server will be open shortly!";
private String _serverNpcKey;
private boolean _onMainPage = true;
private boolean _freeOnly;
public ServerNpcPage(ServerManager plugin, ServerNpcShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player, String serverNpcKey)
{
@ -38,17 +52,16 @@ public class ServerNpcPage extends ShopPageBase<ServerManager, ServerNpcShop> im
protected void BuildPage()
{
List<ServerInfo> serverList = new ArrayList<ServerInfo>(Plugin.GetServerList(_serverNpcKey));
int slots = 1;
int slotsNeeded = 1;
if (serverList.size() > 0)
{
slots = Plugin.GetRequiredSlots(Player, serverList.get(0).ServerType);
slotsNeeded = Plugin.GetRequiredSlots(Player, serverList.get(0).ServerType);
}
try
{
Collections.sort(serverList, new ServerSorter(slots));
Collections.sort(serverList, new ServerSorter(slotsNeeded));
}
catch (Exception exception)
{
@ -56,52 +69,91 @@ public class ServerNpcPage extends ShopPageBase<ServerManager, ServerNpcShop> im
exception.printStackTrace();
}
int slot = 10;
int greenCount = 0;
int yellowCount = 0;
String openFull = ChatColor.RESET + C.Line + "Get Ultra to join full servers!";
String beta = ChatColor.RESET + C.Line + "Get Ultra to join Beta servers!";
String openFullUltra = ChatColor.RESET + C.Line + "Click to join!";
for (ServerInfo serverInfo : serverList)
if (_onMainPage)
{
buildAvailableServerPage(serverList, slotsNeeded);
}
else
{
buildInProgressServerPage(serverList, _freeOnly, slotsNeeded);
}
}
private void showClock(long milliseconds)
{
int seconds = (int) (milliseconds / 1000);
String timeLeft = UtilTime.convertString(milliseconds, 0, UtilTime.TimeUnit.SECONDS);
byte data = (byte) (milliseconds - (seconds * 1000) > 500 ? 15 : 14);
ShopItem item = new ShopItem(Material.WOOL, data, ChatColor.RESET + C.Bold + "Free Server Timer", null, new String[] {
ChatColor.RESET + C.cGreen + timeLeft + " Remaining...",
ChatColor.RESET + "",
ChatColor.RESET + C.cYellow + "Free players must wait a short time",
ChatColor.RESET + C.cYellow + "to help lighten the load on our servers.",
ChatColor.RESET + "",
ChatColor.RESET + C.cAqua + "Ultra and Hero players have instant",
ChatColor.RESET + C.cAqua + "access to free and premium servers!",
ChatColor.RESET + "",
ChatColor.RESET + "Visit " + C.cGreen + "www.mineplex.com/shop" + C.cWhite + " for Premium!"
}, seconds, false, false);
AddItem(20, item);
}
private void clearPage()
{
for (int i = 0; i < getSize(); i++)
{
setItem(i, null);
}
}
private ShopItem buildShopItem(ServerInfo serverInfo, int slotsNeeded)
{
boolean ownsUltraPackage = DonationManager.Get(Player.getName()).OwnsUnknownPackage(serverInfo.ServerType + " ULTRA") || Client.GetRank().Has(Rank.ULTRA);
String inProgress = (serverInfo.Game == null || serverInfo.ServerType.equalsIgnoreCase("Competitive")) ? (ChatColor.RESET + C.Line + "Game in progress.") : (ChatColor.RESET + C.Line + "Click to spectate");
String inProgressLine2 = (serverInfo.Game == null || serverInfo.ServerType.equalsIgnoreCase("Competitive")) ? null : (ChatColor.RESET + C.Line + "and wait for next game!");
Material status = Material.REDSTONE_BLOCK;
boolean free = serverInfo.isFree();
List<String> lore = new ArrayList<String>();
if (slot >= 53)
break;
String inProgress = (serverInfo.Game == null || serverInfo.ServerType.equalsIgnoreCase("Competitive")) ? MESSAGE_IN_PROGRESS : MESSAGE_SPECTATE;
String wait = (serverInfo.Game == null || serverInfo.ServerType.equalsIgnoreCase("Competitive")) ? null : MESSAGE_WAIT;
if ((serverInfo.MOTD.contains("Starting") || serverInfo.MOTD.contains("Recruiting") || serverInfo.MOTD.contains("Waiting") || serverInfo.MOTD.contains("Cup")) && slot < 15 && (serverInfo.MaxPlayers - serverInfo.CurrentPlayers) >= slots)
{
if (greenCount > 0 && serverInfo.MaxPlayers == serverInfo.CurrentPlayers)
continue;
if (isStarting(serverInfo) && (serverInfo.MaxPlayers - serverInfo.CurrentPlayers) >= slotsNeeded)
status = free ? Material.EMERALD_BLOCK : Material.DIAMOND_BLOCK;
else if (isInProgress(serverInfo))
status = Material.GOLD_BLOCK;
slot += 1;
status = Material.EMERALD_BLOCK;
lore.add(ChatColor.RESET + "");
if (serverInfo.Game != null)
lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Game: " + ChatColor.WHITE + serverInfo.Game);
lore.add(ChatColor.RESET + C.cYellow + "Game: " + C.cWhite + serverInfo.Game);
if (serverInfo.Map != null && !serverInfo.ServerType.equalsIgnoreCase("Competitive"))
lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Map: " + ChatColor.WHITE + serverInfo.Map);
lore.add(ChatColor.RESET + C.cYellow + "Map: " + C.cWhite + serverInfo.Map);
lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Players: " + ChatColor.WHITE + serverInfo.CurrentPlayers + "/" + serverInfo.MaxPlayers);
lore.add(ChatColor.RESET + C.cYellow + "Players: " + C.cWhite + serverInfo.CurrentPlayers + "/" + serverInfo.MaxPlayers);
lore.add(ChatColor.RESET + "");
// Only show motd if the player has access
if (free || ownsUltraPackage)
lore.add(ChatColor.RESET + serverInfo.MOTD);
if (serverInfo.Name.contains("BETA") && !ownsUltraPackage)
{
lore.add(beta);
lore.add(MESSAGE_BETA_GET_ULTRA);
}
else
{
if (serverInfo.CurrentPlayers >= serverInfo.MaxPlayers)
if (isInProgress(serverInfo))
{
if (serverInfo.MOTD.contains("Restarting"))
{
status = Material.IRON_BLOCK;
lore.add(MESSAGE_RESTARTING);
}
else
{
if (serverInfo.Game.equalsIgnoreCase("Survival Games"))
{
@ -111,82 +163,181 @@ public class ServerNpcPage extends ShopPageBase<ServerManager, ServerNpcShop> im
else
{
if (!ownsUltraPackage)
lore.add(openFull);
{
if (free)
lore.add(MESSAGE_FULL_GET_ULTRA);
else
lore.add(openFullUltra);
{
lore.add(MESSAGE_REQUIRES_PREMIUM);
lore.add(MESSAGE_SHOP_URL);
}
}
else
{
lore.add(ChatColor.RESET + C.Line + "Click to join!");
lore.add(inProgress);
if (wait != null)
lore.add(wait);
}
}
}
}
else
{
if (free || ownsUltraPackage)
{
if (serverInfo.CurrentPlayers >= serverInfo.MaxPlayers && !ownsUltraPackage)
{
lore.add(MESSAGE_FULL_GET_ULTRA);
}
else
{
lore.add(MESSAGE_JOIN);
}
}
else
{
lore.add(MESSAGE_REQUIRES_PREMIUM);
lore.add(MESSAGE_SHOP_URL);
}
}
}
greenCount++;
return new ShopItem(status, ChatColor.RESET + C.Line + C.Bold + (free ? C.cGreen + "Free Server " : C.cAqua + "Premium Server ") + serverInfo.Name.split("-")[1], lore.toArray(new String[lore.size()]), serverInfo.CurrentPlayers, false);
}
else if (serverInfo.MOTD.contains("In") || serverInfo.MOTD.contains("Restarting"))
private void buildAvailableServerPage(List<ServerInfo> serverList, int slotsNeeded)
{
if (slot <= 15)
slot = 27;
int greenCount = 0;
int blueCount = 0;
int yellowFreeCount = 0;
int yellowUltraCount = 0;
int greenStartSlot = 19;
int blueStartSlot = 23;
boolean showGreen = true;
long portalTime = Plugin.getMillisecondsUntilPortal(Player);
if (portalTime > 0)
{
showClock(portalTime);
showGreen = false;
}
for (ServerInfo serverInfo : serverList)
{
boolean free = serverInfo.isFree();
int slot = (free ? greenCount + greenStartSlot : blueCount + blueStartSlot);
if (isStarting(serverInfo) && hasEnoughSlots(serverInfo, slotsNeeded) && (free ? greenCount : blueCount) < 3)
{
if ((free && showGreen) || !free)
{
ShopItem shopItem = buildShopItem(serverInfo, slotsNeeded);
if (free)
greenCount++;
else
blueCount++;
AddButton(slot, shopItem, new JoinServerButton(this, serverInfo));
}
}
else
{
if (free)
yellowFreeCount++;
else
yellowUltraCount++;
}
}
// AddItem(11, new ShopItem(Material.IRON_BLOCK, C.cGreen + "Free Servers", new String[] {C.cGray + "Anyone can play!" }, 1, false));
// AddItem(15, new ShopItem(Material.IRON_BLOCK, C.cBlue + "Premium Servers", new String[] {C.cGray + "Available to " + Rank.ULTRA.GetTag(true, true) + ChatColor.RESET + C.cGray + " and " + Rank.HERO.GetTag(true, true) + ChatColor.RESET + C.cGray + "!" }, 1, false));
AddButton(38, new ShopItem(Material.GOLD_BLOCK, C.cGreen + yellowFreeCount + " Games In Progress", new String[]{MESSAGE_SPECTATE}, yellowFreeCount > 64 ? 1 : yellowFreeCount, false), new SingleButton()
{
@Override
public void Clicked(Player player)
{
long portalTime = Plugin.getMillisecondsUntilPortal(Player);
if (portalTime <= 0)
{
_onMainPage = false;
_freeOnly = true;
}
else
{
PlayDenySound(Player);
}
}
});
AddButton(42, new ShopItem(Material.GOLD_BLOCK, C.cAqua + yellowUltraCount + " Games In Progress", new String[]{MESSAGE_SPECTATE}, yellowUltraCount > 64 ? 1 : yellowUltraCount, false), new SingleButton()
{
@Override
public void Clicked(Player player)
{
_onMainPage = false;
_freeOnly = false;
}
});
// Clear empty slots
if (showGreen)
{
for (int i = greenCount + greenStartSlot; i < greenStartSlot + 3; i++)
{
setItem(i, null);
}
}
for (int i = blueCount + blueStartSlot; i < blueStartSlot + 3; i++)
{
setItem(i, null);
}
}
private boolean isStarting(ServerInfo serverInfo)
{
return (serverInfo.MOTD.contains("Starting") || serverInfo.MOTD.contains("Recruiting") || serverInfo.MOTD.contains("Waiting") || serverInfo.MOTD.contains("Cup"));
}
private boolean isInProgress(ServerInfo serverInfo)
{
return serverInfo.MOTD.contains("In") || serverInfo.MOTD.contains("Restarting");
}
private boolean hasEnoughSlots(ServerInfo serverInfo, int slotsNeeded)
{
return (serverInfo.MaxPlayers - serverInfo.CurrentPlayers) >= slotsNeeded;
}
private void buildInProgressServerPage(List<ServerInfo> serverList, boolean freeOnly, int slotsNeeded)
{
int slot = 9;
for (ServerInfo serverInfo : serverList)
{
if (isInProgress(serverInfo) && serverInfo.isFree() == freeOnly && slot < getSize())
{
ShopItem shopItem = buildShopItem(serverInfo, slotsNeeded);
AddButton(slot, shopItem, new JoinServerButton(this, serverInfo));
slot++;
}
}
status = Material.GOLD_BLOCK;
lore.add(ChatColor.RESET + "");
if (serverInfo.Game != null)
lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Game: " + ChatColor.WHITE + serverInfo.Game);
if (serverInfo.Map != null && !serverInfo.ServerType.equalsIgnoreCase("Competitive"))
lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Map: " + ChatColor.WHITE + serverInfo.Map);
lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Players: " + ChatColor.WHITE + serverInfo.CurrentPlayers + "/" + serverInfo.MaxPlayers);
lore.add(ChatColor.RESET + "");
lore.add(ChatColor.RESET + serverInfo.MOTD);
if (serverInfo.MOTD.contains("Restarting"))
AddButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[] { }, 1, false), new SingleButton()
{
lore.add(ChatColor.RESET + C.Line + "This server will be open shortly!");
status = Material.IRON_BLOCK;
}
else if (serverInfo.CurrentPlayers >= serverInfo.MaxPlayers)
@Override
public void Clicked(Player player)
{
if (!Client.GetRank().Has(Rank.ULTRA) || ownsUltraPackage)
lore.add(openFull);
else
clearPage();
_onMainPage = true;
}
});
while (slot < getSize())
{
lore.add(inProgress);
if (inProgressLine2 != null)
lore.add(inProgressLine2);
}
}
else
{
lore.add(inProgress);
if (inProgressLine2 != null)
lore.add(inProgressLine2);
}
yellowCount++;
}
else
continue;
AddButton(slot, new ShopItem(status, ChatColor.UNDERLINE + "" + ChatColor.BOLD + "" + ChatColor.WHITE + "Server " + serverInfo.Name.substring(serverInfo.Name.indexOf('-') + 1), lore.toArray(new String[lore.size()]), Math.max(1, serverInfo.CurrentPlayers), false), new JoinServerButton(this, serverInfo));
}
while (greenCount < 3)
{
setItem(9 + ((greenCount + 1) * 2), null);
greenCount++;
}
while (yellowCount < 18)
{
setItem(yellowCount + 27, null);
yellowCount++;
setItem(slot, null);
slot++;
}
}
@ -200,7 +351,7 @@ public class ServerNpcPage extends ShopPageBase<ServerManager, ServerNpcShop> im
{
int slots = Plugin.GetRequiredSlots(player, serverInfo.ServerType);
if ((serverInfo.Name.contains("BETA") && !Client.GetRank().Has(Rank.ULTRA)) || (serverInfo.MaxPlayers - serverInfo.CurrentPlayers < slots && !(DonationManager.Get(Player.getName()).OwnsUnknownPackage(serverInfo.ServerType + " ULTRA") || Client.GetRank().Has(Rank.ULTRA))))
if ((serverInfo.Name.contains("BETA") && !Client.GetRank().Has(Rank.ULTRA)) || (!serverInfo.isFree() && !(DonationManager.Get(Player.getName()).OwnsUnknownPackage(serverInfo.ServerType + " ULTRA") || Client.GetRank().Has(Rank.ULTRA))) || (serverInfo.MaxPlayers - serverInfo.CurrentPlayers < slots && !(DonationManager.Get(Player.getName()).OwnsUnknownPackage(serverInfo.ServerType + " ULTRA") || Client.GetRank().Has(Rank.ULTRA))))
{
PlayDenySound(player);
return;

View File

@ -2,12 +2,11 @@ package mineplex.hub.server.ui.button;
import org.bukkit.entity.Player;
import mineplex.core.shop.item.IButton;
import mineplex.core.shop.item.SingleButton;
import mineplex.hub.server.ServerInfo;
import mineplex.hub.server.ui.IServerPage;
import mineplex.hub.server.ui.ServerNpcPage;
public class JoinServerButton implements IButton
public class JoinServerButton extends SingleButton
{
private IServerPage _page;
private ServerInfo _serverInfo;
@ -19,13 +18,7 @@ public class JoinServerButton implements IButton
}
@Override
public void ClickedLeft(Player player)
{
_page.SelectServer(player, _serverInfo);
}
@Override
public void ClickedRight(Player player)
public void Clicked(Player player)
{
_page.SelectServer(player, _serverInfo);
}