3d7647b26b
* Game Lobby update. Phase 1. * Correctly apply kit data to players who use the next best game feature. * I can do integer comparisons, I promise. * So much stuff, all minor. * Suck it Carl. * Fix Party bug. Update LobbyManager * Allow QA to test KitProgression @shaun cherry pick this plz. * Proper generation check (testing) Remove debugging from NextBestGame * Correct Amplifier looking direction. Fix Death tag hard coded kits Misc podium work. * ClansHub and Tweaks to the lobby manager * WA Tweak.
1046 lines
30 KiB
Java
1046 lines
30 KiB
Java
package mineplex.clanshub;
|
|
|
|
import mineplex.clanshub.commands.ForcefieldRadius;
|
|
import mineplex.clanshub.commands.GadgetToggle;
|
|
import mineplex.clanshub.commands.GameModeCommand;
|
|
import mineplex.clanshub.profile.gui.GUIProfile;
|
|
import mineplex.core.Managers;
|
|
import mineplex.core.MiniPlugin;
|
|
import mineplex.core.account.CoreClient;
|
|
import mineplex.core.account.CoreClientManager;
|
|
import mineplex.core.achievement.AchievementManager;
|
|
import mineplex.core.benefit.BenefitManager;
|
|
import mineplex.core.blockrestore.BlockRestore;
|
|
import mineplex.core.bonuses.BonusManager;
|
|
import mineplex.core.boosters.BoosterManager;
|
|
import mineplex.core.botspam.BotSpamManager;
|
|
import mineplex.core.chat.ChatFormat;
|
|
import mineplex.core.chat.IChatMessageFormatter;
|
|
import mineplex.core.common.Rank;
|
|
import mineplex.core.common.util.C;
|
|
import mineplex.core.common.util.F;
|
|
import mineplex.core.common.util.UtilInv;
|
|
import mineplex.core.common.util.UtilMath;
|
|
import mineplex.core.common.util.UtilPlayer;
|
|
import mineplex.core.common.util.UtilServer;
|
|
import mineplex.core.common.util.UtilTextBottom;
|
|
import mineplex.core.common.util.UtilTextTop;
|
|
import mineplex.core.common.util.UtilTime;
|
|
import mineplex.core.common.util.UtilWorld;
|
|
import mineplex.core.cosmetic.CosmeticManager;
|
|
import mineplex.core.customdata.CustomDataManager;
|
|
import mineplex.core.disguise.DisguiseManager;
|
|
import mineplex.core.disguise.disguises.DisguiseBase;
|
|
import mineplex.core.disguise.disguises.DisguiseWither;
|
|
import mineplex.core.donation.DonationManager;
|
|
import mineplex.core.facebook.FacebookManager;
|
|
import mineplex.core.gadget.GadgetManager;
|
|
import mineplex.core.gadget.event.GadgetCollideEntityEvent;
|
|
import mineplex.core.gadget.gadgets.morph.MorphWither;
|
|
import mineplex.core.gadget.types.Gadget;
|
|
import mineplex.core.gadget.types.GadgetType;
|
|
import mineplex.core.hologram.HologramManager;
|
|
import mineplex.core.incognito.IncognitoManager;
|
|
import mineplex.core.incognito.events.IncognitoHidePlayerEvent;
|
|
import mineplex.core.inventory.InventoryManager;
|
|
import mineplex.core.menu.MenuManager;
|
|
import mineplex.core.message.PrivateMessageEvent;
|
|
import mineplex.core.mount.Mount;
|
|
import mineplex.core.mount.MountManager;
|
|
import mineplex.core.mount.types.MountDragon;
|
|
import mineplex.core.notifier.NotificationManager;
|
|
import mineplex.core.npc.NpcManager;
|
|
import mineplex.core.packethandler.PacketHandler;
|
|
import mineplex.core.party.Party;
|
|
import mineplex.core.party.PartyManager;
|
|
import mineplex.core.pet.PetManager;
|
|
import mineplex.core.playerCount.PlayerCountManager;
|
|
import mineplex.core.playwire.PlayWireManager;
|
|
import mineplex.core.poll.PollManager;
|
|
import mineplex.core.portal.Portal;
|
|
import mineplex.core.preferences.Preference;
|
|
import mineplex.core.preferences.PreferencesManager;
|
|
import mineplex.core.projectile.ProjectileManager;
|
|
import mineplex.core.punish.Punish;
|
|
import mineplex.core.stats.StatsManager;
|
|
import mineplex.core.status.ServerStatusManager;
|
|
import mineplex.core.task.TaskManager;
|
|
import mineplex.core.thank.ThankManager;
|
|
import mineplex.core.treasure.TreasureLocation;
|
|
import mineplex.core.treasure.TreasureManager;
|
|
import mineplex.core.updater.UpdateType;
|
|
import mineplex.core.updater.event.UpdateEvent;
|
|
import mineplex.core.valentines.ValentinesGiftManager;
|
|
import mineplex.core.youtube.YoutubeManager;
|
|
import mineplex.minecraft.game.core.combat.DeathMessageType;
|
|
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
|
|
import mineplex.minecraft.game.core.condition.ConditionManager;
|
|
import net.md_5.bungee.api.chat.ComponentBuilder;
|
|
import net.md_5.bungee.api.chat.HoverEvent;
|
|
import net.md_5.bungee.api.chat.HoverEvent.Action;
|
|
import net.md_5.bungee.api.chat.TextComponent;
|
|
import net.minecraft.server.v1_8_R3.EntityInsentient;
|
|
import net.minecraft.server.v1_8_R3.EntityPlayer;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.GameMode;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.World;
|
|
import org.bukkit.block.Block;
|
|
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
|
|
import org.bukkit.entity.Creature;
|
|
import org.bukkit.entity.Egg;
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.EventPriority;
|
|
import org.bukkit.event.entity.EntityDamageEvent;
|
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
|
import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
|
|
import org.bukkit.event.entity.ItemSpawnEvent;
|
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
|
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.PlayerQuitEvent;
|
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
|
import org.bukkit.event.player.PlayerVelocityEvent;
|
|
import org.bukkit.event.server.ServerListPingEvent;
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
import org.bukkit.scoreboard.DisplaySlot;
|
|
import org.bukkit.scoreboard.Objective;
|
|
import org.bukkit.scoreboard.Scoreboard;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.Iterator;
|
|
import java.util.UUID;
|
|
|
|
/**
|
|
* Main manager for clans hub
|
|
*/
|
|
public class HubManager extends MiniPlugin implements IChatMessageFormatter
|
|
{
|
|
private BlockRestore _blockRestore;
|
|
private CoreClientManager _clientManager;
|
|
private ConditionManager _conditionManager;
|
|
private DonationManager _donationManager;
|
|
private DisguiseManager _disguiseManager;
|
|
private PartyManager _partyManager;
|
|
private ForcefieldManager _forcefieldManager;
|
|
private PollManager _pollManager;
|
|
private Portal _portal;
|
|
private StatsManager _statsManager;
|
|
private GadgetManager _gadgetManager;
|
|
private MountManager _mountManager;
|
|
private HubVisibilityManager _visibilityManager;
|
|
private PreferencesManager _preferences;
|
|
private InventoryManager _inventoryManager;
|
|
private AchievementManager _achievementManager;
|
|
private TreasureManager _treasureManager;
|
|
private PetManager _petManager;
|
|
private PacketHandler _packetHandler;
|
|
private PlayerCountManager _playerCountManager;
|
|
private CustomDataManager _customDataManager;
|
|
private Punish _punishManager;
|
|
private IncognitoManager _incognito;
|
|
private BonusManager _bonusManager;
|
|
|
|
private Location _spawn;
|
|
private int _scoreboardTick = 0;
|
|
|
|
private HashMap<Player, Scoreboard> _scoreboards = new HashMap<Player, Scoreboard>();
|
|
|
|
private String _serverName = "";
|
|
private int _lastPlayerCount = 0;
|
|
private boolean _shuttingDown;
|
|
|
|
private HashMap<String, Long> _portalTime = new HashMap<String, Long>();
|
|
|
|
private HashMap<String, ArrayList<String>> _creativeAdmin = new HashMap<String, ArrayList<String>>();
|
|
|
|
public HubManager(JavaPlugin plugin, BlockRestore blockRestore, CoreClientManager clientManager, IncognitoManager incognito, DonationManager donationManager, InventoryManager inventoryManager, ConditionManager conditionManager, DisguiseManager disguiseManager, TaskManager taskManager, Portal portal, PartyManager partyManager, PreferencesManager preferences, PetManager petManager, PollManager pollManager, StatsManager statsManager, AchievementManager achievementManager, HologramManager hologramManager, NpcManager npcManager, PacketHandler packetHandler, Punish punish, ServerStatusManager serverStatusManager, CustomDataManager customDataManager, ThankManager thankManager, BoosterManager boosterManager)
|
|
{
|
|
super("Hub Manager", plugin);
|
|
|
|
_incognito = incognito;
|
|
|
|
_blockRestore = blockRestore;
|
|
_clientManager = clientManager;
|
|
_conditionManager = conditionManager;
|
|
_donationManager = donationManager;
|
|
_disguiseManager = disguiseManager;
|
|
_pollManager = pollManager;
|
|
|
|
_portal = portal;
|
|
|
|
_spawn = new Location(UtilWorld.getWorld("world"), 0.5, 179, 0.5, -90f, 0f);
|
|
((CraftWorld) _spawn.getWorld()).getHandle().spigotConfig.itemMerge = 0;
|
|
|
|
new WorldManager(this);
|
|
_mountManager = new MountManager(_plugin, clientManager, donationManager, blockRestore, _disguiseManager);
|
|
_inventoryManager = inventoryManager;
|
|
new BenefitManager(plugin, clientManager, _inventoryManager);
|
|
|
|
_gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, new ProjectileManager(plugin), achievementManager, packetHandler, hologramManager, incognito);
|
|
|
|
FacebookManager facebookManager = new FacebookManager(plugin, clientManager, donationManager, inventoryManager);
|
|
YoutubeManager youtubeManager = new YoutubeManager(plugin, clientManager, donationManager);
|
|
PlayWireManager playWireManager = new PlayWireManager(plugin, clientManager, donationManager);
|
|
_bonusManager = new BonusManager(plugin, null, playWireManager, clientManager, donationManager, pollManager , npcManager, hologramManager, statsManager, _inventoryManager, petManager, facebookManager, youtubeManager, _gadgetManager, thankManager);
|
|
|
|
World world = _spawn.getWorld();
|
|
_treasureManager = new TreasureManager(_plugin, clientManager, serverStatusManager, donationManager, _inventoryManager, petManager, _gadgetManager, _blockRestore, hologramManager, statsManager, _bonusManager.getRewardManager());
|
|
_treasureManager.disable();
|
|
{
|
|
Block chestBlock = world.getBlockAt(-1, 178, -9);
|
|
Block chestLoc1 = world.getBlockAt(-4, 178, -8);
|
|
Block chestLoc2 = world.getBlockAt(-4, 178, -10);
|
|
Block chestLoc3 = world.getBlockAt(-2, 178, -12);
|
|
Block chestLoc4 = world.getBlockAt(0, 178, -12);
|
|
Block chestLoc5 = world.getBlockAt(2, 178, -10);
|
|
Block chestLoc6 = world.getBlockAt(2, 178, -8);
|
|
Block chestLoc7 = world.getBlockAt(0, 178, -6);
|
|
Block chestLoc8 = world.getBlockAt(-2, 178, -6);
|
|
TreasureLocation loc = new TreasureLocation(_treasureManager, _inventoryManager, clientManager, donationManager, chestBlock, new Block[]{chestLoc1, chestLoc2, chestLoc3, chestLoc4, chestLoc5, chestLoc6, chestLoc7, chestLoc8}, _spawn, hologramManager, _gadgetManager, serverStatusManager);
|
|
_treasureManager.addTreasureLocation(loc);
|
|
}
|
|
{
|
|
Block chestBlock = world.getBlockAt(-1, 178, 9);
|
|
Block chestLoc1 = world.getBlockAt(-4, 178, 10);
|
|
Block chestLoc2 = world.getBlockAt(-4, 178, 8);
|
|
Block chestLoc3 = world.getBlockAt(-2, 178, 6);
|
|
Block chestLoc4 = world.getBlockAt(0, 178, 6);
|
|
Block chestLoc5 = world.getBlockAt(2, 178, 8);
|
|
Block chestLoc6 = world.getBlockAt(2, 178, 10);
|
|
Block chestLoc7 = world.getBlockAt(0, 178, 12);
|
|
Block chestLoc8 = world.getBlockAt(-2, 178, 12);
|
|
TreasureLocation loc = new TreasureLocation(_treasureManager, _inventoryManager, clientManager, donationManager, chestBlock, new Block[]{chestLoc1, chestLoc2, chestLoc3, chestLoc4, chestLoc5, chestLoc6, chestLoc7, chestLoc8}, _spawn, hologramManager, _gadgetManager, serverStatusManager);
|
|
_treasureManager.addTreasureLocation(loc);
|
|
}
|
|
|
|
new CosmeticManager(_plugin, clientManager, donationManager, _inventoryManager, _gadgetManager, _mountManager, petManager, _treasureManager, boosterManager);
|
|
|
|
new MenuManager(_plugin);
|
|
|
|
_petManager = petManager;
|
|
_partyManager = partyManager;
|
|
_preferences = preferences;
|
|
_visibilityManager = new HubVisibilityManager(this);
|
|
|
|
_forcefieldManager = new ForcefieldManager(this);
|
|
addCommand(new ForcefieldRadius(_forcefieldManager));
|
|
|
|
_statsManager = statsManager;
|
|
_achievementManager = achievementManager;
|
|
_achievementManager.setGiveInterfaceItem(true);
|
|
_packetHandler = packetHandler;
|
|
|
|
new NotificationManager(getPlugin(), clientManager, _preferences);
|
|
new BotSpamManager(plugin, clientManager, punish);
|
|
|
|
((CraftWorld)Bukkit.getWorlds().get(0)).getHandle().pvpMode = true;
|
|
|
|
new ValentinesGiftManager(plugin, clientManager, _bonusManager.getRewardManager(), inventoryManager, _gadgetManager, statsManager);
|
|
|
|
_playerCountManager = new PlayerCountManager(plugin);
|
|
|
|
_customDataManager = Managers.get(CustomDataManager.class);
|
|
|
|
_punishManager = punish;
|
|
|
|
_serverName = getPlugin().getConfig().getString("serverstatus.name");
|
|
_serverName = _serverName.substring(0, Math.min(16, _serverName.length()));
|
|
}
|
|
|
|
@Override
|
|
public void addCommands()
|
|
{
|
|
addCommand(new GadgetToggle(this));
|
|
addCommand(new GameModeCommand(this));
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.HIGHEST)
|
|
public void reflectMotd(ServerListPingEvent event)
|
|
{
|
|
if (_shuttingDown)
|
|
{
|
|
event.setMotd("Restarting soon");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks if an entity can be bumped
|
|
* @param ent The entity to check
|
|
* @return Whether the entity can be bumped
|
|
*/
|
|
public boolean BumpDisabled(Entity ent)
|
|
{
|
|
if (ent == null)
|
|
return false;
|
|
|
|
if (ent instanceof Player)
|
|
{
|
|
return !_preferences.get((Player)ent).isActive(Preference.HUB_GAMES);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
@EventHandler
|
|
public void redirectStopCommand(PlayerCommandPreprocessEvent event)
|
|
{
|
|
if (event.getPlayer().isOp() && event.getMessage().equalsIgnoreCase("/stop"))
|
|
{
|
|
_shuttingDown = true;
|
|
|
|
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(_plugin, new Runnable()
|
|
{
|
|
public void run()
|
|
{
|
|
_portal.sendAllPlayers("Lobby");
|
|
|
|
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(_plugin, new Runnable()
|
|
{
|
|
public void run()
|
|
{
|
|
Bukkit.shutdown();
|
|
}
|
|
}, 40L);
|
|
}
|
|
}, 60L);
|
|
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void preventEggSpawn(ItemSpawnEvent event)
|
|
{
|
|
if (event.getEntity() instanceof Egg)
|
|
{
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.LOW)
|
|
public void login(final PlayerLoginEvent event)
|
|
{
|
|
CoreClient client = _clientManager.Get(event.getPlayer());
|
|
|
|
// Reserved Slot Check
|
|
if (Bukkit.getOnlinePlayers().size() - Bukkit.getServer().getMaxPlayers() >= 20)
|
|
{
|
|
if (!client.GetRank().has(Rank.ULTRA))
|
|
{
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), new Runnable()
|
|
{
|
|
public void run()
|
|
{
|
|
_portal.sendPlayerToServer(event.getPlayer(), "ClansHub");
|
|
}
|
|
});
|
|
|
|
event.allow();
|
|
}
|
|
}
|
|
else
|
|
event.allow();
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.LOW)
|
|
public void handleOP(PlayerJoinEvent event)
|
|
{
|
|
if (_clientManager.Get(event.getPlayer()).GetRank().has(Rank.ADMIN))
|
|
event.getPlayer().setOp(true);
|
|
else
|
|
event.getPlayer().setOp(false);
|
|
}
|
|
|
|
@EventHandler
|
|
public void PlayerRespawn(PlayerRespawnEvent event)
|
|
{
|
|
event.setRespawnLocation(GetSpawn());
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.LOW)
|
|
public void PlayerJoin(PlayerJoinEvent event)
|
|
{
|
|
Player player = event.getPlayer();
|
|
|
|
//Public Message
|
|
event.setJoinMessage(null);
|
|
|
|
//Teleport
|
|
player.teleport(GetSpawn());
|
|
|
|
//Survival
|
|
player.setGameMode(GameMode.SURVIVAL);
|
|
|
|
//Clear Inv
|
|
UtilInv.Clear(player);
|
|
|
|
//Health
|
|
player.setHealth(20);
|
|
|
|
//Scoreboard
|
|
Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
|
|
player.setScoreboard(board);
|
|
_scoreboards.put(player, board);
|
|
|
|
//Objective
|
|
Objective obj = board.registerNewObjective(C.Bold + "Player Data", "dummy");
|
|
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
|
|
|
|
for (Rank rank : Rank.values())
|
|
{
|
|
if (rank != Rank.ALL)
|
|
board.registerNewTeam(rank.Name).setPrefix(rank.getTag(true, true) + ChatColor.RESET + " ");
|
|
else
|
|
board.registerNewTeam(rank.Name).setPrefix("");
|
|
}
|
|
|
|
for (Player otherPlayer : Bukkit.getOnlinePlayers())
|
|
{
|
|
if (_clientManager.Get(otherPlayer) == null)
|
|
continue;
|
|
|
|
String rankName = _clientManager.Get(player).GetRank().Name;
|
|
String otherRankName = _clientManager.Get(otherPlayer).GetRank().Name;
|
|
|
|
//Add Other to Self
|
|
board.getTeam(otherRankName).addPlayer(otherPlayer);
|
|
|
|
//Add Self to Other
|
|
otherPlayer.getScoreboard().getTeam(rankName).addPlayer(player);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void PlayerQuit(PlayerQuitEvent event)
|
|
{
|
|
event.setQuitMessage(null);
|
|
|
|
event.getPlayer().leaveVehicle();
|
|
event.getPlayer().eject();
|
|
event.getPlayer().setOp(false);
|
|
|
|
for (Player player : UtilServer.getPlayers())
|
|
player.getScoreboard().resetScores(event.getPlayer().getName());
|
|
|
|
_scoreboards.remove(event.getPlayer());
|
|
|
|
_portalTime.remove(event.getPlayer().getName());
|
|
}
|
|
|
|
@EventHandler
|
|
public void playerPrivateMessage(PrivateMessageEvent event)
|
|
{
|
|
//Dont Let PM Near Spawn!
|
|
if (UtilMath.offset2d(GetSpawn(), event.getSender().getLocation()) == 0 && !_clientManager.Get(event.getSender()).GetRank().has(Rank.HELPER))
|
|
{
|
|
UtilPlayer.message(event.getSender(), F.main("Chat", "You must leave spawn before you can Private Message!"));
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void Incog(IncognitoHidePlayerEvent event)
|
|
{
|
|
if (!_clientManager.hasRank(event.getPlayer(), Rank.CMOD))
|
|
{
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void PlayerChat(AsyncPlayerChatEvent event)
|
|
{
|
|
if (event.isCancelled())
|
|
return;
|
|
|
|
//Dont Let Chat Near Spawn!
|
|
if (UtilMath.offset2d(GetSpawn(), event.getPlayer().getLocation()) == 0 && !_clientManager.Get(event.getPlayer()).GetRank().has(Rank.HELPER))
|
|
{
|
|
UtilPlayer.message(event.getPlayer(), F.main("Chat", "You must leave spawn before you can chat!"));
|
|
event.setCancelled(true);
|
|
return;
|
|
}
|
|
|
|
Player player = event.getPlayer();
|
|
String playerName = player.getName();
|
|
|
|
Rank rank = GetClients().Get(player).getRealOrDisguisedRank();
|
|
|
|
//Level Prefix
|
|
String levelStr = _achievementManager.getMineplexLevel(player, rank);
|
|
|
|
//Rank Prefix
|
|
String rankStr = "";
|
|
if (rank != Rank.ALL)
|
|
rankStr = rank.getTag(true, true) + " ";
|
|
//Party Chat
|
|
if (event.getMessage().charAt(0) == '#')
|
|
{
|
|
Party party = _partyManager.getParty(player);
|
|
if (party != null)
|
|
{
|
|
event.getRecipients().clear();
|
|
|
|
event.setMessage(event.getMessage().substring(1, event.getMessage().length()));
|
|
event.setFormat(levelStr + C.cDPurple + C.Bold + "Party " + C.cWhite + C.Bold + playerName + " " + C.cPurple + "%2$s");
|
|
|
|
for (UUID name : party.getMembersByUUID())
|
|
{
|
|
Player other = Bukkit.getPlayer(name);
|
|
|
|
if (other != null)
|
|
event.getRecipients().add(other);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
UtilPlayer.message(player, F.main("Party", "You are not in a Party."));
|
|
event.setCancelled(true);
|
|
}
|
|
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
TextComponent rankComponent = new TextComponent(rankStr);
|
|
TextComponent playerNameText = new TextComponent(ChatColor.YELLOW + playerName);
|
|
TextComponent component = new TextComponent();
|
|
|
|
rankComponent.setHoverEvent(new HoverEvent(Action.SHOW_TEXT, new ComponentBuilder(rank.getColor() + rank.getTag(true, true) + ChatColor.WHITE + "\n" + rank.getDescription()).create()));
|
|
|
|
component.setText(levelStr);
|
|
component.addExtra(rankComponent);
|
|
component.addExtra(playerNameText);
|
|
component.addExtra(" " + ChatColor.WHITE + event.getMessage());
|
|
|
|
for (Player other : UtilServer.getPlayers())
|
|
{
|
|
if (!event.isCancelled())
|
|
other.spigot().sendMessage(component);
|
|
}
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public ChatFormat getChatFormat(Player player, String message)
|
|
{
|
|
Rank rank = GetClients().Get(player).getRealOrDisguisedRank();
|
|
|
|
//Level Prefix
|
|
String levelStr = _achievementManager.getMineplexLevel(player, rank);
|
|
|
|
//Rank Prefix
|
|
String rankStr = "";
|
|
if (rank != Rank.ALL)
|
|
rankStr = rank.getTag(true, true) + " ";
|
|
|
|
TextComponent rankComponent = new TextComponent(rankStr);
|
|
TextComponent playerNameText = new TextComponent(ChatColor.YELLOW + "%1$s");
|
|
TextComponent component = new TextComponent();
|
|
|
|
rankComponent.setHoverEvent(new HoverEvent(Action.SHOW_TEXT, new ComponentBuilder(rank.getColor() + rank.getTag(true, true) + ChatColor.WHITE + "\n" + rank.getDescription()).create()));
|
|
|
|
component.setText(levelStr);
|
|
component.addExtra(rankComponent);
|
|
component.addExtra(playerNameText);
|
|
component.addExtra(" " + ChatColor.WHITE + "%2$s");
|
|
|
|
return new ChatFormat(component.toLegacyText(), false);
|
|
}
|
|
|
|
@EventHandler
|
|
public void Damage(EntityDamageEvent event)
|
|
{
|
|
if (event.getCause() == DamageCause.VOID)
|
|
{
|
|
if (event.getEntity() instanceof Player)
|
|
{
|
|
event.getEntity().eject();
|
|
event.getEntity().leaveVehicle();
|
|
event.getEntity().teleport(GetSpawn());
|
|
}
|
|
else
|
|
{
|
|
event.getEntity().remove();
|
|
}
|
|
}
|
|
|
|
event.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.LOWEST)
|
|
public void handleDeath(PlayerDeathEvent event)
|
|
{
|
|
event.setKeepInventory(true);
|
|
event.getDrops().clear();
|
|
event.getEntity().setHealth(20);
|
|
event.getEntity().teleport(GetSpawn());
|
|
}
|
|
|
|
@EventHandler
|
|
public void combatDeath(CombatDeathEvent event)
|
|
{
|
|
event.SetBroadcastType(DeathMessageType.None);
|
|
}
|
|
|
|
@EventHandler
|
|
public void FoodHealthUpdate(UpdateEvent event)
|
|
{
|
|
if (event.getType() != UpdateType.SEC)
|
|
return;
|
|
|
|
for (Player player : UtilServer.getPlayers())
|
|
{
|
|
player.setFoodLevel(20);
|
|
player.setExhaustion(0f);
|
|
player.setSaturation(3f);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void InventoryCancel(InventoryClickEvent event)
|
|
{
|
|
if (event.getWhoClicked() instanceof Player && ((Player)event.getWhoClicked()).getGameMode() != GameMode.CREATIVE)
|
|
event.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void UpdateScoreboard(UpdateEvent event)
|
|
{
|
|
if (event.getType() != UpdateType.TICK)
|
|
return;
|
|
|
|
_scoreboardTick = (_scoreboardTick + 1)%3;
|
|
|
|
if (_scoreboardTick != 0)
|
|
return;
|
|
|
|
int playerCount = _playerCountManager.getPlayerCount();
|
|
|
|
for (Player player : UtilServer.getPlayers())
|
|
{
|
|
//Return to Main Scoreboard
|
|
if (!player.getScoreboard().equals(_scoreboards.get(player)))
|
|
player.setScoreboard(_scoreboards.get(player));
|
|
|
|
//Objective
|
|
Objective obj = player.getScoreboard().getObjective(DisplaySlot.SIDEBAR);
|
|
|
|
//Title
|
|
obj.setDisplayName(C.cRed + C.Bold + C.Line + "Mineplex Clans");
|
|
|
|
int line = 15;
|
|
|
|
//Space
|
|
obj.getScore(" ").setScore(line--);
|
|
|
|
//Server
|
|
obj.getScore(C.cAqua + C.Bold + "Server").setScore(line--);
|
|
obj.getScore(_serverName).setScore(line--);
|
|
|
|
//Space
|
|
obj.getScore(" ").setScore(line--);
|
|
|
|
//Players
|
|
obj.getScore(C.cYellow + C.Bold + "Players").setScore(line--);
|
|
player.getScoreboard().resetScores(_lastPlayerCount + "");
|
|
obj.getScore(playerCount + "").setScore(line--);
|
|
|
|
//Space
|
|
obj.getScore(" ").setScore(line--);
|
|
|
|
//Display Rank
|
|
obj.getScore(C.cGold + C.Bold + "Rank").setScore(line--);
|
|
//Remove Old
|
|
player.getScoreboard().resetScores(_clientManager.Get(player).GetLastRank(false).Name);
|
|
player.getScoreboard().resetScores(_clientManager.Get(player).GetLastRank(true).Name);
|
|
player.getScoreboard().resetScores("No Rank");
|
|
//Add New
|
|
if (GetClients().Get(player).GetRank() != Rank.ALL)
|
|
obj.getScore(GetClients().Get(player).GetRank().Name).setScore(line--);
|
|
else
|
|
obj.getScore("No Rank").setScore(line--);
|
|
|
|
//Space
|
|
obj.getScore(" ").setScore(line--);
|
|
|
|
//Website
|
|
obj.getScore(C.cRed + C.Bold + "Website").setScore(line--);
|
|
obj.getScore("www.mineplex.com").setScore(line--);
|
|
}
|
|
|
|
_lastPlayerCount = playerCount;
|
|
Bukkit.getOnlinePlayers().stream().filter(player -> _clientManager.Get(player).GetRank() == Rank.ALL).forEach(player ->
|
|
{
|
|
UtilTextBottom.display(C.cGray + "Visit " + F.elem("http://www.mineplex.com/shop") + " for exclusive perks!", player);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded BlockRestore manager
|
|
* @return The loaded BlockRestore manager
|
|
*/
|
|
public BlockRestore GetBlockRestore()
|
|
{
|
|
return _blockRestore;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded CoreClient manager
|
|
* @return The loaded CoreClient manager
|
|
*/
|
|
public CoreClientManager GetClients()
|
|
{
|
|
return _clientManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Condition manager
|
|
* @return The loaded Condition manager
|
|
*/
|
|
public ConditionManager GetCondition()
|
|
{
|
|
return _conditionManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Donation manager
|
|
* @return The loaded Donation manager
|
|
*/
|
|
public DonationManager GetDonation()
|
|
{
|
|
return _donationManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Disguise manager
|
|
* @return The loaded Disguise manager
|
|
*/
|
|
public DisguiseManager GetDisguise()
|
|
{
|
|
return _disguiseManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Gadget manager
|
|
* @return The loaded Gadget manager
|
|
*/
|
|
public GadgetManager GetGadget()
|
|
{
|
|
return _gadgetManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Treasure manager
|
|
* @return The loaded Treasure manager
|
|
*/
|
|
public TreasureManager GetTreasure()
|
|
{
|
|
return _treasureManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Mount manager
|
|
* @return The loaded Mount manager
|
|
*/
|
|
public MountManager GetMount()
|
|
{
|
|
return _mountManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Preferences manager
|
|
* @return The loaded Preferences manager
|
|
*/
|
|
public PreferencesManager getPreferences()
|
|
{
|
|
return _preferences;
|
|
}
|
|
|
|
/**
|
|
* Gets the lobby's spawn
|
|
* @return The lobby's spawn
|
|
*/
|
|
public Location GetSpawn()
|
|
{
|
|
return _spawn.clone();
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Pet manager
|
|
* @return The loaded Pet manager
|
|
*/
|
|
public PetManager getPetManager()
|
|
{
|
|
return _petManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Bonus manager
|
|
* @return The loaded Bonus manager
|
|
*/
|
|
public BonusManager getBonusManager()
|
|
{
|
|
return _bonusManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Stats manager
|
|
* @return The loaded Stats manager
|
|
*/
|
|
public StatsManager GetStats()
|
|
{
|
|
return _statsManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded HubVisibility manager
|
|
* @return The loaded HubVisibility manager
|
|
*/
|
|
public HubVisibilityManager GetVisibility()
|
|
{
|
|
return _visibilityManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded CustomData manager
|
|
* @return The loaded CustomData manager
|
|
*/
|
|
public CustomDataManager getCustomDataManager()
|
|
{
|
|
return _customDataManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Punishment manager
|
|
* @return The loaded Punishment manager
|
|
*/
|
|
public Punish getPunishments()
|
|
{
|
|
return _punishManager;
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded Incognito manager
|
|
* @return The loaded Incognito manager
|
|
*/
|
|
public IncognitoManager getIncognitoManager()
|
|
{
|
|
return _incognito;
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR)
|
|
public void gadgetCollide(GadgetCollideEntityEvent event)
|
|
{
|
|
if (!event.isCancelled())
|
|
{
|
|
SetPortalDelay(event.getOther());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Updates a player's portal delay start to be now
|
|
* @param ent The player to set delay for
|
|
*/
|
|
public void SetPortalDelay(Entity ent)
|
|
{
|
|
if (ent instanceof Player)
|
|
{
|
|
_portalTime.put(((Player)ent).getName(), System.currentTimeMillis());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks if a player can portal yet
|
|
* @param player The player to check
|
|
* @return Whether a player can portal yet
|
|
*/
|
|
public boolean CanPortal(Player player)
|
|
{
|
|
//Riding
|
|
if (player.getVehicle() != null || player.getPassenger() != null)
|
|
return false;
|
|
|
|
//Portal Delay
|
|
if (!_portalTime.containsKey(player.getName()))
|
|
return true;
|
|
|
|
return UtilTime.elapsed(_portalTime.get(player.getName()), 5000);
|
|
}
|
|
|
|
@EventHandler
|
|
public void ignoreVelocity(PlayerVelocityEvent event)
|
|
{
|
|
if (_clientManager.Get(event.getPlayer()).GetRank().has(Rank.TWITCH) && _preferences.get(event.getPlayer()).isActive(Preference.IGNORE_VELOCITY))
|
|
{
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Toggles all gadgets on or off via command
|
|
* @param caller The player who issued the command
|
|
*/
|
|
public void ToggleGadget(Player caller)
|
|
{
|
|
toggleGadget();
|
|
}
|
|
|
|
/**
|
|
* Toggles gadget access on or off in this lobby
|
|
*/
|
|
public void toggleGadget()
|
|
{
|
|
GetGadget().toggleGadgetEnabled();
|
|
|
|
for (Player player : UtilServer.getPlayers())
|
|
player.sendMessage(C.cWhite + C.Bold + "Gadgets/Mounts are now " + F.elem(GetGadget().isGadgetEnabled() ? C.cGreen + C.Bold + "Enabled" : C.cRed + C.Bold + "Disabled"));
|
|
}
|
|
|
|
/**
|
|
* Sets a player's gamemode via command
|
|
* @param caller The issuer of the command
|
|
* @param target The player whose gamemode should be set
|
|
*/
|
|
public void addGameMode(Player caller, Player target)
|
|
{
|
|
if (!_creativeAdmin.containsKey(caller.getName()))
|
|
_creativeAdmin.put(caller.getName(), new ArrayList<String>());
|
|
|
|
if (target.getGameMode() == GameMode.CREATIVE)
|
|
{
|
|
_creativeAdmin.get(caller.getName()).add(target.getName());
|
|
}
|
|
else
|
|
{
|
|
_creativeAdmin.get(caller.getName()).remove(target.getName());
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void clearEntityTargets(UpdateEvent event)
|
|
{
|
|
if (event.getType() != UpdateType.SEC)
|
|
return;
|
|
|
|
for (Entity entity : Bukkit.getWorlds().get(0).getEntities())
|
|
{
|
|
if (entity instanceof EntityInsentient)
|
|
{
|
|
EntityInsentient entityMonster = (EntityInsentient)entity;
|
|
|
|
if (entityMonster.getGoalTarget() != null && entityMonster.getGoalTarget() instanceof EntityPlayer)
|
|
{
|
|
if (((EntityPlayer)entityMonster.getGoalTarget()).playerConnection.isDisconnected())
|
|
entityMonster.setGoalTarget(null, TargetReason.FORGOT_TARGET, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void clearGameMode(PlayerQuitEvent event)
|
|
{
|
|
ArrayList<String> creative = _creativeAdmin.remove(event.getPlayer().getName());
|
|
|
|
if (creative == null)
|
|
return;
|
|
|
|
for (String name : creative)
|
|
{
|
|
Player player = UtilPlayer.searchExact(name);
|
|
if (player == null)
|
|
continue;
|
|
|
|
player.setGameMode(GameMode.SURVIVAL);
|
|
|
|
UtilPlayer.message(player, F.main("Game Mode", event.getPlayer().getName() + " left the game. Creative Mode: " + F.tf(false)));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the loaded PacketHandler
|
|
* @return The loaded PacketHandler
|
|
*/
|
|
public PacketHandler getPacketHandler()
|
|
{
|
|
return _packetHandler;
|
|
}
|
|
|
|
@EventHandler
|
|
public void openProfile(PlayerInteractEvent event)
|
|
{
|
|
if(event.getItem() == null || event.getItem().getType() != Material.SKULL_ITEM)
|
|
return;
|
|
|
|
new GUIProfile(getPlugin(), event.getPlayer(), _preferences, _achievementManager).openInventory();;
|
|
}
|
|
|
|
@EventHandler
|
|
public void trackPortalDelayPlayers(UpdateEvent event)
|
|
{
|
|
if (event.getType() != UpdateType.TICK)
|
|
return;
|
|
|
|
for (Iterator<String> playerNameIterator = _portalTime.keySet().iterator(); playerNameIterator.hasNext();)
|
|
{
|
|
String playerName = playerNameIterator.next();
|
|
|
|
if (UtilTime.elapsed(_portalTime.get(playerName), 5000))
|
|
{
|
|
playerNameIterator.remove();
|
|
}
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void showHeader(UpdateEvent event)
|
|
{
|
|
if (event.getType() != UpdateType.FASTEST)
|
|
{
|
|
return;
|
|
}
|
|
|
|
String text = C.cRed + "Welcome to Mineplex Clans";
|
|
UtilTextTop.display(text, UtilServer.getPlayers());
|
|
|
|
//Fix Entity Names
|
|
for (Creature pet : _petManager.getPets())
|
|
{
|
|
DisguiseBase disguise = _disguiseManager.getDisguise(pet);
|
|
|
|
if (disguise instanceof DisguiseWither)
|
|
{
|
|
((DisguiseWither) disguise).setName(text);
|
|
disguise.resendMetadata();
|
|
}
|
|
}
|
|
|
|
for (Mount mount : _mountManager.getMounts())
|
|
{
|
|
if (mount instanceof MountDragon)
|
|
{
|
|
((MountDragon)mount).SetName(text);
|
|
}
|
|
}
|
|
|
|
for (Gadget gadget : _gadgetManager.getGadgets(GadgetType.MORPH))
|
|
{
|
|
if (gadget instanceof MorphWither)
|
|
{
|
|
((MorphWither)gadget).setWitherData(text, 100);
|
|
}
|
|
}
|
|
}
|
|
} |