b00fb0952a
Fixed fissure not working on slabs Fixed a bug in recharge Added ability for admins to give other people creative (they lose it when the admin quits)
1038 lines
28 KiB
Java
1038 lines
28 KiB
Java
package mineplex.hub;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.GameMode;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.craftbukkit.v1_7_R4.CraftWorld;
|
|
import org.bukkit.entity.Egg;
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.entity.LivingEntity;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.entity.Projectile;
|
|
import org.bukkit.entity.Snowball;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.EventPriority;
|
|
import org.bukkit.event.block.BlockDamageEvent;
|
|
import org.bukkit.event.entity.EntityDamageEvent;
|
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
|
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.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.event.world.ChunkLoadEvent;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.inventory.meta.BookMeta;
|
|
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.RankBenefitsGiver9000;
|
|
import mineplex.core.account.CoreClient;
|
|
import mineplex.core.account.CoreClientManager;
|
|
import mineplex.core.account.event.RetrieveClientInformationEvent;
|
|
import mineplex.core.achievement.AchievementManager;
|
|
import mineplex.core.blockrestore.BlockRestore;
|
|
import mineplex.core.common.Rank;
|
|
import mineplex.core.common.util.C;
|
|
import mineplex.core.common.util.F;
|
|
import mineplex.core.common.util.UtilAction;
|
|
import mineplex.core.common.util.UtilAlg;
|
|
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.UtilTabTitle;
|
|
import mineplex.core.common.util.UtilTime;
|
|
import mineplex.core.common.util.UtilWorld;
|
|
import mineplex.core.cosmetic.CosmeticManager;
|
|
import mineplex.core.disguise.DisguiseManager;
|
|
import mineplex.core.disguise.disguises.DisguiseSlime;
|
|
import mineplex.core.donation.DonationManager;
|
|
import mineplex.core.gadget.GadgetManager;
|
|
import mineplex.core.gadget.event.GadgetActivateEvent;
|
|
import mineplex.core.gadget.event.GadgetCollideEntityEvent;
|
|
import mineplex.core.inventory.InventoryManager;
|
|
import mineplex.core.itemstack.ItemStackFactory;
|
|
import mineplex.core.mount.MountManager;
|
|
import mineplex.core.mount.event.MountActivateEvent;
|
|
import mineplex.core.pet.PetManager;
|
|
import mineplex.core.portal.Portal;
|
|
import mineplex.core.preferences.PreferencesManager;
|
|
import mineplex.core.projectile.ProjectileManager;
|
|
import mineplex.core.stats.StatsManager;
|
|
import mineplex.core.task.TaskManager;
|
|
import mineplex.core.treasure.TreasureManager;
|
|
import mineplex.core.updater.UpdateType;
|
|
import mineplex.core.updater.event.UpdateEvent;
|
|
import mineplex.hub.commands.ForcefieldRadius;
|
|
import mineplex.hub.commands.GadgetToggle;
|
|
import mineplex.hub.commands.GameModeCommand;
|
|
import mineplex.hub.commands.NewsCommand;
|
|
import mineplex.hub.modules.ForcefieldManager;
|
|
import mineplex.hub.modules.JumpManager;
|
|
import mineplex.hub.modules.MapManager;
|
|
import mineplex.hub.modules.NewsManager;
|
|
import mineplex.hub.modules.ParkourManager;
|
|
import mineplex.hub.modules.TextManager;
|
|
import mineplex.hub.modules.UHCManager;
|
|
import mineplex.hub.modules.VisibilityManager;
|
|
import mineplex.hub.modules.WorldManager;
|
|
import mineplex.hub.party.Party;
|
|
import mineplex.hub.party.PartyManager;
|
|
import mineplex.hub.poll.PollManager;
|
|
import mineplex.hub.tutorial.TutorialManager;
|
|
import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
|
|
import mineplex.minecraft.game.classcombat.item.event.ItemTriggerEvent;
|
|
import mineplex.minecraft.game.core.condition.ConditionManager;
|
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
|
|
|
public class HubManager extends MiniClientPlugin<HubClient>
|
|
{
|
|
// ☃❅ Snowman!
|
|
public HubType Type = HubType.Halloween;
|
|
|
|
private BlockRestore _blockRestore;
|
|
private CoreClientManager _clientManager;
|
|
private ConditionManager _conditionManager;
|
|
private DonationManager _donationManager;
|
|
private DisguiseManager _disguiseManager;
|
|
private PartyManager _partyManager;
|
|
private ForcefieldManager _forcefieldManager;
|
|
private Portal _portal;
|
|
private StatsManager _statsManager;
|
|
private GadgetManager _gadgetManager;
|
|
private MountManager _mountManager;
|
|
private VisibilityManager _visibilityManager;
|
|
private TutorialManager _tutorialManager;
|
|
private TextManager _textCreator;
|
|
private ParkourManager _parkour;
|
|
private PreferencesManager _preferences;
|
|
private InventoryManager _inventoryManager;
|
|
private NewsManager _news;
|
|
private AchievementManager _achievementManager;
|
|
private TreasureManager _treasureManager;
|
|
|
|
private Location _spawn;
|
|
private int _scoreboardTick = 0;
|
|
|
|
private HashMap<Player, Scoreboard> _scoreboards = new HashMap<Player, Scoreboard>();
|
|
|
|
private String _pigStacker = "0 - Nobody";
|
|
|
|
private ItemStack _ruleBook = null;
|
|
|
|
private boolean _shuttingDown;
|
|
|
|
private HashMap<String, Long> _portalTime = new HashMap<String, Long>();
|
|
|
|
private HashMap<String, ArrayList<String>> _creativeAdmin = new HashMap<String, ArrayList<String>>();
|
|
|
|
//Admin
|
|
private boolean _gadgetsEnabled = true;
|
|
|
|
public HubManager(JavaPlugin plugin, BlockRestore blockRestore, CoreClientManager clientManager, DonationManager donationManager, ConditionManager conditionManager, DisguiseManager disguiseManager, TaskManager taskManager, Portal portal, PartyManager partyManager, PreferencesManager preferences, PetManager petManager, PollManager pollManager)
|
|
{
|
|
super("Hub Manager", plugin);
|
|
|
|
_blockRestore = blockRestore;
|
|
_clientManager = clientManager;
|
|
_conditionManager = conditionManager;
|
|
_donationManager = donationManager;
|
|
_disguiseManager = disguiseManager;
|
|
|
|
_portal = portal;
|
|
|
|
_spawn = new Location(UtilWorld.getWorld("world"), 0.5, 74, 0.5);
|
|
|
|
_textCreator = new TextManager(this);
|
|
_parkour = new ParkourManager(this, donationManager, taskManager);
|
|
|
|
new MapManager(this);
|
|
new WorldManager(this);
|
|
new JumpManager(this);
|
|
new UHCManager(this);
|
|
//new TournamentInviter(this);
|
|
|
|
_news = new NewsManager(this);
|
|
|
|
_mountManager = new MountManager(_plugin, clientManager, donationManager, blockRestore, _disguiseManager);
|
|
_inventoryManager = new InventoryManager(plugin);
|
|
new RankBenefitsGiver9000(plugin, clientManager, _inventoryManager);
|
|
_gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, new ProjectileManager(plugin));
|
|
_treasureManager = new TreasureManager(_plugin, donationManager, _inventoryManager, petManager, _blockRestore);
|
|
new CosmeticManager(_plugin, clientManager, donationManager, _inventoryManager, _gadgetManager, _mountManager, petManager, false, _treasureManager);
|
|
|
|
_partyManager = partyManager;
|
|
_preferences = preferences;
|
|
_tutorialManager = new TutorialManager(this, donationManager, taskManager, _textCreator);
|
|
_visibilityManager = new VisibilityManager(this);
|
|
|
|
_forcefieldManager = new ForcefieldManager(this);
|
|
AddCommand(new ForcefieldRadius(_forcefieldManager));
|
|
|
|
_statsManager = new StatsManager(plugin);
|
|
_achievementManager = new AchievementManager(_statsManager, _clientManager, _donationManager);
|
|
_achievementManager.setGiveInterfaceItem(true);
|
|
|
|
((CraftWorld)Bukkit.getWorlds().get(0)).getHandle().pvpMode = true;
|
|
|
|
_ruleBook = ItemStackFactory.Instance.CreateStack(Material.WRITTEN_BOOK, (byte)0, 1, ChatColor.GREEN + "Rule Book", new String[] { });
|
|
BookMeta meta = (BookMeta)_ruleBook.getItemMeta();
|
|
|
|
meta.addPage("§m-------------------§r\n"
|
|
+ "Welcome to §6§lMineplex§r\n"
|
|
+ "§r§0§l§r§m§0§m-------------------§r§0\n"
|
|
+ "\n"
|
|
+ "§2Please §0take a moment to read through this book!\n"
|
|
+ "\n"
|
|
+ "\n"
|
|
+ "Part 1 - Rules\n"
|
|
+ "\n"
|
|
+ "Part 2 - FAQ\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lRules§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§l1.§§§r §4No§r spamming.\n"
|
|
+ "\n"
|
|
+ "§0This is sending too many messages and/or repeating the same message in a short period of time.\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lRules§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§l2.§m§r §4No§0 use of excessive caps.\n"
|
|
+ "\n"
|
|
+ "This is sending messages with an excessive amount of capital letters.\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lRules§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§l3.§r §4No§0 hacking or use of any unapproved mods.\n"
|
|
+ "\n"
|
|
+ "This means we do not tolerate any sort of hacked client or any unapproved mods, such as fly hacks.\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lRules§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§l4.§r §4No§0 advertising non-Mineplex related links.\n"
|
|
+ "\n"
|
|
+ "This is when a link is sent in chat which directs others to non-Mineplex related content.\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lRules§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§l5.§r §4No§0 trolling or use of any exploits.\n"
|
|
+ "\n"
|
|
+ "This means that abuse of bugs/glitches is not tolerated. You also may not do things such as teamkilling and/or blocking spawns.\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lRules§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§l6.§r §2Be§0 respectful to others, yourself, and the environment around you.\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lRules§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§rPlease report any bugs, exploits, and/or rule breakers on our forums with evidence.\n"
|
|
+ "§omineplex.com/forums\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lFAQ§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§lWhat is stacker and how do you play it?\n"
|
|
+ "\n"
|
|
+ "§rStacker is a hub game where you can stack & throw players/mobs.\n"
|
|
+ "\n"
|
|
+ "§9Right-Click: pick up\n"
|
|
+ "Left-Click: throw\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lFAQ§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§lHow do I get §b§lUltra§0 §lor §5§lHero§0§l?\n"
|
|
+ "\n"
|
|
+ "§r§0You are able to purchase these ranks through our shop on our website at:\n"
|
|
+ "\n"
|
|
+ "§owww.mineplex.com/shop\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lFAQ§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§lWhy hasn't my rank been applied yet?\n"
|
|
+ "\n"
|
|
+ "§m§rYour rank may take a while to be applied. If it has been over 24 hours please email:\n"
|
|
+ "\n"
|
|
+ "§osupport@mineplex.com\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lFAQ§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§lWhat do I do if I was wrongfully punished?\n"
|
|
+ "\n"
|
|
+ "§0If you believe you were wrongfully punished, please submit an appeal at:\n"
|
|
+ "\n"
|
|
+ "§omineplex.com/appeals\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §2§lFAQ§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "§lHow do I apply for Helper?\n"
|
|
+ "\n"
|
|
+ "§rYou may only apply for Helper if you have §bUltra §0or §5Hero§0.\n"
|
|
+ "Apply at:\n"
|
|
+ "§omineplex.com/application\n");
|
|
|
|
meta.addPage("§m-------------------\n"
|
|
+ "§r §6§lThank you for \n"
|
|
+ " reading!§r§0\n"
|
|
+ "§m-------------------\n"
|
|
+ "§r\n"
|
|
+ "Remember to visit our website §2mineplex.com§0 for important news & updates!\n"
|
|
+ "\n"
|
|
+ "\n"
|
|
+ " §c§lH§6§lA§a§lV§9§lE §c§lF§6§lU§a§lN§9§l!\n");
|
|
|
|
// These are needed or 1.8 clients will not show book correctly
|
|
meta.setTitle("Rule Book");
|
|
meta.setAuthor("Mineplex");
|
|
|
|
_ruleBook.setItemMeta(meta);
|
|
}
|
|
|
|
@Override
|
|
public void AddCommands()
|
|
{
|
|
AddCommand(new GadgetToggle(this));
|
|
AddCommand(new NewsCommand(this));
|
|
AddCommand(new GameModeCommand(this));
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.HIGHEST)
|
|
public void reflectMotd(ServerListPingEvent event)
|
|
{
|
|
if (_shuttingDown)
|
|
{
|
|
event.setMotd("Restarting soon");
|
|
}
|
|
}
|
|
|
|
public boolean BumpDisabled(Entity ent)
|
|
{
|
|
if (ent == null)
|
|
return false;
|
|
|
|
if (ent instanceof Player)
|
|
{
|
|
return !_preferences.Get((Player)ent).HubGames;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
@EventHandler
|
|
public void SnowballPickup(BlockDamageEvent event)
|
|
{
|
|
if (Type != HubType.Christmas)
|
|
return;
|
|
|
|
if (event.getBlock().getType() != Material.SNOW)
|
|
return;
|
|
|
|
Player player = event.getPlayer();
|
|
|
|
_gadgetManager.RemoveItem(player);
|
|
|
|
player.getInventory().setItem(3, new ItemStack(Material.SNOW_BALL, 16));
|
|
}
|
|
|
|
@EventHandler
|
|
public void SnowballHit(CustomDamageEvent event)
|
|
{
|
|
if (Type != HubType.Christmas)
|
|
return;
|
|
|
|
Projectile proj = event.GetProjectile();
|
|
if (proj == null) return;
|
|
|
|
if (!(proj instanceof Snowball))
|
|
return;
|
|
|
|
event.SetCancelled("Snowball Cancel");
|
|
|
|
if (BumpDisabled(event.GetDamageeEntity()))
|
|
return;
|
|
|
|
if (BumpDisabled(event.GetDamagerEntity(true)))
|
|
return;
|
|
|
|
UtilAction.velocity(event.GetDamageeEntity(), UtilAlg.getTrajectory2d(event.GetDamagerEntity(true), event.GetDamageeEntity()),
|
|
0.4, false, 0, 0.2, 1, false);
|
|
|
|
//No Portal
|
|
SetPortalDelay(event.GetDamageeEntity());
|
|
}
|
|
|
|
@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.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("Block Hunt"))
|
|
{
|
|
DisguiseSlime disguise = new DisguiseSlime(entity);
|
|
disguise.SetCustomNameVisible(true);
|
|
disguise.SetName(((LivingEntity)entity).getCustomName(), null);
|
|
disguise.SetSize(2);
|
|
_disguiseManager.disguise(disguise);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.LOW)
|
|
public void login(final PlayerLoginEvent event)
|
|
{
|
|
CoreClient client = _clientManager.Get(event.getPlayer().getName());
|
|
|
|
// 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(), "Lobby");
|
|
}
|
|
});
|
|
|
|
event.allow();
|
|
}
|
|
}
|
|
else
|
|
event.allow();
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.LOW)
|
|
public void AdminOP(PlayerJoinEvent event)
|
|
{
|
|
if (_clientManager.Get(event.getPlayer()).GetRank().Has(Rank.OWNER))
|
|
event.getPlayer().setOp(true);
|
|
else
|
|
event.getPlayer().setOp(false);
|
|
}
|
|
|
|
@EventHandler
|
|
public void PlayerRespawn(PlayerRespawnEvent event)
|
|
{
|
|
event.setRespawnLocation(GetSpawn().add(0, 10, 0));
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.LOW)
|
|
public void PlayerJoin(PlayerJoinEvent event)
|
|
{
|
|
Player player = event.getPlayer();
|
|
|
|
//Player List
|
|
UtilTabTitle.setHeaderAndFooter(player, " ", "Visit " + C.cGreen + "www.mineplex.com" + ChatColor.RESET + " for News, Forums and Shop");
|
|
|
|
//Public Message
|
|
event.setJoinMessage(null);
|
|
|
|
//Teleport
|
|
player.teleport(GetSpawn().add(0, 10, 0));
|
|
|
|
//Survival
|
|
player.setGameMode(GameMode.SURVIVAL);
|
|
|
|
//Clear Inv
|
|
UtilInv.Clear(player);
|
|
|
|
//Allow Double Jump
|
|
player.setAllowFlight(true);
|
|
|
|
//Health
|
|
player.setHealth(20);
|
|
|
|
//Rules
|
|
player.getInventory().setItem(6, _ruleBook);
|
|
|
|
//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;
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
|
|
@EventHandler
|
|
public void PlayerDeath(PlayerDeathEvent event)
|
|
{
|
|
//XXX make this work > event.setKeepInventory(true);
|
|
event.getDrops().clear();
|
|
}
|
|
|
|
@EventHandler
|
|
public void PlayerQuit(PlayerQuitEvent event)
|
|
{
|
|
event.setQuitMessage(null);
|
|
|
|
event.getPlayer().leaveVehicle();
|
|
event.getPlayer().eject();
|
|
|
|
for (Player player : UtilServer.getPlayers())
|
|
player.getScoreboard().resetScores(event.getPlayer().getName());
|
|
|
|
_scoreboards.remove(event.getPlayer());
|
|
|
|
_portalTime.remove(event.getPlayer().getName());
|
|
}
|
|
|
|
@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();
|
|
|
|
Rank rank = GetClients().Get(player).GetRank();
|
|
|
|
boolean ownsUltra = _donationManager.Get(player.getName()).OwnsUltraPackage();
|
|
|
|
//Rank Prefix
|
|
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)
|
|
{
|
|
event.getRecipients().clear();
|
|
|
|
event.setMessage(event.getMessage().substring(1, event.getMessage().length()));
|
|
event.setFormat(C.cDPurple + C.Bold + "Party " + C.cWhite + C.Bold + "%1$s " + C.cPurple + "%2$s");
|
|
|
|
for (String name : party.GetPlayers())
|
|
{
|
|
Player other = UtilPlayer.searchExact(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
|
|
{
|
|
for (Player other : UtilServer.getPlayers())
|
|
{
|
|
if (_tutorialManager.InTutorial(other))
|
|
{
|
|
event.getRecipients().remove(other);
|
|
continue;
|
|
}
|
|
|
|
event.setMessage(event.getMessage());
|
|
event.setFormat(rankStr + C.cYellow + "%1$s " + C.cWhite + "%2$s");
|
|
}
|
|
}
|
|
}
|
|
|
|
@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
|
|
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 bestPig = 0;
|
|
for (Player player : UtilServer.getPlayers())
|
|
{
|
|
if (player.getVehicle() != null)
|
|
continue;
|
|
|
|
int count = 0;
|
|
|
|
Entity ent = player;
|
|
while (ent.getPassenger() != null)
|
|
{
|
|
ent = ent.getPassenger();
|
|
count++;
|
|
}
|
|
|
|
if (count > bestPig)
|
|
{
|
|
_pigStacker = player.getName();
|
|
bestPig = count;
|
|
}
|
|
}
|
|
if (bestPig == 0)
|
|
{
|
|
_pigStacker = "0 - Nobody";
|
|
}
|
|
else
|
|
{
|
|
_pigStacker = bestPig + " - " + _pigStacker;
|
|
|
|
if (_pigStacker.length() > 16)
|
|
_pigStacker = _pigStacker.substring(0, 16);
|
|
}
|
|
|
|
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));
|
|
|
|
//Objective
|
|
Objective obj = player.getScoreboard().getObjective(DisplaySlot.SIDEBAR);
|
|
|
|
//Title
|
|
obj.setDisplayName(C.cWhite + C.Bold + Get(player).GetScoreboardText());
|
|
|
|
int line = 15;
|
|
|
|
//Stacker
|
|
obj.getScore(C.cAqua + C.Bold + "Stacker").setScore(line--);
|
|
player.getScoreboard().resetScores(Get(player).BestPig);
|
|
Get(player).BestPig = _pigStacker;
|
|
obj.getScore(Get(player).BestPig).setScore(line--);
|
|
|
|
//Space
|
|
obj.getScore(" ").setScore(line--);
|
|
|
|
//Gems
|
|
obj.getScore(C.cGreen + C.Bold + "Gems").setScore(line--);
|
|
// Remove Old/Add New
|
|
player.getScoreboard().resetScores(Get(player.getName()).GetLastGemCount() + "");
|
|
obj.getScore(GetDonation().Get(player.getName()).GetGems() + "").setScore(line--);
|
|
Get(player.getName()).SetLastGemCount(GetDonation().Get(player.getName()).GetGems());
|
|
|
|
//Space
|
|
obj.getScore(" ").setScore(line--);
|
|
|
|
//Coins
|
|
obj.getScore(C.cYellow + C.Bold + "Coins").setScore(line--);
|
|
|
|
// Remove Old
|
|
player.getScoreboard().resetScores(Get(player.getName()).GetLastCoinCount() + "");
|
|
// Add New
|
|
obj.getScore(GetDonation().Get(player.getName()).getCoins() + "").setScore(line--);
|
|
|
|
Get(player.getName()).SetLastCoinCount(GetDonation().Get(player.getName()).getCoins());
|
|
|
|
|
|
//Space
|
|
obj.getScore(" ").setScore(line--);
|
|
|
|
|
|
//Display Rank
|
|
obj.getScore(C.cGold + C.Bold + "Rank").setScore(line--);
|
|
if (GetClients().Get(player).GetRank().Has(Rank.ULTRA))
|
|
obj.getScore(GetClients().Get(player).GetRank().Name).setScore(line--);
|
|
else if (GetDonation().Get(player.getName()).OwnsUnknownPackage("SuperSmashMobs ULTRA") ||
|
|
GetDonation().Get(player.getName()).OwnsUnknownPackage("Survival Games ULTRA") ||
|
|
GetDonation().Get(player.getName()).OwnsUnknownPackage("Minigames ULTRA") ||
|
|
GetDonation().Get(player.getName()).OwnsUnknownPackage("CastleSiege ULTRA") ||
|
|
GetDonation().Get(player.getName()).OwnsUnknownPackage("Champions ULTRA"))
|
|
obj.getScore("Single Ultra").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--);
|
|
obj.getScore("----------------").setScore(line--);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected HubClient AddPlayer(String player)
|
|
{
|
|
return new HubClient(player);
|
|
}
|
|
|
|
public BlockRestore GetBlockRestore()
|
|
{
|
|
return _blockRestore;
|
|
}
|
|
|
|
public CoreClientManager GetClients()
|
|
{
|
|
return _clientManager;
|
|
}
|
|
|
|
public ConditionManager GetCondition()
|
|
{
|
|
return _conditionManager;
|
|
}
|
|
|
|
public DonationManager GetDonation()
|
|
{
|
|
return _donationManager;
|
|
}
|
|
|
|
public DisguiseManager GetDisguise()
|
|
{
|
|
return _disguiseManager;
|
|
}
|
|
|
|
public GadgetManager GetGadget()
|
|
{
|
|
return _gadgetManager;
|
|
}
|
|
|
|
public MountManager GetMount()
|
|
{
|
|
return _mountManager;
|
|
}
|
|
|
|
public ParkourManager GetParkour()
|
|
{
|
|
return _parkour;
|
|
}
|
|
|
|
public PreferencesManager getPreferences()
|
|
{
|
|
return _preferences;
|
|
}
|
|
|
|
public Location GetSpawn()
|
|
{
|
|
return _spawn.clone();
|
|
}
|
|
|
|
public TutorialManager GetTutorial()
|
|
{
|
|
return _tutorialManager;
|
|
}
|
|
|
|
public StatsManager GetStats()
|
|
{
|
|
return _statsManager;
|
|
}
|
|
|
|
public VisibilityManager GetVisibility()
|
|
{
|
|
return _visibilityManager;
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR)
|
|
public void gadgetCollide(GadgetCollideEntityEvent event)
|
|
{
|
|
if (!event.isCancelled())
|
|
SetPortalDelay(event.getOther());
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
public boolean CanBump(LivingEntity ent)
|
|
{
|
|
if (!(ent instanceof Player))
|
|
return true;
|
|
|
|
if (BumpDisabled(ent))
|
|
return false;
|
|
|
|
if (!getPreferences().Get((Player)ent).ShowPlayers)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
@EventHandler
|
|
public void SkillTrigger(SkillTriggerEvent event)
|
|
{
|
|
event.SetCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void ItemTrigger(ItemTriggerEvent event)
|
|
{
|
|
event.SetCancelled(true);
|
|
}
|
|
|
|
public boolean IsGadgetEnabled()
|
|
{
|
|
return _gadgetsEnabled;
|
|
}
|
|
|
|
|
|
public NewsManager GetNewsManager()
|
|
{
|
|
return _news;
|
|
}
|
|
|
|
@Override
|
|
protected void loadClientInformation(RetrieveClientInformationEvent event)
|
|
{
|
|
|
|
}
|
|
|
|
@EventHandler
|
|
public void ignoreVelocity(PlayerVelocityEvent event)
|
|
{
|
|
if (_clientManager.Get(event.getPlayer()).GetRank().Has(Rank.MODERATOR) && _preferences.Get(event.getPlayer()).IgnoreVelocity)
|
|
{
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
public void ToggleGadget(Player caller)
|
|
{
|
|
_gadgetsEnabled = !_gadgetsEnabled;
|
|
|
|
if (!_gadgetsEnabled)
|
|
{
|
|
GetMount().DisableAll();
|
|
GetGadget().DisableAll();
|
|
}
|
|
|
|
for (Player player : UtilServer.getPlayers())
|
|
player.sendMessage(C.cWhite + C.Bold + "Gadgets/Mounts are now " + F.elem(_gadgetsEnabled ? C.cGreen + C.Bold + "Enabled" : C.cRed + C.Bold + "Disabled"));
|
|
}
|
|
|
|
@EventHandler
|
|
public void GadgetActivate(GadgetActivateEvent event)
|
|
{
|
|
if (!_gadgetsEnabled)
|
|
event.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void MountActivate(MountActivateEvent event)
|
|
{
|
|
if (!_gadgetsEnabled)
|
|
event.setCancelled(true);
|
|
}
|
|
|
|
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 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)));
|
|
}
|
|
}
|
|
}
|