Mineplex2018-withcommit/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java

615 lines
17 KiB
Java
Raw Normal View History

2013-08-27 17:14:08 +02:00
package mineplex.hub;
import java.util.HashMap;
2013-08-27 17:14:08 +02:00
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.entity.Egg;
2013-08-27 17:14:08 +02:00
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
2013-08-27 17:14:08 +02:00
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.ItemSpawnEvent;
2013-08-27 17:14:08 +02:00
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.inventory.InventoryClickEvent;
2013-08-27 17:14:08 +02:00
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
2013-08-27 17:14:08 +02:00
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.server.ServerListPingEvent;
2013-08-31 11:01:41 +02:00
import org.bukkit.event.world.ChunkLoadEvent;
2013-08-27 17:14:08 +02:00
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;
import mineplex.core.MiniClientPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.blockrestore.BlockRestore;
2013-08-27 17:14:08 +02:00
import mineplex.core.common.Rank;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
2013-08-27 17:14:08 +02:00
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilMath;
2013-10-25 13:56:28 +02:00
import mineplex.core.common.util.UtilParticle;
2013-08-27 17:14:08 +02:00
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
2013-08-27 17:14:08 +02:00
import mineplex.core.common.util.UtilWorld;
2013-10-25 13:56:28 +02:00
import mineplex.core.common.util.UtilParticle.ParticleType;
2013-08-31 11:01:41 +02:00
import mineplex.core.disguise.DisguiseManager;
import mineplex.core.disguise.disguises.DisguisePlayer;
import mineplex.core.disguise.disguises.DisguiseSlime;
2013-08-27 17:14:08 +02:00
import mineplex.core.donation.DonationManager;
import mineplex.core.portal.Portal;
import mineplex.core.task.TaskManager;
2013-08-27 17:14:08 +02:00
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
2013-10-19 07:52:15 +02:00
import mineplex.hub.gadget.GadgetManager;
2013-09-18 11:46:45 +02:00
import mineplex.hub.modules.*;
import mineplex.hub.mount.MountManager;
import mineplex.hub.party.Party;
import mineplex.hub.party.PartyManager;
import mineplex.hub.tutorial.TutorialManager;
2013-10-19 07:52:15 +02:00
import mineplex.minecraft.game.core.condition.ConditionManager;
2013-08-27 17:14:08 +02:00
public class HubManager extends MiniClientPlugin<HubClient>
{
2013-11-16 11:07:51 +01:00
public String Mode = "Normal";
private BlockRestore _blockRestore;
2013-08-27 17:14:08 +02:00
private CoreClientManager _clientManager;
2013-10-19 07:52:15 +02:00
private ConditionManager _conditionManager;
2013-08-27 17:14:08 +02:00
private DonationManager _donationManager;
2013-08-31 11:01:41 +02:00
private DisguiseManager _disguiseManager;
private PartyManager _partyManager;
private Portal _portal;
2013-09-04 23:44:53 +02:00
private VisibilityManager _visibilityManager;
private TutorialManager _tutorialManager;
2013-09-18 11:46:45 +02:00
private TextManager _textCreator;
private ParkourManager _parkour;
2013-08-27 17:14:08 +02:00
private Location _spawn;
private int _scoreboardTick = 0;
private HashMap<Player, Scoreboard> _scoreboards = new HashMap<Player, Scoreboard>();
2013-08-27 17:14:08 +02:00
private String _pigStacker = "0 - Nobody";
private boolean _shuttingDown;
private HashMap<String, Long> _portalTime = new HashMap<String, Long>();
public HubManager(JavaPlugin plugin, BlockRestore blockRestore, CoreClientManager clientManager, DonationManager donationManager, ConditionManager conditionManager, DisguiseManager disguiseManager, TaskManager taskManager, Portal portal, PartyManager partyManager)
2013-08-27 17:14:08 +02:00
{
super("Hub Manager", plugin);
_blockRestore = blockRestore;
2013-08-27 17:14:08 +02:00
_clientManager = clientManager;
2013-10-19 07:52:15 +02:00
_conditionManager = conditionManager;
_donationManager = donationManager;
2013-08-31 11:01:41 +02:00
_disguiseManager = disguiseManager;
_portal = portal;
_spawn = new Location(UtilWorld.getWorld("world"), 0.5, 74, 0.5);
2013-09-18 11:46:45 +02:00
_textCreator = new TextManager(this);
_parkour = new ParkourManager(this, donationManager, taskManager);
new MapManager(this);
2013-09-18 11:46:45 +02:00
new WorldManager(this);
new JumpManager(this);
new NewsManager(this);
2013-10-19 07:52:15 +02:00
2013-10-26 19:02:18 +02:00
new GadgetManager(this, new MountManager(this));
2013-09-04 23:44:53 +02:00
_partyManager = partyManager;
_tutorialManager = new TutorialManager(this, donationManager, taskManager, _textCreator);
_visibilityManager = new VisibilityManager(this);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void reflectMotd(ServerListPingEvent event)
{
if (_shuttingDown)
{
event.setMotd("Restarting soon");
}
}
@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);
}
}
2013-08-27 17:14:08 +02:00
@EventHandler
public void PlayerRespawn(PlayerRespawnEvent event)
{
event.setRespawnLocation(GetSpawn());
2013-08-27 17:14:08 +02:00
}
2013-09-04 23:44:53 +02:00
@EventHandler(priority = EventPriority.MONITOR)
public void OnChunkLoad(ChunkLoadEvent event)
{
for (Entity entity : event.getChunk().getEntities())
{
if (entity instanceof LivingEntity)
{
if (((LivingEntity)entity).isCustomNameVisible() && ((LivingEntity)entity).getCustomName() != null)
{
if (ChatColor.stripColor(((LivingEntity)entity).getCustomName()).equalsIgnoreCase("Minekart"))
2013-09-04 23:44:53 +02:00
{
_disguiseManager.disguise(new DisguisePlayer(entity, ChatColor.YELLOW + "MineKart"));
2013-09-04 23:44:53 +02:00
}
else if (ChatColor.stripColor(((LivingEntity)entity).getCustomName()).equalsIgnoreCase("Block Hunt"))
{
DisguiseSlime disguise = new DisguiseSlime(entity);
disguise.SetCustomNameVisible(true);
disguise.SetName(((LivingEntity)entity).getCustomName());
disguise.SetSize(2);
_disguiseManager.disguise(disguise);
}
2013-09-04 23:44:53 +02:00
}
}
}
}
2013-08-27 17:14:08 +02:00
@EventHandler(priority = EventPriority.LOW)
public void PlayerJoin(PlayerJoinEvent event)
{
try
2013-08-27 17:14:08 +02:00
{
final Player player = event.getPlayer();
//Survival
player.setGameMode(GameMode.SURVIVAL);
//Public Message
event.setJoinMessage(null);
//Teleport
player.teleport(GetSpawn());
//Allow Double Jump
player.setAllowFlight(true);
UtilInv.Clear(player);
//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())
2013-09-10 02:17:55 +02:00
{
if (rank != Rank.ALL)
board.registerNewTeam(rank.Name).setPrefix(rank.GetTag(true, true) + ChatColor.RESET + " ");
else
board.registerNewTeam(rank.Name).setPrefix("");
2013-09-10 02:17:55 +02:00
}
for (Player otherPlayer : Bukkit.getOnlinePlayers())
2013-09-10 02:17:55 +02:00
{
String rankName = _clientManager.Get(player).GetRank().Name;
String otherRankName = _clientManager.Get(otherPlayer).GetRank().Name;
if (!_clientManager.Get(player).GetRank().Has(Rank.ULTRA) && _donationManager.Get(player.getName()).OwnsUltraPackage())
{
rankName = Rank.ULTRA.Name;
}
if (!_clientManager.Get(otherPlayer).GetRank().Has(Rank.ULTRA) && _donationManager.Get(otherPlayer.getName()).OwnsUltraPackage())
{
otherRankName = Rank.ULTRA.Name;
}
//Add Other to Self
board.getTeam(otherRankName).addPlayer(otherPlayer);
//Add Self to Other
otherPlayer.getScoreboard().getTeam(rankName).addPlayer(player);
2013-09-10 02:17:55 +02:00
}
}
catch (Exception ex)
{
System.out.println("[HubManager] Player Join exception");
throw ex;
2013-08-27 17:14:08 +02:00
}
/*
if (Bukkit.getOnlinePlayers().length == 1)
{
new Dragon(this).Spawn();
}
*/
2013-08-27 17:14:08 +02:00
}
2013-08-27 17:14:08 +02:00
@EventHandler
public void PlayerQuit(PlayerQuitEvent event)
{
event.setQuitMessage(null);
2013-08-27 17:14:08 +02:00
event.getPlayer().leaveVehicle();
event.getPlayer().eject();
2013-08-27 17:14:08 +02:00
for (Player player : UtilServer.getPlayers())
player.getScoreboard().resetScores(event.getPlayer());
_scoreboards.remove(event.getPlayer());
_portalTime.remove(event.getPlayer().getName());
2013-08-27 17:14:08 +02:00
}
2013-08-27 17:14:08 +02:00
@EventHandler
public void PlayerChat(AsyncPlayerChatEvent event)
{
if (event.isCancelled())
return;
2013-08-27 17:14:08 +02:00
event.setCancelled(true);
2013-08-27 17:14:08 +02:00
Player player = event.getPlayer();
2013-08-27 17:14:08 +02:00
Rank rank = GetClients().Get(player).GetRank();
boolean ownsUltra = _donationManager.Get(player.getName()).OwnsUltraPackage();
//Rank Prefix
2013-08-27 17:14:08 +02:00
String rankStr = "";
if (rank != Rank.ALL)
rankStr = rank.GetTag(true, true) + " ";
if (ownsUltra && !rank.Has(Rank.ULTRA))
rankStr = Rank.ULTRA.GetTag(true, true) + " ";
//Party Chat
if (event.getMessage().charAt(0) == '@')
{
Party party = _partyManager.GetParty(player);
if (party != null)
{
for (String name : party.GetPlayers())
{
Player other = UtilPlayer.searchExact(name);
if (other != null)
UtilPlayer.message(other, C.cDPurple + C.Bold + "Party " + C.cWhite + C.Bold + player.getName() + ChatColor.RESET + " " + C.cPurple + event.getMessage().substring(1, event.getMessage().length()));
}
}
else
{
UtilPlayer.message(player, F.main("Party", "You are not in a Party."));
}
return;
}
2013-08-27 17:14:08 +02:00
for (Player other : UtilServer.getPlayers())
{
if (_tutorialManager.InTutorial(other))
2013-09-03 02:16:44 +02:00
continue;
2013-09-04 23:44:53 +02:00
2013-08-27 17:14:08 +02:00
UtilPlayer.message(other, rankStr + C.cYellow + player.getName() + " " + C.cWhite + event.getMessage());
}
}
2013-08-27 17:14:08 +02:00
@EventHandler
public void Damage(EntityDamageEvent event)
{
if (event.getCause() == DamageCause.VOID)
if (event.getEntity() instanceof Player)
2013-09-18 11:46:45 +02:00
{
event.getEntity().eject();
event.getEntity().leaveVehicle();
event.getEntity().teleport(GetSpawn());
2013-09-18 11:46:45 +02:00
}
else
event.getEntity().remove();
2013-08-27 17:14:08 +02:00
event.setCancelled(true);
}
2013-08-27 17:14:08 +02:00
@EventHandler
public void FoodHealthUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.SLOW)
return;
2013-08-27 17:14:08 +02:00
for (Player player : UtilServer.getPlayers())
{
player.setHealth(20);
player.setFoodLevel(20);
}
}
@EventHandler
public void InventoryCancel(InventoryClickEvent event)
{
if (event.getWhoClicked() instanceof Player && ((Player)event.getWhoClicked()).getGameMode() != GameMode.CREATIVE)
event.setCancelled(true);
}
2013-08-27 17:14:08 +02:00
@EventHandler
public void UpdateScoreboard(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
2013-08-27 17:14:08 +02:00
_scoreboardTick = (_scoreboardTick + 1)%3;
2013-08-27 17:14:08 +02:00
if (_scoreboardTick != 0)
return;
2013-08-27 17:14:08 +02:00
int bestPig = 0;
for (Player player : UtilServer.getPlayers())
{
if (player.getVehicle() != null)
continue;
2013-08-27 17:14:08 +02:00
int count = 0;
2013-08-27 17:14:08 +02:00
Entity ent = player;
while (ent.getPassenger() != null)
{
ent = ent.getPassenger();
count++;
}
2013-08-27 17:14:08 +02:00
if (count > bestPig)
{
_pigStacker = player.getName();
bestPig = count;
}
}
if (bestPig == 0)
{
_pigStacker = "0 - Nobody";
}
else
{
_pigStacker = bestPig + " - " + _pigStacker;
2013-08-27 17:14:08 +02:00
if (_pigStacker.length() > 16)
_pigStacker = _pigStacker.substring(0, 16);
}
2013-08-27 17:14:08 +02:00
for (Player player : UtilServer.getPlayers())
{
//Dont Waste Time
if (_partyManager.GetParty(player) != null)
continue;
//Return to Main Scoreboard
if (!player.getScoreboard().equals(_scoreboards.get(player)))
player.setScoreboard(_scoreboards.get(player));
2013-08-27 17:14:08 +02:00
//Objective
Objective obj = player.getScoreboard().getObjective(DisplaySlot.SIDEBAR);
2013-08-27 17:14:08 +02:00
//Title
obj.setDisplayName(C.cWhite + C.Bold + Get(player).GetScoreboardText());
2013-08-27 17:14:08 +02:00
int line = 15;
2013-08-27 17:14:08 +02:00
obj.getScore(Bukkit.getOfflinePlayer(C.cGreen + C.Bold + "Gems")).setScore(line--);
2013-08-27 17:14:08 +02:00
// Remove Old
player.getScoreboard().resetScores(Bukkit.getOfflinePlayer(Get(player.getName()).GetLastGemCount() + ""));
// Add New
obj.getScore(Bukkit.getOfflinePlayer(GetDonation().Get(player.getName()).GetGems() + "")).setScore(line--);
2013-08-27 17:14:08 +02:00
Get(player.getName()).SetLastGemCount(GetDonation().Get(player.getName()).GetGems());
2013-08-27 17:14:08 +02:00
//Space
obj.getScore(Bukkit.getOfflinePlayer(" ")).setScore(line--);
2013-08-27 17:14:08 +02:00
/*
//News
obj.getScore(Bukkit.getOfflinePlayer(C.cGray + C.Bold + "Latest News")).setScore(line--);
player.getScoreboard().resetScores(Bukkit.getOfflinePlayer(Get(player).GetNewsText(false)));
obj.getScore(Bukkit.getOfflinePlayer(Get(player).GetNewsText(true))).setScore(line--);
*/
2013-08-27 17:14:08 +02:00
//Stacker
obj.getScore(Bukkit.getOfflinePlayer(C.cGray + C.Bold + "Stacker")).setScore(line--);
2013-08-27 17:14:08 +02:00
player.getScoreboard().resetScores(Bukkit.getOfflinePlayer(Get(player).BestPig));
Get(player).BestPig = _pigStacker;
obj.getScore(Bukkit.getOfflinePlayer(Get(player).BestPig)).setScore(line--);
//Space
obj.getScore(Bukkit.getOfflinePlayer(" ")).setScore(line--);
2013-08-27 17:14:08 +02:00
//Display Rank
if (GetClients().Get(player).GetRank().Has(Rank.ULTRA))
{
obj.getScore(Bukkit.getOfflinePlayer(C.cPurple + C.Bold + "Ultra Rank")).setScore(line--);
2013-08-27 17:14:08 +02:00
player.getScoreboard().resetScores(Bukkit.getOfflinePlayer(Get(player).GetUltraText(false)));
obj.getScore(Bukkit.getOfflinePlayer(Get(player).GetUltraText(true))).setScore(line--);
}
else
{
obj.getScore(Bukkit.getOfflinePlayer(C.cRed + C.Bold + "No Rank")).setScore(line--);
2013-08-27 17:14:08 +02:00
player.getScoreboard().resetScores(Bukkit.getOfflinePlayer(Get(player).GetPurchaseText(false)));
obj.getScore(Bukkit.getOfflinePlayer(Get(player).GetPurchaseText(true))).setScore(line--);
}
2013-08-27 17:14:08 +02:00
//Space
obj.getScore(Bukkit.getOfflinePlayer(" ")).setScore(line--);
2013-08-27 17:14:08 +02:00
//Display Staff
obj.getScore(Bukkit.getOfflinePlayer(C.cGold + C.Bold + "Online Staff")).setScore(line--);
String staff = "";
for (Player other : UtilServer.getPlayers())
{
Rank rank = GetClients().Get(other).GetRank();
2013-08-27 17:14:08 +02:00
if (!rank.Has(Rank.HELPER))
continue;
2013-08-27 17:14:08 +02:00
staff += other.getName() + " ";
}
if (staff.length() == 0)
staff = "None";
2013-08-27 17:14:08 +02:00
player.getScoreboard().resetScores(Bukkit.getOfflinePlayer(Get(player).GetStaffText(false)));
Get(player).StaffString = staff;
obj.getScore(Bukkit.getOfflinePlayer(Get(player).GetStaffText(true))).setScore(line--);
//Space
obj.getScore(Bukkit.getOfflinePlayer(" ")).setScore(line--);
2013-08-27 17:14:08 +02:00
//Website
obj.getScore(Bukkit.getOfflinePlayer(C.cYellow + C.Bold + "Website")).setScore(line--);
obj.getScore(Bukkit.getOfflinePlayer("www.mineplex.com")).setScore(line--);
obj.getScore(Bukkit.getOfflinePlayer("----------------")).setScore(line--);
2013-08-27 17:14:08 +02:00
}
}
2013-08-27 17:14:08 +02:00
@Override
protected HubClient AddPlayer(String player)
{
return new HubClient(player);
}
public BlockRestore GetBlockRestore()
{
return _blockRestore;
}
2013-08-27 17:14:08 +02:00
public CoreClientManager GetClients()
{
return _clientManager;
}
2013-10-19 07:52:15 +02:00
public ConditionManager GetCondition()
{
return _conditionManager;
}
2013-08-27 17:14:08 +02:00
public DonationManager GetDonation()
{
return _donationManager;
}
2013-09-18 11:46:45 +02:00
public DisguiseManager GetDisguise()
{
return _disguiseManager;
}
2013-09-18 11:46:45 +02:00
public ParkourManager GetParkour()
{
return _parkour;
}
public Location GetSpawn()
2013-08-27 17:14:08 +02:00
{
return _spawn.clone();
2013-08-27 17:14:08 +02:00
}
public TutorialManager GetTutorial()
2013-08-27 17:14:08 +02:00
{
return _tutorialManager;
}
public VisibilityManager GetVisibility()
{
return _visibilityManager;
}
2013-10-29 00:41:53 +01:00
public void SetPortalDelay(Entity ent)
{
if (ent instanceof Player)
_portalTime.put(((Player)ent).getName(), System.currentTimeMillis());
}
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);
}
2013-10-25 13:56:28 +02:00
@EventHandler
public void HeartDisplay(UpdateEvent event)
{
if (event.getType() != UpdateType.FASTER)
return;
for (Player player : UtilServer.getPlayers())
{
2013-10-29 00:41:53 +01:00
if (!player.isOp() && !player.getName().equals("MonsieurApple"))
2013-10-25 13:56:28 +02:00
continue;
for (Player other : UtilServer.getPlayers())
{
if (player.getName().equalsIgnoreCase("Chiss"))
UtilParticle.PlayParticle(other, ParticleType.HEART, player.getLocation().add(0, 1, 0), 0.25f, 0.5f, 0.25f, 0, 1);
else if (player.getName().equalsIgnoreCase("defek7"))
UtilParticle.PlayParticle(other, ParticleType.FIREWORKS_SPARK, player.getLocation().add(0, 1, 0), 0.25f, 0.5f, 0.25f, 0, 2);
2013-10-25 13:56:28 +02:00
else if (player.getName().equalsIgnoreCase("Spu_"))
UtilParticle.PlayParticle(other, ParticleType.FLAME, player.getLocation().add(0, 1, 0), 0.25f, 0.5f, 0.25f, 0, 2);
2013-10-25 13:56:28 +02:00
else if (player.getName().equalsIgnoreCase("sterling_"))
UtilParticle.PlayParticle(other, ParticleType.WITCH_MAGIC, player.getLocation().add(0, 1, 0), 0.25f, 0.5f, 0.25f, 0, 2);
2013-10-29 00:41:53 +01:00
else if (player.getName().equalsIgnoreCase("MonsieurApple"))
UtilParticle.PlayParticle(other, ParticleType.SPLASH, player.getLocation().add(0, 1, 0), 0.25f, 0.5f, 0.25f, 0, 10);
2013-10-25 13:56:28 +02:00
}
}
}
2013-08-27 17:14:08 +02:00
}